fix: format all code with black
and from now on should not deviate from that...
This commit is contained in:
		
							parent
							
								
									45dabce956
								
							
						
					
					
						commit
						33ac0e008e
					
				
					 17 changed files with 730 additions and 576 deletions
				
			
		|  | @ -1,4 +1,4 @@ | |||
| #-*- coding: utf-8; -*- | ||||
| # -*- coding: utf-8; -*- | ||||
| 
 | ||||
| from unittest.mock import patch | ||||
| 
 | ||||
|  | @ -14,7 +14,7 @@ class TestImporter(DataTestCase): | |||
|         self.handler = ImportHandler(self.config) | ||||
| 
 | ||||
|     def make_importer(self, **kwargs): | ||||
|         kwargs.setdefault('handler', self.handler) | ||||
|         kwargs.setdefault("handler", self.handler) | ||||
|         return mod.Importer(self.config, **kwargs) | ||||
| 
 | ||||
|     def test_constructor(self): | ||||
|  | @ -24,11 +24,11 @@ class TestImporter(DataTestCase): | |||
|         imp = self.make_importer(model_class=model.Setting) | ||||
| 
 | ||||
|         # fields | ||||
|         self.assertEqual(imp.fields, ['name', 'value']) | ||||
|         self.assertEqual(imp.fields, ["name", "value"]) | ||||
| 
 | ||||
|         # orientation etc. | ||||
|         self.assertEqual(imp.orientation, Orientation.IMPORT) | ||||
|         self.assertEqual(imp.actioning, 'importing') | ||||
|         self.assertEqual(imp.actioning, "importing") | ||||
|         self.assertTrue(imp.create) | ||||
|         self.assertTrue(imp.update) | ||||
|         self.assertTrue(imp.delete) | ||||
|  | @ -38,106 +38,111 @@ class TestImporter(DataTestCase): | |||
|         model = self.app.model | ||||
| 
 | ||||
|         # basic importer | ||||
|         imp = self.make_importer(model_class=model.Setting, fields='name') | ||||
|         self.assertEqual(imp.fields, ['name']) | ||||
|         imp = self.make_importer(model_class=model.Setting, fields="name") | ||||
|         self.assertEqual(imp.fields, ["name"]) | ||||
| 
 | ||||
|     def test_constructor_excluded_fields(self): | ||||
|         model = self.app.model | ||||
| 
 | ||||
|         # basic importer | ||||
|         imp = self.make_importer(model_class=model.Setting, excluded_fields='value') | ||||
|         self.assertEqual(imp.fields, ['name']) | ||||
|         imp = self.make_importer(model_class=model.Setting, excluded_fields="value") | ||||
|         self.assertEqual(imp.fields, ["name"]) | ||||
| 
 | ||||
|     def test_get_model_title(self): | ||||
|         model = self.app.model | ||||
|         imp = self.make_importer(model_class=model.Setting) | ||||
|         self.assertEqual(imp.get_model_title(), 'Setting') | ||||
|         self.assertEqual(imp.get_model_title(), "Setting") | ||||
|         imp.model_title = "SeTtInG" | ||||
|         self.assertEqual(imp.get_model_title(), 'SeTtInG') | ||||
|         self.assertEqual(imp.get_model_title(), "SeTtInG") | ||||
| 
 | ||||
|     def test_get_simple_fields(self): | ||||
|         model = self.app.model | ||||
|         imp = self.make_importer(model_class=model.Setting) | ||||
|         self.assertEqual(imp.get_simple_fields(), ['name', 'value']) | ||||
|         imp.simple_fields = ['name'] | ||||
|         self.assertEqual(imp.get_simple_fields(), ['name']) | ||||
|         self.assertEqual(imp.get_simple_fields(), ["name", "value"]) | ||||
|         imp.simple_fields = ["name"] | ||||
|         self.assertEqual(imp.get_simple_fields(), ["name"]) | ||||
| 
 | ||||
|     def test_get_supported_fields(self): | ||||
|         model = self.app.model | ||||
|         imp = self.make_importer(model_class=model.Setting) | ||||
|         self.assertEqual(imp.get_supported_fields(), ['name', 'value']) | ||||
|         imp.supported_fields = ['name'] | ||||
|         self.assertEqual(imp.get_supported_fields(), ['name']) | ||||
|         self.assertEqual(imp.get_supported_fields(), ["name", "value"]) | ||||
|         imp.supported_fields = ["name"] | ||||
|         self.assertEqual(imp.get_supported_fields(), ["name"]) | ||||
| 
 | ||||
|     def test_get_fields(self): | ||||
|         model = self.app.model | ||||
|         imp = self.make_importer(model_class=model.Setting) | ||||
|         self.assertEqual(imp.get_fields(), ['name', 'value']) | ||||
|         imp.fields = ['name'] | ||||
|         self.assertEqual(imp.get_fields(), ['name']) | ||||
|         self.assertEqual(imp.get_fields(), ["name", "value"]) | ||||
|         imp.fields = ["name"] | ||||
|         self.assertEqual(imp.get_fields(), ["name"]) | ||||
| 
 | ||||
|     def test_get_keys(self): | ||||
|         model = self.app.model | ||||
|         imp = self.make_importer(model_class=model.Setting) | ||||
|         self.assertEqual(imp.get_keys(), ['name']) | ||||
|         with patch.multiple(imp, create=True, key='value'): | ||||
|             self.assertEqual(imp.get_keys(), ['value']) | ||||
|         with patch.multiple(imp, create=True, keys=['foo', 'bar']): | ||||
|             self.assertEqual(imp.get_keys(), ['foo', 'bar']) | ||||
|         self.assertEqual(imp.get_keys(), ["name"]) | ||||
|         with patch.multiple(imp, create=True, key="value"): | ||||
|             self.assertEqual(imp.get_keys(), ["value"]) | ||||
|         with patch.multiple(imp, create=True, keys=["foo", "bar"]): | ||||
|             self.assertEqual(imp.get_keys(), ["foo", "bar"]) | ||||
| 
 | ||||
|     def test_process_data(self): | ||||
|         model = self.app.model | ||||
|         imp = self.make_importer(model_class=model.Setting, caches_target=True, | ||||
|                                  delete=True) | ||||
|         imp = self.make_importer( | ||||
|             model_class=model.Setting, caches_target=True, delete=True | ||||
|         ) | ||||
| 
 | ||||
|         def make_cache(): | ||||
|             setting1 = model.Setting(name='foo1', value='bar1') | ||||
|             setting2 = model.Setting(name='foo2', value='bar2') | ||||
|             setting3 = model.Setting(name='foo3', value='bar3') | ||||
|             setting1 = model.Setting(name="foo1", value="bar1") | ||||
|             setting2 = model.Setting(name="foo2", value="bar2") | ||||
|             setting3 = model.Setting(name="foo3", value="bar3") | ||||
|             cache = { | ||||
|                 ('foo1',): { | ||||
|                     'object': setting1, | ||||
|                     'data': {'name': 'foo1', 'value': 'bar1'}, | ||||
|                 ("foo1",): { | ||||
|                     "object": setting1, | ||||
|                     "data": {"name": "foo1", "value": "bar1"}, | ||||
|                 }, | ||||
|                 ('foo2',): { | ||||
|                     'object': setting2, | ||||
|                     'data': {'name': 'foo2', 'value': 'bar2'}, | ||||
|                 ("foo2",): { | ||||
|                     "object": setting2, | ||||
|                     "data": {"name": "foo2", "value": "bar2"}, | ||||
|                 }, | ||||
|                 ('foo3',): { | ||||
|                     'object': setting3, | ||||
|                     'data': {'name': 'foo3', 'value': 'bar3'}, | ||||
|                 ("foo3",): { | ||||
|                     "object": setting3, | ||||
|                     "data": {"name": "foo3", "value": "bar3"}, | ||||
|                 }, | ||||
|             } | ||||
|             return cache | ||||
| 
 | ||||
|         # nb. delete always succeeds | ||||
|         with patch.object(imp, 'delete_target_object', return_value=True): | ||||
|         with patch.object(imp, "delete_target_object", return_value=True): | ||||
| 
 | ||||
|             # create + update + delete all as needed | ||||
|             with patch.object(imp, 'get_target_cache', return_value=make_cache()): | ||||
|                 created, updated, deleted = imp.process_data([ | ||||
|                     {'name': 'foo3', 'value': 'BAR3'}, | ||||
|                     {'name': 'foo4', 'value': 'BAR4'}, | ||||
|                     {'name': 'foo5', 'value': 'BAR5'}, | ||||
|                 ]) | ||||
|             with patch.object(imp, "get_target_cache", return_value=make_cache()): | ||||
|                 created, updated, deleted = imp.process_data( | ||||
|                     [ | ||||
|                         {"name": "foo3", "value": "BAR3"}, | ||||
|                         {"name": "foo4", "value": "BAR4"}, | ||||
|                         {"name": "foo5", "value": "BAR5"}, | ||||
|                     ] | ||||
|                 ) | ||||
|                 self.assertEqual(len(created), 2) | ||||
|                 self.assertEqual(len(updated), 1) | ||||
|                 self.assertEqual(len(deleted), 2) | ||||
| 
 | ||||
|             # same but with --max-total so delete gets skipped | ||||
|             with patch.object(imp, 'get_target_cache', return_value=make_cache()): | ||||
|                 with patch.object(imp, 'max_total', new=3): | ||||
|                     created, updated, deleted = imp.process_data([ | ||||
|                         {'name': 'foo3', 'value': 'BAR3'}, | ||||
|                         {'name': 'foo4', 'value': 'BAR4'}, | ||||
|                         {'name': 'foo5', 'value': 'BAR5'}, | ||||
|                     ]) | ||||
|             with patch.object(imp, "get_target_cache", return_value=make_cache()): | ||||
|                 with patch.object(imp, "max_total", new=3): | ||||
|                     created, updated, deleted = imp.process_data( | ||||
|                         [ | ||||
|                             {"name": "foo3", "value": "BAR3"}, | ||||
|                             {"name": "foo4", "value": "BAR4"}, | ||||
|                             {"name": "foo5", "value": "BAR5"}, | ||||
|                         ] | ||||
|                     ) | ||||
|                     self.assertEqual(len(created), 2) | ||||
|                     self.assertEqual(len(updated), 1) | ||||
|                     self.assertEqual(len(deleted), 0) | ||||
| 
 | ||||
|             # delete all if source data empty | ||||
|             with patch.object(imp, 'get_target_cache', return_value=make_cache()): | ||||
|             with patch.object(imp, "get_target_cache", return_value=make_cache()): | ||||
|                 created, updated, deleted = imp.process_data() | ||||
|                 self.assertEqual(len(created), 0) | ||||
|                 self.assertEqual(len(updated), 0) | ||||
|  | @ -148,120 +153,140 @@ class TestImporter(DataTestCase): | |||
|         imp = self.make_importer(model_class=model.Setting, caches_target=True) | ||||
| 
 | ||||
|         def make_cache(): | ||||
|             setting1 = model.Setting(name='foo1', value='bar1') | ||||
|             setting2 = model.Setting(name='foo2', value='bar2') | ||||
|             setting1 = model.Setting(name="foo1", value="bar1") | ||||
|             setting2 = model.Setting(name="foo2", value="bar2") | ||||
|             cache = { | ||||
|                 ('foo1',): { | ||||
|                     'object': setting1, | ||||
|                     'data': {'name': 'foo1', 'value': 'bar1'}, | ||||
|                 ("foo1",): { | ||||
|                     "object": setting1, | ||||
|                     "data": {"name": "foo1", "value": "bar1"}, | ||||
|                 }, | ||||
|                 ('foo2',): { | ||||
|                     'object': setting2, | ||||
|                     'data': {'name': 'foo2', 'value': 'bar2'}, | ||||
|                 ("foo2",): { | ||||
|                     "object": setting2, | ||||
|                     "data": {"name": "foo2", "value": "bar2"}, | ||||
|                 }, | ||||
|             } | ||||
|             return cache | ||||
| 
 | ||||
|         # change nothing if data matches | ||||
|         with patch.multiple(imp, create=True, cached_target=make_cache()): | ||||
|             created, updated = imp.do_create_update([ | ||||
|                 {'name': 'foo1', 'value': 'bar1'}, | ||||
|                 {'name': 'foo2', 'value': 'bar2'}, | ||||
|             ]) | ||||
|             created, updated = imp.do_create_update( | ||||
|                 [ | ||||
|                     {"name": "foo1", "value": "bar1"}, | ||||
|                     {"name": "foo2", "value": "bar2"}, | ||||
|                 ] | ||||
|             ) | ||||
|             self.assertEqual(len(created), 0) | ||||
|             self.assertEqual(len(updated), 0) | ||||
| 
 | ||||
|         # update all as needed | ||||
|         with patch.multiple(imp, create=True, cached_target=make_cache()): | ||||
|             created, updated = imp.do_create_update([ | ||||
|                 {'name': 'foo1', 'value': 'BAR1'}, | ||||
|                 {'name': 'foo2', 'value': 'BAR2'}, | ||||
|             ]) | ||||
|             created, updated = imp.do_create_update( | ||||
|                 [ | ||||
|                     {"name": "foo1", "value": "BAR1"}, | ||||
|                     {"name": "foo2", "value": "BAR2"}, | ||||
|                 ] | ||||
|             ) | ||||
|             self.assertEqual(len(created), 0) | ||||
|             self.assertEqual(len(updated), 2) | ||||
| 
 | ||||
|         # update all, with --max-update | ||||
|         with patch.multiple(imp, create=True, cached_target=make_cache(), max_update=1): | ||||
|             created, updated = imp.do_create_update([ | ||||
|                 {'name': 'foo1', 'value': 'BAR1'}, | ||||
|                 {'name': 'foo2', 'value': 'BAR2'}, | ||||
|             ]) | ||||
|             created, updated = imp.do_create_update( | ||||
|                 [ | ||||
|                     {"name": "foo1", "value": "BAR1"}, | ||||
|                     {"name": "foo2", "value": "BAR2"}, | ||||
|                 ] | ||||
|             ) | ||||
|             self.assertEqual(len(created), 0) | ||||
|             self.assertEqual(len(updated), 1) | ||||
| 
 | ||||
|         # update all, with --max-total | ||||
|         with patch.multiple(imp, create=True, cached_target=make_cache(), max_total=1): | ||||
|             created, updated = imp.do_create_update([ | ||||
|                 {'name': 'foo1', 'value': 'BAR1'}, | ||||
|                 {'name': 'foo2', 'value': 'BAR2'}, | ||||
|             ]) | ||||
|             created, updated = imp.do_create_update( | ||||
|                 [ | ||||
|                     {"name": "foo1", "value": "BAR1"}, | ||||
|                     {"name": "foo2", "value": "BAR2"}, | ||||
|                 ] | ||||
|             ) | ||||
|             self.assertEqual(len(created), 0) | ||||
|             self.assertEqual(len(updated), 1) | ||||
| 
 | ||||
|         # create all as needed | ||||
|         with patch.multiple(imp, create=True, cached_target=make_cache()): | ||||
|             created, updated = imp.do_create_update([ | ||||
|                 {'name': 'foo1', 'value': 'bar1'}, | ||||
|                 {'name': 'foo2', 'value': 'bar2'}, | ||||
|                 {'name': 'foo3', 'value': 'BAR3'}, | ||||
|                 {'name': 'foo4', 'value': 'BAR4'}, | ||||
|             ]) | ||||
|             created, updated = imp.do_create_update( | ||||
|                 [ | ||||
|                     {"name": "foo1", "value": "bar1"}, | ||||
|                     {"name": "foo2", "value": "bar2"}, | ||||
|                     {"name": "foo3", "value": "BAR3"}, | ||||
|                     {"name": "foo4", "value": "BAR4"}, | ||||
|                 ] | ||||
|             ) | ||||
|             self.assertEqual(len(created), 2) | ||||
|             self.assertEqual(len(updated), 0) | ||||
| 
 | ||||
|         # what happens when create gets skipped | ||||
|         with patch.multiple(imp, create=True, cached_target=make_cache()): | ||||
|             with patch.object(imp, 'create_target_object', return_value=None): | ||||
|                 created, updated = imp.do_create_update([ | ||||
|                     {'name': 'foo1', 'value': 'bar1'}, | ||||
|                     {'name': 'foo2', 'value': 'bar2'}, | ||||
|                     {'name': 'foo3', 'value': 'BAR3'}, | ||||
|                     {'name': 'foo4', 'value': 'BAR4'}, | ||||
|                 ]) | ||||
|             with patch.object(imp, "create_target_object", return_value=None): | ||||
|                 created, updated = imp.do_create_update( | ||||
|                     [ | ||||
|                         {"name": "foo1", "value": "bar1"}, | ||||
|                         {"name": "foo2", "value": "bar2"}, | ||||
|                         {"name": "foo3", "value": "BAR3"}, | ||||
|                         {"name": "foo4", "value": "BAR4"}, | ||||
|                     ] | ||||
|                 ) | ||||
|                 self.assertEqual(len(created), 0) | ||||
|                 self.assertEqual(len(updated), 0) | ||||
| 
 | ||||
|         # create all, with --max-create | ||||
|         with patch.multiple(imp, create=True, cached_target=make_cache(), max_create=1): | ||||
|             created, updated = imp.do_create_update([ | ||||
|                 {'name': 'foo1', 'value': 'bar1'}, | ||||
|                 {'name': 'foo2', 'value': 'bar2'}, | ||||
|                 {'name': 'foo3', 'value': 'BAR3'}, | ||||
|                 {'name': 'foo4', 'value': 'BAR4'}, | ||||
|             ]) | ||||
|             created, updated = imp.do_create_update( | ||||
|                 [ | ||||
|                     {"name": "foo1", "value": "bar1"}, | ||||
|                     {"name": "foo2", "value": "bar2"}, | ||||
|                     {"name": "foo3", "value": "BAR3"}, | ||||
|                     {"name": "foo4", "value": "BAR4"}, | ||||
|                 ] | ||||
|             ) | ||||
|             self.assertEqual(len(created), 1) | ||||
|             self.assertEqual(len(updated), 0) | ||||
| 
 | ||||
|         # create all, with --max-total | ||||
|         with patch.multiple(imp, create=True, cached_target=make_cache(), max_total=1): | ||||
|             created, updated = imp.do_create_update([ | ||||
|                 {'name': 'foo1', 'value': 'bar1'}, | ||||
|                 {'name': 'foo2', 'value': 'bar2'}, | ||||
|                 {'name': 'foo3', 'value': 'BAR3'}, | ||||
|                 {'name': 'foo4', 'value': 'BAR4'}, | ||||
|             ]) | ||||
|             created, updated = imp.do_create_update( | ||||
|                 [ | ||||
|                     {"name": "foo1", "value": "bar1"}, | ||||
|                     {"name": "foo2", "value": "bar2"}, | ||||
|                     {"name": "foo3", "value": "BAR3"}, | ||||
|                     {"name": "foo4", "value": "BAR4"}, | ||||
|                 ] | ||||
|             ) | ||||
|             self.assertEqual(len(created), 1) | ||||
|             self.assertEqual(len(updated), 0) | ||||
| 
 | ||||
|         # create + update all as needed | ||||
|         with patch.multiple(imp, create=True, cached_target=make_cache()): | ||||
|             created, updated = imp.do_create_update([ | ||||
|                 {'name': 'foo1', 'value': 'BAR1'}, | ||||
|                 {'name': 'foo2', 'value': 'BAR2'}, | ||||
|                 {'name': 'foo3', 'value': 'BAR3'}, | ||||
|                 {'name': 'foo4', 'value': 'BAR4'}, | ||||
|             ]) | ||||
|             created, updated = imp.do_create_update( | ||||
|                 [ | ||||
|                     {"name": "foo1", "value": "BAR1"}, | ||||
|                     {"name": "foo2", "value": "BAR2"}, | ||||
|                     {"name": "foo3", "value": "BAR3"}, | ||||
|                     {"name": "foo4", "value": "BAR4"}, | ||||
|                 ] | ||||
|             ) | ||||
|             self.assertEqual(len(created), 2) | ||||
|             self.assertEqual(len(updated), 2) | ||||
| 
 | ||||
|         # create + update all, with --max-total | ||||
|         with patch.multiple(imp, create=True, cached_target=make_cache(), max_total=1): | ||||
|             created, updated = imp.do_create_update([ | ||||
|                 {'name': 'foo1', 'value': 'BAR1'}, | ||||
|                 {'name': 'foo2', 'value': 'BAR2'}, | ||||
|                 {'name': 'foo3', 'value': 'BAR3'}, | ||||
|                 {'name': 'foo4', 'value': 'BAR4'}, | ||||
|             ]) | ||||
|             created, updated = imp.do_create_update( | ||||
|                 [ | ||||
|                     {"name": "foo1", "value": "BAR1"}, | ||||
|                     {"name": "foo2", "value": "BAR2"}, | ||||
|                     {"name": "foo3", "value": "BAR3"}, | ||||
|                     {"name": "foo4", "value": "BAR4"}, | ||||
|                 ] | ||||
|             ) | ||||
|             # nb. foo1 is updated first | ||||
|             self.assertEqual(len(created), 0) | ||||
|             self.assertEqual(len(updated), 1) | ||||
|  | @ -270,21 +295,21 @@ class TestImporter(DataTestCase): | |||
|         model = self.app.model | ||||
| 
 | ||||
|         # this requires a mock target cache | ||||
|         setting1 = model.Setting(name='foo1', value='bar1') | ||||
|         setting2 = model.Setting(name='foo2', value='bar2') | ||||
|         setting1 = model.Setting(name="foo1", value="bar1") | ||||
|         setting2 = model.Setting(name="foo2", value="bar2") | ||||
|         imp = self.make_importer(model_class=model.Setting, caches_target=True) | ||||
|         cache = { | ||||
|             ('foo1',): { | ||||
|                 'object': setting1, | ||||
|                 'data': {'name': 'foo1', 'value': 'bar1'}, | ||||
|             ("foo1",): { | ||||
|                 "object": setting1, | ||||
|                 "data": {"name": "foo1", "value": "bar1"}, | ||||
|             }, | ||||
|             ('foo2',): { | ||||
|                 'object': setting2, | ||||
|                 'data': {'name': 'foo2', 'value': 'bar2'}, | ||||
|             ("foo2",): { | ||||
|                 "object": setting2, | ||||
|                 "data": {"name": "foo2", "value": "bar2"}, | ||||
|             }, | ||||
|         } | ||||
| 
 | ||||
|         with patch.object(imp, 'delete_target_object') as delete_target_object: | ||||
|         with patch.object(imp, "delete_target_object") as delete_target_object: | ||||
| 
 | ||||
|             # delete nothing if source has same keys | ||||
|             with patch.multiple(imp, create=True, cached_target=dict(cache)): | ||||
|  | @ -305,7 +330,7 @@ class TestImporter(DataTestCase): | |||
|             delete_target_object.reset_mock() | ||||
|             with patch.multiple(imp, create=True, cached_target=dict(cache)): | ||||
|                 source_keys = set() | ||||
|                 with patch.object(imp, 'max_delete', new=1): | ||||
|                 with patch.object(imp, "max_delete", new=1): | ||||
|                     result = imp.do_delete(source_keys) | ||||
|                     self.assertEqual(delete_target_object.call_count, 1) | ||||
|                     self.assertEqual(len(result), 1) | ||||
|  | @ -314,7 +339,7 @@ class TestImporter(DataTestCase): | |||
|             delete_target_object.reset_mock() | ||||
|             with patch.multiple(imp, create=True, cached_target=dict(cache)): | ||||
|                 source_keys = set() | ||||
|                 with patch.object(imp, 'max_total', new=1): | ||||
|                 with patch.object(imp, "max_total", new=1): | ||||
|                     result = imp.do_delete(source_keys) | ||||
|                     self.assertEqual(delete_target_object.call_count, 1) | ||||
|                     self.assertEqual(len(result), 1) | ||||
|  | @ -322,25 +347,25 @@ class TestImporter(DataTestCase): | |||
|     def test_get_record_key(self): | ||||
|         model = self.app.model | ||||
|         imp = self.make_importer(model_class=model.Setting) | ||||
|         record = {'name': 'foo', 'value': 'bar'} | ||||
|         self.assertEqual(imp.get_record_key(record), ('foo',)) | ||||
|         imp.key = ('name', 'value') | ||||
|         self.assertEqual(imp.get_record_key(record), ('foo', 'bar')) | ||||
|         record = {"name": "foo", "value": "bar"} | ||||
|         self.assertEqual(imp.get_record_key(record), ("foo",)) | ||||
|         imp.key = ("name", "value") | ||||
|         self.assertEqual(imp.get_record_key(record), ("foo", "bar")) | ||||
| 
 | ||||
|     def test_data_diffs(self): | ||||
|         model = self.app.model | ||||
|         imp = self.make_importer(model_class=model.Setting) | ||||
| 
 | ||||
|         # 2 identical records | ||||
|         rec1 = {'name': 'foo', 'value': 'bar'} | ||||
|         rec2 = {'name': 'foo', 'value': 'bar'} | ||||
|         rec1 = {"name": "foo", "value": "bar"} | ||||
|         rec2 = {"name": "foo", "value": "bar"} | ||||
|         result = imp.data_diffs(rec1, rec2) | ||||
|         self.assertEqual(result, []) | ||||
| 
 | ||||
|         # now they're different | ||||
|         rec2['value'] = 'baz' | ||||
|         rec2["value"] = "baz" | ||||
|         result = imp.data_diffs(rec1, rec2) | ||||
|         self.assertEqual(result, ['value']) | ||||
|         self.assertEqual(result, ["value"]) | ||||
| 
 | ||||
|     def test_normalize_source_data(self): | ||||
|         model = self.app.model | ||||
|  | @ -351,7 +376,7 @@ class TestImporter(DataTestCase): | |||
|         self.assertEqual(data, []) | ||||
| 
 | ||||
|         # now with 1 record | ||||
|         setting = model.Setting(name='foo', value='bar') | ||||
|         setting = model.Setting(name="foo", value="bar") | ||||
|         data = imp.normalize_source_data(source_objects=[setting]) | ||||
|         self.assertEqual(len(data), 1) | ||||
|         # nb. default normalizer returns object as-is | ||||
|  | @ -361,17 +386,17 @@ class TestImporter(DataTestCase): | |||
|         model = self.app.model | ||||
|         imp = self.make_importer(model_class=model.Setting) | ||||
| 
 | ||||
|         setting1 = model.Setting(name='foo', value='bar1') | ||||
|         setting2 = model.Setting(name='foo', value='bar2') | ||||
|         setting1 = model.Setting(name="foo", value="bar1") | ||||
|         setting2 = model.Setting(name="foo", value="bar2") | ||||
| 
 | ||||
|         result = imp.get_unique_data([setting2, setting1]) | ||||
|         self.assertIsInstance(result, tuple) | ||||
|         self.assertEqual(len(result), 2) | ||||
|         self.assertIsInstance(result[0], list) | ||||
|         self.assertEqual(len(result[0]), 1) | ||||
|         self.assertIs(result[0][0], setting2) # nb. not setting1 | ||||
|         self.assertIs(result[0][0], setting2)  # nb. not setting1 | ||||
|         self.assertIsInstance(result[1], set) | ||||
|         self.assertEqual(result[1], {('foo',)}) | ||||
|         self.assertEqual(result[1], {("foo",)}) | ||||
| 
 | ||||
|     def test_get_source_objects(self): | ||||
|         model = self.app.model | ||||
|  | @ -397,7 +422,7 @@ class TestImporter(DataTestCase): | |||
|         model = self.app.model | ||||
|         imp = self.make_importer(model_class=model.Setting) | ||||
| 
 | ||||
|         with patch.object(imp, 'get_target_objects') as get_target_objects: | ||||
|         with patch.object(imp, "get_target_objects") as get_target_objects: | ||||
|             get_target_objects.return_value = [] | ||||
| 
 | ||||
|             # empty cache | ||||
|  | @ -405,16 +430,16 @@ class TestImporter(DataTestCase): | |||
|             self.assertEqual(cache, {}) | ||||
| 
 | ||||
|             # cache w/ one record | ||||
|             setting = model.Setting(name='foo', value='bar') | ||||
|             setting = model.Setting(name="foo", value="bar") | ||||
|             get_target_objects.return_value = [setting] | ||||
|             cache = imp.get_target_cache() | ||||
|             self.assertEqual(len(cache), 1) | ||||
|             self.assertIn(('foo',), cache) | ||||
|             foo = cache[('foo',)] | ||||
|             self.assertIn(("foo",), cache) | ||||
|             foo = cache[("foo",)] | ||||
|             self.assertEqual(len(foo), 2) | ||||
|             self.assertEqual(set(foo), {'object', 'data'}) | ||||
|             self.assertIs(foo['object'], setting) | ||||
|             self.assertEqual(foo['data'], {'name': 'foo', 'value': 'bar'}) | ||||
|             self.assertEqual(set(foo), {"object", "data"}) | ||||
|             self.assertIs(foo["object"], setting) | ||||
|             self.assertEqual(foo["data"], {"name": "foo", "value": "bar"}) | ||||
| 
 | ||||
|     def test_get_target_objects(self): | ||||
|         model = self.app.model | ||||
|  | @ -423,36 +448,36 @@ class TestImporter(DataTestCase): | |||
| 
 | ||||
|     def test_get_target_object(self): | ||||
|         model = self.app.model | ||||
|         setting = model.Setting(name='foo', value='bar') | ||||
|         setting = model.Setting(name="foo", value="bar") | ||||
| 
 | ||||
|         # nb. must mock up a target cache for this one | ||||
|         imp = self.make_importer(model_class=model.Setting, caches_target=True) | ||||
|         imp.cached_target = { | ||||
|             ('foo',): { | ||||
|                 'object': setting, | ||||
|                 'data': {'name': 'foo', 'value': 'bar'}, | ||||
|             ("foo",): { | ||||
|                 "object": setting, | ||||
|                 "data": {"name": "foo", "value": "bar"}, | ||||
|             }, | ||||
|         } | ||||
| 
 | ||||
|         # returns same object | ||||
|         result = imp.get_target_object(('foo',)) | ||||
|         result = imp.get_target_object(("foo",)) | ||||
|         self.assertIs(result, setting) | ||||
| 
 | ||||
|         # and one more time just for kicks | ||||
|         result = imp.get_target_object(('foo',)) | ||||
|         result = imp.get_target_object(("foo",)) | ||||
|         self.assertIs(result, setting) | ||||
| 
 | ||||
|         # but then not if cache flag is off | ||||
|         imp.caches_target = False | ||||
|         result = imp.get_target_object(('foo',)) | ||||
|         result = imp.get_target_object(("foo",)) | ||||
|         self.assertIsNone(result) | ||||
| 
 | ||||
|     def test_normalize_target_object(self): | ||||
|         model = self.app.model | ||||
|         imp = self.make_importer(model_class=model.Setting) | ||||
|         setting = model.Setting(name='foo', value='bar') | ||||
|         setting = model.Setting(name="foo", value="bar") | ||||
|         data = imp.normalize_target_object(setting) | ||||
|         self.assertEqual(data, {'name': 'foo', 'value': 'bar'}) | ||||
|         self.assertEqual(data, {"name": "foo", "value": "bar"}) | ||||
| 
 | ||||
|     def test_get_deletable_keys(self): | ||||
|         model = self.app.model | ||||
|  | @ -463,11 +488,11 @@ class TestImporter(DataTestCase): | |||
|         self.assertIsInstance(result, set) | ||||
|         self.assertEqual(result, set()) | ||||
| 
 | ||||
|         setting = model.Setting(name='foo', value='bar') | ||||
|         setting = model.Setting(name="foo", value="bar") | ||||
|         cache = { | ||||
|             ('foo',): { | ||||
|                 'object': setting, | ||||
|                 'data': {'name': 'foo', 'value': 'bar'}, | ||||
|             ("foo",): { | ||||
|                 "object": setting, | ||||
|                 "data": {"name": "foo", "value": "bar"}, | ||||
|             }, | ||||
|         } | ||||
| 
 | ||||
|  | @ -475,10 +500,10 @@ class TestImporter(DataTestCase): | |||
| 
 | ||||
|             # all are deletable by default | ||||
|             result = imp.get_deletable_keys() | ||||
|             self.assertEqual(result, {('foo',)}) | ||||
|             self.assertEqual(result, {("foo",)}) | ||||
| 
 | ||||
|             # but some maybe can't be deleted | ||||
|             with patch.object(imp, 'can_delete_object', return_value=False): | ||||
|             with patch.object(imp, "can_delete_object", return_value=False): | ||||
|                 result = imp.get_deletable_keys() | ||||
|                 self.assertEqual(result, set()) | ||||
| 
 | ||||
|  | @ -487,22 +512,23 @@ class TestImporter(DataTestCase): | |||
|         imp = self.make_importer(model_class=model.Setting) | ||||
| 
 | ||||
|         # basic | ||||
|         setting = imp.create_target_object(('foo',), {'name': 'foo', 'value': 'bar'}) | ||||
|         setting = imp.create_target_object(("foo",), {"name": "foo", "value": "bar"}) | ||||
|         self.assertIsInstance(setting, model.Setting) | ||||
|         self.assertEqual(setting.name, 'foo') | ||||
|         self.assertEqual(setting.value, 'bar') | ||||
|         self.assertEqual(setting.name, "foo") | ||||
|         self.assertEqual(setting.value, "bar") | ||||
| 
 | ||||
|         # will skip if magic delete flag is set | ||||
|         setting = imp.create_target_object(('foo',), {'name': 'foo', 'value': 'bar', | ||||
|                                                       '__ignoreme__': True}) | ||||
|         setting = imp.create_target_object( | ||||
|             ("foo",), {"name": "foo", "value": "bar", "__ignoreme__": True} | ||||
|         ) | ||||
|         self.assertIsNone(setting) | ||||
| 
 | ||||
|     def test_make_empty_object(self): | ||||
|         model = self.app.model | ||||
|         imp = self.make_importer(model_class=model.Setting) | ||||
|         obj = imp.make_empty_object(('foo',)) | ||||
|         obj = imp.make_empty_object(("foo",)) | ||||
|         self.assertIsInstance(obj, model.Setting) | ||||
|         self.assertEqual(obj.name, 'foo') | ||||
|         self.assertEqual(obj.name, "foo") | ||||
| 
 | ||||
|     def test_make_object(self): | ||||
|         model = self.app.model | ||||
|  | @ -513,23 +539,23 @@ class TestImporter(DataTestCase): | |||
|     def test_update_target_object(self): | ||||
|         model = self.app.model | ||||
|         imp = self.make_importer(model_class=model.Setting) | ||||
|         setting = model.Setting(name='foo') | ||||
|         setting = model.Setting(name="foo") | ||||
| 
 | ||||
|         # basic logic for updating *new* object | ||||
|         obj = imp.update_target_object(setting, {'name': 'foo', 'value': 'bar'}) | ||||
|         obj = imp.update_target_object(setting, {"name": "foo", "value": "bar"}) | ||||
|         self.assertIs(obj, setting) | ||||
|         self.assertEqual(setting.value, 'bar') | ||||
|         self.assertEqual(setting.value, "bar") | ||||
| 
 | ||||
|     def test_can_delete_object(self): | ||||
|         model = self.app.model | ||||
|         imp = self.make_importer(model_class=model.Setting) | ||||
|         setting = model.Setting(name='foo') | ||||
|         setting = model.Setting(name="foo") | ||||
|         self.assertTrue(imp.can_delete_object(setting)) | ||||
| 
 | ||||
|     def test_delete_target_object(self): | ||||
|         model = self.app.model | ||||
|         imp = self.make_importer(model_class=model.Setting) | ||||
|         setting = model.Setting(name='foo') | ||||
|         setting = model.Setting(name="foo") | ||||
|         # nb. default implementation always returns false | ||||
|         self.assertFalse(imp.delete_target_object(setting)) | ||||
| 
 | ||||
|  | @ -541,20 +567,20 @@ class TestFromFile(DataTestCase): | |||
|         self.handler = ImportHandler(self.config) | ||||
| 
 | ||||
|     def make_importer(self, **kwargs): | ||||
|         kwargs.setdefault('handler', self.handler) | ||||
|         kwargs.setdefault("handler", self.handler) | ||||
|         return mod.FromFile(self.config, **kwargs) | ||||
| 
 | ||||
|     def test_setup(self): | ||||
|         model = self.app.model | ||||
|         imp = self.make_importer(model_class=model.Setting) | ||||
|         with patch.object(imp, 'open_input_file') as open_input_file: | ||||
|         with patch.object(imp, "open_input_file") as open_input_file: | ||||
|             imp.setup() | ||||
|             open_input_file.assert_called_once_with() | ||||
| 
 | ||||
|     def test_teardown(self): | ||||
|         model = self.app.model | ||||
|         imp = self.make_importer(model_class=model.Setting) | ||||
|         with patch.object(imp, 'close_input_file') as close_input_file: | ||||
|         with patch.object(imp, "close_input_file") as close_input_file: | ||||
|             imp.teardown() | ||||
|             close_input_file.assert_called_once_with() | ||||
| 
 | ||||
|  | @ -563,13 +589,13 @@ class TestFromFile(DataTestCase): | |||
|         imp = self.make_importer(model_class=model.Setting) | ||||
| 
 | ||||
|         # path is guessed from dir+filename | ||||
|         path = self.write_file('data.txt', '') | ||||
|         path = self.write_file("data.txt", "") | ||||
|         imp.input_file_dir = self.tempdir | ||||
|         imp.input_file_name = 'data.txt' | ||||
|         imp.input_file_name = "data.txt" | ||||
|         self.assertEqual(imp.get_input_file_path(), path) | ||||
| 
 | ||||
|         # path can be explicitly set | ||||
|         path2 = self.write_file('data2.txt', '') | ||||
|         path2 = self.write_file("data2.txt", "") | ||||
|         imp.input_file_path = path2 | ||||
|         self.assertEqual(imp.get_input_file_path(), path2) | ||||
| 
 | ||||
|  | @ -592,8 +618,8 @@ class TestFromFile(DataTestCase): | |||
|         self.assertRaises(NotImplementedError, imp.get_input_file_name) | ||||
| 
 | ||||
|         # name can be explicitly set | ||||
|         imp.input_file_name = 'data.txt' | ||||
|         self.assertEqual(imp.get_input_file_name(), 'data.txt') | ||||
|         imp.input_file_name = "data.txt" | ||||
|         self.assertEqual(imp.get_input_file_name(), "data.txt") | ||||
| 
 | ||||
|     def test_open_input_file(self): | ||||
|         model = self.app.model | ||||
|  | @ -604,10 +630,10 @@ class TestFromFile(DataTestCase): | |||
|         model = self.app.model | ||||
|         imp = self.make_importer(model_class=model.Setting) | ||||
| 
 | ||||
|         path = self.write_file('data.txt', '') | ||||
|         with open(path, 'rt') as f: | ||||
|         path = self.write_file("data.txt", "") | ||||
|         with open(path, "rt") as f: | ||||
|             imp.input_file = f | ||||
|             with patch.object(f, 'close') as close: | ||||
|             with patch.object(f, "close") as close: | ||||
|                 imp.close_input_file() | ||||
|                 close.assert_called_once_with() | ||||
| 
 | ||||
|  | @ -619,16 +645,16 @@ class TestToSqlalchemy(DataTestCase): | |||
|         self.handler = ImportHandler(self.config) | ||||
| 
 | ||||
|     def make_importer(self, **kwargs): | ||||
|         kwargs.setdefault('handler', self.handler) | ||||
|         kwargs.setdefault("handler", self.handler) | ||||
|         return mod.ToSqlalchemy(self.config, **kwargs) | ||||
| 
 | ||||
|     def test_get_target_objects(self): | ||||
|         model = self.app.model | ||||
|         imp = self.make_importer(model_class=model.Setting, target_session=self.session) | ||||
| 
 | ||||
|         setting1 = model.Setting(name='foo', value='bar') | ||||
|         setting1 = model.Setting(name="foo", value="bar") | ||||
|         self.session.add(setting1) | ||||
|         setting2 = model.Setting(name='foo2', value='bar2') | ||||
|         setting2 = model.Setting(name="foo2", value="bar2") | ||||
|         self.session.add(setting2) | ||||
|         self.session.commit() | ||||
| 
 | ||||
|  | @ -638,60 +664,60 @@ class TestToSqlalchemy(DataTestCase): | |||
| 
 | ||||
|     def test_get_target_object(self): | ||||
|         model = self.app.model | ||||
|         setting = model.Setting(name='foo', value='bar') | ||||
|         setting = model.Setting(name="foo", value="bar") | ||||
| 
 | ||||
|         # nb. must mock up a target cache for this one | ||||
|         imp = self.make_importer(model_class=model.Setting, caches_target=True) | ||||
|         imp.cached_target = { | ||||
|             ('foo',): { | ||||
|                 'object': setting, | ||||
|                 'data': {'name': 'foo', 'value': 'bar'}, | ||||
|             ("foo",): { | ||||
|                 "object": setting, | ||||
|                 "data": {"name": "foo", "value": "bar"}, | ||||
|             }, | ||||
|         } | ||||
| 
 | ||||
|         # returns same object | ||||
|         result = imp.get_target_object(('foo',)) | ||||
|         result = imp.get_target_object(("foo",)) | ||||
|         self.assertIs(result, setting) | ||||
| 
 | ||||
|         # and one more time just for kicks | ||||
|         result = imp.get_target_object(('foo',)) | ||||
|         result = imp.get_target_object(("foo",)) | ||||
|         self.assertIs(result, setting) | ||||
| 
 | ||||
|         # now let's put a 2nd setting in the db | ||||
|         setting2 = model.Setting(name='foo2', value='bar2') | ||||
|         setting2 = model.Setting(name="foo2", value="bar2") | ||||
|         self.session.add(setting2) | ||||
|         self.session.commit() | ||||
| 
 | ||||
|         # nb. disable target cache | ||||
|         with patch.multiple(imp, create=True, | ||||
|                             target_session=self.session, | ||||
|                             caches_target=False): | ||||
|         with patch.multiple( | ||||
|             imp, create=True, target_session=self.session, caches_target=False | ||||
|         ): | ||||
| 
 | ||||
|             # now we should be able to fetch that via query | ||||
|             result = imp.get_target_object(('foo2',)) | ||||
|             result = imp.get_target_object(("foo2",)) | ||||
|             self.assertIsInstance(result, model.Setting) | ||||
|             self.assertIs(result, setting2) | ||||
| 
 | ||||
|             # but sometimes it will not be found | ||||
|             result = imp.get_target_object(('foo3',)) | ||||
|             result = imp.get_target_object(("foo3",)) | ||||
|             self.assertIsNone(result) | ||||
| 
 | ||||
|     def test_create_target_object(self): | ||||
|         model = self.app.model | ||||
|         imp = self.make_importer(model_class=model.Setting, target_session=self.session) | ||||
|         setting = model.Setting(name='foo', value='bar') | ||||
|         setting = model.Setting(name="foo", value="bar") | ||||
| 
 | ||||
|         # new object is added to session | ||||
|         setting = imp.create_target_object(('foo',), {'name': 'foo', 'value': 'bar'}) | ||||
|         setting = imp.create_target_object(("foo",), {"name": "foo", "value": "bar"}) | ||||
|         self.assertIsInstance(setting, model.Setting) | ||||
|         self.assertEqual(setting.name, 'foo') | ||||
|         self.assertEqual(setting.value, 'bar') | ||||
|         self.assertEqual(setting.name, "foo") | ||||
|         self.assertEqual(setting.value, "bar") | ||||
|         self.assertIn(setting, self.session) | ||||
| 
 | ||||
|     def test_delete_target_object(self): | ||||
|         model = self.app.model | ||||
| 
 | ||||
|         setting = model.Setting(name='foo', value='bar') | ||||
|         setting = model.Setting(name="foo", value="bar") | ||||
|         self.session.add(setting) | ||||
| 
 | ||||
|         self.assertEqual(self.session.query(model.Setting).count(), 1) | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue