{ "info": { "author": "Antoine Beaupr\u00e9", "author_email": "anarcat@debian.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Intended Audience :: End Users/Desktop", "License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)", "Natural Language :: English", "Operating System :: POSIX", "Operating System :: POSIX :: Linux", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3 :: Only", "Topic :: Office/Business :: Scheduling" ], "description": "Undertime - pick a meeting time\n===============================\n\nThis program allows you to quickly pick a meeting time across multiple\ntimezones for conference calls or other coordinated events. It shows\nall times of a given day for all the timezones selected, in a table\nthat aligns the time so a line shows simultaneous times across all\ntimezones. This takes into account daylight savings and other\npeculiarities (provided that the local timezone database is up to\ndate) so you can also schedule meetings in the future as well.\n\n.. image:: undertime.png\n :alt: undertime computing possible meeting time for multiple timezones\n\n.. image:: https://img.shields.io/badge/Say%20Thanks-!-1EAEDB.svg \n :alt: Say thanks to the author\n :target: https://saythanks.io/to/anarcat\n\nUsage\n=====\n\nTimezones should be passed on the commandline and are matched against\nthe `list of known timezones`_, as defined by the `pytz`_\npackage. Exact matches are attempted at first, but if that fails,\nsubstring matches are allowed, which makes it possible to do this::\n\n undertime.py New_York Los_Angeles\n\nThe complete list of timezones is also shown when the\n``--print-zones`` commandline option is provided.\n\nColors are used to highlight the \"work hours\" where possible meeting\ntimes could overlap. You can change those work hours with the\n``--start`` and ``--end`` flags. Because daylight savings may actually\nchange time, you can also use the ``--date`` time to pick an arbitrary\ntime for the meeting, using natural language (as parsed by the\n`dateparser`_ or `parsedatetime`_ modules, if available). The current\ntime is also shown, in bold. A configuration file can be used to set\ndefaults.\n\nSummary usage is available with the ``--help`` flag and full help in\nthe manpage. Instructions for how to contribute to the project are in\n``CONTRIBUTING.rst`` and there is a ``CODE_OF_CONDUCT.rst``.\n\n.. _list of known timezones: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones\n.. _pytz: https://pypi.python.org/pypi/pytz\n.. _dateparser: https://dateparser.readthedocs.io/\n.. _parsedatetime: https://pypi.python.org/pypi/parsedatetime/\n.. _overtime-cli: https://github.com/diit/overtime-cli\n\nKnown issues and limitations\n============================\n\nThere are weird alignment issues when using colors, which seems to be\na bug with the upstream `terminaltables`_ library, filed as `issue\n#55`_.\n\nIt is possible that daylight saving times computations are\nincorrect. There are no unit tests for this program, which was only\nmanually tested with some commonly used timezones.\n\nTimezones are a delicate and complicated subject, and change\nconstantly. What may be applicable to your location at the current\ntime may not be reflected by your operating system or the chain of\nsoftware used by this program to determine time.\n\nIt should be possible for the program to show the user which are the\nbest times to possibly do a meeting. Those, for example, could be\noutlined in green or underlined to make it more obvious when the best\nmatches are. Another suggestion that was proposed is to restrict the\ndisplay to overlapping timezones (`issue #3`_).\n\nThere is no ``--version`` flag because of limitations in Python's\nperformance, see `issue #4`_ for a full discussion.\n\nUndertime was written using Python 3.5 and there is no garantee it\nwill work in older Python releases.\n\nTime is an illusion we created to rationalize our unbearable\nephemerality and is bound to be imprecise, confusing and flawed. It's\nneither your fault or your computer's: accept and embrace its\nhumanity.\n\n.. _terminaltables: https://robpol86.github.io/terminaltables/\n.. _issue #55: https://github.com/Robpol86/terminaltables/issues/55\n.. _issue #3: https://gitlab.com/anarcat/undertime/issues/3\n.. _issue #4: https://gitlab.com/anarcat/undertime/issues/4\n\nCredits\n=======\n\nThis program was written by Antoine Beaupr\u00e9 and is licensed under the\nAGPLv3+. It was inspired by the `overtime-cli`_ program and the\n`timeanddate.com`_ site. Another similar tool is `worldchatclock.com`_\nand its beautiful round interface. I also found out about `tzdiff`_ a\nfew months after writing undertime.\n\nI rewrote `overtime-cli`_ in Python because I felt we shouldn't need a\nJavascript virtual machine to pick a time. I was also curious to see\nhow such a rewrite would look like and was tired of loading a web\nbrowser every time I needed to figure out what time it was elsewhere\nin the world or when I needed to coordinate international meetings.\n\n.. _timeanddate.com: https://www.timeanddate.com/\n.. _worldchatclock.com: http://worldchatclock.com/\n.. _tzdiff: https://github.com/belgianbeer/tzdiff\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://gitlab.com/anarcat/undertime", "keywords": "", "license": "AGPLv3", "maintainer": "", "maintainer_email": "", "name": "undertime", "package_url": "https://pypi.org/project/undertime/", "platform": "", "project_url": "https://pypi.org/project/undertime/", "project_urls": { "Homepage": "https://gitlab.com/anarcat/undertime" }, "release_url": "https://pypi.org/project/undertime/1.7.0/", "requires_dist": [ "dateparser", "pytz", "pyyaml", "termcolor", "terminaltables" ], "requires_python": "", "summary": "pick a meeting time", "version": "1.7.0" }, "last_serial": 4700764, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "73d62d79eade57540c1c8ad8fcd42f97", "sha256": "076ede3461fe1de8f408bc352defd9b15f7ca8fe4ca3cd4dde1e44fc29297865" }, "downloads": -1, "filename": "undertime-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "73d62d79eade57540c1c8ad8fcd42f97", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8181, "upload_time": "2018-01-14T14:16:13", "url": "https://files.pythonhosted.org/packages/a4/c4/3503602c4a1498a10728b7bfeab642738a406e5429dcb94a83017b29bd4c/undertime-1.0.0-py3-none-any.whl" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "d758bb3907d15a442213bd4a407bcd51", "sha256": "f85bed23696105fc31c248b5c29f7994270e7c9a582b1b39bf1eedcaf19dfd66" }, "downloads": -1, "filename": "undertime-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "d758bb3907d15a442213bd4a407bcd51", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8173, "upload_time": "2018-01-14T14:18:08", "url": "https://files.pythonhosted.org/packages/65/f3/a8a32c0485945dd6b07335f1e06f98d86d065a67337af06a032927a69495/undertime-1.0.1-py3-none-any.whl" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "023d277ac1667e6afe3e3aec81b3c9de", "sha256": "0c95dc544a2a9f4695661101803f56fb56d7b1ab707bfb4dc4d6e848545d0bf6" }, "downloads": -1, "filename": "undertime-1.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "023d277ac1667e6afe3e3aec81b3c9de", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8290, "upload_time": "2018-02-23T21:35:56", "url": "https://files.pythonhosted.org/packages/c1/3e/85ff789c176acd34f9c0c09e3329189495326afc83d3ea34ea5d633a184e/undertime-1.1.0-py3-none-any.whl" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "64240bddb349f0ecd8b806ccd5b731c9", "sha256": "fe0e69c9e3b48bce6c70092164461d97c6bf302118238ea11f12a19e8edb89aa" }, "downloads": -1, "filename": "undertime-1.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "64240bddb349f0ecd8b806ccd5b731c9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8496, "upload_time": "2018-02-26T15:40:29", "url": "https://files.pythonhosted.org/packages/a6/6a/622c1ace227dd0d36a47226183229cd1fb9635ff01a2896aff9249f69cb0/undertime-1.2.0-py3-none-any.whl" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "742b9920c3d6fbddd0d6a87f77064b7e", "sha256": "6da8577b9012cf67f56e6d2d7fafdb0dbe2ac3a35e606d6ffdf7b6379ebebe98" }, "downloads": -1, "filename": "undertime-1.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "742b9920c3d6fbddd0d6a87f77064b7e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9447, "upload_time": "2018-03-12T17:42:05", "url": "https://files.pythonhosted.org/packages/cc/37/7c9d0fb4fea49e77b7f6355b59fd7ec39da13227a4c95147ef15cbf96d7a/undertime-1.3.0-py3-none-any.whl" } ], "1.4.0": [ { "comment_text": "", "digests": { "md5": "59ed43415c53ec430d31cb80470acb86", "sha256": "1e6a95204b2173b024ebb747b29dfbd606707708fcfffaec254c534d9edd70de" }, "downloads": -1, "filename": "undertime-1.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "59ed43415c53ec430d31cb80470acb86", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9587, "upload_time": "2018-09-23T16:12:27", "url": "https://files.pythonhosted.org/packages/6c/8d/f54054a90c3772937a8afbc20841706e5d2e5c8ec5d49f001838aa47c064/undertime-1.4.0-py3-none-any.whl" } ], "1.5.0": [ { "comment_text": "", "digests": { "md5": "da5ff7f782d14ab821ce3fe862821ca1", "sha256": "6b8e0c09519f16369c9a2ce31754f4d0617e9b376ba777441903bdb477ed75dc" }, "downloads": -1, "filename": "undertime-1.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "da5ff7f782d14ab821ce3fe862821ca1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11446, "upload_time": "2018-11-30T17:50:26", "url": "https://files.pythonhosted.org/packages/4f/9b/1ee545b11203e7b60ba0fac0a5b475161be6c891fb4ba72390530547bd12/undertime-1.5.0-py3-none-any.whl" } ], "1.6.0": [ { "comment_text": "", "digests": { "md5": "051ce5f56ee508266aee1530ff6550ad", "sha256": "de305280bd165a52e65ef2e1a0b5658cefa17ab3d87825331a8684dd116c0221" }, "downloads": -1, "filename": "undertime-1.6.0-py3-none-any.whl", "has_sig": false, "md5_digest": "051ce5f56ee508266aee1530ff6550ad", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12081, "upload_time": "2019-01-14T19:31:22", "url": "https://files.pythonhosted.org/packages/85/38/348f18f359234d51e0e50eb51cfe3ff14bf7564b5e68e4b3614237b335fc/undertime-1.6.0-py3-none-any.whl" } ], "1.7.0": [ { "comment_text": "", "digests": { "md5": "91852ae3e5834dce3632e5474c312c95", "sha256": "a32d9015dc463bc545d7a1a27684343b0f28f38a78bb424256baa6994dc1ba01" }, "downloads": -1, "filename": "undertime-1.7.0-py3-none-any.whl", "has_sig": false, "md5_digest": "91852ae3e5834dce3632e5474c312c95", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 13453, "upload_time": "2019-01-15T22:43:51", "url": "https://files.pythonhosted.org/packages/7e/8a/db4a168e016234d757d0f7456442dc95926c9361058d1590ed1719fc6deb/undertime-1.7.0-py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "91852ae3e5834dce3632e5474c312c95", "sha256": "a32d9015dc463bc545d7a1a27684343b0f28f38a78bb424256baa6994dc1ba01" }, "downloads": -1, "filename": "undertime-1.7.0-py3-none-any.whl", "has_sig": false, "md5_digest": "91852ae3e5834dce3632e5474c312c95", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 13453, "upload_time": "2019-01-15T22:43:51", "url": "https://files.pythonhosted.org/packages/7e/8a/db4a168e016234d757d0f7456442dc95926c9361058d1590ed1719fc6deb/undertime-1.7.0-py3-none-any.whl" } ] }