Compare commits
4 commits
0a1d9229b4
...
c4a0b038e8
Author | SHA1 | Date | |
---|---|---|---|
![]() |
c4a0b038e8 | ||
![]() |
6c94b13b12 | ||
![]() |
65bbc95ae2 | ||
![]() |
4f68a2f360 |
6 changed files with 33 additions and 7 deletions
|
@ -5,6 +5,14 @@ All notable changes to WuttaSync will be documented in this file.
|
||||||
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
||||||
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
|
## v0.2.1 (2025-06-29)
|
||||||
|
|
||||||
|
### Fix
|
||||||
|
|
||||||
|
- avoid empty keys for importer
|
||||||
|
- do not assign simple/supported fields in Importer constructor
|
||||||
|
- make `--input-path` optional for import/export commands
|
||||||
|
|
||||||
## v0.2.0 (2024-12-07)
|
## v0.2.0 (2024-12-07)
|
||||||
|
|
||||||
### Feat
|
### Feat
|
||||||
|
|
|
@ -6,7 +6,7 @@ build-backend = "hatchling.build"
|
||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "WuttaSync"
|
name = "WuttaSync"
|
||||||
version = "0.2.0"
|
version = "0.2.1"
|
||||||
description = "Wutta Framework for data import/export and real-time sync"
|
description = "Wutta Framework for data import/export and real-time sync"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
authors = [{name = "Lance Edgar", email = "lance@wuttaproject.org"}]
|
authors = [{name = "Lance Edgar", email = "lance@wuttaproject.org"}]
|
||||||
|
|
|
@ -200,8 +200,6 @@ class Importer:
|
||||||
|
|
||||||
self.__dict__.update(kwargs)
|
self.__dict__.update(kwargs)
|
||||||
|
|
||||||
self.simple_fields = self.get_simple_fields()
|
|
||||||
self.supported_fields = self.get_supported_fields()
|
|
||||||
self.fields = self.get_fields()
|
self.fields = self.get_fields()
|
||||||
|
|
||||||
# fields could be comma-delimited string from cli param
|
# fields could be comma-delimited string from cli param
|
||||||
|
|
|
@ -232,7 +232,7 @@ class ImportHandler(GenericHandler):
|
||||||
"""
|
"""
|
||||||
Run import/export operations for the specified models.
|
Run import/export operations for the specified models.
|
||||||
|
|
||||||
:param \*keys: One or more importer/exporter (model) keys, as
|
:param \\*keys: One or more importer/exporter (model) keys, as
|
||||||
defined by the handler.
|
defined by the handler.
|
||||||
|
|
||||||
Each key specified must be present in :attr:`importers` and
|
Each key specified must be present in :attr:`importers` and
|
||||||
|
@ -460,6 +460,9 @@ class ImportHandler(GenericHandler):
|
||||||
Returns an importer/exporter instance corresponding to the
|
Returns an importer/exporter instance corresponding to the
|
||||||
given key.
|
given key.
|
||||||
|
|
||||||
|
Note that this will always create a *new* instance; they are
|
||||||
|
not cached.
|
||||||
|
|
||||||
The key will be the "model name" mapped to a particular
|
The key will be the "model name" mapped to a particular
|
||||||
importer/exporter class and thus must be present in
|
importer/exporter class and thus must be present in
|
||||||
:attr:`importers`.
|
:attr:`importers`.
|
||||||
|
@ -472,6 +475,8 @@ class ImportHandler(GenericHandler):
|
||||||
|
|
||||||
:param key: Model key for desired importer/exporter.
|
:param key: Model key for desired importer/exporter.
|
||||||
|
|
||||||
|
:param \\**kwargs: Extra/override kwargs for the importer.
|
||||||
|
|
||||||
:returns: Instance of (subclass of)
|
:returns: Instance of (subclass of)
|
||||||
:class:`~wuttasync.importing.base.Importer`.
|
:class:`~wuttasync.importing.base.Importer`.
|
||||||
"""
|
"""
|
||||||
|
@ -481,6 +486,11 @@ class ImportHandler(GenericHandler):
|
||||||
|
|
||||||
kwargs = self.get_importer_kwargs(key, **kwargs)
|
kwargs = self.get_importer_kwargs(key, **kwargs)
|
||||||
kwargs['handler'] = self
|
kwargs['handler'] = self
|
||||||
|
|
||||||
|
# nb. default logic should (normally) determine keys
|
||||||
|
if 'keys' in kwargs and not kwargs['keys']:
|
||||||
|
del kwargs['keys']
|
||||||
|
|
||||||
factory = self.importers[key]
|
factory = self.importers[key]
|
||||||
return factory(self.config, **kwargs)
|
return factory(self.config, **kwargs)
|
||||||
|
|
||||||
|
@ -493,7 +503,7 @@ class ImportHandler(GenericHandler):
|
||||||
:param key: Model key for the desired importer/exporter,
|
:param key: Model key for the desired importer/exporter,
|
||||||
e.g. ``'Widget'``
|
e.g. ``'Widget'``
|
||||||
|
|
||||||
:param \**kwargs: Any kwargs we have so collected far.
|
:param \\**kwargs: Any kwargs we have so collected far.
|
||||||
|
|
||||||
:returns: Final kwargs dict for new importer/exporter.
|
:returns: Final kwargs dict for new importer/exporter.
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -24,8 +24,6 @@ class TestImporter(DataTestCase):
|
||||||
imp = self.make_importer(model_class=model.Setting)
|
imp = self.make_importer(model_class=model.Setting)
|
||||||
|
|
||||||
# fields
|
# fields
|
||||||
self.assertEqual(imp.supported_fields, ['name', 'value'])
|
|
||||||
self.assertEqual(imp.simple_fields, ['name', 'value'])
|
|
||||||
self.assertEqual(imp.fields, ['name', 'value'])
|
self.assertEqual(imp.fields, ['name', 'value'])
|
||||||
|
|
||||||
# orientation etc.
|
# orientation etc.
|
||||||
|
|
|
@ -169,6 +169,18 @@ class TestImportHandler(DataTestCase):
|
||||||
importer = handler.get_importer('Setting', model_class=model.Setting)
|
importer = handler.get_importer('Setting', model_class=model.Setting)
|
||||||
self.assertIsInstance(importer, Importer)
|
self.assertIsInstance(importer, Importer)
|
||||||
|
|
||||||
|
# specifying empty keys
|
||||||
|
handler.importers['Setting'] = Importer
|
||||||
|
importer = handler.get_importer('Setting', model_class=model.Setting,
|
||||||
|
keys=None)
|
||||||
|
self.assertIsInstance(importer, Importer)
|
||||||
|
importer = handler.get_importer('Setting', model_class=model.Setting,
|
||||||
|
keys='')
|
||||||
|
self.assertIsInstance(importer, Importer)
|
||||||
|
importer = handler.get_importer('Setting', model_class=model.Setting,
|
||||||
|
keys=[])
|
||||||
|
self.assertIsInstance(importer, Importer)
|
||||||
|
|
||||||
# key not found
|
# key not found
|
||||||
self.assertRaises(KeyError, handler.get_importer, 'BunchOfNonsense', model_class=model.Setting)
|
self.assertRaises(KeyError, handler.get_importer, 'BunchOfNonsense', model_class=model.Setting)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue