diff --git a/CHANGELOG.md b/CHANGELOG.md index 05f5ef3..4b1fd1a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/pyproject.toml b/pyproject.toml index a198b0e..fc09dc9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -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"}] diff --git a/src/wuttasync/importing/base.py b/src/wuttasync/importing/base.py index 59017d7..6e06cfb 100644 --- a/src/wuttasync/importing/base.py +++ b/src/wuttasync/importing/base.py @@ -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 diff --git a/src/wuttasync/importing/handlers.py b/src/wuttasync/importing/handlers.py index ac3f89f..03a6179 100644 --- a/src/wuttasync/importing/handlers.py +++ b/src/wuttasync/importing/handlers.py @@ -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. """ diff --git a/tests/importing/test_base.py b/tests/importing/test_base.py index ff2ca6e..feab115 100644 --- a/tests/importing/test_base.py +++ b/tests/importing/test_base.py @@ -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. diff --git a/tests/importing/test_handlers.py b/tests/importing/test_handlers.py index dac37d6..3c2fe49 100644 --- a/tests/importing/test_handlers.py +++ b/tests/importing/test_handlers.py @@ -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)