Commit graph

76 commits

Author SHA1 Message Date
Дилян Палаузов
1c6beae9b4 storage/base: for read_only storages do not overwrite the meta data 2022-01-14 13:10:49 +02:00
Hugo Osvaldo Barrera
f3714fc493 Add type hints and configure mypy
Configure mypy as a pre-commit hook and add all type hints necessary for
mypy to pass.

There's still more work to be done here typing a lot more code, but this
provides a clear starting point.
2021-08-03 19:23:37 +02:00
Дилян Палаузов
c0ccb3d1aa metasync: use None as no-value and delete missing values on syncing
- change the interface of Storage.get_meta() and .set_meta()
  to use '' as the empty value and None as missing value.

- When a property is missing (e.g calendar-color was removed)
  in the filesystem storage delete the 'color' file, and
  in the WebDAV storage issue propertyupdate/remove call.

- remove the property from [status]/[pair]/[collection].metadata

I have adjusted, but not run the test suite.  On the other side
I tested on real system: source is CalDAV - destination is filesystem;
and source is CalDAV, destination is CalDAV (another account)
2021-07-23 19:07:02 +02:00
Hugo Osvaldo Barrera
1a1f6f0788 Initial async support
Add asyncio to the storage backends and most of the codebase. A lot of
it merely uses asyncio APIs, but still doesn't actually run several
things concurrently internally. Further improvements will be added on
top of these changes

Thanks to  Thomas Grainger (@graingert) for a few useful pointers
related to asyncio.
2021-06-26 13:40:35 +02:00
Hugo Osvaldo Barrera
d2d41e5df1 Use black to auto-format the codebase 2021-05-06 19:28:54 +02:00
Hugo Osvaldo Barrera
9cb1f8d704 Drop support for Python 3.5 and 3.6 2020-06-09 14:33:14 +02:00
Hugo Osvaldo Barrera
308289febf Remove python2 leftover code 2020-06-08 18:40:33 +02:00
Christian Geier
7fc5f1bf23 Fixed some typos. (#587)
I installed mwic, so you don't have to.
`unperformant` doesn't seem to be an often used english word either and
`addressbook` is probably `address book`.
2017-03-07 22:12:04 +01:00
Markus Unterwaditzer
76f794eef3 Module restructuring 2017-02-27 21:19:27 +01:00
Markus Unterwaditzer
6aeeb90259 Test iCloud (#567)
* Test iCloud

Fix #149
2017-02-27 19:52:24 +01:00
Markus Unterwaditzer
c9d78e2391 Clarify more docs 2017-01-17 11:46:56 +01:00
Markus Unterwaditzer
3cdd1f6644 Clarify docs 2017-01-17 11:44:59 +01:00
Markus Unterwaditzer
af5705f740 Return back to None as non-ETag
nextCloud now returns no etag on upload, which is why we're forced to
adapt the tests accordingly. So now we need to specify a fixed value for
"no etag returned" such that the tests can act accordingly. We also need
to test that the sync algorithm works properly with None.
2017-01-12 13:52:32 +01:00
Markus Unterwaditzer
cfbc7ec71b Refactor of status handling in sync (#505)
- Using `info.idents` as new status, this saves a few operations where
  no storage actions have to be taken, but the status has to be updated.

- Rename StorageSyncer to _StorageInfo and make it a private API again.

- Ability to pass custom functions for conflict resolution. This part is
  a preparation for #127.
2016-09-18 15:46:56 +02:00
Markus Unterwaditzer
18d8bb9fc2 Remove Python 2 support (#499)
* Discontinue Python 2.

See #219

* Remove Python 2 config option

* Remove coerce_native

* Remove PY2 variable

* s/text_type/str/g

* Flake8 fixes

* Remove str = str

* s/to_native/to_unicode/g

* Remove to_unicode = to_unicode

* Remove iteritems

* Remove itervalues

* Remove str import, flake8 fixes

* Remove urlparse compat code

* Remove with_metaclass

* Remove unused PY2 variable

* Remove getargspec_ish

* Remove to_bytes

* Remove compat module

* Remove Python 2 from Travis

* fixup! Remove urlparse compat code

* fixup! Remove urlparse compat code

* fixup! Remove compat module
2016-09-08 12:18:36 +02:00
Markus Unterwaditzer
23ea0e203f Refactor metadata None values
This fixes #358 again, in a different way.
2016-03-06 21:13:50 +01:00
Markus Unterwaditzer
d6787892e8 More Py2 hacks 2016-01-10 20:41:28 +01:00
Markus Unterwaditzer
7646222bc7 Work around massive string type inconsistency
See #315
2016-01-10 04:51:37 +01:00
Markus Unterwaditzer
129c9305f7 More safety checks for #315 2016-01-10 02:34:26 +01:00
Markus Unterwaditzer
a007828f87 Simple metadata interface 2015-07-07 16:20:04 +02:00
Markus Unterwaditzer
31de43b4a9 Remove collection_human 2015-07-06 16:22:33 +02:00
Markus Unterwaditzer
a90815f5df Improve errorhandling for enduser 2015-04-28 17:57:00 +02:00
Markus Unterwaditzer
e138af8d37 Allow storages to modify sync behavior 2015-04-09 15:19:51 +02:00
Markus Unterwaditzer
dec08780f3 Fix several bugs with collection creation in filesystem storage
See #179
2015-02-22 14:29:31 +01:00
Markus Unterwaditzer
bdc66633b3 Implement Storage.at_once() 2015-01-29 12:49:00 +01:00
Markus Unterwaditzer
5ce0d97f91 Remove copyright headers 2015-01-21 13:02:30 +01:00
Markus Unterwaditzer
e76fd29aec Unify collection creation 2015-01-01 22:01:23 +01:00
Markus Unterwaditzer
cc0b8ad028 join_collection => create_collection 2015-01-01 22:01:23 +01:00
Markus Unterwaditzer
9b442ebcf3 Enforce read-only attribute 2014-12-27 11:28:31 +01:00
Markus Unterwaditzer
06a701bc10 Handle collections correctly
Fix #132

Passing the collections parameter used to mean that the storage should
append its value to the URL or path. This was a leaky abstraction for
the reasons explained in #132.

The new behavior removes this meaning from this parameter. Vdirsyncer
now maintains a cache of discovered collections.
2014-12-15 21:57:56 +01:00
Markus Unterwaditzer
772f745832 get_multi now ignores duplicate input 2014-12-06 14:08:10 +01:00
Markus Unterwaditzer
c234bce656 "A from B" => "B/A" 2014-12-01 00:11:05 +01:00
Markus Unterwaditzer
1db680eb4d Internal API and doc improvements 2014-09-19 23:53:08 +02:00
Markus Unterwaditzer
1fff7efff5 Use name from config for representing storages 2014-08-18 00:53:05 +02:00
Markus Unterwaditzer
eb1431e5db Fix all known URL-quoting problems
- Fix #49 -- The old fix caused problems with other servers. The new
  behavior only decodes ``@`` characters.

- ``@`` is now not used when generating a new href, as some servers seem
  to have problems with it (http://sabre.io/dav/character-encoding/).
  This behavior is configurable via the ``unsafe_href_chars`` parameters
  for DAV storages, and is disabled in the testsuite for Radicale and
  ownCloud.

- Decoding of hrefs is also done twice for CarddavStorage.list because
  of owncloud/contacts#581. Vdirsyncer has behaved like that before, but
  not intentionally.

- Storages now don't share their ``_get_href`` methods anymore.
2014-08-06 16:43:23 +02:00
Markus Unterwaditzer
b5f42457bd Style fixes 2014-06-14 22:02:16 +02:00
Markus Unterwaditzer
42d69b1dbd Fix faulty logic again 2014-06-14 21:49:04 +02:00
Markus Unterwaditzer
5f27d25b3c Some internal documentation improvements. 2014-06-14 21:31:25 +02:00
Markus Unterwaditzer
5028d09f61 Add read_only parameter
Just skip any updates when the storage is read-only, write to status
anyway. The change will get reverted in the next sync.

Fix #54
2014-06-12 14:24:00 +02:00
Markus Unterwaditzer
13ecb42e60 Fix import 2014-06-11 23:10:15 +02:00
Markus Unterwaditzer
41848b2432 Move Item to utils 2014-06-11 23:10:14 +02:00
Markus Unterwaditzer
179d9bc393 Move 3k compat stuff to own module 2014-06-11 19:37:39 +02:00
Markus Unterwaditzer
55ad24db3d Add storage_name parameter on storages 2014-05-27 18:37:37 +02:00
Markus Unterwaditzer
c1eb55c241 Copyright and contributor stuff
Fix #60
2014-05-22 12:50:43 +02:00
Markus Unterwaditzer
8f5fdfb2d4 Hash items resilient against formatting 2014-05-18 21:42:47 +02:00
Markus Unterwaditzer
7e8fa89985 First version of SingleFileStorage 2014-05-18 21:42:46 +02:00
Markus Unterwaditzer
98a9748392 Ident is now a property of Item 2014-05-14 15:40:06 +02:00
Markus Unterwaditzer
cb29c2567f Allow uploading of items without UID 2014-05-14 14:48:50 +02:00
Markus Unterwaditzer
0f26517661 Don't assign empty UID 2014-05-14 14:23:20 +02:00
Markus Unterwaditzer
0f3ba10650 Remove UID checking from item 2014-05-14 14:12:59 +02:00