tasksync is a CLI tool to sync tasks between task trackers offered on an as-is basis. The project is in a relatively crude state and makes several assumptions about the end-user (namely: he or she is comfortable with programming).
tasksync was originally developed for, and has been tested with, task syncing between TaskWarrior and Google Tasks. Other implementations may be supported at a future date.
Pull requests are absolutely welcome on this project, especially if they make the project more user-friendly.
In the current state of the project, you're encouraged to run out of a virtual environment:
git clone https://github.com/burnison/tasksync
cd tasksync
virtualenv .venv
. .venv/bin/activate
python setup.py install
And, to use:
CLIENT_ID='xyz' CLIENT_SECRET='abc' python tasksync --help
Take care to protect your CLIENT_SECRET
.
To keep the utmost amount of flexibility, configuration is done through the
config.py
. This means a certain number of assumptions have been made about the
user, specifically that he or she is comfortable with python programming. To
configure,
- As always, be sure you have up-to-date backups of everything in the event anything goes wrong.
- Copy the provided
config.py.example
file toconfig.py
. - Make whatever necessary changes to
config.py
(see Rough Design).
When syncing against Google Tasks, an OAuth token will be required. You can create one using the Google Cloud Console.
Upon first execution, you will be prompted, by Google, to authenticate and grant
tasksync
permission to access your Google Tasks data. Be sure to check the
URL, as tasksync
relies on third-party libraries to perform OAuth
authentication.
Each synchronisation is an execution
, provided by config.executions
. In the
provided example, tw2gt
is an example on how you can synchronize Google Tasks
with TaskWarrior.
Each execution contains an upstream
and downstream
source. In the provided
example, upstream
is Google Tasks, and downstream
is TaskWarrior. Each
source or sink contains a
TaskFactory
, which knows how to createTask
objects from the underlying provider.Repository
, which understands the wire level definition of aTask
.Filter
, which allows tasks to be excluded from the sync.Callback
, which allows tasks to be fluffed, changed, rewritten, etc. during the sync.- a decision whether or not "orphaned" tasks should be deleted. Orphaned tasks are those that have a bidirectional association to a task not present in the other system.
Additional providers can be added by the same mechanism, "simply" by extending
the TaskFactory
, TaskRepository
, and Task
classes.
As noted several times in this readme, enhancements are welcome. One day, I plan to add a CalDAV/TaskDAV provider. One day. That's my top priority.