{ "info": { "author": "Tjaart van der Walt", "author_email": "tjaart@tjaart.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Console", "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", "Operating System :: POSIX", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.7" ], "description": "# PomodoroWarrior #\n\nA command line tool that integrates with TaskWarrior and TimeWarrior to implement the Pomodoro Technique.\n\n## Configuration ##\n\nThe configuration file is located at `$HOME/.config/pomw/pomwrc`\n\n### Timewarrior integration ###\n\nPomodoroWarrior aims to play nicely with TimeWarrior. By default all intervals created by PomodoroWarrior will also be updated in TimeWarrior. To change the default value, add the following section to your configuration file:\n \n```ini\n[timew]\nsync = false\n```\n\n### Pomodoro length ###\n\nPomodoro lengths are also configurable. Default length is 25 minutes.\n\n```ini\n[pomw]\nlength = 30\n```\n\n## Command Line Interface ##\n\nPomodoroWarrior uses a command line interface similar to TaskWarrior and TimeWarrior.\n\nCommands can refer to both TaskWarrior task ids, and PomodoroWarrior interval ids. To make the distinction clear, we force interval ids to be prepended by a `@` sign.\n\nThe commands can be grouped into 2 categories. Those that deal with Pomodoros, and those that deal with generic time intervals.\n\n### Workflow example ###\n\nFirst thing in the morning, we plan our Pomodoros for the day. We view our TaskWarrior task list.\n\n```bash\n$ task next\n```\n\n```\nID Age P Project Tag Due Description Urg \n1 6w M pomw 2d Create documentation for pomw 10\n2 6w M python 1w Find the holy grail 8\n```\n\nWe decide to plan 5 pomodoros for writing this documentation\n\n```bash\n$ pomw plan -q 4 1 # Plan 4 pomodoros for task 1\n```\n\nWe check our To Do Today sheet\n\n```bash\n$ pomw tdt # Print the To Do Today sheet\n```\n\n```\nTo Do Today 2019-03-21\n----------- ----------\n \u250c\u2500\u2510\u250c\u2500\u2510\u250c\u2500\u2510\u250c\u2500\u2510\n1 Create documentation for pomw \u2502 \u2502\u2502 \u2502\u2502 \u2502\u2502 \u2502\n \u2514\u2500\u2518\u2514\u2500\u2518\u2514\u2500\u2518\u2514\u2500\u2518\n```\n\nOops, we wanted 5 pomodoros, but we only planned 4. We now have 2 options, we can either override the number of planned pomodoros\n\n```bash\n$ pomw plan -q 5 1 # Plan 5 pomodoros for task 1\n```\n\nor append more pomodoros to the existing number of planned pomodoros\n\n```bash\n$ pomw plan -q +1 1 # Increment the planned pomodoros for task 1 by 1\n```\n\nWe check our tdt sheet again, and all is good!\n\n```\nTo Do Today 2019-03-21\n----------- ----------\n \u250c\u2500\u2510\u250c\u2500\u2510\u250c\u2500\u2510\u250c\u2500\u2510\u250c\u2500\u2510\n1 Create documentation for pomw \u2502 \u2502\u2502 \u2502\u2502 \u2502\u2502 \u2502\u2502 \u2502\n \u2514\u2500\u2518\u2514\u2500\u2518\u2514\u2500\u2518\u2514\u2500\u2518\u2514\u2500\u2518\n```\n\nSince we cannot find the holy grail using pomodoros, we will add the time we spend on this task using (non-pomodoro) intervals. \n\nOur To Do Today sheet looks good, and we start working on our first pomodoro.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nAfter working for several minutes, we start dreaming about lady Gwenevere, and before we realize it 10 minutes have passed. Because we believe in strictly following the Pomodoro Technique, we void the pomodoro.\n\n```bash\n$ pomw void 1 # Void the current pomodoro for task 1\n```\n\nOur TDT sheet reflects the voided Pomodoro\n\n```\nTo Do Today 2019-03-21\n----------- ----------\n \u250c\u2500\u2510\u250c\u2500\u2510\u250c\u2500\u2510\u250c\u2500\u2510\u250c\u2500\u2510\n1 Create documentation for pomw \u2502/\u2502\u2502 \u2502\u2502 \u2502\u2502 \u2502\u2502 \u2502\n \u2514\u2500\u2518\u2514\u2500\u2518\u2514\u2500\u2518\u2514\u2500\u2518\u2514\u2500\u2518\n```\n\nOn our second attempt, we complete a pomodoro. Once it rings, we mark the pomodoro as done.\n\n```bash\n$ pomw done 1 # Complete a pomodoro for task 1\n```\n\n```\nTo Do Today 2019-03-21\n----------- ----------\n \u250c\u2500\u2510\u250c\u2500\u2510\u250c\u2500\u2510\u250c\u2500\u2510\u250c\u2500\u2510\n1 Create documentation for pomw \u2502/\u2502\u2502x\u2502\u2502 \u2502\u2502 \u2502\u2502 \u2502\n \u2514\u2500\u2518\u2514\u2500\u2518\u2514\u2500\u2518\u2514\u2500\u2518\u2514\u2500\u2518\n --------\n 00:25:00\n```\n\nWe search for the grail. After an hour we give up to take a nap. We log our time as an interval\n\n```bash\n$ pomw add -d 60 2 # Add a 60 minute time interval for task 2\n```\n\n```\nTo Do Today 2019-03-21\n----------- ----------\n \u250c\u2500\u2510\u250c\u2500\u2510\u250c\u2500\u2510\u250c\u2500\u2510\u250c\u2500\u2510\n1 Create documentation for pomw \u2502/\u2502\u2502x\u2502\u2502 \u2502\u2502 \u2502\u2502 \u2502\n \u2514\u2500\u2518\u2514\u2500\u2518\u2514\u2500\u2518\u2514\u2500\u2518\u2514\u2500\u2518\n -------\n 0:25:00\n \nNon Pomodoro Time \n-----------------\n2 Find the holy grail 1:00:00\n -------\n 1:00:00\n```\n\nKing Arthur will only pay for 50 minutes of our time, so we modify the time interval\n\n```bash\n$ pomw ls # Lists the time intervals contained in the database\n```\n\n```\nID Type Date Start End Project Task\n@1 NonPom 2019-03-21 13:43:32 14:43:32 python Find the holy grail\n@2 Pom 2019-03-21 13:15:17 13:40:17 pomw Create documentation for pomw\n```\n\nFrom the listing, we see that we need to modify interval `@1`. We set the new end time to 14:33:32\n\n```bash\n$ pomw mod -e 14:33:32 @1 # Modify interval @1, set new end time as 14:33:32\n```\n\n```\nID Type Date Start End Project Task\n@1 NonPom 2019-03-21 13:43:32 14:33:32 python Find the holy grail\n@2 Pom 2019-03-21 13:15:17 13:40:17 pomw Create documentation for pomw\n```\n\nKing Arthur will not pay for our documentation creation efforts. We delete the pomodoro at interval `@2`.\n\n```bash\n$ pomw rm @2 # Delete interval @2 \n```\n\n```\nID Type Date Start End Project Task\n@1 NonPom 2019-03-21 13:43:32 14:33:32 python Find the holy grail\n```\n\n\nHopefully this gave you a (not too confusing) introduction on the power of PomodoroWarrior. \n\nThere are many more command line arguments available than was illustrated in this example. Use the `--help` option for any command to learn its complete usage. \n\n\n## Caveat ##\n\nTimeWarrior intervals does not have unique ids, and as such, PomodoroWarrior matches intervals through start and end times. \n\nIf intervals are modified with TimeWarrior directly, the link for that interval between the databases is lost.\n\nPomodoroWarrior tries to handle this situation gracefully, but it is recommend that you use PomodoroWarrior to modify any intervals, in order to keep the databases in sync.\n\n## Development ##\n\n### Build System ###\n\nStarting with version `0.0.3` we replace [setuptools](https://setuptools.readthedocs.io) with [poetry](https://poetry.eustace.io).\nPoetry is [PEP 518](https://www.python.org/dev/peps/pep-0518/) compliant, and uses `pyproject.toml` for configuration. In my opinion it provides for a simpler development experience.\n\nPoetry recommends that you install it isolated from the rest of your system. This can be done by running the install script:\n\n`curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python`\n\n### Release ###\n\nThe script `./release.py` have been developed to automate cutting releases. It requires [git-extras](https://github.com/tj/git-extras) to be installed on your system.\n\nIf you want to manually create a release, you have to follow these rules:\n\n- Only release from `master`\n- Update `pomw/__version__.py` with the new version number\n- Update `pyproject.toml` with the new version number\n- Update `Changelog` with the commits since the previous release\n\n### Upload a release to PYPI ###\n\nOnce a tag is created, and pushed to Gitlab, the release is automatically uploaded to PYPI by the Gitlab CI publish stage.\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://tjaart.gitlab.io/pomw", "keywords": "pomodoro,timewarrior,taskwarrior", "license": "GPL-3.0-or-later", "maintainer": "Tjaart van der Walt", "maintainer_email": "tjaart@tjaart.org", "name": "pomw", "package_url": "https://pypi.org/project/pomw/", "platform": "", "project_url": "https://pypi.org/project/pomw/", "project_urls": { "Documentation": "https://tjaart.gitlab.io/pomw/docs", "Homepage": "https://tjaart.gitlab.io/pomw", "Repository": "https://gitlab.com/tjaart/pomw" }, "release_url": "https://pypi.org/project/pomw/0.1.0/", "requires_dist": [ "python-dateutil (>=2.7,<3.0)", "taskw (>=1.2,<2.0)", "timew (>=0.0.22,<0.0.23)", "unijson (>=1.0,<2.0)", "urwid (>=2.0,<3.0)", "semver (>=2.8,<3.0)" ], "requires_python": ">=3.7,<4.0", "summary": "The Pomodoro Technique using TaskWarrior and TimeWarrior", "version": "0.1.0" }, "last_serial": 4971400, "releases": { "0.0.10": [ { "comment_text": "", "digests": { "md5": "0a44394bb6200633b8500d468d36ce37", "sha256": "417e0978466007aa7099890ffafb34bf43f91abbd90b30092a4ca0e688ac6e04" }, "downloads": -1, "filename": "pomw-0.0.10-py3-none-any.whl", "has_sig": false, "md5_digest": "0a44394bb6200633b8500d468d36ce37", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7,<4.0", "size": 75275, "upload_time": "2019-03-01T01:04:16", "url": "https://files.pythonhosted.org/packages/1a/c3/01155a3844bdd1f034016aa9f24e05ff83e4c42f33728cc0dbd830008a83/pomw-0.0.10-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "370d030bf7e2c21672e170aa2d85afdc", "sha256": "2aab084d366e1b1527629ed54741d8fc9a4baa29522b06c51f918411e480b426" }, "downloads": -1, "filename": "pomw-0.0.10.tar.gz", "has_sig": false, "md5_digest": "370d030bf7e2c21672e170aa2d85afdc", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7,<4.0", "size": 23802, "upload_time": "2019-03-01T01:04:17", "url": "https://files.pythonhosted.org/packages/c8/f0/4ba481e909acb18165e50ee834bc18d4a985839800424e0b7dd5330e0fdf/pomw-0.0.10.tar.gz" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "cd414ee3783390c3982e637a7129b49d", "sha256": "17179769bb6cd204d7a5ff1627d2e6c4f121b19d400d0d2f1ced22282bfb1275" }, "downloads": -1, "filename": "pomw-0.0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "cd414ee3783390c3982e637a7129b49d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7,<4.0", "size": 67113, "upload_time": "2019-02-28T22:54:45", "url": "https://files.pythonhosted.org/packages/0b/04/48270779f11ce241a1c50e1b1cc8703adeda25a9636899d39fe7b789df07/pomw-0.0.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b66e4be46e2b29aa8f7689ecf79770e5", "sha256": "d20d32d0ebf382545406caf627627a3e0611df0c9a877f175daec2caad0b926a" }, "downloads": -1, "filename": "pomw-0.0.7.tar.gz", "has_sig": false, "md5_digest": "b66e4be46e2b29aa8f7689ecf79770e5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7,<4.0", "size": 19738, "upload_time": "2019-02-28T22:54:47", "url": "https://files.pythonhosted.org/packages/61/a6/39860482bea6bff120360ee906bd9bb70dc510a1c4cf01b012a842e36dc2/pomw-0.0.7.tar.gz" } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "57d4a52b66098472edc6f5088c8c9fda", "sha256": "38f2473d83dca655eee59713d6b73443884d7f4d0b794317b2980d62e20ee366" }, "downloads": -1, "filename": "pomw-0.0.9-py3-none-any.whl", "has_sig": false, "md5_digest": "57d4a52b66098472edc6f5088c8c9fda", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7,<4.0", "size": 75271, "upload_time": "2019-03-01T00:21:02", "url": "https://files.pythonhosted.org/packages/55/1e/daf5272d5ae4843cbf0252959a654dc83571ae87a0daa879b8dcacb07629/pomw-0.0.9-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c708f9e9f0eb121a373520effcdb7669", "sha256": "84ca2def3794c1196596468689f67e81a9125bf766ba227c6a2083a9e9c6d4d2" }, "downloads": -1, "filename": "pomw-0.0.9.tar.gz", "has_sig": false, "md5_digest": "c708f9e9f0eb121a373520effcdb7669", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7,<4.0", "size": 23812, "upload_time": "2019-03-01T00:21:04", "url": "https://files.pythonhosted.org/packages/e3/fe/743cc4a76f41bcd66335fcaaa3d17afb73c9d06676a86c599629720cdf97/pomw-0.0.9.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "30a56ba4f354914c5028bf76e11b23bc", "sha256": "8ecd20f85b1e8a282901193e4b6b27bc2def094b78d3ada1bde41a070bc1c0c4" }, "downloads": -1, "filename": "pomw-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "30a56ba4f354914c5028bf76e11b23bc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7,<4.0", "size": 83223, "upload_time": "2019-03-22T05:48:10", "url": "https://files.pythonhosted.org/packages/11/6d/e41925566254fb136ca7dd4dc622d039662d9914132079afd583b0685f37/pomw-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "894aa551ef22cd54de4b344340b514ea", "sha256": "831da847206271c0bdb60d3f7c06fa572faa015a079e1ea1f3f1088f6fde1dbf" }, "downloads": -1, "filename": "pomw-0.1.0.tar.gz", "has_sig": false, "md5_digest": "894aa551ef22cd54de4b344340b514ea", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7,<4.0", "size": 27296, "upload_time": "2019-03-22T05:48:12", "url": "https://files.pythonhosted.org/packages/c5/ce/66b6c1a4039c4a20c152d66cfe72062554ceb2645c86ab339e571952e708/pomw-0.1.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "30a56ba4f354914c5028bf76e11b23bc", "sha256": "8ecd20f85b1e8a282901193e4b6b27bc2def094b78d3ada1bde41a070bc1c0c4" }, "downloads": -1, "filename": "pomw-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "30a56ba4f354914c5028bf76e11b23bc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7,<4.0", "size": 83223, "upload_time": "2019-03-22T05:48:10", "url": "https://files.pythonhosted.org/packages/11/6d/e41925566254fb136ca7dd4dc622d039662d9914132079afd583b0685f37/pomw-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "894aa551ef22cd54de4b344340b514ea", "sha256": "831da847206271c0bdb60d3f7c06fa572faa015a079e1ea1f3f1088f6fde1dbf" }, "downloads": -1, "filename": "pomw-0.1.0.tar.gz", "has_sig": false, "md5_digest": "894aa551ef22cd54de4b344340b514ea", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7,<4.0", "size": 27296, "upload_time": "2019-03-22T05:48:12", "url": "https://files.pythonhosted.org/packages/c5/ce/66b6c1a4039c4a20c152d66cfe72062554ceb2645c86ab339e571952e708/pomw-0.1.0.tar.gz" } ] }