{ "info": { "author": "Nikos Koukis", "author_email": "nickkouk@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: Unix", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8" ], "description": "# Taskwarrior - Google Calendar synchroniser\n\n\n \n \n \n \n
master\n \n \n devel\n \n \n
\n\n\n\n\n\n\n\n\n\n\n\"PyPI\n\n```\n _ _ _\n| |_ __ _ ___| | ____ __ __ _ ___ __ _| | ___ _ _ _ __ ___\n| __/ _` / __| |/ /\\ \\ /\\ / / / _` |/ __/ _` | | / __| | | | '_ \\ / __|\n| || (_| \\__ \\ < \\ V V / | (_| | (_| (_| | | \\__ \\ |_| | | | | (__\n \\__\\__,_|___/_|\\_\\ \\_/\\_/____\\__, |\\___\\__,_|_|___|___/\\__, |_| |_|\\___|\n |_____|___/ |_____| |___/\n```\n\n## Description\n\n`taskw_gcal_sync` provides a solution for bidirectional synchronisation between\n[Taskwarrior](https://taskwarrior.org) and [Google\nCalendar](https://calendar.google.com). Given a *Calendar* name for Google\nCalendar and a *filter* for Taskwarrior (currently only a single tag is\nsupported and tested) synchronise all the events between them.\n\nOverall, it supports synchronisation on the following events:\n\n- Creation of an event\n- Modification of an (existing) event\n- Deletion of an event\n\nThe aforementioned features should work bidirectional, meaning a reminder\ncreated, modified, or deleted from Google Calendar should also be created,\nmodified, or deleted respectively in TaskWarrior and vice-versa\n\n## Demo - initial run - filling of a Google Calendar\n\n![demo_gif](https://github.com/bergercookie/taskw_gcal_sync/blob/master/misc/demo.gif)\n\n## Motivation\n\nWhile Taskwarrior is an excellent tool when it comes to keeping TODO lists,\nkeeping track of project goals etc., lacks the portability, simplicity and\nminimalistic design of Google Calendar. The latter also has the following\nadvantages:\n\n- Automatic sync across all your devices\n- Comfortable addition/modification of events using voice commands\n- Actual reminding of events with a variety of mechanisms\n\n## Installation instructions\n\nRequirements:\n\n- Taskwarrior - [Installation instructions](https://taskwarrior.org/download/)\n- Python version >= 3.6 (yeah kind of restrictive, but\n [mypy](http://mypy-lang.org/) rocks!)\n- Python package dependencies: `pip3 install --user --upgrade -r requirements.txt # from the repo root dir`\n\nInstallation Choices:\n\n- Pypi: `pip3 install --user --upgrade taskw_gcal_sync`\n + (will not contain latest version)\n- github: `pip3 install --user git+https://github.com/bergercookie/taskw_gcal_sync`\n- Download and install locally - bleeding edge\n\n ```sh\n git clone https://github.com/bergercookie/taskw_gcal_sync\n cd taskw_gcal_sync\n git checkout devel\n pip3 install --user --upgrade -r requirements.txt\n ```\n\n## Usage instructions\n\nRun the `tw_gcal_sync` to synchronise the Google calendar of your choice with\nthe selected Taskwarrior tag(s). Run with `--help` for the list of options.\n\n```sh\n# Sync the +remindme Taskwarrior tag with the calendar named \"TW Reminders\"\n\ntw_gcal_sync --help\ntw_gcal_sync -t remindme -c \"TW Reminders\"\n```\n\n## Mechanics\n\nTo achieve synchronization across the two services, we use a push-pull mechanism\nwhich is far easier and less troublesome than an automatic synchronization\nsolution. In case the latter behavior is desired, users may just run the\nscript periodically e.g., using cron:\n\n```sh\n$ crontab -e\n...\n\n# Add the following to sync every 10' - modify Calendar and Tag name accordingly\n*/10 * * * * tw_gcal_sync -c \"TW Reminders\" -t \"remindme\" 2>&1 1>~/tw_reminders_latest.log\n\n```\n\n\n## Troubleshooting\n\n* Having trouble installing or using the tool? Take a look at either the\n continuous-integration configuration or the unittsests for the installation\n steps or the recommended way of using the python code respectively.\n* Something doesn't work? Does the script fail midway through?\n * Record the problem and report it in the ISSUES page. Include as much\n information as possible so that I can reproduce it.\n * Clean the configuration file. By default that's going to be\n `$HOME/.config/taskw_gcal_sync`\n\n `rm -rf ~/.config/taskw_gcal_sync`\n * Remove the corresponding Google Calendar\n * Rerun synchronisation from scratch\n\n## Self Promotion\n\nIf you find this tool useful, please [star it on\nGithub](https://github.com/bergercookie/taskw_gcal_sync)\n\n## TODO List\n\nSee [ISSUES list](https://github.com/bergercookie/taskw_gcal_sync/issues) for\nthe things that I'm currently either working on or interested in implementing in\nthe near future. In case there's something you are interesting in working on,\ndon't hesitate to either ask for clarifications or just do it and directly make\na PR.\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "https://github.com/bergercookie/taskw_gcal_sync", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/bergercookie/taskw_gcal_sync", "keywords": "", "license": "BSD 3-clause", "maintainer": "Nikos Koukis", "maintainer_email": "nickkouk@gmail.com", "name": "taskw-gcal-sync", "package_url": "https://pypi.org/project/taskw-gcal-sync/", "platform": "", "project_url": "https://pypi.org/project/taskw-gcal-sync/", "project_urls": { "Download": "https://github.com/bergercookie/taskw_gcal_sync", "Homepage": "https://github.com/bergercookie/taskw_gcal_sync" }, "release_url": "https://pypi.org/project/taskw-gcal-sync/0.4.2/", "requires_dist": [ "arrow", "bidict", "click", "colorlog", "google-api-python-client", "google-auth-oauthlib", "mypy", "overrides", "pytz", "pyyaml", "rfc3339", "sh", "taskw", "typing" ], "requires_python": "", "summary": "Taskwarrior <-> Google Calendar synchronisation tool", "version": "0.4.2" }, "last_serial": 5988381, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "f20ec5d654bec023712262ecc20bd621", "sha256": "2483a6b7fd37fa51e569fd55a9d0c9b486da1452b64419ff0b0fca4174e2bcf7" }, "downloads": -1, "filename": "taskw_gcal_sync-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "f20ec5d654bec023712262ecc20bd621", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18810, "upload_time": "2019-03-24T13:07:51", "url": "https://files.pythonhosted.org/packages/ff/1e/96af306a0f099143f017831748e75caa8de9f55ef0b2fcb5455bbddc74aa/taskw_gcal_sync-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "676a3e08bdb150573d2103e12d732acc", "sha256": "a39e2f9c731836a3b5a86f5582b5b04c6ca64a35c94309a93a5889215afe57b2" }, "downloads": -1, "filename": "taskw_gcal_sync-0.0.1.tar.gz", "has_sig": false, "md5_digest": "676a3e08bdb150573d2103e12d732acc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15523, "upload_time": "2019-03-24T13:07:53", "url": "https://files.pythonhosted.org/packages/fb/02/1f230ace4b07de1befcae0564ed8489f7cf402bb8a13ad95b7f62a0b7d9c/taskw_gcal_sync-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "6f4b2884c4796badb8bbdbb343f463c6", "sha256": "498898fd0fed0a567c1ae9523bcc4f783a69e0d25bcbb0927e3bacc9b5c9be72" }, "downloads": -1, "filename": "taskw_gcal_sync-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "6f4b2884c4796badb8bbdbb343f463c6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18931, "upload_time": "2019-03-24T21:18:41", "url": "https://files.pythonhosted.org/packages/50/79/7bff29e5541edcd973d6143bb1b94a32ff5cef0b13a5e1582f107dc8ff6e/taskw_gcal_sync-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fd2abc43818771435d22357aac3120a7", "sha256": "6445e4b1982015a6165c4fd3c2c14e18c54a0394c2a62958fc07f16a8c855d21" }, "downloads": -1, "filename": "taskw_gcal_sync-0.0.2.tar.gz", "has_sig": false, "md5_digest": "fd2abc43818771435d22357aac3120a7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15708, "upload_time": "2019-03-24T21:18:43", "url": "https://files.pythonhosted.org/packages/46/c9/95079874a65c99d45c1ef841a70dcb629ac0e0dbfc84b5e552f49dab8ca0/taskw_gcal_sync-0.0.2.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "a3e7d0c9156a6a1dc70ba1b1af911173", "sha256": "0b107b8b84142de38ee35ebe3b78abbca8e834868ae74c61c69071634f9ccba4" }, "downloads": -1, "filename": "taskw_gcal_sync-0.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "a3e7d0c9156a6a1dc70ba1b1af911173", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 21718, "upload_time": "2019-05-17T21:29:02", "url": "https://files.pythonhosted.org/packages/29/96/56ae1a2d036305f25e01b5c6f7edb52f4ce6a9217289f487bb55c602fce5/taskw_gcal_sync-0.3.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4deb76f1b6c270f376f6c7ed6e217689", "sha256": "80d72467b311e1624a540eb459bcb7bf810345661ea78cd33fc0dbfa32bf4f6c" }, "downloads": -1, "filename": "taskw_gcal_sync-0.3.1.tar.gz", "has_sig": false, "md5_digest": "4deb76f1b6c270f376f6c7ed6e217689", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17817, "upload_time": "2019-05-17T21:29:03", "url": "https://files.pythonhosted.org/packages/5a/26/dacb19cc17be689126e01f09b6519600f5e2799e8b094d0966b053324b92/taskw_gcal_sync-0.3.1.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "eba1462d9c5ea10cf8a6e62ffbff37b7", "sha256": "0c8df914e5befabd2452d46b3605fd49b1e88ae60f834c5a6811495a59851336" }, "downloads": -1, "filename": "taskw_gcal_sync-0.4.2-py3-none-any.whl", "has_sig": false, "md5_digest": "eba1462d9c5ea10cf8a6e62ffbff37b7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 23714, "upload_time": "2019-10-17T08:35:38", "url": "https://files.pythonhosted.org/packages/10/05/050183e01b2eb07ab00ee737042924c117c913bad51e78cfd61e29a20b44/taskw_gcal_sync-0.4.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "dae2fd89a7f79ed32949c5eb359e3f40", "sha256": "ca2e0c5b858dd790306c231b70b827ebcf8f841aa92cd98d5969c6cb4889eb66" }, "downloads": -1, "filename": "taskw_gcal_sync-0.4.2.tar.gz", "has_sig": false, "md5_digest": "dae2fd89a7f79ed32949c5eb359e3f40", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20512, "upload_time": "2019-10-17T08:35:40", "url": "https://files.pythonhosted.org/packages/f0/fc/9086ef2ef921c362b11eda082109edbfbc3a4a98b679e8e23dbbd8e13331/taskw_gcal_sync-0.4.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "eba1462d9c5ea10cf8a6e62ffbff37b7", "sha256": "0c8df914e5befabd2452d46b3605fd49b1e88ae60f834c5a6811495a59851336" }, "downloads": -1, "filename": "taskw_gcal_sync-0.4.2-py3-none-any.whl", "has_sig": false, "md5_digest": "eba1462d9c5ea10cf8a6e62ffbff37b7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 23714, "upload_time": "2019-10-17T08:35:38", "url": "https://files.pythonhosted.org/packages/10/05/050183e01b2eb07ab00ee737042924c117c913bad51e78cfd61e29a20b44/taskw_gcal_sync-0.4.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "dae2fd89a7f79ed32949c5eb359e3f40", "sha256": "ca2e0c5b858dd790306c231b70b827ebcf8f841aa92cd98d5969c6cb4889eb66" }, "downloads": -1, "filename": "taskw_gcal_sync-0.4.2.tar.gz", "has_sig": false, "md5_digest": "dae2fd89a7f79ed32949c5eb359e3f40", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20512, "upload_time": "2019-10-17T08:35:40", "url": "https://files.pythonhosted.org/packages/f0/fc/9086ef2ef921c362b11eda082109edbfbc3a4a98b679e8e23dbbd8e13331/taskw_gcal_sync-0.4.2.tar.gz" } ] }