deriva 1.7.10__py3-none-any.whl → 1.7.12__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,252 +0,0 @@
1
- """Unit tests for MMO+DDL Drop operations.
2
- """
3
- import os
4
- import logging
5
- from deriva.core import mmo
6
- from deriva.core.ermrest_model import UpdateMappings
7
- from tests.deriva.core.mmo.base import BaseMMOTestCase
8
-
9
- logger = logging.getLogger(__name__)
10
- logger.setLevel(os.getenv('DERIVA_PY_TEST_LOGLEVEL', default=logging.WARNING))
11
-
12
-
13
- class TestMMOxDDLDrop (BaseMMOTestCase):
14
-
15
- @classmethod
16
- def setUpClass(cls):
17
- """Don't bother setting up catalog for the suite.
18
- """
19
- pass
20
-
21
- def setUp(self):
22
- """Setup catalog for each unit test.
23
- """
24
- TestMMOxDDLDrop.setUpCatalog()
25
- super().setUp()
26
-
27
- def test_drop_key(self):
28
- kname = ["dept_schema", "dept_dept_no_key"]
29
-
30
- def test():
31
- matches = mmo.find(self.model, kname)
32
- return len(matches)
33
-
34
- self.assertTrue(test())
35
- t = self.model.schemas[kname[0]].tables["dept"]
36
- key = t.keys[(t.schema, kname[1])]
37
- key.drop(cascade=True, update_mappings=UpdateMappings.immediate)
38
- self.assertFalse(test())
39
-
40
- def test_drop_key_deferred(self):
41
- kname = ["dept_schema", "dept_dept_no_key"]
42
-
43
- def test(model):
44
- matches = mmo.find(model, kname)
45
- return len(matches)
46
-
47
- self.assertTrue(test(self.model))
48
- t = self.model.schemas[kname[0]].tables["dept"]
49
- key = t.keys[(t.schema, kname[1])]
50
- key.drop(cascade=True, update_mappings=UpdateMappings.deferred)
51
- self.assertTrue(test(self.model.catalog.getCatalogModel()))
52
- self.model.apply()
53
- self.assertFalse(test(self.model.catalog.getCatalogModel()))
54
-
55
- def test_drop_key_cascade(self):
56
- kname = ["dept_schema", "dept_dept_no_key"]
57
- fkname = ["person_schema", "person_dept_fkey"]
58
-
59
- def test(name):
60
- matches = mmo.find(self.model, name)
61
- return len(matches)
62
-
63
- self.assertTrue(test(kname))
64
- self.assertTrue(test(fkname))
65
- t = self.model.schemas[kname[0]].tables["dept"]
66
- key = t.keys[(t.schema, kname[1])]
67
- key.drop(cascade=True, update_mappings=UpdateMappings.immediate)
68
- self.assertFalse(test(kname))
69
- self.assertFalse(test(fkname))
70
-
71
- def test_drop_fkey(self):
72
- fkname = ["person_schema", "person_dept_fkey"]
73
-
74
- def test():
75
- matches = mmo.find(self.model, fkname)
76
- return len(matches)
77
-
78
- self.assertTrue(test())
79
- self.model.fkey(fkname).drop(update_mappings=UpdateMappings.immediate)
80
- self.assertFalse(test())
81
-
82
- def test_drop_fkey_deferred(self):
83
- fkname = ["person_schema", "person_dept_fkey"]
84
-
85
- def test(model):
86
- matches = mmo.find(model, fkname)
87
- return len(matches)
88
-
89
- self.assertTrue(test(self.model))
90
- self.model.fkey(fkname).drop(update_mappings=UpdateMappings.deferred)
91
- self.assertTrue(test(self.model.catalog.getCatalogModel()))
92
- self.model.apply()
93
- self.assertFalse(test(self.model.catalog.getCatalogModel()))
94
-
95
- def test_drop_col(self):
96
- cname = ["person_schema", "person", "last_name"]
97
-
98
- def test():
99
- matches = mmo.find(self.model, cname)
100
- return len(matches)
101
-
102
- self.assertTrue(test())
103
- t = self.model.schemas[cname[0]].tables[cname[1]]
104
- col = t.columns[cname[2]]
105
- col.drop(update_mappings=UpdateMappings.immediate)
106
- self.assertFalse(test())
107
-
108
- def test_drop_col_deferred(self):
109
- cname = ["person_schema", "person", "last_name"]
110
-
111
- def test(model):
112
- matches = mmo.find(model, cname)
113
- return len(matches)
114
-
115
- self.assertTrue(test(self.model))
116
- t = self.model.schemas[cname[0]].tables[cname[1]]
117
- col = t.columns[cname[2]]
118
- col.drop(update_mappings=UpdateMappings.deferred)
119
- self.assertTrue(test(self.model.catalog.getCatalogModel()))
120
- self.model.apply()
121
- self.assertFalse(test(self.model.catalog.getCatalogModel()))
122
-
123
- def test_drop_col_cascade_key(self):
124
- cname = ["dept_schema", "dept", "dept_no"]
125
- kname = ["dept_schema", "dept_dept_no_key"]
126
- fkname = ["person_schema", "person_dept_fkey"]
127
-
128
- def test(name):
129
- matches = mmo.find(self.model, name)
130
- return len(matches)
131
-
132
- for name in [cname, kname, fkname]:
133
- with self.subTest(f'subTest {name}'):
134
- self.assertTrue(test(name))
135
-
136
- t = self.model.schemas[cname[0]].tables[cname[1]]
137
- col = t.columns[cname[2]]
138
- col.drop(cascade=True, update_mappings=UpdateMappings.immediate)
139
-
140
- for name in [cname, kname, fkname]:
141
- with self.subTest(f'subTest {name}'):
142
- self.assertFalse(test(name))
143
-
144
- def test_drop_col_cascade_fkey(self):
145
- cname = ["person_schema", "person", "dept"]
146
- fkname = ["person_schema", "person_dept_fkey"]
147
-
148
- def test(name):
149
- matches = mmo.find(self.model, name)
150
- return len(matches)
151
-
152
- self.assertTrue(test(cname))
153
- self.assertTrue(test(fkname))
154
- t = self.model.schemas[cname[0]].tables[cname[1]]
155
- col = t.columns[cname[2]]
156
- col.drop(cascade=True, update_mappings=UpdateMappings.immediate)
157
- self.assertFalse(test(cname))
158
- self.assertFalse(test(fkname))
159
-
160
- def test_drop_table_cascade(self):
161
- cname = ["dept_schema", "dept", "dept_no"]
162
- kname = ["dept_schema", "dept_dept_no_key"]
163
- fkname = ["person_schema", "person_dept_fkey"]
164
-
165
- def test(name):
166
- matches = mmo.find(self.model, name)
167
- return len(matches)
168
-
169
- for name in [cname, kname, fkname]:
170
- with self.subTest(f'subTest {name}'):
171
- self.assertTrue(test(name))
172
-
173
- t = self.model.schemas[cname[0]].tables[cname[1]]
174
- t.drop(cascade=True, update_mappings=UpdateMappings.immediate)
175
-
176
- for name in [cname, kname, fkname]:
177
- with self.subTest(f'subTest {name}'):
178
- self.assertFalse(test(name))
179
-
180
- def test_drop_table_cascade_deferred(self):
181
- cname = ["person_schema", "person", "name"]
182
- kname = ["person_schema", "person_RID_key"]
183
- fkname = ["person_schema", "person_dept_fkey"]
184
-
185
- def test(model, name):
186
- matches = mmo.find(model, name)
187
- return len(matches)
188
-
189
- for name in [cname, kname, fkname]:
190
- with self.subTest(f'subtest {name} precondition'):
191
- self.assertTrue(test(self.model, name))
192
-
193
- t = self.model.schemas[cname[0]].tables[cname[1]]
194
- t.drop(cascade=True, update_mappings=UpdateMappings.deferred)
195
-
196
- # fkname should linger on in the dept table's annotations until the update is applied to the model
197
- self.assertTrue(test(self.model.catalog.getCatalogModel(), fkname))
198
- self.model.apply()
199
- self.assertFalse(test(self.model.catalog.getCatalogModel(), fkname))
200
-
201
- def test_drop_table(self):
202
- fkname = ["person_schema", "person_dept_fkey"]
203
-
204
- def test(name):
205
- matches = mmo.find(self.model, name)
206
- return len(matches)
207
-
208
- self.assertTrue(test(fkname))
209
- t = self.model.schemas["person_schema"].tables["person"]
210
- t.drop(update_mappings=UpdateMappings.immediate)
211
- self.assertFalse(test(fkname))
212
-
213
- def test_drop_schema_cascade(self):
214
- cname = ["dept_schema", "dept", "dept_no"]
215
- kname = ["dept_schema", "dept_dept_no_key"]
216
- fkname = ["person_schema", "person_dept_fkey"]
217
-
218
- def test(name):
219
- matches = mmo.find(self.model, name)
220
- return len(matches)
221
-
222
- for name in [cname, kname, fkname]:
223
- with self.subTest(f'subtest {name} precondition'):
224
- self.assertTrue(test(name))
225
-
226
- s = self.model.schemas[cname[0]]
227
- s.drop(cascade=True, update_mappings=UpdateMappings.immediate)
228
-
229
- for name in [cname, kname, fkname]:
230
- with self.subTest(f'subtest {name} postcondition'):
231
- self.assertFalse(test(name))
232
-
233
- def test_drop_schema_cascade_deferred(self):
234
- cname = ["person_schema", "person", "name"]
235
- kname = ["person_schema", "person_RID_key"]
236
- fkname = ["person_schema", "person_dept_fkey"]
237
-
238
- def test(model, name):
239
- matches = mmo.find(model, name)
240
- return len(matches)
241
-
242
- for name in [cname, kname, fkname]:
243
- with self.subTest(f'subtest {name} precondition'):
244
- self.assertTrue(test(self.model, name))
245
-
246
- s = self.model.schemas[cname[0]]
247
- s.drop(cascade=True, update_mappings=UpdateMappings.deferred)
248
-
249
- # fkname should linger on in the dept table's annotations until the update is applied to the model
250
- self.assertTrue(test(self.model.catalog.getCatalogModel(), fkname))
251
- self.model.apply()
252
- self.assertFalse(test(self.model.catalog.getCatalogModel(), fkname))
@@ -1,90 +0,0 @@
1
- """Unit tests for MMO find operation.
2
- """
3
- import logging
4
- import os
5
-
6
- from deriva.core import mmo
7
- from deriva.core.ermrest_model import tag
8
- from tests.deriva.core.mmo.base import BaseMMOTestCase
9
-
10
- logger = logging.getLogger(__name__)
11
- logger.setLevel(os.getenv('DERIVA_PY_TEST_LOGLEVEL', default=logging.WARNING))
12
-
13
-
14
- def first_element_match(l1, l2):
15
- return isinstance(l1, list) and isinstance(l2, list) and \
16
- len(l1) == len(l2) and len(l1) > 1 and \
17
- l1[0] == l2[0]
18
-
19
-
20
- class TestMMOFind (BaseMMOTestCase):
21
-
22
- def test_find_key_in_vizcols(self):
23
- matches = mmo.find(self.model, ["dept_schema", "dept_RID_key"])
24
- self.assertEqual(len(matches), 1)
25
-
26
- def test_find_key_in_vizcols_by_schema_only(self):
27
- matches = mmo.find(self.model, ["dept_schema", None])
28
- self.assertGreater(len(matches), 0)
29
-
30
- def test_find_col_in_vizcols(self):
31
- matches = mmo.find(self.model, ["dept_schema", "dept", "RCT"])
32
- self.assertEqual(len(matches), 1)
33
-
34
- def test_find_col_in_vizcols_pseudocol_simple(self):
35
- matches = mmo.find(self.model, ["dept_schema", "dept", "RMT"])
36
- self.assertEqual(len(matches), 1)
37
-
38
- def test_find_col_in_vizcols_pseudocol(self):
39
- matches = mmo.find(self.model, ["dept_schema", "dept", "name"])
40
- self.assertTrue(any([m.anchor.name == 'person' and m.tag == tag.visible_columns and isinstance(m.mapping, dict) for m in matches]))
41
-
42
- def test_find_col_in_sourcedefs_columns(self):
43
- matches = mmo.find(self.model, ["person_schema", "person", "dept"])
44
- self.assertTrue(any([m.anchor.name == 'person' and m.tag == tag.source_definitions and m.mapping == 'dept' for m in matches]))
45
-
46
- def test_find_col_in_sourcedefs_sources(self):
47
- matches = mmo.find(self.model, ["person_schema", "person", "RID"])
48
- self.assertTrue(any([m.tag == tag.source_definitions and m.mapping == 'dept_size' for m in matches]))
49
-
50
- def test_find_fkey_in_vizfkeys(self):
51
- fkname = ["person_schema", "person_dept_fkey"]
52
- matches = mmo.find(self.model, fkname)
53
- self.assertTrue(any([m.tag == tag.visible_foreign_keys and m.mapping == fkname for m in matches]))
54
-
55
- def test_find_fkey_in_vizfkeys_by_schema_only(self):
56
- fkname = ["person_schema", None]
57
- matches = mmo.find(self.model, fkname)
58
- self.assertTrue(any([m.tag == tag.visible_foreign_keys and first_element_match(m.mapping, fkname) for m in matches]))
59
-
60
- def test_find_fkey_in_vizcols(self):
61
- fkname = ["person_schema", "person_dept_fkey"]
62
- matches = mmo.find(self.model, fkname)
63
- self.assertTrue(any([m.tag == tag.visible_columns and m.mapping == fkname for m in matches]))
64
-
65
- def test_find_fkey_in_vizcols_by_schema_only(self):
66
- fkname = ["person_schema", None]
67
- matches = mmo.find(self.model, fkname)
68
- self.assertTrue(any([m.tag == tag.visible_columns and first_element_match(m.mapping, fkname) for m in matches]))
69
-
70
- def test_find_fkey_in_sourcedefs_sources(self):
71
- matches = mmo.find(self.model, ["person_schema", "person_dept_fkey"])
72
- self.assertTrue(any([m.tag == tag.source_definitions and m.mapping == 'personnel' for m in matches]))
73
-
74
- def test_find_fkey_in_sourcedefs_sources_by_schema_only(self):
75
- matches = mmo.find(self.model, ["person_schema", None])
76
- self.assertTrue(any([m.tag == tag.source_definitions and m.mapping == 'personnel' for m in matches]))
77
-
78
- def test_find_fkey_in_sourcedefs_fkeys(self):
79
- fkname = ["person_schema", "person_dept_fkey"]
80
- matches = mmo.find(self.model, fkname)
81
- self.assertTrue(any([m.tag == tag.source_definitions and m.mapping == fkname for m in matches]))
82
-
83
- def test_find_fkey_in_sourcedefs_fkeys_by_schema_only(self):
84
- fkname = ["person_schema", None]
85
- matches = mmo.find(self.model, fkname)
86
- self.assertTrue(any([m.tag == tag.source_definitions and m.context == 'fkeys' and first_element_match(m.mapping, fkname) for m in matches]))
87
-
88
- def test_find_col_in_search_box(self):
89
- matches = mmo.find(self.model, ["person_schema", "person", "last_name"])
90
- self.assertTrue(len(matches) == 1)
@@ -1,196 +0,0 @@
1
- """Unit tests for MMO prune operation.
2
- """
3
- import logging
4
- import os
5
-
6
- from deriva.core import mmo
7
- from deriva.core.ermrest_model import tag
8
- from tests.deriva.core.mmo.base import BaseMMOTestCase
9
-
10
- logger = logging.getLogger(__name__)
11
- logger.setLevel(os.getenv('DERIVA_PY_TEST_LOGLEVEL', default=logging.WARNING))
12
-
13
-
14
- class TestMMOPrune (BaseMMOTestCase):
15
-
16
- def _pre(self, fn):
17
- """Pre-condition evaluation."""
18
- fn(self.assertTrue)
19
-
20
- def _post(self, fn):
21
- """Post-condition evaluation"""
22
- fn(self.assertFalse)
23
-
24
- def test_prune_key_in_vizcols(self):
25
- fkname = ["dept_schema", "dept_RID_key"]
26
-
27
- def cond(assertion):
28
- matches = mmo.find(self.model, fkname)
29
- assertion(len(matches) == 1)
30
-
31
- self._pre(cond)
32
- mmo.prune(self.model, fkname)
33
- self._post(cond)
34
-
35
- def test_prune_key_in_vizcols_by_schema_only(self):
36
- fkname = ["dept_schema", "dept_RID_key"]
37
-
38
- def cond(assertion):
39
- matches = mmo.find(self.model, fkname)
40
- assertion(len(matches) == 1)
41
-
42
- self._pre(cond)
43
- mmo.prune(self.model, [fkname[0], None])
44
- self._post(cond)
45
-
46
- def test_prune_col_in_vizcols(self):
47
- def cond(assertion):
48
- matches = mmo.find(self.model, ["dept_schema", "dept", "RCT"])
49
- assertion(len(matches) == 1)
50
-
51
- self._pre(cond)
52
- mmo.prune(self.model, ["dept_schema", "dept", "RCT"])
53
- self._post(cond)
54
-
55
- def test_prune_col_in_vizcols_pseudocol_simple(self):
56
- def cond(assertion):
57
- matches = mmo.find(self.model, ["dept_schema", "dept", "RMT"])
58
- assertion(len(matches) == 1)
59
-
60
- self._pre(cond)
61
- mmo.prune(self.model, ["dept_schema", "dept", "RMT"])
62
- self._post(cond)
63
-
64
- def test_prune_col_in_vizcols_pseudocol(self):
65
- def cond(assertion):
66
- matches = mmo.find(self.model, ["dept_schema", "dept", "name"])
67
- assertion(any([m.anchor.name == 'person' and m.tag == tag.visible_columns and isinstance(m.mapping, dict) for m in matches]))
68
-
69
- self._pre(cond)
70
- mmo.prune(self.model, ["dept_schema", "dept", "name"])
71
- self._post(cond)
72
-
73
- def test_prune_col_in_sourcedefs_columns(self):
74
- def cond(assertion):
75
- matches = mmo.find(self.model, ["person_schema", "person", "dept"])
76
- assertion(any([m.anchor.name == 'person' and m.tag == tag.source_definitions and m.mapping == 'dept' for m in matches]))
77
-
78
- self._pre(cond)
79
- mmo.prune(self.model, ["person_schema", "person", "dept"])
80
- self._post(cond)
81
-
82
- def test_prune_col_in_sourcedefs_sources(self):
83
- def cond(assertion):
84
- matches = mmo.find(self.model, ["person_schema", "person", "RID"])
85
- assertion(any([m.tag == tag.source_definitions and m.mapping == 'dept_size' for m in matches]))
86
-
87
- self._pre(cond)
88
- mmo.prune(self.model, ["person_schema", "person", "RID"])
89
- self._post(cond)
90
-
91
- def test_prune_fkey_in_vizfkeys(self):
92
- fkname = ["person_schema", "person_dept_fkey"]
93
-
94
- def cond(assertion):
95
- matches = mmo.find(self.model, fkname)
96
- assertion(any([m.tag == tag.visible_foreign_keys and m.mapping == fkname for m in matches]))
97
-
98
- self._pre(cond)
99
- mmo.prune(self.model, fkname)
100
- self._post(cond)
101
-
102
- def test_prune_fkey_in_vizfkeys_by_schema_only(self):
103
- fkname = ["person_schema", "person_dept_fkey"]
104
-
105
- def cond(assertion):
106
- matches = mmo.find(self.model, fkname)
107
- assertion(any([m.tag == tag.visible_foreign_keys and m.mapping == fkname for m in matches]))
108
-
109
- self._pre(cond)
110
- mmo.prune(self.model, [fkname[0], None])
111
- self._post(cond)
112
-
113
- def test_prune_fkey_in_vizcols(self):
114
- fkname = ["person_schema", "person_dept_fkey"]
115
-
116
- def cond(assertion):
117
- matches = mmo.find(self.model, fkname)
118
- assertion(any([m.tag == tag.visible_columns and m.mapping == fkname for m in matches]))
119
-
120
- self._pre(cond)
121
- mmo.prune(self.model, fkname)
122
- self._post(cond)
123
-
124
- def test_prune_fkey_in_vizcols_by_schema_only(self):
125
- fkname = ["person_schema", "person_dept_fkey"]
126
-
127
- def cond(assertion):
128
- matches = mmo.find(self.model, fkname)
129
- assertion(any([m.tag == tag.visible_columns and m.mapping == fkname for m in matches]))
130
-
131
- self._pre(cond)
132
- mmo.prune(self.model, [fkname[0], None])
133
- self._post(cond)
134
-
135
- def test_prune_fkey_in_sourcedefs_sources(self):
136
- fkname = ["person_schema", "person_dept_fkey"]
137
-
138
- def cond(assertion):
139
- matches = mmo.find(self.model, fkname)
140
- assertion(any([m.tag == tag.source_definitions and m.mapping == 'personnel' for m in matches]))
141
-
142
- self._pre(cond)
143
- mmo.prune(self.model, fkname)
144
- self._post(cond)
145
-
146
- def test_prune_fkey_in_sourcedefs_sources_by_schema_only(self):
147
- fkname = ["person_schema", "person_dept_fkey"]
148
-
149
- def cond(assertion):
150
- matches = mmo.find(self.model, fkname)
151
- assertion(any([m.tag == tag.source_definitions and m.mapping == 'personnel' for m in matches]))
152
-
153
- self._pre(cond)
154
- mmo.prune(self.model, [fkname[0], None])
155
- self._post(cond)
156
-
157
- def test_prune_fkey_in_sourcedefs_fkeys(self):
158
- fkname = ["person_schema", "person_dept_fkey"]
159
-
160
- def cond(assertion):
161
- matches = mmo.find(self.model, fkname)
162
- assertion(any([m.tag == tag.source_definitions and m.mapping == fkname for m in matches]))
163
-
164
- self._pre(cond)
165
- mmo.prune(self.model, fkname)
166
- self._post(cond)
167
-
168
- def test_prune_fkey_in_sourcedefs_fkeys_by_schema_only(self):
169
- fkname = ["person_schema", "person_dept_fkey"]
170
-
171
- def cond(assertion):
172
- matches = mmo.find(self.model, fkname)
173
- assertion(any([m.tag == tag.source_definitions and m.mapping == fkname for m in matches]))
174
-
175
- self._pre(cond)
176
- mmo.prune(self.model, [fkname[0], None])
177
- self._post(cond)
178
-
179
- def test_prune_fkey_in_sourcedefs_recurse(self):
180
- def cond(assertion):
181
- assertion(any([
182
- isinstance(vizcol, dict) and vizcol.get("sourcekey") == "dept_size"
183
- for vizcol in self.model.schemas['person_schema'].tables['person'].annotations[tag.visible_columns]['detailed']
184
- ]))
185
-
186
- self._pre(cond)
187
- mmo.prune(self.model, ["person_schema", "person_dept_fkey"])
188
- self._post(cond)
189
-
190
- def test_prune_col_in_search_box(self):
191
- def cond(assertion):
192
- assertion(len(mmo.find(self.model, ["person_schema", "person", "last_name"])) == 1)
193
-
194
- self._pre(cond)
195
- mmo.prune(self.model, ["person_schema", "person", "last_name"])
196
- self._post(cond)