taskwarrior-syncall


Nametaskwarrior-syncall JSON
Version 1.3.3 PyPI version JSON
download
home_pagehttps://github.com/bergercookie/taskwarrior_syncall
SummaryTaskwarrior <-> * bi-directional synchronization tool - this is now deprecated, use syncall instead
upload_time2023-01-19 13:00:57
maintainer
docs_urlNone
authorNikos Koukis
requires_python>=3.8,<4.0
licenseMIT
keywords asana calendar gkeep google calendar google keep google notion productivity synchronization task management taskwarrior
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # taskwarrior-syncall

<p align="center">
  <img src="https://raw.githubusercontent.com/bergercookie/taskwarrior-syncall/master/misc/meme.png"/>
</p>

<a href="https://github.com/bergercookie/taskwarrior-syncall/actions" alt="master">
<img src="https://github.com/bergercookie/taskwarrior-syncall/actions/workflows/ci.yml/badge.svg?branch=master" /></a>
<a href='https://coveralls.io/github/bergercookie/taskwarrior-syncall?branch=master'>
<img src='https://coveralls.io/repos/github/bergercookie/taskwarrior-syncall/badge.svg?branch=master' alt='Coverage Status' /></a>
<a href="https://github.com/pre-commit/pre-commit">
<img src="https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white" alt="pre-commit"></a>
<a href="https://github.com/bergercookie/taskwarrior-syncall/blob/master/LICENSE" alt="LICENSE">
<img src="https://img.shields.io/github/license/bergercookie/taskwarrior-syncall.svg" /></a>
<a href="https://pypi.org/project/takwarrior-syncall" alt="PyPI">
<img src="https://img.shields.io/pypi/pyversions/taskwarrior-syncall.svg" /></a>
<a href="https://badge.fury.io/py/taskwarrior-syncall">
<img src="https://badge.fury.io/py/taskwarrior-syncall.svg" alt="PyPI version" height="18"></a>
<a href="https://pepy.tech/project/taskwarrior-syncall">
<img alt="Downloads" src="https://pepy.tech/badge/taskwarrior-syncall"></a>
<a href="https://github.com/psf/black">
<img alt="Code style: black" src="https://img.shields.io/badge/code%20style-black-000000.svg"></a>

## Description

`taskwarrior-syncall` is your one-stop software to bi-directionally synchronize
a variety of services with taskwarrior. Each synchronization comes with its own
executable which handles the synchronization between that particular service and
taskwarrior. Note that the name is `taskwarrior`-specific but it's not tied to
taskwarrior; You can synchronize items/tasks etc. from two arbitrary sides,
given that you [implement the corresponding synchronization
sides](implement-a-new-synchronization.md).

At the moment the list of supported synchronization combinations is the following:

<table style="undefined;table-layout: fixed; width: 823px">
<thead>
  <tr>
    <th></th>
    <th>Description</th>
    <th>Executable</th>
  </tr>
</thead>
<tbody>
  <tr>
    <td><a href="https://github.com/bergercookie/taskwarrior-syncall/blob/master/readme-gcal.md">README</a></td>
    <td> <a href="https://taskwarrior.org/">Taskwarrior</a> ⬄ <a href="https://calendar.google.com/">Google Calendar</a></td>
    <td><tt>tw-gcal-sync</tt></td>
  </tr>
  <tr>
    <td><a href="https://github.com/bergercookie/taskwarrior-syncall/blob/master/readme-notion.md">README</a></td>
    <td> <a href="https://taskwarrior.org/">Taskwarrior</a> ⬄ <a href="https://notion.so">Notion Checkboxes</a></td>
    <td><tt>tw-notion-sync</tt></td>
  </tr>
  <tr>
    <td><a href="https://github.com/bergercookie/taskwarrior-syncall/blob/master/readme-gkeep.md">README</a></td>
    <td> <a href="https://taskwarrior.org/">Taskwarrior</a> ⬄ <a href="https://www.google.com/keep/">Google Keep Checkboxes</a></td>
    <td><tt>tw-gkeep-sync</tt></td>
  </tr>
  <tr>
    <td><a href="https://github.com/bergercookie/taskwarrior-syncall/blob/master/readme-asana.md">README</a></td>
    <td> <a href="https://taskwarrior.org/">Taskwarrior</a> ⬄ <a href="https://www.asana.com">Asana Tasks</a></td>
    <td><tt>tw-asana-sync</tt></td>
  </tr>
</tbody>
</table>

Overall, each of the above should support _bi-directional_ synchronization
between the said services. This means that on an _addition_, _modification_, or
_deletion_ of an item on one side, a corresponding addition, modification or
deletion of the counterpart item will occur on the other side so that the two
sides are eventually in sync. All services also support dependency resolution
and a few different synchronization strategies so that, on conflict, the user
can specify whether to always select the change from side A (`AlwaysFirstRS`),
the change from side B (`AlwaysSecondRS`), the most recent change of the two
(`MostRecentRS`), or the least (`LeastRecentRS`).

By the end of the run, it should show you a summary of what's been done, like
the following.

```
Google Keep
-----------
        * Items created: 3
        * Items updated: 2
        * Items deleted: 1

Taskwarrior
-----------
        * Items created: 1
        * Items updated: 2
        * Items deleted: 0
```

Refer to the corresponding README for the list above for instructions specific
to the synchronization with that particular service. Before jumping to that
though, please complete the installation instructions below.

### Sample Usage Instructions

Here's the CLI help page for the synchronizations available.

<!-- START sniff-and-replace tw_gcal_sync --help START -->

<details>
 <summary><tt>tw_gcal_sync --help</tt></summary>

```
Usage: tw_gcal_sync [OPTIONS]

  Synchronize calendars from your Google Calendar with filters from
  Taskwarrior.

  The list of TW tasks is determined by a combination of TW tags and a TW
  project while the calendar in GCal should be provided by their name. if it
  doesn't exist it will be crated

Options:
  -c, --gcal-calendar TEXT        Name of the Google Calendar to sync (will be
                                  created if not there)
  --google-secret FILE            Override the client secret used for the
                                  communication with the Google APIs
  --oauth-port INTEGER            Port to use for OAuth Authentication with
                                  Google Applications
  -t, --taskwarrior-tags TEXT     Taskwarrior tags to sync
  -p, --tw-project TEXT           Taskwarrior project to sync
  --list-combinations             List the available named TW<->Google
                                  Calendar combinations
  -r, --resolution_strategy [MostRecentRS|LeastRecentRS|AlwaysFirstRS|AlwaysSecondRS]
                                  Resolution strategy to use during conflicts
  -b, --combination TEXT          Name of an already saved TW<->Google
                                  Calendar combination
  -s, --save-as TEXT              Save the given TW<->Google Calendar filters
                                  combination using a specified custom name.
  -v, --verbose
  --version                       Show the version and exit.
  --help                          Show this message and exit.

```

</details>

<!-- END sniff-and-replace -->
<!-- START sniff-and-replace tw_gcal_sync --help START -->

<details>
 <summary><tt>tw_gcal_sync --help</tt></summary>

```
Usage: tw_gcal_sync [OPTIONS]

  Synchronize calendars from your Google Calendar with filters from
  Taskwarrior.

  The list of TW tasks is determined by a combination of TW tags and a TW
  project while the calendar in GCal should be provided by their name. if it
  doesn't exist it will be crated

Options:
  -c, --gcal-calendar TEXT        Name of the Google Calendar to sync (will be
                                  created if not there)
  --google-secret FILE            Override the client secret used for the
                                  communication with the Google APIs
  --oauth-port INTEGER            Port to use for OAuth Authentication with
                                  Google Applications
  -t, --taskwarrior-tags TEXT     Taskwarrior tags to sync
  -p, --tw-project TEXT           Taskwarrior project to sync
  --list-combinations             List the available named TW<->Google
                                  Calendar combinations
  -r, --resolution_strategy [MostRecentRS|LeastRecentRS|AlwaysFirstRS|AlwaysSecondRS]
                                  Resolution strategy to use during conflicts
  -b, --combination TEXT          Name of an already saved TW<->Google
                                  Calendar combination
  -s, --save-as TEXT              Save the given TW<->Google Calendar filters
                                  combination using a specified custom name.
  -v, --verbose
  --version                       Show the version and exit.
  --help                          Show this message and exit.

```

</details>

<!-- END sniff-and-replace -->
<!-- START sniff-and-replace tw_gkeep_sync --help START -->

<details>
 <summary><tt>tw_gkeep_sync --help</tt></summary>

```
Usage: tw_gkeep_sync [OPTIONS]

  Synchronize Notes from your Google Keep with filters from Taskwarrior.

  The list of TW tasks is determined by a combination of TW tags and a TW
  project while the note in GKeep should be specified using their full name.
  if it doesn't exist it will be created.

  This service will create TaskWarrior tasks with the specified filter for
  each one of the checkboxed items in the specified Google Keep note and will
  create Google Keep items for each one of the tasks in the Taskwarrior
  filter. You have to first "Show checkboxes" in the Google Keep Note in order
  to use it with this service.

Options:
  -k, --gkeep-note TEXT           Full title of the Google Keep Note to
                                  synchronize - Make sure you enable the
                                  checkboxes
  --user, --user-pass-path TEXT   Path in the UNIX password manager to fetch
                                  the Google username from
  --passwd, --passwd-pass-path TEXT
                                  Path in the UNIX password manager to fetch
                                  the Google password from
  -t, --taskwarrior-tags TEXT     Taskwarrior tags to sync
  -p, --tw-project TEXT           Taskwarrior project to sync
  --list-combinations             List the available named TW<->Google Keep
                                  combinations
  -r, --resolution_strategy [MostRecentRS|LeastRecentRS|AlwaysFirstRS|AlwaysSecondRS]
                                  Resolution strategy to use during conflicts
  -b, --combination TEXT          Name of an already saved TW<->Google Keep
                                  combination
  -s, --save-as TEXT              Save the given TW<->Google Keep filters
                                  combination using a specified custom name.
  -v, --verbose
  --version                       Show the version and exit.
  --help                          Show this message and exit.

```

</details>

<!-- END sniff-and-replace -->
<!-- START sniff-and-replace tw_asana_sync --help START -->

<details>
 <summary><tt>tw_asana_sync --help</tt></summary>

```
Usage: tw_asana_sync [OPTIONS]

Options:
  --token, --token-pass-path TEXT
                                  Path in the UNIX password manager to fetch
  -w, --asana-workspace-gid TEXT  Asana workspace GID used to filter tasks
  -W, --asana-workspace-name TEXT
                                  Asana workspace name used to filter tasks
  --list-asana-workspaces         List the available Asana workspaces
  -t, --taskwarrior-tags TEXT     Taskwarrior tags to sync
  -p, --tw-project TEXT           Taskwarrior project to sync
  -r, --resolution_strategy [MostRecentRS|LeastRecentRS|AlwaysFirstRS|AlwaysSecondRS]
                                  Resolution strategy to use during conflicts
  -b, --combination TEXT          Name of an already saved TW<->Asana
                                  combination
  --list-combinations             List the available named TW<->Asana
                                  combinations
  -s, --save-as TEXT              Save the given TW<->Asana filters
                                  combination using a specified custom name.
  -v, --verbose
  --version                       Show the version and exit.
  --help                          Show this message and exit.

```

</details>

<!-- END sniff-and-replace -->

## Installation instructions

### Requirements

- Taskwarrior - [Installation instructions](https://taskwarrior.org/download/) -
  Tested with `2.6.1`, should work with `>=2.6`.
- Python version >= `3.8`

### Installation Options

You have to specify at least one extra. To do so use the `[]` syntax in pip:

```sh
# for installing integration with google (e.g. Google Keep / Calendar) and Notion
pip3 install taskwarrior-syncall[notion,google]
```

- PyPI (may not contain latest version): `pip3 install --user --upgrade taskwarrior-syncall[notion,google,gkeep]`
- Github: `pip3 install --user "taskwarrior-syncall[google] @ git+https://github.com/bergercookie/taskwarrior-syncall"`
- Download and install `devel` branch locally - bleeding edge

  ```sh
  git clone https://github.com/bergercookie/taskwarrior-syncall
  cd taskwarrior-syncall
  git checkout devel
  pip3 install --user --upgrade .
  ```

- Setup using [poetry](https://python-poetry.org/) - handy for local
  development and for isolation of dependencies:

  ```sh
  git clone https://github.com/bergercookie/taskwarrior-syncall
  poetry install
  # get an interactive shell
  poetry shell

  # now the executables of all the services should be in your PATH for the
  # current shell and you can also edit the source code without further
  # re-installation ...
  ```

## Mechanics / Automatic synchronization

To achieve synchronization between two arbitrary services, we use a push-pull
mechanism which is far easier and less troublesome than an automatic
synchronization solution. This means that you have to explicitly call the
executable for the synchronization you want to achieve. If you want to automate
this, consider adding a `cron` job or a `systemd` timer.

```sh
crontab -e
...

# Add the following to sync every 10' - modify the arguments according to your
# preferences and according to the instructions of the corresponding executable
# for example for `tw_gcal_sync`:
#
# See output and potential errors in your system logs (e.g., `/var/log/syslog`)
*/10 * * * * tw_gcal_sync -c "TW Reminders" -t "remindme"
```

## FAQ

<details>
  <summary>How do I reset the synchronization and start it from scratch?</summary>

1. Remove the combination file that corresponds to your synchronization. For
   example, if you're executing synchronization of `Google Keep` with
   `Taskwarrior`, like the following, your combination name is
   `testnote__None__test_tag`.

   ```sh
   tw_gkeep_sync -t test_tag -k "testnote"
   ```

   The executable also mentions the combination name at the end of the run.

   ```
   ...
   14:00:03.41 | INFO      | Flushing data to remote Google Keep...
   14:00:04.32 | SUCCESS   | Sync completed successfully. You can now use the -b/--combination option to refer to this particular combination

     tw_gkeep_sync --combination testnote__None__test_tag
   ```

   For this combination, on Linux, remove
   `~/.config/taskwarrior_syncall/testnote__None__test_tag.yaml`.

1. Remove the section for your combination in the `<sideA_sideB_configs.yaml>`
   configuration file under the `~/.config/taskwarrior_syncall/` directory.

   This section will have the same name as the combination file deleted in the
   earlier step and will look like this:

   ```yaml
   ---
   testnote__None__test_tag:
     gkeep_note: testnote
     tw_project: null
     tw_tags: !!python/tuple
       - test_tag
   ```

1. Remove the items of one of the sides. Keep e.g. the items from the Google Keep
   note and delete the tasks of the tag/project you are using for
   synchronization.
1. Rerun synchronization from scratch to populate the one side with the items of
   the other side.

</details>

<details>
  <summary>I want to synchronize more than a single (Notion page / TW filter),  (Google Calendar / TW filter) etc. combination.</summary>

See <a
href="https://github.com/bergercookie/taskwarrior-syncall/blob/master/combinations.md">combinations.md</a>.

</details>

## Tab Completion

All synchronization executables support tab auto-completion for their options
for `bash`, `zsh` and `fish`. You can find them under `completions/`

## Miscellaneous

- [Implement a New Synchronization Service](implement-a-new-synchronization.md)
- [Using Multiple Combinations](combinations.md)
- [Contributing Guide](CONTRIBUTING.md)

## Self Promotion

If you find this tool useful, please [star it on
Github](https://github.com/bergercookie/taskwarrior-syncall)

## TODO List

See [ISSUES list](https://github.com/bergercookie/taskwarrior-syncall/issues) for
the things that I'm currently either working on or interested in implementing in
the near future. In case there's something you are interesting in working on,
don't hesitate to either ask for clarifications or just do it and directly make
a PR.

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/bergercookie/taskwarrior_syncall",
    "name": "taskwarrior-syncall",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.8,<4.0",
    "maintainer_email": "",
    "keywords": "asana,calendar,gkeep,google calendar,google keep,google,notion,productivity,synchronization,task management,taskwarrior",
    "author": "Nikos Koukis",
    "author_email": "nickkouk@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/d6/e5/f1c26a8a8933b5b339705572adea3a6cdc11ef0197d61719f1d0666f8354/taskwarrior_syncall-1.3.3.tar.gz",
    "platform": null,
    "description": "# taskwarrior-syncall\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/bergercookie/taskwarrior-syncall/master/misc/meme.png\"/>\n</p>\n\n<a href=\"https://github.com/bergercookie/taskwarrior-syncall/actions\" alt=\"master\">\n<img src=\"https://github.com/bergercookie/taskwarrior-syncall/actions/workflows/ci.yml/badge.svg?branch=master\" /></a>\n<a href='https://coveralls.io/github/bergercookie/taskwarrior-syncall?branch=master'>\n<img src='https://coveralls.io/repos/github/bergercookie/taskwarrior-syncall/badge.svg?branch=master' alt='Coverage Status' /></a>\n<a href=\"https://github.com/pre-commit/pre-commit\">\n<img src=\"https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white\" alt=\"pre-commit\"></a>\n<a href=\"https://github.com/bergercookie/taskwarrior-syncall/blob/master/LICENSE\" alt=\"LICENSE\">\n<img src=\"https://img.shields.io/github/license/bergercookie/taskwarrior-syncall.svg\" /></a>\n<a href=\"https://pypi.org/project/takwarrior-syncall\" alt=\"PyPI\">\n<img src=\"https://img.shields.io/pypi/pyversions/taskwarrior-syncall.svg\" /></a>\n<a href=\"https://badge.fury.io/py/taskwarrior-syncall\">\n<img src=\"https://badge.fury.io/py/taskwarrior-syncall.svg\" alt=\"PyPI version\" height=\"18\"></a>\n<a href=\"https://pepy.tech/project/taskwarrior-syncall\">\n<img alt=\"Downloads\" src=\"https://pepy.tech/badge/taskwarrior-syncall\"></a>\n<a href=\"https://github.com/psf/black\">\n<img alt=\"Code style: black\" src=\"https://img.shields.io/badge/code%20style-black-000000.svg\"></a>\n\n## Description\n\n`taskwarrior-syncall` is your one-stop software to bi-directionally synchronize\na variety of services with taskwarrior. Each synchronization comes with its own\nexecutable which handles the synchronization between that particular service and\ntaskwarrior. Note that the name is `taskwarrior`-specific but it's not tied to\ntaskwarrior; You can synchronize items/tasks etc. from two arbitrary sides,\ngiven that you [implement the corresponding synchronization\nsides](implement-a-new-synchronization.md).\n\nAt the moment the list of supported synchronization combinations is the following:\n\n<table style=\"undefined;table-layout: fixed; width: 823px\">\n<thead>\n  <tr>\n    <th></th>\n    <th>Description</th>\n    <th>Executable</th>\n  </tr>\n</thead>\n<tbody>\n  <tr>\n    <td><a href=\"https://github.com/bergercookie/taskwarrior-syncall/blob/master/readme-gcal.md\">README</a></td>\n    <td> <a href=\"https://taskwarrior.org/\">Taskwarrior</a> \u2b04 <a href=\"https://calendar.google.com/\">Google Calendar</a></td>\n    <td><tt>tw-gcal-sync</tt></td>\n  </tr>\n  <tr>\n    <td><a href=\"https://github.com/bergercookie/taskwarrior-syncall/blob/master/readme-notion.md\">README</a></td>\n    <td> <a href=\"https://taskwarrior.org/\">Taskwarrior</a> \u2b04 <a href=\"https://notion.so\">Notion Checkboxes</a></td>\n    <td><tt>tw-notion-sync</tt></td>\n  </tr>\n  <tr>\n    <td><a href=\"https://github.com/bergercookie/taskwarrior-syncall/blob/master/readme-gkeep.md\">README</a></td>\n    <td> <a href=\"https://taskwarrior.org/\">Taskwarrior</a> \u2b04 <a href=\"https://www.google.com/keep/\">Google Keep Checkboxes</a></td>\n    <td><tt>tw-gkeep-sync</tt></td>\n  </tr>\n  <tr>\n    <td><a href=\"https://github.com/bergercookie/taskwarrior-syncall/blob/master/readme-asana.md\">README</a></td>\n    <td> <a href=\"https://taskwarrior.org/\">Taskwarrior</a> \u2b04 <a href=\"https://www.asana.com\">Asana Tasks</a></td>\n    <td><tt>tw-asana-sync</tt></td>\n  </tr>\n</tbody>\n</table>\n\nOverall, each of the above should support _bi-directional_ synchronization\nbetween the said services. This means that on an _addition_, _modification_, or\n_deletion_ of an item on one side, a corresponding addition, modification or\ndeletion of the counterpart item will occur on the other side so that the two\nsides are eventually in sync. All services also support dependency resolution\nand a few different synchronization strategies so that, on conflict, the user\ncan specify whether to always select the change from side A (`AlwaysFirstRS`),\nthe change from side B (`AlwaysSecondRS`), the most recent change of the two\n(`MostRecentRS`), or the least (`LeastRecentRS`).\n\nBy the end of the run, it should show you a summary of what's been done, like\nthe following.\n\n```\nGoogle Keep\n-----------\n        * Items created: 3\n        * Items updated: 2\n        * Items deleted: 1\n\nTaskwarrior\n-----------\n        * Items created: 1\n        * Items updated: 2\n        * Items deleted: 0\n```\n\nRefer to the corresponding README for the list above for instructions specific\nto the synchronization with that particular service. Before jumping to that\nthough, please complete the installation instructions below.\n\n### Sample Usage Instructions\n\nHere's the CLI help page for the synchronizations available.\n\n<!-- START sniff-and-replace tw_gcal_sync --help START -->\n\n<details>\n <summary><tt>tw_gcal_sync --help</tt></summary>\n\n```\nUsage: tw_gcal_sync [OPTIONS]\n\n  Synchronize calendars from your Google Calendar with filters from\n  Taskwarrior.\n\n  The list of TW tasks is determined by a combination of TW tags and a TW\n  project while the calendar in GCal should be provided by their name. if it\n  doesn't exist it will be crated\n\nOptions:\n  -c, --gcal-calendar TEXT        Name of the Google Calendar to sync (will be\n                                  created if not there)\n  --google-secret FILE            Override the client secret used for the\n                                  communication with the Google APIs\n  --oauth-port INTEGER            Port to use for OAuth Authentication with\n                                  Google Applications\n  -t, --taskwarrior-tags TEXT     Taskwarrior tags to sync\n  -p, --tw-project TEXT           Taskwarrior project to sync\n  --list-combinations             List the available named TW<->Google\n                                  Calendar combinations\n  -r, --resolution_strategy [MostRecentRS|LeastRecentRS|AlwaysFirstRS|AlwaysSecondRS]\n                                  Resolution strategy to use during conflicts\n  -b, --combination TEXT          Name of an already saved TW<->Google\n                                  Calendar combination\n  -s, --save-as TEXT              Save the given TW<->Google Calendar filters\n                                  combination using a specified custom name.\n  -v, --verbose\n  --version                       Show the version and exit.\n  --help                          Show this message and exit.\n\n```\n\n</details>\n\n<!-- END sniff-and-replace -->\n<!-- START sniff-and-replace tw_gcal_sync --help START -->\n\n<details>\n <summary><tt>tw_gcal_sync --help</tt></summary>\n\n```\nUsage: tw_gcal_sync [OPTIONS]\n\n  Synchronize calendars from your Google Calendar with filters from\n  Taskwarrior.\n\n  The list of TW tasks is determined by a combination of TW tags and a TW\n  project while the calendar in GCal should be provided by their name. if it\n  doesn't exist it will be crated\n\nOptions:\n  -c, --gcal-calendar TEXT        Name of the Google Calendar to sync (will be\n                                  created if not there)\n  --google-secret FILE            Override the client secret used for the\n                                  communication with the Google APIs\n  --oauth-port INTEGER            Port to use for OAuth Authentication with\n                                  Google Applications\n  -t, --taskwarrior-tags TEXT     Taskwarrior tags to sync\n  -p, --tw-project TEXT           Taskwarrior project to sync\n  --list-combinations             List the available named TW<->Google\n                                  Calendar combinations\n  -r, --resolution_strategy [MostRecentRS|LeastRecentRS|AlwaysFirstRS|AlwaysSecondRS]\n                                  Resolution strategy to use during conflicts\n  -b, --combination TEXT          Name of an already saved TW<->Google\n                                  Calendar combination\n  -s, --save-as TEXT              Save the given TW<->Google Calendar filters\n                                  combination using a specified custom name.\n  -v, --verbose\n  --version                       Show the version and exit.\n  --help                          Show this message and exit.\n\n```\n\n</details>\n\n<!-- END sniff-and-replace -->\n<!-- START sniff-and-replace tw_gkeep_sync --help START -->\n\n<details>\n <summary><tt>tw_gkeep_sync --help</tt></summary>\n\n```\nUsage: tw_gkeep_sync [OPTIONS]\n\n  Synchronize Notes from your Google Keep with filters from Taskwarrior.\n\n  The list of TW tasks is determined by a combination of TW tags and a TW\n  project while the note in GKeep should be specified using their full name.\n  if it doesn't exist it will be created.\n\n  This service will create TaskWarrior tasks with the specified filter for\n  each one of the checkboxed items in the specified Google Keep note and will\n  create Google Keep items for each one of the tasks in the Taskwarrior\n  filter. You have to first \"Show checkboxes\" in the Google Keep Note in order\n  to use it with this service.\n\nOptions:\n  -k, --gkeep-note TEXT           Full title of the Google Keep Note to\n                                  synchronize - Make sure you enable the\n                                  checkboxes\n  --user, --user-pass-path TEXT   Path in the UNIX password manager to fetch\n                                  the Google username from\n  --passwd, --passwd-pass-path TEXT\n                                  Path in the UNIX password manager to fetch\n                                  the Google password from\n  -t, --taskwarrior-tags TEXT     Taskwarrior tags to sync\n  -p, --tw-project TEXT           Taskwarrior project to sync\n  --list-combinations             List the available named TW<->Google Keep\n                                  combinations\n  -r, --resolution_strategy [MostRecentRS|LeastRecentRS|AlwaysFirstRS|AlwaysSecondRS]\n                                  Resolution strategy to use during conflicts\n  -b, --combination TEXT          Name of an already saved TW<->Google Keep\n                                  combination\n  -s, --save-as TEXT              Save the given TW<->Google Keep filters\n                                  combination using a specified custom name.\n  -v, --verbose\n  --version                       Show the version and exit.\n  --help                          Show this message and exit.\n\n```\n\n</details>\n\n<!-- END sniff-and-replace -->\n<!-- START sniff-and-replace tw_asana_sync --help START -->\n\n<details>\n <summary><tt>tw_asana_sync --help</tt></summary>\n\n```\nUsage: tw_asana_sync [OPTIONS]\n\nOptions:\n  --token, --token-pass-path TEXT\n                                  Path in the UNIX password manager to fetch\n  -w, --asana-workspace-gid TEXT  Asana workspace GID used to filter tasks\n  -W, --asana-workspace-name TEXT\n                                  Asana workspace name used to filter tasks\n  --list-asana-workspaces         List the available Asana workspaces\n  -t, --taskwarrior-tags TEXT     Taskwarrior tags to sync\n  -p, --tw-project TEXT           Taskwarrior project to sync\n  -r, --resolution_strategy [MostRecentRS|LeastRecentRS|AlwaysFirstRS|AlwaysSecondRS]\n                                  Resolution strategy to use during conflicts\n  -b, --combination TEXT          Name of an already saved TW<->Asana\n                                  combination\n  --list-combinations             List the available named TW<->Asana\n                                  combinations\n  -s, --save-as TEXT              Save the given TW<->Asana filters\n                                  combination using a specified custom name.\n  -v, --verbose\n  --version                       Show the version and exit.\n  --help                          Show this message and exit.\n\n```\n\n</details>\n\n<!-- END sniff-and-replace -->\n\n## Installation instructions\n\n### Requirements\n\n- Taskwarrior - [Installation instructions](https://taskwarrior.org/download/) -\n  Tested with `2.6.1`, should work with `>=2.6`.\n- Python version >= `3.8`\n\n### Installation Options\n\nYou have to specify at least one extra. To do so use the `[]` syntax in pip:\n\n```sh\n# for installing integration with google (e.g. Google Keep / Calendar) and Notion\npip3 install taskwarrior-syncall[notion,google]\n```\n\n- PyPI (may not contain latest version): `pip3 install --user --upgrade taskwarrior-syncall[notion,google,gkeep]`\n- Github: `pip3 install --user \"taskwarrior-syncall[google] @ git+https://github.com/bergercookie/taskwarrior-syncall\"`\n- Download and install `devel` branch locally - bleeding edge\n\n  ```sh\n  git clone https://github.com/bergercookie/taskwarrior-syncall\n  cd taskwarrior-syncall\n  git checkout devel\n  pip3 install --user --upgrade .\n  ```\n\n- Setup using [poetry](https://python-poetry.org/) - handy for local\n  development and for isolation of dependencies:\n\n  ```sh\n  git clone https://github.com/bergercookie/taskwarrior-syncall\n  poetry install\n  # get an interactive shell\n  poetry shell\n\n  # now the executables of all the services should be in your PATH for the\n  # current shell and you can also edit the source code without further\n  # re-installation ...\n  ```\n\n## Mechanics / Automatic synchronization\n\nTo achieve synchronization between two arbitrary services, we use a push-pull\nmechanism which is far easier and less troublesome than an automatic\nsynchronization solution. This means that you have to explicitly call the\nexecutable for the synchronization you want to achieve. If you want to automate\nthis, consider adding a `cron` job or a `systemd` timer.\n\n```sh\ncrontab -e\n...\n\n# Add the following to sync every 10' - modify the arguments according to your\n# preferences and according to the instructions of the corresponding executable\n# for example for `tw_gcal_sync`:\n#\n# See output and potential errors in your system logs (e.g., `/var/log/syslog`)\n*/10 * * * * tw_gcal_sync -c \"TW Reminders\" -t \"remindme\"\n```\n\n## FAQ\n\n<details>\n  <summary>How do I reset the synchronization and start it from scratch?</summary>\n\n1. Remove the combination file that corresponds to your synchronization. For\n   example, if you're executing synchronization of `Google Keep` with\n   `Taskwarrior`, like the following, your combination name is\n   `testnote__None__test_tag`.\n\n   ```sh\n   tw_gkeep_sync -t test_tag -k \"testnote\"\n   ```\n\n   The executable also mentions the combination name at the end of the run.\n\n   ```\n   ...\n   14:00:03.41 | INFO      | Flushing data to remote Google Keep...\n   14:00:04.32 | SUCCESS   | Sync completed successfully. You can now use the -b/--combination option to refer to this particular combination\n\n     tw_gkeep_sync --combination testnote__None__test_tag\n   ```\n\n   For this combination, on Linux, remove\n   `~/.config/taskwarrior_syncall/testnote__None__test_tag.yaml`.\n\n1. Remove the section for your combination in the `<sideA_sideB_configs.yaml>`\n   configuration file under the `~/.config/taskwarrior_syncall/` directory.\n\n   This section will have the same name as the combination file deleted in the\n   earlier step and will look like this:\n\n   ```yaml\n   ---\n   testnote__None__test_tag:\n     gkeep_note: testnote\n     tw_project: null\n     tw_tags: !!python/tuple\n       - test_tag\n   ```\n\n1. Remove the items of one of the sides. Keep e.g. the items from the Google Keep\n   note and delete the tasks of the tag/project you are using for\n   synchronization.\n1. Rerun synchronization from scratch to populate the one side with the items of\n   the other side.\n\n</details>\n\n<details>\n  <summary>I want to synchronize more than a single (Notion page / TW filter),  (Google Calendar / TW filter) etc. combination.</summary>\n\nSee <a\nhref=\"https://github.com/bergercookie/taskwarrior-syncall/blob/master/combinations.md\">combinations.md</a>.\n\n</details>\n\n## Tab Completion\n\nAll synchronization executables support tab auto-completion for their options\nfor `bash`, `zsh` and `fish`. You can find them under `completions/`\n\n## Miscellaneous\n\n- [Implement a New Synchronization Service](implement-a-new-synchronization.md)\n- [Using Multiple Combinations](combinations.md)\n- [Contributing Guide](CONTRIBUTING.md)\n\n## Self Promotion\n\nIf you find this tool useful, please [star it on\nGithub](https://github.com/bergercookie/taskwarrior-syncall)\n\n## TODO List\n\nSee [ISSUES list](https://github.com/bergercookie/taskwarrior-syncall/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",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Taskwarrior <-> * bi-directional synchronization tool - this is now deprecated, use syncall instead",
    "version": "1.3.3",
    "split_keywords": [
        "asana",
        "calendar",
        "gkeep",
        "google calendar",
        "google keep",
        "google",
        "notion",
        "productivity",
        "synchronization",
        "task management",
        "taskwarrior"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "6fa3765ce84c1fc52d6f8192ec21042f7b3406fc9623312afb01e2ca66bf8d94",
                "md5": "e35a87e7c891f38e4f8a37149cc97b29",
                "sha256": "92f62fdc8f9f4772498a217213d20b2c89164c157b87ba2d29c2cac36f18e5c5"
            },
            "downloads": -1,
            "filename": "taskwarrior_syncall-1.3.3-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "e35a87e7c891f38e4f8a37149cc97b29",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8,<4.0",
            "size": 51524,
            "upload_time": "2023-01-19T13:00:55",
            "upload_time_iso_8601": "2023-01-19T13:00:55.647847Z",
            "url": "https://files.pythonhosted.org/packages/6f/a3/765ce84c1fc52d6f8192ec21042f7b3406fc9623312afb01e2ca66bf8d94/taskwarrior_syncall-1.3.3-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "d6e5f1c26a8a8933b5b339705572adea3a6cdc11ef0197d61719f1d0666f8354",
                "md5": "5aebf4d9b23ba865a4ecda1ed2473e3f",
                "sha256": "63b8c555dac0a23548d929740f23ce9713afc2669a5f6886fc85fb56e005d059"
            },
            "downloads": -1,
            "filename": "taskwarrior_syncall-1.3.3.tar.gz",
            "has_sig": false,
            "md5_digest": "5aebf4d9b23ba865a4ecda1ed2473e3f",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8,<4.0",
            "size": 44384,
            "upload_time": "2023-01-19T13:00:57",
            "upload_time_iso_8601": "2023-01-19T13:00:57.167335Z",
            "url": "https://files.pythonhosted.org/packages/d6/e5/f1c26a8a8933b5b339705572adea3a6cdc11ef0197d61719f1d0666f8354/taskwarrior_syncall-1.3.3.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-01-19 13:00:57",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "github_user": "bergercookie",
    "github_project": "taskwarrior_syncall",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "taskwarrior-syncall"
}
        
Elapsed time: 0.02855s