Giter Club home page Giter Club logo

etesync-dav's People

Contributors

beatlink avatar codedust avatar cosmojg avatar dan-v avatar dannixon avatar dcharalambous avatar dependabot[bot] avatar dotlambda avatar jzacsh avatar nouwan avatar odkr avatar opiechow avatar patogit avatar pedrom34 avatar peter4487 avatar salt-factory avatar sawft99 avatar sergeyklay avatar stevesbrain avatar stuart12 avatar tasn avatar tnajdek avatar triallax avatar x11x avatar xiretza avatar zakkak avatar zeronymous avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

etesync-dav's Issues

Encrypted WebDAV

Please let me know if this is a wrong repo for this question.

Have you considered implementing encrypted WebDAV for files?

GNOME integration

Probably you know GNOME's nice integration of "online accounts". So one can e.g. use Nextcloud for contact sync, see image below. However, as far as I see, this is not yet possible with EteSync.

gnomeonlineaccounts

So maybe with the help of this desktop client or maybe the CLI tool, such integration is possible? Or maybe try to send patches/pursue GNOME to add it as an official version? (and allow self-hosted versions, of course).
Or integration into GNOME calendar, which AFAIK can also be achieved separately to whole GNOME integration. (although the latter is, of course, better, as it also syncs contacts then)

missing dependency on pytz to avoid: ERROR:root:No module named 'pytz'

On Debian unstable, I did

python3.6 -m venv etesync-dav
source etesync-dav/bin/activate
pip3 install etesync-dav
etesync-dav

and when I tried to validate a new remote address book with CardBook got a stream of messages ERROR:root:No module named 'pytz'. I had to do pip install pytz to get etesync-dav not to throw this error.

Docker radicale not accessible at localhost

I followed the instructions for Docker installation and http://localhost:37358/ and http://localhost:37358/[email protected]/ (modified for my user) don't work, never load anything.

sudo docker build . -t etesync-dav:latest
sudo docker run -it --rm -v etesync:/data etesync/etesync-dav setup

Running those commands, I entered my username and access pw and encryption pw, and the command finished successfully, but now how do I access my collections in the web browser?

etesync-dav-0.4.0 fails with 'readOnly' errors on PROPFIND & PUT

etesync-dav is no longer syncing correctly. It syncs, perhaps only once, but after a while new events are not retrieved or sent. I have two Android device with etesync and they can share events normally. Below is a full log from when I installed and started etesync-dav and now where it is hung.

Feb 20 15:34:32 my-machine systemd[1]: Starting EteSync CalDAV and CardDAV front-end/proxy for s.pook...
Feb 20 15:34:32 my-machine runuser[9971]: pam_unix(runuser:session): session opened for user s.pook by (uid=0)
Feb 20 15:34:32 my-machine runuser[9971]: pam_unix(runuser:session): session closed for user s.pook
Feb 20 15:34:35 my-machine pip3[9980]: Requirement already satisfied: pytz in /usr/lib/python3/dist-packages (2018.9)
Feb 20 15:34:35 my-machine pip3[9980]: Collecting etesync-dav
Feb 20 15:34:35 my-machine pip3[9980]:   Downloading https://files.pythonhosted.org/packages/18/16/d2f9000ecfede7d98eecbe216eb9a64624ffb8bc89125b7bb1ccaf2e32d5/etesync-dav-0.4.0.tar.gz
Feb 20 15:34:36 my-machine pip3[9980]: Collecting appdirs>=1.4.3 (from etesync-dav)
Feb 20 15:34:36 my-machine pip3[9980]:   Using cached https://files.pythonhosted.org/packages/56/eb/810e700ed1349edde4cbdc1b2a21e28cdf115f9faf263f6bbf8447c1abf3/appdirs-1.4.3-py2.py3-none-any.whl
Feb 20 15:34:36 my-machine pip3[9980]: Collecting radicale_storage_etesync>=0.5.0 (from etesync-dav)
Feb 20 15:34:36 my-machine pip3[9980]:   Downloading https://files.pythonhosted.org/packages/31/b4/548428ac0feed2d1772436f332c79348a6a30ce0fb65e079b2f5dd0d3237/radicale_storage_etesync-0.6.0.tar.gz
Feb 20 15:34:36 my-machine pip3[9980]: Collecting Radicale>=2.1.10 (from radicale_storage_etesync>=0.5.0->etesync-dav)
Feb 20 15:34:37 my-machine pip3[9980]: Collecting etesync>=0.8.0 (from radicale_storage_etesync>=0.5.0->etesync-dav)
Feb 20 15:34:37 my-machine pip3[9980]:   Downloading https://files.pythonhosted.org/packages/e9/bd/1211c9d5b4fcf02d15f586b2d65f37a4e81613e8138b7c098ad962893680/etesync-0.8.1.tar.gz
Feb 20 15:34:37 my-machine pip3[9980]: Requirement already satisfied: python-dateutil>=2.7.3 in /usr/lib/python3/dist-packages (from Radicale>=2.1.10->radicale_storage_etesync>=0.5.0->etesync-dav) (2.7.3)
Feb 20 15:34:37 my-machine pip3[9980]: Collecting vobject>=0.9.6 (from Radicale>=2.1.10->radicale_storage_etesync>=0.5.0->etesync-dav)
Feb 20 15:34:37 my-machine pip3[9980]: Requirement already satisfied: asn1crypto>=0.22 in /usr/lib/python3/dist-packages (from etesync>=0.8.0->radicale_storage_etesync>=0.5.0->etesync-dav) (0.24.0)
Feb 20 15:34:37 my-machine pip3[9980]: Collecting cffi>=1.10 (from etesync>=0.8.0->radicale_storage_etesync>=0.5.0->etesync-dav)
Feb 20 15:34:38 my-machine pip3[9980]:   Downloading https://files.pythonhosted.org/packages/be/99/3a088b41d93aa46f07cf7fd4da1b3287e6899ad7b2b75f1a177edf025e1a/cffi-1.12.1-cp36-cp36m-manylinux1_x86_64.whl (428kB)
Feb 20 15:34:38 my-machine pip3[9980]: Collecting coverage>=4.3 (from etesync>=0.8.0->radicale_storage_etesync>=0.5.0->etesync-dav)
Feb 20 15:34:38 my-machine pip3[9980]:   Using cached https://files.pythonhosted.org/packages/a4/5c/b3eac6aa7eb4af83c8580d9c1578343910bdcc59e64e3565402f9a527f9c/coverage-4.5.2-cp36-cp36m-manylinux1_x86_64.whl
Feb 20 15:34:38 my-machine pip3[9980]: Requirement already satisfied: cryptography>=1.9 in /usr/lib/python3/dist-packages (from etesync>=0.8.0->radicale_storage_etesync>=0.5.0->etesync-dav) (2.3)
Feb 20 15:34:38 my-machine pip3[9980]: Collecting furl>=0.5 (from etesync>=0.8.0->radicale_storage_etesync>=0.5.0->etesync-dav)
Feb 20 15:34:38 my-machine pip3[9980]:   Using cached https://files.pythonhosted.org/packages/bd/b6/302ecc007de38274509d6397300afd2e274aba7f1c3c0a165b5f1e1a836a/furl-2.0.0-py2.py3-none-any.whl
Feb 20 15:34:38 my-machine pip3[9980]: Requirement already satisfied: idna>=2.5 in /usr/lib/python3/dist-packages (from etesync>=0.8.0->radicale_storage_etesync>=0.5.0->etesync-dav) (2.6)
Feb 20 15:34:38 my-machine pip3[9980]: Collecting orderedmultidict>=0.7 (from etesync>=0.8.0->radicale_storage_etesync>=0.5.0->etesync-dav)
Feb 20 15:34:38 my-machine pip3[9980]:   Using cached https://files.pythonhosted.org/packages/05/70/9f0a8867d4d98becf60dc5707e10b39930747ee914dae46414b69e33a266/orderedmultidict-1.0-py2.py3-none-any.whl
Feb 20 15:34:38 my-machine pip3[9980]: Collecting packaging>=16.8 (from etesync>=0.8.0->radicale_storage_etesync>=0.5.0->etesync-dav)
Feb 20 15:34:38 my-machine pip3[9980]:   Using cached https://files.pythonhosted.org/packages/91/32/58bc30e646e55eab8b21abf89e353f59c0cc02c417e42929f4a9546e1b1d/packaging-19.0-py2.py3-none-any.whl
Feb 20 15:34:39 my-machine pip3[9980]: Collecting peewee>=3.7.0 (from etesync>=0.8.0->radicale_storage_etesync>=0.5.0->etesync-dav)
Feb 20 15:34:39 my-machine pip3[9980]: Collecting py>=1.4 (from etesync>=0.8.0->radicale_storage_etesync>=0.5.0->etesync-dav)
Feb 20 15:34:39 my-machine pip3[9980]:   Using cached https://files.pythonhosted.org/packages/3e/c7/3da685ef117d42ac8d71af525208759742dd235f8094221fdaafcd3dba8f/py-1.7.0-py2.py3-none-any.whl
Feb 20 15:34:39 my-machine pip3[9980]: Requirement already satisfied: pyasn1>=0.2 in /usr/lib/python3/dist-packages (from etesync>=0.8.0->radicale_storage_etesync>=0.5.0->etesync-dav) (0.4.2)
Feb 20 15:34:39 my-machine pip3[9980]: Collecting pycparser>=2.17 (from etesync>=0.8.0->radicale_storage_etesync>=0.5.0->etesync-dav)
Feb 20 15:34:39 my-machine pip3[9980]: Collecting pyparsing>=2.2 (from etesync>=0.8.0->radicale_storage_etesync>=0.5.0->etesync-dav)
Feb 20 15:34:39 my-machine pip3[9980]:   Using cached https://files.pythonhosted.org/packages/de/0a/001be530836743d8be6c2d85069f46fecf84ac6c18c7f5fb8125ee11d854/pyparsing-2.3.1-py2.py3-none-any.whl
Feb 20 15:34:39 my-machine pip3[9980]: Collecting pyscrypt>=1.6 (from etesync>=0.8.0->radicale_storage_etesync>=0.5.0->etesync-dav)
Feb 20 15:34:39 my-machine pip3[9980]: Requirement already satisfied: requests>=2.21 in /usr/lib/python3/dist-packages (from etesync>=0.8.0->radicale_storage_etesync>=0.5.0->etesync-dav) (2.21.0)
Feb 20 15:34:39 my-machine pip3[9980]: Requirement already satisfied: six>=1.10 in /usr/lib/python3/dist-packages (from etesync>=0.8.0->radicale_storage_etesync>=0.5.0->etesync-dav) (1.12.0)
Feb 20 15:34:39 my-machine pip3[9980]: Building wheels for collected packages: etesync-dav, radicale-storage-etesync, etesync
Feb 20 15:34:39 my-machine pip3[9980]:   Running setup.py bdist_wheel for etesync-dav: started
Feb 20 15:34:40 my-machine pip3[9980]:   Running setup.py bdist_wheel for etesync-dav: finished with status 'done'
Feb 20 15:34:40 my-machine pip3[9980]:   Stored in directory: /run/[email protected]/pip3-cache/wheels/62/b7/fc/1258f58ec5798e5f9a4b01f622114121a63a459b284c9d7894
Feb 20 15:34:40 my-machine pip3[9980]:   Running setup.py bdist_wheel for radicale-storage-etesync: started
Feb 20 15:34:40 my-machine pip3[9980]:   Running setup.py bdist_wheel for radicale-storage-etesync: finished with status 'done'
Feb 20 15:34:40 my-machine pip3[9980]:   Stored in directory: /run/[email protected]/pip3-cache/wheels/91/d7/e6/5865966a161f059e28539268c8743e113b3902911f0979c4be
Feb 20 15:34:40 my-machine pip3[9980]:   Running setup.py bdist_wheel for etesync: started
Feb 20 15:34:41 my-machine pip3[9980]:   Running setup.py bdist_wheel for etesync: finished with status 'done'
Feb 20 15:34:41 my-machine pip3[9980]:   Stored in directory: /run/[email protected]/pip3-cache/wheels/3f/ad/0c/f154c4d2c67f5f17eb01752849f5f61993ed03d0cc6e8a9ca2
Feb 20 15:34:41 my-machine pip3[9980]: Successfully built etesync-dav radicale-storage-etesync etesync
Feb 20 15:34:41 my-machine pip3[9980]: Installing collected packages: appdirs, vobject, Radicale, pycparser, cffi, coverage, orderedmultidict, furl, pyparsing, packaging, peewee, py, pyscrypt, etesync, radicale-storage-etesync, etesync-dav
Feb 20 15:34:41 my-machine pip3[9980]:   The scripts change_tz and ics_diff are installed in '/tmp/[email protected]/.local/bin' which is not on PATH.
Feb 20 15:34:41 my-machine pip3[9980]:   Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Feb 20 15:34:41 my-machine pip3[9980]:   The script radicale is installed in '/tmp/[email protected]/.local/bin' which is not on PATH.
Feb 20 15:34:41 my-machine pip3[9980]:   Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Feb 20 15:34:41 my-machine pip3[9980]:   The scripts coverage, coverage-3.6 and coverage3 are installed in '/tmp/[email protected]/.local/bin' which is not on PATH.
Feb 20 15:34:41 my-machine pip3[9980]:   Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Feb 20 15:34:41 my-machine pip3[9980]: Successfully installed Radicale-2.1.11 appdirs-1.4.3 cffi-1.12.1 coverage-4.5.2 etesync-0.8.1 etesync-dav-0.4.0 furl-2.0.0 orderedmultidict-1.0 packaging-19.0 peewee-3.8.2 py-1.7.0 pycparser-2.19 pyparsing-2.3.1 pyscrypt-1.6.2 radicale-storage-etesync-0.6.0 vobject-0.9.6.1
Feb 20 15:34:41 my-machine systemd[1]: Started EteSync CalDAV and CardDAV front-end/proxy for s.pook.
Feb 20 15:47:45 my-machine python3[10012]: [7fdd8293e700] ERROR: An exception occurred during PROPFIND request on '/stuart/d0b54c7bee17cfdf77ceb939bd0964fe65901fd1d01a982a3d87be85c33ad341/': 'readOnly'
Feb 20 15:47:53 my-machine python3[10012]: [7fdd8293e700] ERROR: An exception occurred during PROPFIND request on '/stuart/8f3ba32b133135a5afff7d7457d9d0bf58582342d3618a39984b4398f0d9cf2d/': 'readOnly'
Feb 20 16:02:45 my-machine python3[10012]: [7fdd8293e700] ERROR: An exception occurred during PROPFIND request on '/stuart/d0b54c7bee17cfdf77ceb939bd0964fe65901fd1d01a982a3d87be85c33ad341/': 'readOnly'
Feb 20 16:17:45 my-machine python3[10012]: [7fdd8293e700] ERROR: An exception occurred during PROPFIND request on '/stuart/d0b54c7bee17cfdf77ceb939bd0964fe65901fd1d01a982a3d87be85c33ad341/': 'readOnly'
Feb 20 16:32:45 my-machine python3[10012]: [7fdd8293e700] ERROR: An exception occurred during PROPFIND request on '/stuart/d0b54c7bee17cfdf77ceb939bd0964fe65901fd1d01a982a3d87be85c33ad341/': 'readOnly'
Feb 20 16:47:45 my-machine python3[10012]: [7fdd8293e700] ERROR: An exception occurred during PROPFIND request on '/stuart/d0b54c7bee17cfdf77ceb939bd0964fe65901fd1d01a982a3d87be85c33ad341/': 'readOnly'
Feb 20 16:47:53 my-machine python3[10012]: [7fdd8293e700] ERROR: An exception occurred during PROPFIND request on '/stuart/8f3ba32b133135a5afff7d7457d9d0bf58582342d3618a39984b4398f0d9cf2d/': 'readOnly'
Feb 20 17:02:45 my-machine python3[10012]: [7fdd8293e700] ERROR: An exception occurred during PROPFIND request on '/stuart/d0b54c7bee17cfdf77ceb939bd0964fe65901fd1d01a982a3d87be85c33ad341/': 'readOnly'
Feb 20 17:17:45 my-machine python3[10012]: [7fdd8293e700] ERROR: An exception occurred during PROPFIND request on '/stuart/d0b54c7bee17cfdf77ceb939bd0964fe65901fd1d01a982a3d87be85c33ad341/': 'readOnly'
Feb 20 17:32:45 my-machine python3[10012]: [7fdd8293e700] ERROR: An exception occurred during PROPFIND request on '/stuart/d0b54c7bee17cfdf77ceb939bd0964fe65901fd1d01a982a3d87be85c33ad341/': 'readOnly'
Feb 20 17:47:45 my-machine python3[10012]: [7fdd8293e700] ERROR: An exception occurred during PROPFIND request on '/stuart/d0b54c7bee17cfdf77ceb939bd0964fe65901fd1d01a982a3d87be85c33ad341/': 'readOnly'
Feb 20 17:47:54 my-machine python3[10012]: [7fdd8293e700] ERROR: An exception occurred during PROPFIND request on '/stuart/8f3ba32b133135a5afff7d7457d9d0bf58582342d3618a39984b4398f0d9cf2d/': 'readOnly'
Feb 20 18:02:45 my-machine python3[10012]: [7fdd8293e700] ERROR: An exception occurred during PROPFIND request on '/stuart/d0b54c7bee17cfdf77ceb939bd0964fe65901fd1d01a982a3d87be85c33ad341/': 'readOnly'
Feb 20 18:17:45 my-machine python3[10012]: [7fdd8293e700] ERROR: An exception occurred during PROPFIND request on '/stuart/d0b54c7bee17cfdf77ceb939bd0964fe65901fd1d01a982a3d87be85c33ad341/': 'readOnly'
Feb 20 18:32:45 my-machine python3[10012]: [7fdd8293e700] ERROR: An exception occurred during PROPFIND request on '/stuart/d0b54c7bee17cfdf77ceb939bd0964fe65901fd1d01a982a3d87be85c33ad341/': 'readOnly'
Feb 21 09:32:59 my-machine python3[10012]: [7fdd8293e700] ERROR: An exception occurred during PROPFIND request on '/stuart/d0b54c7bee17cfdf77ceb939bd0964fe65901fd1d01a982a3d87be85c33ad341/': 'readOnly'
Feb 21 09:33:09 my-machine python3[10012]: [7fdd8293e700] ERROR: An exception occurred during PROPFIND request on '/stuart/8f3ba32b133135a5afff7d7457d9d0bf58582342d3618a39984b4398f0d9cf2d/': 'readOnly'
Feb 21 09:47:24 my-machine python3[10012]: [7fdd8293e700] ERROR: An exception occurred during PROPFIND request on '/stuart/d0b54c7bee17cfdf77ceb939bd0964fe65901fd1d01a982a3d87be85c33ad341/': 'readOnly'
Feb 21 10:02:24 my-machine python3[10012]: [7fdd8293e700] ERROR: An exception occurred during PROPFIND request on '/stuart/d0b54c7bee17cfdf77ceb939bd0964fe65901fd1d01a982a3d87be85c33ad341/': 'readOnly'
Feb 21 10:17:24 my-machine python3[10012]: [7fdd8293e700] ERROR: An exception occurred during PROPFIND request on '/stuart/d0b54c7bee17cfdf77ceb939bd0964fe65901fd1d01a982a3d87be85c33ad341/': 'readOnly'
Feb 21 10:32:32 my-machine python3[10012]: [7fdd8293e700] ERROR: An exception occurred during PROPFIND request on '/stuart/d0b54c7bee17cfdf77ceb939bd0964fe65901fd1d01a982a3d87be85c33ad341/': 'readOnly'
Feb 21 10:32:39 my-machine python3[10012]: [7fdd8293e700] ERROR: An exception occurred during PROPFIND request on '/stuart/8f3ba32b133135a5afff7d7457d9d0bf58582342d3618a39984b4398f0d9cf2d/': 'readOnly'
Feb 21 10:47:24 my-machine python3[10012]: [7fdd8293e700] ERROR: An exception occurred during PROPFIND request on '/stuart/d0b54c7bee17cfdf77ceb939bd0964fe65901fd1d01a982a3d87be85c33ad341/': 'readOnly'
Feb 21 11:02:24 my-machine python3[10012]: [7fdd8293e700] ERROR: An exception occurred during PROPFIND request on '/stuart/d0b54c7bee17cfdf77ceb939bd0964fe65901fd1d01a982a3d87be85c33ad341/': 'readOnly'
Feb 21 11:17:24 my-machine python3[10012]: [7fdd8293e700] ERROR: An exception occurred during PROPFIND request on '/stuart/d0b54c7bee17cfdf77ceb939bd0964fe65901fd1d01a982a3d87be85c33ad341/': 'readOnly'
Feb 21 11:32:24 my-machine python3[10012]: [7fdd8293e700] ERROR: An exception occurred during PROPFIND request on '/stuart/d0b54c7bee17cfdf77ceb939bd0964fe65901fd1d01a982a3d87be85c33ad341/': 'readOnly'
Feb 21 11:32:34 my-machine python3[10012]: [7fdd8293e700] ERROR: An exception occurred during PROPFIND request on '/stuart/8f3ba32b133135a5afff7d7457d9d0bf58582342d3618a39984b4398f0d9cf2d/': 'readOnly'
Feb 21 11:47:24 my-machine python3[10012]: [7fdd8293e700] ERROR: An exception occurred during PROPFIND request on '/stuart/d0b54c7bee17cfdf77ceb939bd0964fe65901fd1d01a982a3d87be85c33ad341/': 'readOnly'
Feb 21 11:47:51 my-machine python3[10012]: [7fdd8293e700] ERROR: An exception occurred during PUT request on '/stuart/d0b54c7bee17cfdf77ceb939bd0964fe65901fd1d01a982a3d87be85c33ad341/f6e861a5-3f77-4419-ae3f-3f6473c43b36.ics': 'readOnly'
Feb 21 11:51:56 my-machine python3[10012]: [7fdd8293e700] ERROR: An exception occurred during PUT request on '/stuart/d0b54c7bee17cfdf77ceb939bd0964fe65901fd1d01a982a3d87be85c33ad341/f6e861a5-3f77-4419-ae3f-3f6473c43b36.ics': 'readOnly'
Feb 21 11:51:57 my-machine python3[10012]: [7fdd8293e700] ERROR: An exception occurred during PROPFIND request on '/stuart/d0b54c7bee17cfdf77ceb939bd0964fe65901fd1d01a982a3d87be85c33ad341/': 'readOnly'
Feb 21 12:02:24 my-machine python3[10012]: [7fdd8293e700] ERROR: An exception occurred during PUT request on '/stuart/d0b54c7bee17cfdf77ceb939bd0964fe65901fd1d01a982a3d87be85c33ad341/f6e861a5-3f77-4419-ae3f-3f6473c43b36.ics': 'readOnly'
Feb 21 12:02:25 my-machine python3[10012]: [7fdd8293e700] ERROR: An exception occurred during PROPFIND request on '/stuart/d0b54c7bee17cfdf77ceb939bd0964fe65901fd1d01a982a3d87be85c33ad341/': 'readOnly'

trouble with etesync-dav-certgen

I've got the caldav server working (viewable at http://localhost:37358/) but I'm now struggling to get it cooperating with the macOS calendar. I've tried to run etesync-dav-certgen --trust-cert both inside and outside of virtualenv to no avail. Any ideas what's going wrong here? Cheers

output from ./venv/bin/etesync-dav-certgen --trust-cert:

Traceback (most recent call last):
  File "./venv/bin/etesync-dav-certgen", line 213, in <module>
    main()
  File "./venv/bin/etesync-dav-certgen", line 192, in main
    generate_cert(**subargs(('cert_path', 'key_path', 'key_cipher',
  File "./venv/bin/etesync-dav-certgen", line 190, in <lambda>
    subargs = lambda x: {i: args_dict[i] for i in x}
  File "./venv/bin/etesync-dav-certgen", line 190, in <dictcomp>
    subargs = lambda x: {i: args_dict[i] for i in x}
KeyError: 'key_cipher'

Bad REPORT request

Not sure how related this is to #16 or whether this is more of an issue with the etesync web client import feature but I figured I'd flag it up here.

I had imported a large (~1400 events) .ics file through the etesync web client (client.etesync.com) into a fresh calendar, and although it didn't throw up any errors at that stage, and appeared fine in the web client view, when trying to view the calendar in Calendar.app via etesync-dav the calendar appeared but without any events. Calendar.app gave the following error message:

Screenshot 2019-04-17 at 11 44 28

Console output:

[700002bc5000] WARNING: Bad REPORT request on '/[email protected]/f8d2941c4aa242e53ad9c004041867553b90d64545b0ff3107c9bdfa20702de2/': Failed to filter item '[email protected]' from '[email protected]/f8d2941c4aa242e53ad9c004041867553b90d64545b0ff3107c9bdfa20702de2': Main component missing
WARNING:radicale:Bad REPORT request on '/[email protected]/f8d2941c4aa242e53ad9c004041867553b90d64545b0ff3107c9bdfa20702de2/': Failed to filter item '[email protected]' from '[email protected]/f8d2941c4aa242e53ad9c004041867553b90d64545b0ff3107c9bdfa20702de2': Main component missing
ERROR:root:No module named 'pytz'

(there were lots of 'pytz' errors above and below but I've only included one)

Notably, when I deleted the calendar through the etesync android app, made a new calendar, and imported the same file through the android app, I didn't have any trouble with etesync-dav.

Finding CalDAV/CardDAV collection URLs for clients that can't do this automatically

Hi, just another piece of info for the docs:
I found an easy way to find the collection URLs in the case that the CalDAV client can't find them from the main URLs (e.g. Thunderbird + Lightning). This is easier than using the mentioned example.py script or looking in the debug info of the Android app.
Radicale serves a simple Web UI at http://localhost:37358/. You just need to log in with the username and password generated by the etesync-dav-manage script.
Then you can just right click on the collection URL links and copy URL and paste them into your client.

Docker hangs during build

Tried setting up with Docker, no luck, it's been stuck for more than 20 minutes on the last line, trying to realize that it's supposed to download an 18KB file:

[user@system Apps]$ sudo systemctl start docker
[sudo] password for user: 
[user@system Apps]$ cd EteSync
[user@system EteSync]$ git clone https://github.com/etesync/etesync-dav.git
Cloning into 'etesync-dav'...
remote: Counting objects: 160, done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 160 (delta 4), reused 4 (delta 2), pack-reused 151
Receiving objects: 100% (160/160), 44.40 KiB | 129.00 KiB/s, done.
Resolving deltas: 100% (79/79), done.
[user@system EteSync]$ ls
etesync-dav
[user@system EteSync]$ cd etesync-dav/
[user@system etesync-dav]$ ls
ChangeLog.md          Dockerfile   MANIFEST.in       scripts
DESCRIPTION.rst       etesync_dav  README.md         setup.py
docker-entrypoint.sh  LICENSE      requirements.txt
[user@system etesync-dav]$ docker build . -t etesync-dav:latest
ERRO[0000] failed to dial gRPC: cannot connect to the Docker daemon. Is 'docker daemon' running on this host?: dial unix /var/run/docker.sock: connect: permission denied 
context canceled
[user@system etesync-dav]$ sudo !!
sudo docker build . -t etesync-dav:latest
Sending build context to Docker daemon  163.8kB
Step 1/10 : FROM python:3.6
3.6: Pulling from library/python
55cbf04beb70: Pull complete 
1607093a898c: Pull complete 
9a8ea045c926: Pull complete 
d4eee24d4dac: Pull complete 
b59856e9f0ab: Pull complete 
b023afffd10b: Pull complete 
4d4eb448d315: Pull complete 
c4eb58602129: Pull complete 
598629fb90fc: Pull complete 
Digest: sha256:b96b5eecbb15cc6dc38653d8dac5499955c6088a66f4a62465efa01113c9895c
Status: Downloaded newer image for python:3.6
 ---> d49c41b6e6c4
Step 2/10 : ENV ETESYNC_CONFIG_DIR "/data"
 ---> Running in 5cda9a7dbaa3
Removing intermediate container 5cda9a7dbaa3
 ---> ad30c46b028b
Step 3/10 : ENV ETESYNC_LISTEN_ADDRESS "0.0.0.0"
 ---> Running in eb9f7dcbedbd
Removing intermediate container eb9f7dcbedbd
 ---> 75301db59595
Step 4/10 : ENV ETESYNC_LISTEN_PORT "37358"
 ---> Running in cb93c699779f
Removing intermediate container cb93c699779f
 ---> f3db52175839
Step 5/10 : COPY . /tmp
 ---> 194a457aa87e
Step 6/10 : RUN cd /tmp && python setup.py install
 ---> Running in dd5912dbe377
running install
running bdist_egg
running egg_info
creating etesync_dav.egg-info
writing etesync_dav.egg-info/PKG-INFO
writing dependency_links to etesync_dav.egg-info/dependency_links.txt
writing requirements to etesync_dav.egg-info/requires.txt
writing top-level names to etesync_dav.egg-info/top_level.txt
writing manifest file 'etesync_dav.egg-info/SOURCES.txt'
reading manifest file 'etesync_dav.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'etesync_dav.egg-info/SOURCES.txt'
installing library code to build/bdist.linux-x86_64/egg
running install_lib
running build_py
creating build
creating build/lib
creating build/lib/etesync_dav
copying etesync_dav/config.py -> build/lib/etesync_dav
copying etesync_dav/__init__.py -> build/lib/etesync_dav
creating build/bdist.linux-x86_64
creating build/bdist.linux-x86_64/egg
creating build/bdist.linux-x86_64/egg/etesync_dav
copying build/lib/etesync_dav/config.py -> build/bdist.linux-x86_64/egg/etesync_dav
copying build/lib/etesync_dav/__init__.py -> build/bdist.linux-x86_64/egg/etesync_dav
byte-compiling build/bdist.linux-x86_64/egg/etesync_dav/config.py to config.cpython-36.pyc
byte-compiling build/bdist.linux-x86_64/egg/etesync_dav/__init__.py to __init__.cpython-36.pyc
creating build/bdist.linux-x86_64/egg/EGG-INFO
installing scripts to build/bdist.linux-x86_64/egg/EGG-INFO/scripts
running install_scripts
running build_scripts
creating build/scripts-3.6
copying and adjusting scripts/etesync-dav -> build/scripts-3.6
copying and adjusting scripts/etesync-dav-manage -> build/scripts-3.6
changing mode of build/scripts-3.6/etesync-dav from 644 to 755
changing mode of build/scripts-3.6/etesync-dav-manage from 644 to 755
creating build/bdist.linux-x86_64/egg/EGG-INFO/scripts
copying build/scripts-3.6/etesync-dav -> build/bdist.linux-x86_64/egg/EGG-INFO/scripts
copying build/scripts-3.6/etesync-dav-manage -> build/bdist.linux-x86_64/egg/EGG-INFO/scripts
changing mode of build/bdist.linux-x86_64/egg/EGG-INFO/scripts/etesync-dav to 755
changing mode of build/bdist.linux-x86_64/egg/EGG-INFO/scripts/etesync-dav-manage to 755
copying etesync_dav.egg-info/PKG-INFO -> build/bdist.linux-x86_64/egg/EGG-INFO
copying etesync_dav.egg-info/SOURCES.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
copying etesync_dav.egg-info/dependency_links.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
copying etesync_dav.egg-info/requires.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
copying etesync_dav.egg-info/top_level.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
zip_safe flag not set; analyzing archive contents...
creating dist
creating 'dist/etesync_dav-0.1.5-py3.6.egg' and adding 'build/bdist.linux-x86_64/egg' to it
removing 'build/bdist.linux-x86_64/egg' (and everything under it)
Processing etesync_dav-0.1.5-py3.6.egg
Copying etesync_dav-0.1.5-py3.6.egg to /usr/local/lib/python3.6/site-packages
Adding etesync-dav 0.1.5 to easy-install.pth file
Installing etesync-dav script to /usr/local/bin
Installing etesync-dav-manage script to /usr/local/bin

Installed /usr/local/lib/python3.6/site-packages/etesync_dav-0.1.5-py3.6.egg
Processing dependencies for etesync-dav==0.1.5
Searching for radicale_storage_etesync>=0.1.4
Reading https://pypi.org/simple/radicale_storage_etesync/

Native Thunderbird add-on?

Hi, thank you for a great project!
I wonder if native Thunderbird add-on ever considered? Maybe one based on CardBook add-on..
It would allow to not having to run a separate compatibility layer(server) between EteSync and Thunderbird.

Help message(s) do(es) not yet reflect the fact of a single binary version

Foreword: Ironically I delayed EteSync adaption as I wanted to install it with Docker, which I then finally had, only to find out, that there's now a single binary installation. Great news!

The help message(s) do(es) not yet reflect that etesync-dav is now a single binary, i.e.:

$ etesync-dav --version
Configuration not found. Please run etesync-dav-manage first

Should be Please first run "etesync-dav manage" (without the quotes).

Maybe there are other messages too which yet don't reflect that change.

Weird behaviour with KAddressBook

When creating new address book entries through KAddressBook (v5.10.3 on Manjaro), the following errors occur in etesync-dav:

[█████] DEBUG: Request content:
BEGIN:VCARD
VERSION:3.0
FN:Bob Loblaw
N:Loblaw;Bob;;;
UID:d9ad2907-8c54-428b-a89b-824aac5d5f3a
END:VCARD


[█████] ERROR: An exception occurred during PUT request on '/█████/1552563817.R271.vcf': <Model: Content> instance matching query does not exist:
SQL: SELECT "t1"."id", "t1"."journal_id", "t1"."uid", "t1"."content", "t1"."new", "t1"."dirty", "t1"."deleted" FROM "content" AS "t1" WHERE (("t1"."journal_id" = ?) AND ("t1"."uid" = ?)) LIMIT ? OFFSET ?
Params: [9, '1552563817.R271', 1, 0]
Traceback (most recent call last):
  File "/usr/lib/python3.7/site-packages/peewee.py", line 6208, in get
    return clone.execute(database)[0]
  File "/usr/lib/python3.7/site-packages/peewee.py", line 3883, in __getitem__
    return self.row_cache[item]
IndexError: list index out of range

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3.7/site-packages/etesync/api.py", line 433, in get
    return self.get_content_class()._from_cache(self._cache_obj.content_set.where(pim.Content.uid == uid).get())
  File "/usr/lib/python3.7/site-packages/peewee.py", line 6213, in get
    (clone.model, sql, params))
etesync.pim.ContentDoesNotExist: <Model: Content> instance matching query does not exist:
SQL: SELECT "t1"."id", "t1"."journal_id", "t1"."uid", "t1"."content", "t1"."new", "t1"."dirty", "t1"."deleted" FROM "content" AS "t1" WHERE (("t1"."journal_id" = ?) AND ("t1"."uid" = ?)) LIMIT ? OFFSET ?
Params: [9, '1552563817.R271', 1, 0]

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3.7/site-packages/radicale/__init__.py", line 332, in __call__
    status, headers, answers = self._handle_request(environ)
  File "/usr/lib/python3.7/site-packages/radicale/__init__.py", line 505, in _handle_request
    environ, base_prefix, path, user)
  File "/usr/lib/python3.7/site-packages/radicale/__init__.py", line 948, in do_PUT
    new_item = parent_item.upload(href, items[0])
  File "/usr/lib/python3.7/site-packages/radicale_storage_etesync/__init__.py", line 365, in upload
    return self.get(href)
  File "/usr/lib/python3.7/site-packages/radicale_storage_etesync/__init__.py", line 335, in get
    etesync_item = self.collection.get(uid)
  File "/usr/lib/python3.7/site-packages/etesync/api.py", line 435, in get
    raise exceptions.DoesNotExist(e)
etesync.exceptions.DoesNotExist: <Model: Content> instance matching query does not exist:
SQL: SELECT "t1"."id", "t1"."journal_id", "t1"."uid", "t1"."content", "t1"."new", "t1"."dirty", "t1"."deleted" FROM "content" AS "t1" WHERE (("t1"."journal_id" = ?) AND ("t1"."uid" = ?)) LIMIT ? OFFSET ?
Params: [9, '1552563817.R271', 1, 0]

When checking on https://client.etesync.com the new entry is not synced initially, however upon a reboot of the machine the entry is synced, but KAddressBook now shows a duplicate entry, and attempts to merge these duplicates into one etc. do not fix the situation.

PermissionError: [Errno 13] Permission denied:

Hey there,

seems like this is the service i was actually looking for. android app works fine as it seems.
cant get the desktop one to work. im on arch linux and this is the stacktrace i get.

the file whic gets the "permission denied" doesnt exist...

Any idea whats wrong here?

pip install etesync-dav Collecting etesync-dav Using cached etesync-dav-0.1.5.tar.gz Requirement already satisfied: appdirs>=1.4.3 in /usr/lib/python3.6/site-packages (from etesync-dav) Collecting radicale_storage_etesync>=0.1.4 (from etesync-dav) Using cached radicale_storage_etesync-0.1.4.tar.gz Collecting etesync>=0.5.1 (from radicale_storage_etesync>=0.1.4->etesync-dav) Using cached etesync-0.5.2.tar.gz Collecting Radicale>=2.0.0 (from radicale_storage_etesync>=0.1.4->etesync-dav) Using cached Radicale-2.1.8.tar.gz Collecting asn1crypto>=0.22 (from etesync>=0.5.1->radicale_storage_etesync>=0.1.4->etesync-dav) Using cached asn1crypto-0.24.0-py2.py3-none-any.whl Collecting cffi>=1.10 (from etesync>=0.5.1->radicale_storage_etesync>=0.1.4->etesync-dav) Using cached cffi-1.11.5-cp36-cp36m-manylinux1_x86_64.whl Collecting coverage>=4.3 (from etesync>=0.5.1->radicale_storage_etesync>=0.1.4->etesync-dav) Using cached coverage-4.5.1-cp36-cp36m-manylinux1_x86_64.whl Collecting cryptography>=1.9 (from etesync>=0.5.1->radicale_storage_etesync>=0.1.4->etesync-dav) Using cached cryptography-2.1.4-cp36-cp36m-manylinux1_x86_64.whl Collecting furl>=0.5 (from etesync>=0.5.1->radicale_storage_etesync>=0.1.4->etesync-dav) Using cached furl-1.0.1.tar.gz Requirement already satisfied: idna>=2.5 in /usr/lib/python3.6/site-packages (from etesync>=0.5.1->radicale_storage_etesync>=0.1.4->etesync-dav) Collecting orderedmultidict>=0.7 (from etesync>=0.5.1->radicale_storage_etesync>=0.1.4->etesync-dav) Using cached orderedmultidict-0.7.11.tar.gz Requirement already satisfied: packaging>=16.8 in /usr/lib/python3.6/site-packages (from etesync>=0.5.1->radicale_storage_etesync>=0.1.4->etesync-dav) Collecting peewee>=2.9 (from etesync>=0.5.1->radicale_storage_etesync>=0.1.4->etesync-dav) Using cached peewee-3.1.5.tar.gz Collecting py>=1.4 (from etesync>=0.5.1->radicale_storage_etesync>=0.1.4->etesync-dav) Using cached py-1.5.2-py2.py3-none-any.whl Collecting pyasn1>=0.2 (from etesync>=0.5.1->radicale_storage_etesync>=0.1.4->etesync-dav) Using cached pyasn1-0.4.2-py2.py3-none-any.whl Collecting pycparser>=2.17 (from etesync>=0.5.1->radicale_storage_etesync>=0.1.4->etesync-dav) Using cached pycparser-2.18.tar.gz Requirement already satisfied: pyparsing>=2.2 in /usr/lib/python3.6/site-packages (from etesync>=0.5.1->radicale_storage_etesync>=0.1.4->etesync-dav) Collecting scrypt>=0.8.0 (from etesync>=0.5.1->radicale_storage_etesync>=0.1.4->etesync-dav) Using cached scrypt-0.8.6.tar.gz Collecting python-dateutil>=2.6 (from etesync>=0.5.1->radicale_storage_etesync>=0.1.4->etesync-dav) Using cached python_dateutil-2.7.0-py2.py3-none-any.whl Requirement already satisfied: requests>=2.13 in /usr/lib/python3.6/site-packages (from etesync>=0.5.1->radicale_storage_etesync>=0.1.4->etesync-dav) Requirement already satisfied: six>=1.10 in /usr/lib/python3.6/site-packages (from etesync>=0.5.1->radicale_storage_etesync>=0.1.4->etesync-dav) Collecting vobject>=0.9 (from etesync>=0.5.1->radicale_storage_etesync>=0.1.4->etesync-dav) Using cached vobject-0.9.5.tar.gz Requirement already satisfied: chardet<3.1.0,>=3.0.2 in /usr/lib/python3.6/site-packages (from requests>=2.13->etesync>=0.5.1->radicale_storage_etesync>=0.1.4->etesync-dav) Requirement already satisfied: urllib3<1.23,>=1.21.1 in /usr/lib/python3.6/site-packages (from requests>=2.13->etesync>=0.5.1->radicale_storage_etesync>=0.1.4->etesync-dav) Installing collected packages: asn1crypto, pycparser, cffi, coverage, cryptography, orderedmultidict, furl, peewee, py, pyasn1, scrypt, python-dateutil, vobject, etesync, Radicale, radicale-storage-etesync, etesync-dav Exception: Traceback (most recent call last): File "/usr/lib/python3.6/site-packages/pip/basecommand.py", line 215, in main status = self.run(options, args) File "/usr/lib/python3.6/site-packages/pip/commands/install.py", line 342, in run prefix=options.prefix_path, File "/usr/lib/python3.6/site-packages/pip/req/req_set.py", line 784, in install **kwargs File "/usr/lib/python3.6/site-packages/pip/req/req_install.py", line 851, in install self.move_wheel_files(self.source_dir, root=root, prefix=prefix) File "/usr/lib/python3.6/site-packages/pip/req/req_install.py", line 1064, in move_wheel_files isolated=self.isolated, File "/usr/lib/python3.6/site-packages/pip/wheel.py", line 345, in move_wheel_files clobber(source, lib_dir, True) File "/usr/lib/python3.6/site-packages/pip/wheel.py", line 316, in clobber ensure_dir(destdir) File "/usr/lib/python3.6/site-packages/pip/utils/__init__.py", line 83, in ensure_dir os.makedirs(path) File "/usr/lib/python3.6/os.py", line 220, in makedirs mkdir(name, mode) PermissionError: [Errno 13] Permission denied: '/usr/lib/python3.6/site-packages/asn1crypto-0.24.0.dist-info' pip install etesync-dav 9,52s user 0,40s system 95% cpu 10,389 total

How to use with self hosted server

Hi,
Thanks for making this great open source software.
Just wanted to point out (as its not in the Readme) that you need to set the ETESYNC_URL environment variable to your server if you are self-hosting or running a local instance for testing.
Other config variables can be found in config.py
Maybe this info could be added to the readme?

At startup: TypeError: static_init() takes 0 positional arguments but 1 was given

hello, a new installation of etesync-dav no longer starts with an error message from radical. Is this a pinning problem?

: ; /usr/bin/python3 -m venv /tmp/issue
: ; . /tmp/issue/bin/activate
(issue) : ; pip install  etesync-dav
Collecting etesync-dav
  Using cached https://files.pythonhosted.org/packages/58/03/d7ff3bb8281f14dda4f43c1a19649e5c0c451fd92074965f7d892bbd337a/etesync_dav-0.1.6-py3-none-any.whl
Collecting appdirs>=1.4.3 (from etesync-dav)
  Using cached https://files.pythonhosted.org/packages/56/eb/810e700ed1349edde4cbdc1b2a21e28cdf115f9faf263f6bbf8447c1abf3/appdirs-1.4.3-py2.py3-none-any.whl
Collecting radicale-storage-etesync>=0.1.5 (from etesync-dav)
  Using cached https://files.pythonhosted.org/packages/58/b3/60e294dd83a606aae92250ec1369a628361836d0b0629a9a71e34f0d55d6/radicale_storage_etesync-0.1.5-py3-none-any.whl
Collecting Radicale>=2.1.9 (from radicale-storage-etesync>=0.1.5->etesync-dav)
Collecting etesync>=0.5.4 (from radicale-storage-etesync>=0.1.5->etesync-dav)
  Using cached https://files.pythonhosted.org/packages/01/aa/56014a882d855b74fa5c4b0dbf8202772cee2c3980d90b65256653af5df6/etesync-0.5.4-py3-none-any.whl
Collecting vobject>=0.9.6 (from Radicale>=2.1.9->radicale-storage-etesync>=0.1.5->etesync-dav)
Collecting python-dateutil>=2.7.3 (from Radicale>=2.1.9->radicale-storage-etesync>=0.1.5->etesync-dav)
  Using cached https://files.pythonhosted.org/packages/cf/f5/af2b09c957ace60dcfac112b669c45c8c97e32f94aa8b56da4c6d1682825/python_dateutil-2.7.3-py2.py3-none-any.whl
Collecting orderedmultidict>=0.7 (from etesync>=0.5.4->radicale-storage-etesync>=0.1.5->etesync-dav)
Collecting pycparser>=2.17 (from etesync>=0.5.4->radicale-storage-etesync>=0.1.5->etesync-dav)
Collecting py>=1.4 (from etesync>=0.5.4->radicale-storage-etesync>=0.1.5->etesync-dav)
  Using cached https://files.pythonhosted.org/packages/f3/bd/83369ff2dee18f22f27d16b78dd651e8939825af5f8b0b83c38729069962/py-1.5.4-py2.py3-none-any.whl
Collecting requests>=2.13 (from etesync>=0.5.4->radicale-storage-etesync>=0.1.5->etesync-dav)
  Using cached https://files.pythonhosted.org/packages/65/47/7e02164a2a3db50ed6d8a6ab1d6d60b69c4c3fdf57a284257925dfc12bda/requests-2.19.1-py2.py3-none-any.whl
Collecting six>=1.10 (from etesync>=0.5.4->radicale-storage-etesync>=0.1.5->etesync-dav)
  Using cached https://files.pythonhosted.org/packages/67/4b/141a581104b1f6397bfa78ac9d43d8ad29a7ca43ea90a2d863fe3056e86a/six-1.11.0-py2.py3-none-any.whl
Collecting pyasn1>=0.2 (from etesync>=0.5.4->radicale-storage-etesync>=0.1.5->etesync-dav)
  Using cached https://files.pythonhosted.org/packages/d1/a1/7790cc85db38daa874f6a2e6308131b9953feb1367f2ae2d1123bb93a9f5/pyasn1-0.4.4-py2.py3-none-any.whl
Collecting furl>=0.5 (from etesync>=0.5.4->radicale-storage-etesync>=0.1.5->etesync-dav)
Collecting peewee<3.0,>=2.9 (from etesync>=0.5.4->radicale-storage-etesync>=0.1.5->etesync-dav)
Collecting coverage>=4.3 (from etesync>=0.5.4->radicale-storage-etesync>=0.1.5->etesync-dav)
  Using cached https://files.pythonhosted.org/packages/3d/a0/b12090c40e0b8196b973962ec71c1c541a6c04af58ba5ad85683b3de251a/coverage-4.5.1-cp36-cp36m-manylinux1_x86_64.whl
Collecting pyscrypt>=1.6 (from etesync>=0.5.4->radicale-storage-etesync>=0.1.5->etesync-dav)
Collecting idna>=2.5 (from etesync>=0.5.4->radicale-storage-etesync>=0.1.5->etesync-dav)
  Using cached https://files.pythonhosted.org/packages/4b/2a/0276479a4b3caeb8a8c1af2f8e4355746a97fab05a372e4a2c6a6b876165/idna-2.7-py2.py3-none-any.whl
Collecting asn1crypto>=0.22 (from etesync>=0.5.4->radicale-storage-etesync>=0.1.5->etesync-dav)
  Using cached https://files.pythonhosted.org/packages/ea/cd/35485615f45f30a510576f1a56d1e0a7ad7bd8ab5ed7cdc600ef7cd06222/asn1crypto-0.24.0-py2.py3-none-any.whl
Collecting pyparsing>=2.2 (from etesync>=0.5.4->radicale-storage-etesync>=0.1.5->etesync-dav)
  Using cached https://files.pythonhosted.org/packages/6a/8a/718fd7d3458f9fab8e67186b00abdd345b639976bc7fb3ae722e1b026a50/pyparsing-2.2.0-py2.py3-none-any.whl
Collecting packaging>=16.8 (from etesync>=0.5.4->radicale-storage-etesync>=0.1.5->etesync-dav)
  Using cached https://files.pythonhosted.org/packages/ad/c2/b500ea05d5f9f361a562f089fc91f77ed3b4783e13a08a3daf82069b1224/packaging-17.1-py2.py3-none-any.whl
Collecting cryptography>=1.9 (from etesync>=0.5.4->radicale-storage-etesync>=0.1.5->etesync-dav)
  Using cached https://files.pythonhosted.org/packages/59/32/92cade62c645756a83598edf56289e9b19aae5370642a7ce690cd06bc72f/cryptography-2.3.1-cp34-abi3-manylinux1_x86_64.whl
Collecting cffi>=1.10 (from etesync>=0.5.4->radicale-storage-etesync>=0.1.5->etesync-dav)
  Using cached https://files.pythonhosted.org/packages/6d/c0/47db8f624f3e4e2f3f27be03a93379d1ba16a1450a7b1aacfa0366e2c0dd/cffi-1.11.5-cp36-cp36m-manylinux1_x86_64.whl
Collecting chardet<3.1.0,>=3.0.2 (from requests>=2.13->etesync>=0.5.4->radicale-storage-etesync>=0.1.5->etesync-dav)
  Using cached https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl
Collecting urllib3<1.24,>=1.21.1 (from requests>=2.13->etesync>=0.5.4->radicale-storage-etesync>=0.1.5->etesync-dav)
  Using cached https://files.pythonhosted.org/packages/bd/c9/6fdd990019071a4a32a5e7cb78a1d92c53851ef4f56f62a3486e6a7d8ffb/urllib3-1.23-py2.py3-none-any.whl
Collecting certifi>=2017.4.17 (from requests>=2.13->etesync>=0.5.4->radicale-storage-etesync>=0.1.5->etesync-dav)
  Using cached https://files.pythonhosted.org/packages/16/1f/50d729c104b21c1042aa51560da6141d1cab476ba7015d92b2111c8db841/certifi-2018.8.13-py2.py3-none-any.whl
Installing collected packages: appdirs, six, python-dateutil, vobject, Radicale, orderedmultidict, pycparser, py, chardet, idna, urllib3, certifi, requests, pyasn1, furl, peewee, coverage, pyscrypt, asn1crypto, pyparsing, packaging, cffi, cryptography, etesync, radicale-storage-etesync, etesync-dav
Successfully installed Radicale-2.1.10 appdirs-1.4.3 asn1crypto-0.24.0 certifi-2018.8.13 cffi-1.11.5 chardet-3.0.4 coverage-4.5.1 cryptography-2.3.1 etesync-0.5.4 etesync-dav-0.1.6 furl-1.2.1 idna-2.7 orderedmultidict-1.0 packaging-17.1 peewee-2.10.2 py-1.5.4 pyasn1-0.4.4 pycparser-2.18 pyparsing-2.2.0 pyscrypt-1.6.2 python-dateutil-2.7.3 radicale-storage-etesync-0.1.5 requests-2.19.1 six-1.11.0 urllib3-1.23 vobject-0.9.6.1
(issue) : ; etesync-dav --debug  --daemon
[7f9fd7563740] INFO: Starting Radicale
[7f9fd7563740] INFO: Authentication type is 'htpasswd'
[7f9fd7563740] INFO: Storage type is 'radicale_storage_etesync'
[7f9fd7563740] ERROR: An exception occurred during server startup: static_init() takes 0 positional arguments but 1 was given
Traceback (most recent call last):
  File "/tmp/issue/lib/python3.6/site-packages/radicale/__main__.py", line 138, in run
    serve(configuration, logger)
  File "/tmp/issue/lib/python3.6/site-packages/radicale/__main__.py", line 229, in serve
    application = Application(configuration, logger)
  File "/tmp/issue/lib/python3.6/site-packages/radicale/__init__.py", line 252, in __init__
    self.Collection = storage.load(configuration, logger)
  File "/tmp/issue/lib/python3.6/site-packages/radicale/storage.py", line 117, in load
    CollectionCopy.static_init()
TypeError: static_init() takes 0 positional arguments but 1 was given
(issue) : ; python3 --version
Python 3.6.6+

Address book shows up empty in Thunderbird

I got etesync-dav to run (in Python 3.6 -- this should be listed as a requirement, if indeed it's meant to be) but the CardDAV address book always showed up blank in Thunderbird. To diagnose this I ran example.py with all my credentials and remote server http://etesync.com and it gave me error 405, which might also be why the address book is blank.

Is your implementation of the EteSync API out of date, perhaps?

AppImage instead of misc Linux executable

I'm not sure what filetype the Linux executable is but it doesn't run by double-clicking the app on a KDE desktop. Instead package it as an AppImage since that's a single-file executable than runs on any Linux distro.

When I try to run it via ./linux-etesync-dav I get this error message:
[7579] Error loading Python lib '/tmp/_MEIo4ugqf/libpython3.7m.so.1.0': dlopen: /lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.28' not found (required by /tmp/_MEIo4ugqf/libpython3.7m.so.1.0)`

I'm not sure if this is referring to a missing dependency, but if so it's strange because I have the previous Python-based etesync-dav working correctly. This would also be something solved by using AppImage since you can package dependencies together in the executable.

Add task support

Hey there,

supporting tasks would be awesome.
atm the tasks get just deleted when syncing. thats evil...

What the service provider sees

Please let me know of this is a wrong repo for this question.

What data can the service provider see if Etesync is not self-hosted? Is request metadata of DAV queries available (After TLS termination of HTTPS)?

Contacts Sync not working (macOS)

Mac OS Mojave 10.14.3 (18D109)

The Set-Up of the Contact sync works fine. But the Contacts that I have added on my android phone and that are visible via the web interface on my macbook are not getting synched.
The Terminal output is:

[70000f84b000] WARNING: Client provided invalid sync token '********': Sync token are not supported

I anonymized the sync token because I am note sure if it is secure to post it here

Calendar Sync works fine

Implement sync-token support

Please implement sync-token support.
Using providers like TbSync throw errors:

URL:
https://etesync-dav.<my-domain>/<my-account>/c7395195582<...>72ceea629da9640/ (REPORT)

Request:
<d:sync-collection xmlns:d="DAV:"><d:sync-token>http://radicale.org/ns/sync/2e138cc284a8<...>202b24016bd</d:sync-token><d:sync-level>1</d:sync-level><d:prop><d:getetag/></d:prop></d:sync-collection>

Response:
<?xml version='1.0' encoding='utf-8'?>
<error xmlns="DAV:">
<valid-sync-token />
</error>

ICS has no events (exception occured during REPORT request)

This might be one or more issues - happy to split if needed.

Symptom No. 1:
I've just done a clean Arch Linux install, installed Gnome 3.28.1 (including gnome-calendar 3.28.1 and evolution 3.28.1) and installed the AUR package (thanks for that BTW) etesync-dav 0.1.5.
I can get the web interface to load at http://localhost:37358 but if I click the URL for a calendar the download .ics file has no events, e.g.:

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//PYVOBJECT//NONSGML Version 1//EN
END:VCALENDAR

This seems... unusual?

The journal gives the following error and warning whenever I try to download the .ics:

ERROR: An exception occurred during REPORT request on '//873e3cea5ad21be4ddca1a0eba840185c7145745e332f0f14a9bd0421eedd291/': uid
WARNING: Bad REPORT request on '//873e3cea5ad21be4ddca1a0eba840185c7145745e332f0f14a9bd0421eedd291/': Failed to filter item '5e65fcbe-6ba3-4cb4-8fc2-fac82368f44f.ics' from '/873e3cea5ad21be4ddca1a0eba840185c7145745e332f0f14a9bd0421eedd291': RRULE UNTIL values must be specified in UTC when DTSTART is timezone-aware

Symptom No. 2:
I'm able to find and add the calendars to Evolution (which also adds them to Gnome Calendars) but when I try to refresh the calendars I get the following error in the journal and a HTTP code 500 error is provided by evolution:

ERROR: An exception occurred during REPORT request on '//873e3cea5ad21be4ddca1a0eba840185c7145745e332f0f14a9bd0421eedd291/': uid

This may be related to issue #10 .

Calendar Error during PROPFIND on Arch Linux with Thunderbird

Hi there,

Recently moved to Thunderbird 60.5.3-1 (from Evolution) and loaded my calendars.

As with Evolution (see #16) one calendar works fine. The other fails to sync, but with a different error:

ERROR: An exception occurred during PROPFIND request on 'MY CALENDAR URL': uid

If I log in to the Radical web server and download the ics, I get:

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//PYVOBJECT//NONSGML Version 1//EN
END:VCALENDAR

Despite being able to see 50 events or so in the calendar on Android and in the web app.

Any ideas?

Documentation incomplete?

Trying to setup now, can't seem to be able to use etesync-dav-manage.

I did the first three commands for setup:

pip install etesync-dav
sudo docker run -it --rm -v etesync:/data etesync/etesync-dav setup
sudo docker run --name etesync-dav -d -v etesync:/data -p 37358:37358 --restart=always etesync/etesync-dav

Then trying to use etesync-dav-manage to create a user, but it says "command not found".

Mac setup issues

Hiya, I'm having issues following the documentation for setup on a Mac.

Problem 1: creating certificate with tool:

❯ ./etesync-dav-certgen --trust-cert
Traceback (most recent call last):
  File "./etesync-dav-certgen", line 16, in <module>
    from etesync_dav.config import CONFIG_DIR
ModuleNotFoundError: No module named 'etesync_dav'

I followed the manual steps instead.

Problem 2: I can't add CalDAV or CardDAV accounts:

I entered the exact information provided by etesync-dav manage get <myuser> and the documentation, but consistently get an Unable to verify account name or password error.

How do I go about troubleshooting this?

Was WebDAV the right choice?

Dear developers,
have you heard of Open Whisper Systems' discontinued Flock project?
It's author claims that the main reason of discontinuity was that WebDAV was the wrong choice:

Choosing the wrong protocol led to unreasonable server costs, at this time Flock is nowhere near affordable.

Instead, following protocols suggested for future projects:

How EteSync relates with Flock, and what do you think about it?

raise RuntimeError("SSL handshake failed: %s" % e) from e

Hi thanks for this project

I am trying to build this for Qnap NAS

but falling into an error when starting hope you can help me to find out the problem

[] # /opt/EteSync/bin/python /opt/EteSync/bin/etesync-dav-manage add [email protected]
Traceback (most recent call last):
File "/opt/EteSync/bin/etesync-dav-manage", line 4, in
import('pkg_resources').run_script('etesync-dav==0.1.6', 'etesync-dav-manage')
File "/opt/EteSync/lib/python2.7/site-packages/pkg_resources/init.py", line 658, in run_script
self.require(requires)[0].run_script(script_name, ns)
File "/opt/EteSync/lib/python2.7/site-packages/pkg_resources/init.py", line 1444, in run_script
script_code = compile(script_text, script_filename, 'exec')
File "/opt/EteSync/lib/python2.7/site-packages/etesync_dav-0.1.6-py2.7.egg/EGG-INFO/scripts/etesync-dav-manage", line 30
print("{}:{}".format(name, password), file=f)
^
SyntaxError: invalid syntax
even starting[
] # /opt/EteSync/bin/python /opt/EteSync/bin/etesync-dav-manage
Traceback (most recent call last):
File "/opt/EteSync/bin/etesync-dav-manage", line 4, in
import('pkg_resources').run_script('etesync-dav==0.1.6', 'etesync-dav-manage')
File "/opt/EteSync/lib/python2.7/site-packages/pkg_resources/init.py", line 658, in run_script
self.require(requires)[0].run_script(script_name, ns)
File "/opt/EteSync/lib/python2.7/site-packages/pkg_resources/init.py", line 1444, in run_script
script_code = compile(script_text, script_filename, 'exec')
File "/opt/EteSync/lib/python2.7/site-packages/etesync_dav-0.1.6-py2.7.egg/EGG-INFO/scripts/etesync-dav-manage", line 30
print("{}:{}".format(name, password), file=f)
^
SyntaxError: invalid syntax
`
I am lost thanks for your help

i am using latest Python 2.7.15

`[~] # /opt/EteSync/bin/pip list
Package Version


appdirs 1.4.3
asn1crypto 0.24.0
certifi 2018.8.24
cffi 1.11.5
chardet 3.0.4
coverage 5.0a2
cryptography 2.3.1
enum34 1.1.6
etesync 0.5.4
etesync-dav 0.1.6
furl 1.2.1
idna 2.7
ipaddress 1.0.22
lxml 4.2.4
netifaces 0.10.7
orderedmultidict 1.0
packaging 17.1
peewee 2.10.2
pip 18.0
py 1.6.0
pyasn1 0.4.4
pycparser 2.18
pycrypto 2.6.1
pycurl 7.43.0.2
pyOpenSSL 18.0.0
pyparsing 2.2.0
pyscrypt 1.6.2
python-dateutil 2.7.3
Radicale 2.1.10
radicale-storage-etesync 0.1.6
requests 2.19.1
setuptools 39.0.1
six 1.11.0
urllib3 1.23
vobject 0.9.6.1
`

I have really no clue how to fix this

Error creating tasks with evolution

When I try to create tasks with evolution I get the following error every time. Creating events is working fine. (From #10)

[7f8a741af700] ERROR: An exception occurred during PUT request on '/marzzzello/a315debd27d31cd890fcdebb084d613d11297830afa3c5b84dde4db5ca6dc9d7/ee8e0a26e81f090a81475e61ef9f9752510eb71f.ics': vevent
Traceback (most recent call last):
File "/usr/lib/python3.7/site-packages/peewee.py", line 6042, in get
  return clone.execute(database)[0]
File "/usr/lib/python3.7/site-packages/peewee.py", line 3729, in __getitem__
  return self.row_cache[item]
IndexError: list index out of range
Full debug log
 etesync-dav -D 
[7fa2f9dbc600] INFO: Starting Radicale
[7fa2f9dbc600] INFO: Authentication type is 'htpasswd'
[7fa2f9dbc600] INFO: Storage type is 'radicale_storage_etesync'
[7fa2f9dbc600] INFO: Rights type is 'owner_only'
[7fa2f9dbc600] INFO: Web type is 'internal'
[7fa2f9dbc600] INFO: Listening to 'localhost' on port 37358
[7fa2f9dbc600] INFO: Radicale server ready
[7fa2f73fd700] INFO: PUT request for '/marzzzello/a315debd27d31cd890fcdebb084d613d11297830afa3c5b84dde4db5ca6dc9d7/a1fc39aefa19c87188c8828d2984ac70b9feb896.ics' received from 127.0.0.1 using 'Evolution/3.30.4'
[7fa2f73fd700] DEBUG: Request headers:
{'CONTENT_LENGTH': '316',
'CONTENT_TYPE': 'text/calendar; charset="utf-8"',
'GATEWAY_INTERFACE': 'CGI/1.1',
'HTTP_ACCEPT_LANGUAGE': 'de-de, de;q=0.9',
'HTTP_AUTHORIZATION': 'Basic **masked**',
'HTTP_CACHE_CONTROL': 'no-cache',
'HTTP_CONNECTION': 'close',
'HTTP_HOST': 'localhost:37358',
'HTTP_IF_NONE_MATCH': '*',
'HTTP_PRAGMA': 'no-cache',
'HTTP_PREFER': 'return=minimal',
'HTTP_USER_AGENT': 'Evolution/3.30.4',
'PATH_INFO': '/marzzzello/a315debd27d31cd890fcdebb084d613d11297830afa3c5b84dde4db5ca6dc9d7/a1fc39aefa19c87188c8828d2984ac70b9feb896.ics',
'QUERY_STRING': '',
'REMOTE_ADDR': '127.0.0.1',
'REMOTE_HOST': '',
'REQUEST_METHOD': 'PUT',
'SCRIPT_NAME': '',
'SERVER_NAME': 'localhost',
'SERVER_PORT': '37358',
'SERVER_PROTOCOL': 'HTTP/1.1',
'SERVER_SOFTWARE': 'WSGIServer/0.2',
'wsgi.errors': <_io.StringIO object at 0x7fa2f8593d38>,
'wsgi.file_wrapper': <class 'wsgiref.util.FileWrapper'>,
'wsgi.input': <_io.BufferedReader name=6>,
'wsgi.multiprocess': False,
'wsgi.multithread': True,
'wsgi.run_once': False,
'wsgi.url_scheme': 'http',
'wsgi.version': (1, 0)}
[7fa2f73fd700] DEBUG: Sanitized script name: ''
[7fa2f73fd700] DEBUG: Sanitized path: '/marzzzello/a315debd27d31cd890fcdebb084d613d11297830afa3c5b84dde4db5ca6dc9d7/a1fc39aefa19c87188c8828d2984ac70b9feb896.ics'
[7fa2f73fd700] INFO: Successful login: 'marzzzello'
[7fa2f73fd700] DEBUG: Request content:
BEGIN:VCALENDAR
CALSCALE:GREGORIAN
PRODID:-//Ximian//NONSGML Evolution Calendar//EN
VERSION:2.0
BEGIN:VTODO
UID:a1fc39aefa19c87188c8828d2984ac70b9feb896
DTSTAMP:20190126T154817Z
SUMMARY:new task...
PRIORITY:0
CLASS:PUBLIC
CREATED:20190126T162820Z
LAST-MODIFIED:20190126T162820Z
END:VTODO
END:VCALENDAR

[7fa2f73fd700] ERROR: An exception occurred during PUT request on '/marzzzello/a315debd27d31cd890fcdebb084d613d11297830afa3c5b84dde4db5ca6dc9d7/a1fc39aefa19c87188c8828d2984ac70b9feb896.ics': vevent
Traceback (most recent call last):
File "/usr/lib/python3.7/site-packages/peewee.py", line 6042, in get
  return clone.execute(database)[0]
File "/usr/lib/python3.7/site-packages/peewee.py", line 3729, in __getitem__
  return self.row_cache[item]
IndexError: list index out of range

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/lib/python3.7/site-packages/etesync/api.py", line 389, in get
  return self.get_content_class()._from_cache(self._cache_obj.content_set.where(pim.Content.uid == uid).get())
File "/usr/lib/python3.7/site-packages/peewee.py", line 6047, in get
  (clone.model, sql, params))
etesync.pim.ContentDoesNotExist: <Model: Content> instance matching query does not exist:
SQL: SELECT "t1"."id", "t1"."journal_id", "t1"."uid", "t1"."content", "t1"."new", "t1"."dirty", "t1"."deleted" FROM "content" AS "t1" WHERE (("t1"."journal_id" = ?) AND ("t1"."uid" = ?)) LIMIT ? OFFSET ?
Params: [22, 'a1fc39aefa19c87188c8828d2984ac70b9feb896', 1, 0]

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/lib/python3.7/site-packages/radicale_storage_etesync/__init__.py", line 357, in upload
  item = self.get(href)
File "/usr/lib/python3.7/site-packages/radicale_storage_etesync/__init__.py", line 335, in get
  etesync_item = self.collection.get(uid)
File "/usr/lib/python3.7/site-packages/etesync/api.py", line 391, in get
  raise exceptions.DoesNotExist(e)
etesync.exceptions.DoesNotExist: <Model: Content> instance matching query does not exist:
SQL: SELECT "t1"."id", "t1"."journal_id", "t1"."uid", "t1"."content", "t1"."new", "t1"."dirty", "t1"."deleted" FROM "content" AS "t1" WHERE (("t1"."journal_id" = ?) AND ("t1"."uid" = ?)) LIMIT ? OFFSET ?
Params: [22, 'a1fc39aefa19c87188c8828d2984ac70b9feb896', 1, 0]

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/lib/python3.7/site-packages/vobject/base.py", line 529, in __getattr__
  return self.contents[toVName(name)][0]
KeyError: 'vevent'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/lib/python3.7/site-packages/radicale/__init__.py", line 332, in __call__
  status, headers, answers = self._handle_request(environ)
File "/usr/lib/python3.7/site-packages/radicale/__init__.py", line 505, in _handle_request
  environ, base_prefix, path, user)
File "/usr/lib/python3.7/site-packages/radicale/__init__.py", line 948, in do_PUT
  new_item = parent_item.upload(href, items[0])
File "/usr/lib/python3.7/site-packages/radicale_storage_etesync/__init__.py", line 361, in upload
  etesync_item = self.collection.get_content_class().create(self.collection, content)
File "/usr/lib/python3.7/site-packages/etesync/api.py", line 290, in create
  ret.content = content
File "/usr/lib/python3.7/site-packages/etesync/api.py", line 300, in content
  self.uid = self.__class__.get_uid(content)
File "/usr/lib/python3.7/site-packages/etesync/api.py", line 315, in get_uid
  return vobj.vevent.uid.value
File "/usr/lib/python3.7/site-packages/vobject/base.py", line 531, in __getattr__
  raise AttributeError(name)
AttributeError: vevent

cannot sync contacts in Cardbook (Thundebird)

I tried to set etesync in a new Thunderbird profile. Calendar is working in Lightning. But when I try do add a new address book in Cardbook there are 2 issues:

  • In the Cardbook new address book wizard, after configuring URL and login credentials, my contact books show up but the only cardDav version that I can choose for any of them is 3.0
  • After I create the existing contact book, nothing is ever synced

With a fresh contact book I can in fact create and sync contacts in CardBook. The problem might be the incompability of cardDav v3 and v4

maybe related:

2019.04.17 14:35:59:367 : Discovery module : debug mode : response code : (new Number(207))
2019.04.17 14:35:59:391 : Discovery module : debug mode : response text : (new String("

<?xml version='1.0' encoding='utf-8'?>
<multistatus
	xmlns=\"DAV:\"
	xmlns:CR=\"urn:ietf:params:xml:ns:carddav\">
	<response>
		<href>/foo%40posteo.de/ffd8ec50876xxxxxxxxxxxxxxxxxxxxxx59bf9c78f4e191/</href>
		<propstat>
			<prop />
			<status>HTTP/1.1 200 OK</status>
		</propstat>
		<propstat>
			<prop>
				<CR:supported-address-data />
			</prop>
			<status>HTTP/1.1 404 Not Found</status>
		</propstat>
	</response>
	<response>
		<href>/foo%40posteo.de/ffd8ec5087xxxxxxxxxxxxxxxxxxxxxxxxxxx89d36a4-917c-4165-ba6c-78073a608e58.vcf</href>
		<propstat>
			<prop />
			<status>HTTP/1.1 200 OK</status>
		</propstat>
		<propstat>
			<prop>
				<CR:supported-address-data />
			</prop>
			<status>HTTP/1.1 404 Not Found</status>
		</propstat>
	</response>
</multistatus>


"))
2019.04.17 14:35:59:391 : Discovery module : debug mode : response code : (new Number(207))

When I click on synchronize calendar

2019.04.17 14:48:24:017 : etecon : Synchronization not tried
2019.04.17 14:48:24:019 : All synchronizations finished

The problem of missing cardDav v4 option does not occur when I use my nextcloud instance as carddav remote, so it definitely seems to be related to what etesync-dav/radicale reports to cardbook

Manjaro
Thunderbird 66.6.1
Cardbook 35.6
etesync-dav 0.5.0
(official etesync server)

Flatpak

Seeing you have docker support, what about flatpak?

That is actually much more suited for desktop environments. And seeing "localhost" in your Readme, I guess, it is intended that this is run on the desktop and you just "localhost" your DAV client to it?

However, flatpaks usually have a GUI, you do not have it. However, I think this is no technical requirement – it's just not so good for providing screenshots for https://flathub.org/ or so. 😄

Crash with Gnome calendar 3.32.0

When I try to connect Gnome Calendar 3.32.0 to etesync-dav 0.5.0, the application just crash. That seems to be a pretty usual use case, is there some known incompatibilities?

radicale.conf without "\" before whitespace

Mojave 10.14.3 (18D109)

instead of
ssl = yes certificate = /Users/USERNAME/Library/Application\ Support/etesync-dav/etesync.crt key = /Users/USERNAME/Library/Application\ Support/etesync-dav/etesync.key

i had to enter
ssl = yes certificate = /Users/USERNAME/Library/Application Support/etesync-dav/etesync.crt key = /Users/USERNAME/Library/Application Support/etesync-dav/etesync.key

Offer etesync-dav via the package manager "Homebrew" for macOS and Linux

Main Goal:

  • brew install etesync-dav installs everything you need for running etesync on macOS or Linux, inlcuding manpages and any helpers and dependencies.

Additional goals: (split into separate tickets if needed/approporiate)

  1. OS specific mechanism for automatically starting etesync-dav with the system start. Either for all users and/or per user login (running in user space) whatever is appropriate to etesync's architecture. - moved to #58
  2. brew uninstall etesync-dav uninstalls the executables, manpages, etc.
  3. #59
  4. Facilitate the capacity of brew [ install | upgrade | uninstall ] etesync-dav to print accompanying infos at the end of the output.

Brew does this per package in a section called "Caveats", i.e.

==> Caveats
==> syncthing
To have launchd start syncthing now and restart at login:
brew services start syncthing
Or, if you don't want/need a background service you can just run:
syncthing

For etesync this could be something like:

Next run etesync manage add [email protected]

And if running brew uninstall etesync-dav depending how #59 gets implemented, you could inform that user-data was auto-deleted as part of the uninstallation or if that is not done, where the remaining user-data resides, if the careful users wants to wipe that clean too.

Native Windows build

Would be nice if there was a native Windows build (perhaps via PyInstaller), for the average joe who does not want to (or is scared to) install Python or Docker and follow the instructions.

etesync-dav fails to build on Linux Mint

Hi,

I've successfully installed etesync-dav on Arch Linux, but I'm having trouble getting it installed on Linux Mint 18.3.

I get the following error when running pip install etesync-dav

Collecting etesync-dav
  Using cached etesync-dav-0.1.5.tar.gz
Collecting appdirs>=1.4.3 (from etesync-dav)
  Using cached appdirs-1.4.3-py2.py3-none-any.whl
Collecting radicale_storage_etesync>=0.1.4 (from etesync-dav)
  Using cached radicale_storage_etesync-0.1.4.tar.gz
Collecting etesync>=0.5.1 (from radicale_storage_etesync>=0.1.4->etesync-dav)
  Using cached etesync-0.5.2.tar.gz
Collecting Radicale>=2.0.0 (from radicale_storage_etesync>=0.1.4->etesync-dav)
  Using cached Radicale-2.1.8.tar.gz
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-build-0cVpLV/Radicale/setup.py", line 48, in <module>
        with open(init_path, "r", encoding="utf-8") as fd:
    TypeError: 'encoding' is an invalid keyword argument for this function
    
    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-0cVpLV/Radicale/

Any ideas?

Please let me know if you need further information from me.

Kind regards,
Emile

Installation via Homebrew

Would it be an option to add the dav client for Mac (or even Linux) to Homebrew? Would make installation and updating maybe easier.

Tag the images pushed to Docker Hub

Hello, and thank you for making such a good product!

Could you please tag the images released to the Docker Hub? Currently, there is only one tag available, that is latest.
I see that the releases are tagged in this Git repo, so it would be nice if same tags were present on Docker Hub as well. That would let us stick to a specific version of the image and switch between versions more predictably. It would also increase awareness of which version of etesync-dav is being considered "latest".

Syncing issue with Thunderbird (TbSync)

I started testing etesync with TbSync in Thunderbird earlier today and ran into a strange syncing issue that appears to be related to radicale. The initial sync after adding the account works fine for both contacts and calendar. Every sync attempt after that fails with the error listed below.

[7fafdf19e700] WARNING: Client provided invalid sync token 'http://radicale.org/ns/sync/9f53b65ef83f847b27e8a5708a587e515574b6632650ada8ff37f6b4d189208b': Sync token are not supported
[7fafdf19e700] WARNING: Client provided invalid sync token 'http://radicale.org/ns/sync/83f4f82e13304db0781c4e77886731bde5cbcc194e99e17cdfc430f1b691024b': Sync token are not supported

Installed packages:
etesync==0.5.6
etesync-dav==0.1.7
Radicale==2.1.11
radicale-storage-etesync==0.1.7

Please let me know if you need anything else. Thanks.

'well-known' error prevents starting server

Setting up on Manjaro Linux (Arch derivative), followed instructions in readme, got an error.

[user@system ~]$ etesync-dav-manage add [email protected]
Please enter the EteSync login password: 
Please enter your encryption password: 
Fetching auth token
Deriving password
Saving config
User: [email protected]
Password: letters-and-numbers
[user@system ~]$ etesync-dav
ERROR: Invalid configuration: Invalid section 'well-known' in config
[user@system ~]$ etesync-dav
ERROR: Invalid configuration: Invalid section 'well-known' in config
[user@system ~]$ 

Here are the contents of radicale.conf:

[server]
hosts = localhost:37358

[auth]
type = htpasswd
htpasswd_filename = /home/user/.config/etesync-dav/htpaswd
htpasswd_encryption = plain

[storage]
type = radicale_storage_etesync
database_filename = /home/user/.config/etesync-dav/etesync_data.db
remote_url = https://api.etesync.com/
credentials_filename = /home/user/.config/etesync-dav/etesync_creds

System updated two days ago.

Any hints?

Looking forward to this working!

Delete all or specific user data by command or during uninstallation

Deleting user data shall be possible with either of these:

  • command line argument like etesync-dav manage --deleteUserData [[email protected]]
    • empty argument or special keyword like all deletes all users
    • stating a specific user deletes only the specific one
  • as part of the uninstall routine of an installer or package manager #57 the user is asked whether to also delete user data (in this case "all")

Appointment creation error with Evolution

When trying to create an appointment with Evolution running on Debian 9, I get an error similar to the one shown below. This happens with every new appointment. This issue is cleared by restarting etesync-dav.

[7fc8fe6fa700] ERROR: An exception occurred during PUT request on '/XXXXXXXXX/dc93dfe5d268766a8e64489a5db3c864412f7faa4482d6763446a4aab1c0953d/20180221T153817Z-12741-1000-1-1_XXXXXX-20180221T154035Z.ics': <class 'etesync.pim.Content'> instance matching query does not exist:
SQL: SELECT "t1"."id", "t1"."journal_id", "t1"."uid", "t1"."content", "t1"."new", "t1"."dirty", "t1"."deleted" FROM "content" AS "t1" WHERE (("t1"."journal_id" = ?) AND ("t1"."uid" = ?)) LIMIT 1 OFFSET 0
Params: [2, '20180221T153817Z-12741-1000-1-1_XXXXXX-20180221T154035Z']

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.