{ "info": { "author": "Jared Suttles", "author_email": "", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: MacOS X", "Environment :: MacOS X :: Cocoa", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: MacOS :: MacOS X", "Programming Language :: Objective C", "Programming Language :: Python", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "rumps\n=====\n\n**R**\\ idiculously **U**\\ ncomplicated **m**\\ acOS **P**\\ ython **S**\\ tatusbar apps.\n\n.. image:: https://raw.github.com/jaredks/rumps/master/examples/rumps_example.png\n\n.. code-block:: python\n\n import rumps\n\n class AwesomeStatusBarApp(rumps.App):\n @rumps.clicked(\"Preferences\")\n def prefs(self, _):\n rumps.alert(\"jk! no preferences available!\")\n\n @rumps.clicked(\"Silly button\")\n def onoff(self, sender):\n sender.state = not sender.state\n\n @rumps.clicked(\"Say hi\")\n def sayhi(self, _):\n rumps.notification(\"Awesome title\", \"amazing subtitle\", \"hi!!1\")\n\n if __name__ == \"__main__\":\n AwesomeStatusBarApp(\"Awesome App\").run()\n\nHow fun!?\n\n``rumps`` can greatly shorten the code required to generate a working app. No ``PyObjC`` underscore syntax required!\n\n\nUse case\n--------\n\n``rumps`` is for any console-based program that would benefit from a simple configuration toolbar or launch menu.\n\nGood for:\n\n* Notification-center-based app\n* Controlling daemons / launching separate programs\n* Updating simple info from web APIs on a timer\n\nNot good for:\n\n* Any app that is first and foremost a GUI application\n\n\nRequired\n--------\n\n* PyObjC\n* Python 2.6+\n\nMac OS X 10.6 was shipped with Python 2.6 as the default version and PyObjC has been included in the default Python\nsince Mac OS X 10.5. If you're using Mac OS X 10.6+ and the default Python that came with it, then ``rumps`` should be\ngood to go!\n\n\nRecommended\n-----------\n\n* py2app\n\nFor creating standalone apps, just make sure to include ``rumps`` in the ``packages`` list. Most simple statusbar-based\napps are just \"background\" apps (no icon in the dock; inability to tab to the application) so it is likely that you\nwould want to set ``'LSUIElement'`` to ``True``. A basic ``setup.py`` would look like,\n\n.. code-block:: python\n\n from setuptools import setup\n\n APP = ['example_class.py']\n DATA_FILES = []\n OPTIONS = {\n 'argv_emulation': True,\n 'plist': {\n 'LSUIElement': True,\n },\n 'packages': ['rumps'],\n }\n\n setup(\n app=APP,\n data_files=DATA_FILES,\n options={'py2app': OPTIONS},\n setup_requires=['py2app'],\n )\n\nWith this you can then create a standalone,\n\n.. code-block:: bash\n\n python setup.py py2app\n\n\nInstallation\n------------\n\nUsing pip,\n\n.. code-block:: bash\n\n pip install rumps\n\nOr from source,\n\n.. code-block:: bash\n\n python setup.py install\n\nBoth of which will require ``sudo`` if installing in a system-wide location.\n\n\nDocumentation\n-------------\n\nDocumentation is available at http://rumps.readthedocs.org\n\n\nLicense\n-------\n\n\"Modified BSD License\". See LICENSE for details. Copyright Jared Suttles, 2017.\n\nWorks Made With rumps\n---------------------\n\n`20twenty20 - eohomegrownapps\n`_\n\n`42-CanITakeCoffee - avallete\n`_\n\n`air-quality-app - grtfou\n`_\n\n`Airplane - C-Codes\n`_\n\n`allbar - raphaelhuefner\n`_\n\n`allofthelights - kenkeiter\n`_\n\n`attendee-tool-mlh - Bucknalla\n`_\n\n`Auroratain - Matt-McConway\n`_\n\n`AutoSSP - viktyz\n`_\n\n`AutoVPN - shadyabhi\n`_\n\n`BackgroundsForReddit - karlaugsten\n`_\n\n`bink - e40\n`_\n\n`bitracker - JZChen\n`_\n\n`BluetoothEvent - lostman-github\n`_\n\n`break-timer - jjmojojjmojo\n`_\n\n`breaker - amloewi\n`_\n\n`bundle-checker - jeffgodwyll\n`_\n\n`c1t1 - e9t\n`_\n\n`camsketch - pdubroy\n`_\n\n`ComicStreamer - beville\n`_\n\n`commitwatch - chrisfosterelli\n`_\n\n`computer-time - rbrich\n`_\n\n`crypto-ticker-macOS - mqulateen\n`_\n\n`cryptocoin-quotes - Sayan98\n`_\n\n`cuco - jjuanda\n`_\n\n`currency-converter - ahmedelgohary\n`_\n\n`dns.app - damln\n`_\n\n`Dokky - rogierkn\n`_\n\n`dolar_bitcoin - celis\n`_\n\n`duplicati - duplicati\n`_\n\n`earth - nickrobson\n`_\n\n`ForceNapClone - hroftgit\n`_\n\n`freelan-bar - privacee\n`_\n\n`g-assistant-mac - agucova\n`_\n\n`gapa - ozlerhakan\n`_\n\n`GitSyncApp - jachin\n`_\n\n`Gumpy - RobGraham\n`_\n\n`Habitus - kmundnic\n`_\n\n`HalfCaff - dougn\n`_\n\n`happymac - laffra\n`_\n\n`harmenubar - vekkt0r\n`_\n\n`hatarake - kfdm-archive\n`_\n\n`HipStatus - jamfit\n`_\n\n`hp-lorem - jamesrampton\n`_\n\n`hs100-status-bar - craig-davis\n`_\n\n`iBrew - Tristan79\n`_\n\n`idiot - snare\n`_\n\n`interlocking - jrauch\n`_\n\n`istat - Lingdu0\n`_\n\n`keynote_snap - sasn0\n`_\n\n`Keypad - jelmer04\n`_\n\n`keyringo - tokenizecx\n`_\n\n`kizkiz - TkTech\n`_\n\n`koinex-status-ticker - kirantambe\n`_\n\n`leaguefriend - pandarison\n`_\n\n`LifxController - mitchmcdee\n`_\n\n`lil_ip_toolbar - mchlrtkwski\n`_\n\n`mac-shrew - mejmo\n`_\n\n`MacFaceID - vkalia602\n`_\n\n`majo-v - r4lv\n`_\n\n`MBatteryApp - Elliot-Potts\n`_\n\n`McBing - bagabont\n`_\n\n`Memcode - aroraenterprise\n`_\n\n`memdam - joshalbrecht\n`_\n\n`MenuBarGmail - rcmdnk\n`_\n\n`midi2dmx - davidbistolas\n`_\n\n`monero-ticker - Cisplatin\n`_\n\n`MoodLight - kretash\n`_\n\n`MoonTicker - skxu\n`_\n\n`musicbar - russelg\n`_\n\n`narcissist - helmholtz\n`_\n\n`Noise-Line - Dnncha\n`_\n\n`obmenka - vlakin\n`_\n\n`org-clock-dashboard - srid\n`_\n\n`osx-bamboo-plan-status - spalter\n`_\n\n`osx-myair - CameronEx\n`_\n\n`PennAppsX - yousufmsoliman\n`_\n\n`phd - ChrisCummins\n`_\n\n`pokemon-go-status - pboardman\n`_\n\n`polly - interrogator\n`_\n\n`pompy - camilopayan\n`_\n\n`project_screen_to_lifx - emiraga\n`_\n\n`PSPEWC-mac - jacquesCedric\n`_\n\n`py-Timey - asakasinsky\n`_\n\n`pymodoro - volflow\n`_\n\n`pySplash - Egregors\n`_\n\n`quick-grayscale - shubhamjain\n`_\n\n`quiet - hiroshi\n`_\n\n`Radio-Crowd - EliMendelson\n`_\n\n`RadioBar - wass3r\n`_\n\n`rescuetime_statusbar - MauriceZ\n`_\n\n`rideindegochecker - josepvalls\n`_\n\n`RitsWifi - fang2hou\n`_\n\n`safety-bar - pyupio\n`_\n\n`SAT-Vocab-Quizzer - Legoben\n`_\n\n`sharfoo - furqan-shakoor\n`_\n\n`shotput - amussey\n`_\n\n`SingMenuData - ponyfleisch\n`_\n\n`slack-status-bar - ericwb\n`_\n\n`slackify - nikodraca\n`_\n\n`snippets - quillford\n`_\n\n`sonostus - sarkkine\n`_\n\n`Spaceapi-Desktop - UrLab\n`_\n\n`SpaceSwitcher - SankaitLaroiya\n`_\n\n`SpotifyLyrics - yask123\n`_\n\n`steemticker-osx - ZachC16\n`_\n\n`Telkom-ADSL-Data-Usage - parautenbach\n`_\n\n`Telton - Yywww\n`_\n\n`these-days - hahayes\n`_\n\n`time-tracking - willsgrigg\n`_\n\n`timerbar - uberalex\n`_\n\n`tracker - jtxx000\n`_\n\n`umma - mankoff\n`_\n\n`upbrew - stchris\n`_\n\n`uptimeIndicator - paulaborde\n`_\n\n`urstatus - kysely\n`_\n\n`uStatus - kdungs\n`_\n\n`VagrantBar - kingsdigitallab\n`_\n\n`voiceplay - tb0hdan\n`_\n\n`volsbb - akigugale\n`_\n\n`Volumio_bar - volderette\n`_\n\n`votingpowerbar - therealwolf42\n`_\n\n`WallpDesk - L3rchal\n`_\n\n`webcronic - josselinauguste\n`_\n\n`Whale - amka\n`_\n\n`WhyFi - OzTamir\n`_\n\n`WordTime - Demonstrandum\n`_\n\n`work_time_percent_applet - Benhgift\n`_\n\n`WorkWise - 8ern4ard\n`_\n\n`xCodea - lowne\n`_\n\n`yaca - drproteus\n`_\n\n`Zero - beejhuff\n`_\n\nSubmit a pull request to add your own!\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n\nChanges\n=======\n\n0.3.0 (2019-02-01)\n------------------\n\n- Fix passing data in notifications\n- Add `other` and `icon_path` options to ``alert``\n- Add `secure` option to ``Window``\n- Add `action_button`, `other_button`, and `reply_button` options to ``notification``\n- Add ``slider``\n\n\n0.2.2 (2017-04-26)\n------------------\n\n- Add template icon support for dark menubar theme.\n- Fix inability to create notification center by creating ``Info.plist`` file at executable directory with `CFBundleIdentifier` on installation. If that failed, provide more information at runtime in the exception about how to fix the problem.\n- Add Python 3 support\n\n\n0.2.1 (2014-12-13)\n------------------\n\n- No longer have to set menu explicitly\n + rumps will create the menu as it parses paths in ``clicked`` decorators\n- Reverted change to `timers` that produced a list of weak references rather than objects\n- New keyword arguments\n + `key` for ``clicked``\n + `debug` for ``App.run``\n\n\n0.2.0 (2014-08-09)\n------------------\n\n**Improvements and compatibility fixes**\n\n- Added a large number of docstrings\n- Merged pull request allowing unicode text\n- Compatibility fixes for Python 2.6\n + Included OrderedDict recipe\n + _TIMERS not using weakref.WeakSet\n- Compatibility fixes for Mac OS X versions prior to 10.8 (Notification Center)\n + Attempting to send a notification on <10.8 will raise ``RuntimeError``\n- Added ``quit_application`` function to allow for both custom quit buttons and running clean up code before quitting\n\n**API changes**\n\n- Most api changes dealt with accepting ``None`` as a parameter to use or restore a default setting\n- Raise ``TypeError`` before less obvious exceptions occur in PyObjC\n- alert and Window\n + No required parameters\n + Passing a string as `cancel` parameter will change the button text to that string\n + `Window.add_button` now requires a string\n- App\n + `name` parameter must be a string and `title` must be either a string or ``None``\n + Added `quit_button` parameter allowing custom text or disabling completely by passing ``None``\n- MenuItem\n + Passing ``None`` as `callback` parameter to `MenuItem.set_callback` method will disable the callback function and grey out the menu item\n + passing an invalid sequence for `dimensions` parameter to `MenuItem.set_icon` will no longer silently error\n\n\n0.1.5 (2014-08-03)\n------------------\n\n- Fix implemented for NSInvalidArgumentException issue on 10.9.x\n\n\n0.1.4 (2013-08-21)\n------------------\n\n- Menu class subclassing ListDict, a subclass of OrderedDict with additional insertion operations\n- ``update`` method of Menu works like old App.menu parsing - consumes various nested Python containers and creates menus\n\n\n0.1.3 (2013-08-19)\n------------------\n\n- ``separator`` global for marking menu separators (in addition to None in context of a menu)\n- Can now have separators in sub menus using either ``separator`` or None\n- Key and menu title not matching doesn't raise an exception since the situation would occur if the title is changed dynamically\n + Instead, a warning in the log\n- Refactored MenuItem such that it subclasses new Menu class\n- Menu class created\n + Wraps NSMenu using __setitem__, __delitem__, etc.\n + Allows for main menu to be easily changed during runtime as it now uses Menu class instead of vanilla OrderedDict\n + ``clear`` method for MenuItem + other irrelevant methods inherited from OrderedDict raise NotImplementedError\n- As result of refactoring, could simplify menu parsing for App\n\n\n0.1.2 (2013-08-11)\n------------------\n\n- Interval access and modification added to Timer objects\n- timers function for iterating over timers\n- Timer class now directly in module namespace\n- More specfic case for trying callback with instance of App subclass as first argument\n + Point is to avoid catching a completely different TypeError, then sending 2 variables to a function consuming 1\n\n\n0.1.1 (2013-08-07)\n------------------\n\n- Parsing data structures for creating menus is now more robust\n- Fixed MenuItem __repr__ for printing instances where no callback function has been given\n- Added ``example_menu.py`` to examples serving also as a test for new MenuItem changes\n- Can now ``del`` MenuItems of submenus and it will be reflected in the actual menu\n- ``add`` method for more convenient addition of MenuItems to a MenuItem's submenu\n- Created module docstring\n\n\n0.1.0 (2013-07-31)\n------------------\n\n- world, hello! meet rumps.\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/jaredks/rumps", "keywords": "", "license": "BSD License", "maintainer": "", "maintainer_email": "", "name": "rumps", "package_url": "https://pypi.org/project/rumps/", "platform": "", "project_url": "https://pypi.org/project/rumps/", "project_urls": { "Homepage": "https://github.com/jaredks/rumps" }, "release_url": "https://pypi.org/project/rumps/0.3.0/", "requires_dist": [ "pyobjc-framework-Cocoa" ], "requires_python": "", "summary": "Ridiculously Uncomplicated MacOS Python Statusbar apps.", "version": "0.3.0" }, "last_serial": 4771103, "releases": { "0.1.4": [ { "comment_text": "", "digests": { "md5": "114f1463d26b82ff8b82e422792d1e06", "sha256": "97f89232d15012e1a0755349aa6c26ff8fb59ae377f4c32629a181f0980f5967" }, "downloads": -1, "filename": "rumps-0.1.4.tar.gz", "has_sig": false, "md5_digest": "114f1463d26b82ff8b82e422792d1e06", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10771, "upload_time": "2014-08-01T14:22:31", "url": "https://files.pythonhosted.org/packages/73/e4/1ad1e42f7a90977376d105c2294a26643c828b3b33851b97d703c68c3a57/rumps-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "dc5b9bca9164e754ca5859cf90b8c5e7", "sha256": "181ce5568a6b014486a652ead3640716b2ffbac5ffc854f4e155b7f62a532a68" }, "downloads": -1, "filename": "rumps-0.1.5.tar.gz", "has_sig": false, "md5_digest": "dc5b9bca9164e754ca5859cf90b8c5e7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11225, "upload_time": "2014-08-01T15:57:38", "url": "https://files.pythonhosted.org/packages/0f/53/81325c06906aff48e5de6dcf014383b235931a870e99f67c13faf67df615/rumps-0.1.5.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "2ced3233b0e2481805f738f221a2d3ce", "sha256": "654c9a5a541d1e8df426f0bef06e2ce4eac0dbc648ddfbddd860ea0d24a27cf1" }, "downloads": -1, "filename": "rumps-0.2.0.tar.gz", "has_sig": false, "md5_digest": "2ced3233b0e2481805f738f221a2d3ce", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18779, "upload_time": "2014-08-09T06:09:12", "url": "https://files.pythonhosted.org/packages/84/b2/27078893d0892bf8a0a3434d21ce2ec7f36f24e12d98166d107427b1358b/rumps-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "e9c16c6af03e325cb6829f984f12cffc", "sha256": "70cd10cf5e240dda5b8a8bb2e2b6cecd2c2390f8bdf347d7253a1c83c04dbcb4" }, "downloads": -1, "filename": "rumps-0.2.1.tar.gz", "has_sig": false, "md5_digest": "e9c16c6af03e325cb6829f984f12cffc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19045, "upload_time": "2014-12-13T22:43:14", "url": "https://files.pythonhosted.org/packages/ad/8e/86c0e49c13d2d9b93f1acef3d69ecbd5e414f0eaa05b73c369d7443fd614/rumps-0.2.1.tar.gz" } ], "0.2.1a": [ { "comment_text": "", "digests": { "md5": "02b4df31610b2fbf619b77a4aa2fd212", "sha256": "520b9f8414a50a20fe8ce389b15fa4aad833b947dd9587b26623b639d51ee845" }, "downloads": -1, "filename": "rumps-0.2.1a.tar.gz", "has_sig": false, "md5_digest": "02b4df31610b2fbf619b77a4aa2fd212", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19053, "upload_time": "2015-01-31T04:26:34", "url": "https://files.pythonhosted.org/packages/7d/09/c79fdf8e46ae51914f4e47f49e1729a87fa83f0c24fe7a9cf36be6a25c66/rumps-0.2.1a.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "55d933e763629d0f37552ce522bf40ac", "sha256": "e4328affe8be83b5173cd35bd2d0b39a937d27a29ec48874bc063c9d74d6b544" }, "downloads": -1, "filename": "rumps-0.2.2.tar.gz", "has_sig": false, "md5_digest": "55d933e763629d0f37552ce522bf40ac", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23788, "upload_time": "2017-04-26T10:47:13", "url": "https://files.pythonhosted.org/packages/99/0e/120319815f07ecd15fd853c662e99441ad1d49451d69dd3166f22fc976a3/rumps-0.2.2.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "f735ac0c94f7be9a7c437dae913a47d6", "sha256": "e5ea41ce62312a0f1fa4280fc587bd8b5c6ff7ed0be219752c95f013109d148a" }, "downloads": -1, "filename": "rumps-0.3.0-py2-none-any.whl", "has_sig": false, "md5_digest": "f735ac0c94f7be9a7c437dae913a47d6", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 27377, "upload_time": "2019-02-02T00:56:51", "url": "https://files.pythonhosted.org/packages/99/66/c908f7c829693f2955056a8dd32a9730028252c503dd56ab37d1a2b3e265/rumps-0.3.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "92240498dcdf068b48c26d94fc6ce9cc", "sha256": "c8df19347c661cac8906fffd410727c6000f978a6c8c44a2803a1786b35c4c1f" }, "downloads": -1, "filename": "rumps-0.3.0.tar.gz", "has_sig": false, "md5_digest": "92240498dcdf068b48c26d94fc6ce9cc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33092, "upload_time": "2019-02-02T00:56:53", "url": "https://files.pythonhosted.org/packages/42/72/ac51f637bde4fd26fb72fa046dfa05d7c6a06a094780d5c8432417afb1d3/rumps-0.3.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f735ac0c94f7be9a7c437dae913a47d6", "sha256": "e5ea41ce62312a0f1fa4280fc587bd8b5c6ff7ed0be219752c95f013109d148a" }, "downloads": -1, "filename": "rumps-0.3.0-py2-none-any.whl", "has_sig": false, "md5_digest": "f735ac0c94f7be9a7c437dae913a47d6", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 27377, "upload_time": "2019-02-02T00:56:51", "url": "https://files.pythonhosted.org/packages/99/66/c908f7c829693f2955056a8dd32a9730028252c503dd56ab37d1a2b3e265/rumps-0.3.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "92240498dcdf068b48c26d94fc6ce9cc", "sha256": "c8df19347c661cac8906fffd410727c6000f978a6c8c44a2803a1786b35c4c1f" }, "downloads": -1, "filename": "rumps-0.3.0.tar.gz", "has_sig": false, "md5_digest": "92240498dcdf068b48c26d94fc6ce9cc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33092, "upload_time": "2019-02-02T00:56:53", "url": "https://files.pythonhosted.org/packages/42/72/ac51f637bde4fd26fb72fa046dfa05d7c6a06a094780d5c8432417afb1d3/rumps-0.3.0.tar.gz" } ] }