Compare commits

...

4 commits

Author SHA1 Message Date
Lance Edgar
c4a0b038e8 bump: version 0.2.0 → 0.2.1 2025-06-29 11:25:14 -05:00
Lance Edgar
6c94b13b12 fix: avoid empty keys for importer
when keys come in from command line params, the arg parser may have an
empty value.  which we need to avoid here
2025-06-29 11:24:10 -05:00
Lance Edgar
65bbc95ae2 fix: do not assign simple/supported fields in Importer constructor
subclass may define those and we do not want to overwrite; in some
cases doing so would cause error (if subclass defines a property)
2025-06-29 11:19:10 -05:00
Lance Edgar
4f68a2f360 docs: fix some warnings etc. 2025-06-29 11:18:13 -05:00
6 changed files with 33 additions and 7 deletions

View file

@ -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/)
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)
### Feat

View file

@ -6,7 +6,7 @@ build-backend = "hatchling.build"
[project]
name = "WuttaSync"
version = "0.2.0"
version = "0.2.1"
description = "Wutta Framework for data import/export and real-time sync"
readme = "README.md"
authors = [{name = "Lance Edgar", email = "lance@wuttaproject.org"}]

View file

@ -200,8 +200,6 @@ class Importer:
self.__dict__.update(kwargs)
self.simple_fields = self.get_simple_fields()
self.supported_fields = self.get_supported_fields()
self.fields = self.get_fields()
# fields could be comma-delimited string from cli param

View file

@ -232,7 +232,7 @@ class ImportHandler(GenericHandler):
"""
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.
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
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
importer/exporter class and thus must be present in
:attr:`importers`.
@ -472,6 +475,8 @@ class ImportHandler(GenericHandler):
:param key: Model key for desired importer/exporter.
:param \\**kwargs: Extra/override kwargs for the importer.
:returns: Instance of (subclass of)
:class:`~wuttasync.importing.base.Importer`.
"""
@ -481,6 +486,11 @@ class ImportHandler(GenericHandler):
kwargs = self.get_importer_kwargs(key, **kwargs)
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]
return factory(self.config, **kwargs)
@ -493,7 +503,7 @@ class ImportHandler(GenericHandler):
:param key: Model key for the desired importer/exporter,
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.
"""

View file

@ -24,8 +24,6 @@ class TestImporter(DataTestCase):
imp = self.make_importer(model_class=model.Setting)
# fields
self.assertEqual(imp.supported_fields, ['name', 'value'])
self.assertEqual(imp.simple_fields, ['name', 'value'])
self.assertEqual(imp.fields, ['name', 'value'])
# orientation etc.

View file

@ -169,6 +169,18 @@ class TestImportHandler(DataTestCase):
importer = handler.get_importer('Setting', model_class=model.Setting)
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
self.assertRaises(KeyError, handler.get_importer, 'BunchOfNonsense', model_class=model.Setting)