コード例 #1
0
 def test_no_relink_skips_linking(self):
     unlinked = [{
         'database':
         'db',
         'code':
         'first',
         'name':
         'foo',
         'categories': ('bar', ),
         'exchanges': [{
             'name': 'foo',
             'categories': ('bar', ),
             'input': ('something', 'else'),
         }]
     }]
     expected = [{
         'database':
         'db',
         'code':
         'first',
         'name':
         'foo',
         'categories': ('bar', ),
         'exchanges': [{
             'name': 'foo',
             'categories': ('bar', ),
             'input': ('db', 'first'),
         }]
     }]
     self.assertEqual(
         unlinked,
         link_iterable_by_fields(copy.deepcopy(unlinked), internal=True))
     del unlinked[0]['exchanges'][0]['input']
     self.assertEqual(expected,
                      link_iterable_by_fields(unlinked, internal=True))
コード例 #2
0
 def test_no_relink_skips_linking(self):
     unlinked = [
         {
             "database": "db",
             "code": "first",
             "name": "foo",
             "categories": ("bar",),
             "exchanges": [
                 {
                     "name": "foo",
                     "categories": ("bar",),
                     "input": ("something", "else"),
                 }
             ],
         }
     ]
     expected = [
         {
             "database": "db",
             "code": "first",
             "name": "foo",
             "categories": ("bar",),
             "exchanges": [
                 {"name": "foo", "categories": ("bar",), "input": ("db", "first"),}
             ],
         }
     ]
     self.assertEqual(
         unlinked, link_iterable_by_fields(copy.deepcopy(unlinked), internal=True)
     )
     del unlinked[0]["exchanges"][0]["input"]
     self.assertEqual(expected, link_iterable_by_fields(unlinked, internal=True))
コード例 #3
0
 def test_nonunique_target_raises_error(self):
     data = [
         {"name": "foo", "database": "a", "code": "b"},
         {"name": "foo", "database": "a", "code": "c"},
         {"name": "bar", "database": "a", "code": "d"},
     ]
     with self.assertRaises(StrategyError):
         link_iterable_by_fields([{"exchanges": [{"name": "foo"}]}], data)
コード例 #4
0
 def test_all_datasets_in_target_have_database_field(self):
     self.assertEqual(
         link_iterable_by_fields([], [{
             "database": "foo",
             "code": "bar"
         }]), [])
     with self.assertRaises(StrategyError):
         link_iterable_by_fields([], [{"code": "bar"}])
コード例 #5
0
 def test_all_datasets_in_target_have_code_field(self):
     self.assertEqual(
         link_iterable_by_fields([], [{
             'database': 'foo',
             'code': 'bar'
         }]), [])
     with self.assertRaises(StrategyError):
         link_iterable_by_fields([], [{'database': 'foo'}])
コード例 #6
0
 def test_kind_filter(self):
     unlinked = [{
         'database':
         'db',
         'code':
         'first',
         'name':
         'foo',
         'categories': ('bar', ),
         'exchanges': [{
             'name': 'foo',
             'categories': ('bar', ),
             'type': 'a',
         }, {
             'name': 'foo',
             'categories': ('baz', )
         }]
     }, {
         'database': 'db',
         'code': 'second',
         'name': 'foo',
         'categories': ('baz', ),
         'exchanges': []
     }]
     expected = [{
         'database':
         'db',
         'code':
         'first',
         'name':
         'foo',
         'categories': ('bar', ),
         'exchanges': [{
             'name': 'foo',
             'categories': ('bar', ),
             'type': 'a',
             'input': ('db', 'first'),
         }, {
             'name': 'foo',
             'categories': ('baz', ),
         }]
     }, {
         'database': 'db',
         'code': 'second',
         'name': 'foo',
         'categories': ('baz', ),
         'exchanges': []
     }]
     self.assertEqual(
         expected, link_iterable_by_fields(unlinked,
                                           internal=True,
                                           kind='a'))
     self.assertEqual(
         expected,
         link_iterable_by_fields(unlinked, internal=True, kind=['a']))
コード例 #7
0
 def test_kind_filter(self):
     unlinked = [
         {
             "database": "db",
             "code": "first",
             "name": "foo",
             "categories": ("bar",),
             "exchanges": [
                 {"name": "foo", "categories": ("bar",), "type": "a",},
                 {"name": "foo", "categories": ("baz",)},
             ],
         },
         {
             "database": "db",
             "code": "second",
             "name": "foo",
             "categories": ("baz",),
             "exchanges": [],
         },
     ]
     expected = [
         {
             "database": "db",
             "code": "first",
             "name": "foo",
             "categories": ("bar",),
             "exchanges": [
                 {
                     "name": "foo",
                     "categories": ("bar",),
                     "type": "a",
                     "input": ("db", "first"),
                 },
                 {"name": "foo", "categories": ("baz",),},
             ],
         },
         {
             "database": "db",
             "code": "second",
             "name": "foo",
             "categories": ("baz",),
             "exchanges": [],
         },
     ]
     self.assertEqual(
         expected, link_iterable_by_fields(unlinked, internal=True, kind="a")
     )
     self.assertEqual(
         expected, link_iterable_by_fields(unlinked, internal=True, kind=["a"])
     )
コード例 #8
0
 def test_generic_linking_no_kind_no_relink(self):
     unlinked = [
         {
             "exchanges": [
                 {"name": "foo", "categories": ("bar",), "type": "a",},
                 {"name": "foo", "unit": "kilogram", "type": "b",},
             ]
         }
     ]
     other = [
         {"name": "foo", "categories": ("bar",), "database": "db", "code": "first"},
         {"name": "baz", "categories": ("bar",), "database": "db", "code": "second"},
     ]
     expected = [
         {
             "exchanges": [
                 {
                     "name": "foo",
                     "type": "a",
                     "categories": ("bar",),
                     "input": ("db", "first"),
                 },
                 {"name": "foo", "type": "b", "unit": "kilogram"},
             ]
         }
     ]
     self.assertEqual(expected, link_iterable_by_fields(unlinked, other))
コード例 #9
0
 def test_nonunique_target_but_not_linked_no_error(self):
     data = [
         {
             "name": "foo",
             "database": "a",
             "code": "b"
         },
         {
             "name": "foo",
             "database": "a",
             "code": "c"
         },
         {
             "name": "bar",
             "database": "a",
             "code": "d"
         },
     ]
     self.assertEqual(
         link_iterable_by_fields([{
             "exchanges": [{
                 "name": "bar"
             }]
         }], data),
         [{
             "exchanges": [{
                 "name": "bar",
                 "input": ("a", "d")
             }]
         }],
     )
コード例 #10
0
 def test_nonunique_target_raises_error(self):
     data = [{
         'name': 'foo',
         'database': 'a',
         'code': 'b'
     }, {
         'name': 'foo',
         'database': 'a',
         'code': 'c'
     }, {
         'name': 'bar',
         'database': 'a',
         'code': 'd'
     }]
     with self.assertRaises(StrategyError):
         link_iterable_by_fields([{'exchanges': [{'name': 'foo'}]}], data)
コード例 #11
0
 def test_nonunique_target_but_not_linked_no_error(self):
     data = [{
         'name': 'foo',
         'database': 'a',
         'code': 'b'
     }, {
         'name': 'foo',
         'database': 'a',
         'code': 'c'
     }, {
         'name': 'bar',
         'database': 'a',
         'code': 'd'
     }]
     self.assertEqual(
         link_iterable_by_fields([{
             'exchanges': [{
                 'name': 'bar'
             }]
         }], data),
         [{
             'exchanges': [{
                 'name': 'bar',
                 'input': ('a', 'd')
             }]
         }],
     )
コード例 #12
0
 def test_relink(self):
     unlinked = [{
         'database':
         'db',
         'code':
         'first',
         'name':
         'foo',
         'categories': ('bar', ),
         'exchanges': [{
             'name': 'foo',
             'categories': ('bar', ),
             'type': 'a',
             'input': ('something', 'else'),
         }, {
             'name': 'foo',
             'type': 'b',
             'input': ('something', 'else'),
             'categories': ('baz', )
         }]
     }, {
         'database': 'db',
         'code': 'second',
         'name': 'foo',
         'categories': ('baz', ),
         'exchanges': []
     }]
     expected = [{
         'database':
         'db',
         'code':
         'first',
         'name':
         'foo',
         'categories': ('bar', ),
         'exchanges': [{
             'name': 'foo',
             'categories': ('bar', ),
             'type': 'a',
             'input': ('db', 'first'),
         }, {
             'name': 'foo',
             'type': 'b',
             'input': ('db', 'second'),
             'categories': ('baz', ),
         }]
     }, {
         'database': 'db',
         'code': 'second',
         'name': 'foo',
         'categories': ('baz', ),
         'exchanges': []
     }]
     self.assertEqual(
         expected,
         link_iterable_by_fields(unlinked, internal=True, relink=True))
コード例 #13
0
 def test_linking_with_fields(self):
     unlinked = [{
         'exchanges': [{
             'name': 'foo',
             'categories': ('bar', ),
             'type': 'a',
         }, {
             'name': 'foo',
             'categories': ('baz', ),
             'unit': 'kilogram',
             'type': 'b',
         }]
     }]
     other = [{
         'name': 'foo',
         'categories': ('bar', ),
         'database': 'db',
         'code': 'first'
     }, {
         'name': 'foo',
         'categories': ('baz', ),
         'database': 'db',
         'code': 'second'
     }]
     expected = [{
         'exchanges': [{
             'name': 'foo',
             'type': 'a',
             'categories': ('bar', ),
             'input': ('db', 'first')
         }, {
             'name': 'foo',
             'type': 'b',
             'categories': ('baz', ),
             'input': ('db', 'second'),
             'unit': 'kilogram'
         }]
     }]
     self.assertEqual(
         expected,
         link_iterable_by_fields(unlinked,
                                 other,
                                 fields=['name', 'categories']))
コード例 #14
0
 def test_relink(self):
     unlinked = [
         {
             "database": "db",
             "code": "first",
             "name": "foo",
             "categories": ("bar",),
             "exchanges": [
                 {
                     "name": "foo",
                     "categories": ("bar",),
                     "type": "a",
                     "input": ("something", "else"),
                 },
                 {
                     "name": "foo",
                     "type": "b",
                     "input": ("something", "else"),
                     "categories": ("baz",),
                 },
             ],
         },
         {
             "database": "db",
             "code": "second",
             "name": "foo",
             "categories": ("baz",),
             "exchanges": [],
         },
     ]
     expected = [
         {
             "database": "db",
             "code": "first",
             "name": "foo",
             "categories": ("bar",),
             "exchanges": [
                 {
                     "name": "foo",
                     "categories": ("bar",),
                     "type": "a",
                     "input": ("db", "first"),
                 },
                 {
                     "name": "foo",
                     "type": "b",
                     "input": ("db", "second"),
                     "categories": ("baz",),
                 },
             ],
         },
         {
             "database": "db",
             "code": "second",
             "name": "foo",
             "categories": ("baz",),
             "exchanges": [],
         },
     ]
     self.assertEqual(
         expected, link_iterable_by_fields(unlinked, internal=True, relink=True)
     )