deriva 1.7.10__py3-none-any.whl → 1.7.11__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.
- deriva/core/__init__.py +1 -1
- deriva/core/utils/credenza_auth_utils.py +299 -0
- {deriva-1.7.10.dist-info → deriva-1.7.11.dist-info}/METADATA +2 -3
- {deriva-1.7.10.dist-info → deriva-1.7.11.dist-info}/RECORD +8 -18
- {deriva-1.7.10.dist-info → deriva-1.7.11.dist-info}/WHEEL +1 -1
- {deriva-1.7.10.dist-info → deriva-1.7.11.dist-info}/entry_points.txt +1 -0
- {deriva-1.7.10.dist-info → deriva-1.7.11.dist-info}/top_level.txt +0 -1
- tests/deriva/__init__.py +0 -0
- tests/deriva/core/__init__.py +0 -0
- tests/deriva/core/mmo/__init__.py +0 -0
- tests/deriva/core/mmo/base.py +0 -300
- tests/deriva/core/mmo/test_mmo_drop.py +0 -252
- tests/deriva/core/mmo/test_mmo_find.py +0 -90
- tests/deriva/core/mmo/test_mmo_prune.py +0 -196
- tests/deriva/core/mmo/test_mmo_rename.py +0 -222
- tests/deriva/core/mmo/test_mmo_replace.py +0 -180
- tests/deriva/core/test_datapath.py +0 -893
- tests/deriva/core/test_ermrest_model.py +0 -782
- {deriva-1.7.10.dist-info → deriva-1.7.11.dist-info}/licenses/LICENSE +0 -0
|
@@ -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)
|
|
@@ -1,222 +0,0 @@
|
|
|
1
|
-
"""Unit tests for MMO+DDL Alter Rename operations.
|
|
2
|
-
"""
|
|
3
|
-
import logging
|
|
4
|
-
import os
|
|
5
|
-
|
|
6
|
-
from deriva.core import mmo
|
|
7
|
-
from deriva.core.ermrest_model import UpdateMappings, Schema, 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 TestMMOxDDLRename (BaseMMOTestCase):
|
|
15
|
-
|
|
16
|
-
@classmethod
|
|
17
|
-
def setUpClass(cls):
|
|
18
|
-
"""Don't bother setting up catalog for the suite.
|
|
19
|
-
"""
|
|
20
|
-
pass
|
|
21
|
-
|
|
22
|
-
def setUp(self):
|
|
23
|
-
"""Setup catalog for each unit test.
|
|
24
|
-
"""
|
|
25
|
-
TestMMOxDDLRename.setUpCatalog()
|
|
26
|
-
super().setUp()
|
|
27
|
-
|
|
28
|
-
def _pre(self, fn):
|
|
29
|
-
"""Pre-condition evaluation."""
|
|
30
|
-
fn(self.assertTrue, self.assertFalse)
|
|
31
|
-
|
|
32
|
-
def _post(self, fn):
|
|
33
|
-
"""Post-condition evaluation"""
|
|
34
|
-
fn(self.assertFalse, self.assertTrue)
|
|
35
|
-
|
|
36
|
-
def test_rename_col(self):
|
|
37
|
-
oldname = "postal_code"
|
|
38
|
-
newname = "ZIP"
|
|
39
|
-
|
|
40
|
-
def cond(before, after):
|
|
41
|
-
before(len(mmo.find(self.model, ["dept_schema", "dept", oldname])))
|
|
42
|
-
after(len(mmo.find(self.model, ["dept_schema", "dept", newname])))
|
|
43
|
-
|
|
44
|
-
self._pre(cond)
|
|
45
|
-
self.model.schemas["dept_schema"].tables["dept"].columns[oldname].alter(name=newname, update_mappings=UpdateMappings.immediate)
|
|
46
|
-
self._post(cond)
|
|
47
|
-
|
|
48
|
-
def test_rename_col_deferred(self):
|
|
49
|
-
oldname = "postal_code"
|
|
50
|
-
newname = "ZIP"
|
|
51
|
-
|
|
52
|
-
def condf(model):
|
|
53
|
-
def cond(before, after):
|
|
54
|
-
before(len(mmo.find(model, ["dept_schema", "dept", oldname])))
|
|
55
|
-
after(len(mmo.find(model, ["dept_schema", "dept", newname])))
|
|
56
|
-
return cond
|
|
57
|
-
|
|
58
|
-
self._pre(condf(self.model))
|
|
59
|
-
self.model.schemas["dept_schema"].tables["dept"].columns[oldname].alter(name=newname, update_mappings=UpdateMappings.deferred)
|
|
60
|
-
self._pre(condf(self.model.catalog.getCatalogModel()))
|
|
61
|
-
self.model.apply()
|
|
62
|
-
self._post(condf(self.model.catalog.getCatalogModel()))
|
|
63
|
-
|
|
64
|
-
def test_rename_key(self):
|
|
65
|
-
oldname = "dept_dept_no_key"
|
|
66
|
-
newname = "dept_DEPT_NUM_key"
|
|
67
|
-
|
|
68
|
-
def cond(before, after):
|
|
69
|
-
before(len(mmo.find(self.model, ["dept_schema", oldname])))
|
|
70
|
-
after(len(mmo.find(self.model, ["dept_schema", newname])))
|
|
71
|
-
|
|
72
|
-
self._pre(cond)
|
|
73
|
-
t = self.model.schemas["dept_schema"].tables["dept"]
|
|
74
|
-
k = t.keys[(t.schema, oldname)]
|
|
75
|
-
k.alter(constraint_name=newname, update_mappings=UpdateMappings.immediate)
|
|
76
|
-
self._post(cond)
|
|
77
|
-
|
|
78
|
-
def test_rename_key_deferred(self):
|
|
79
|
-
oldname = "dept_dept_no_key"
|
|
80
|
-
newname = "dept_DEPT_NUM_key"
|
|
81
|
-
|
|
82
|
-
def condf(model):
|
|
83
|
-
def cond(before, after):
|
|
84
|
-
before(len(mmo.find(model, ["dept_schema", oldname])))
|
|
85
|
-
after(len(mmo.find(model, ["dept_schema", newname])))
|
|
86
|
-
return cond
|
|
87
|
-
|
|
88
|
-
self._pre(condf(self.model))
|
|
89
|
-
t = self.model.schemas["dept_schema"].tables["dept"]
|
|
90
|
-
k = t.keys[(t.schema, oldname)]
|
|
91
|
-
k.alter(constraint_name=newname, update_mappings=UpdateMappings.deferred)
|
|
92
|
-
self._pre(condf(self.model.catalog.getCatalogModel()))
|
|
93
|
-
self.model.apply()
|
|
94
|
-
self._post(condf(self.model.catalog.getCatalogModel()))
|
|
95
|
-
|
|
96
|
-
def test_rename_fkey(self):
|
|
97
|
-
oldname = "person_dept_fkey"
|
|
98
|
-
newname = "person_department_FKey"
|
|
99
|
-
|
|
100
|
-
def cond(before, after):
|
|
101
|
-
before(len(mmo.find(self.model, ["person_schema", oldname])))
|
|
102
|
-
after(len(mmo.find(self.model, ["person_schema", newname])))
|
|
103
|
-
|
|
104
|
-
self._pre(cond)
|
|
105
|
-
t = self.model.schemas["person_schema"].tables["person"]
|
|
106
|
-
fk = t.foreign_keys[(t.schema, oldname)]
|
|
107
|
-
fk.alter(constraint_name=newname, update_mappings=UpdateMappings.immediate)
|
|
108
|
-
self._post(cond)
|
|
109
|
-
|
|
110
|
-
def test_rename_fkey_deferred(self):
|
|
111
|
-
oldname = "person_dept_fkey"
|
|
112
|
-
newname = "person_department_FKey"
|
|
113
|
-
|
|
114
|
-
def condf(model):
|
|
115
|
-
def cond(before, after):
|
|
116
|
-
before(len(mmo.find(model, ["person_schema", oldname])))
|
|
117
|
-
after(len(mmo.find(model, ["person_schema", newname])))
|
|
118
|
-
return cond
|
|
119
|
-
|
|
120
|
-
self._pre(condf(self.model))
|
|
121
|
-
t = self.model.schemas["person_schema"].tables["person"]
|
|
122
|
-
fk = t.foreign_keys[(t.schema, oldname)]
|
|
123
|
-
fk.alter(constraint_name=newname, update_mappings=UpdateMappings.deferred)
|
|
124
|
-
self._pre(condf(self.model.catalog.getCatalogModel()))
|
|
125
|
-
self.model.apply()
|
|
126
|
-
self._post(condf(self.model.catalog.getCatalogModel()))
|
|
127
|
-
|
|
128
|
-
def _do_test_rename_key_on_table_move(self, deferred=False):
|
|
129
|
-
oldname = ["dept_schema", "dept_dept_no_key"]
|
|
130
|
-
newname = ["new_schema", "dept_dept_no_key"]
|
|
131
|
-
|
|
132
|
-
def condf(model):
|
|
133
|
-
def cond(before, after):
|
|
134
|
-
before(len(mmo.find(model, oldname)))
|
|
135
|
-
after(len(mmo.find(model, newname)))
|
|
136
|
-
return cond
|
|
137
|
-
|
|
138
|
-
self.model.create_schema(
|
|
139
|
-
Schema.define(newname[0])
|
|
140
|
-
)
|
|
141
|
-
|
|
142
|
-
self._pre(condf(self.model))
|
|
143
|
-
t = self.model.schemas[oldname[0]].tables["dept"]
|
|
144
|
-
t.alter(schema_name=newname[0],
|
|
145
|
-
update_mappings=UpdateMappings.deferred if deferred else UpdateMappings.immediate)
|
|
146
|
-
if deferred:
|
|
147
|
-
self._pre(condf(self.model.catalog.getCatalogModel()))
|
|
148
|
-
self.model.apply()
|
|
149
|
-
self._post(condf(self.model.catalog.getCatalogModel()))
|
|
150
|
-
else:
|
|
151
|
-
self._post(condf(self.model))
|
|
152
|
-
|
|
153
|
-
def test_rename_key_on_table_move(self):
|
|
154
|
-
self._do_test_rename_key_on_table_move()
|
|
155
|
-
|
|
156
|
-
def test_rename_key_on_table_move_deferred(self):
|
|
157
|
-
self._do_test_rename_key_on_table_move(deferred=True)
|
|
158
|
-
|
|
159
|
-
def _do_test_rename_fkey_on_table_move(self, deferred=False):
|
|
160
|
-
oldname = ["person_schema", "person_dept_fkey"]
|
|
161
|
-
newname = ["new_schema", "person_dept_fkey"]
|
|
162
|
-
|
|
163
|
-
def condf(model):
|
|
164
|
-
def cond(before, after):
|
|
165
|
-
before(len(mmo.find(model, oldname)))
|
|
166
|
-
after(len(mmo.find(model, newname)))
|
|
167
|
-
return cond
|
|
168
|
-
|
|
169
|
-
self.model.create_schema(
|
|
170
|
-
Schema.define(newname[0])
|
|
171
|
-
)
|
|
172
|
-
|
|
173
|
-
self._pre(condf(self.model))
|
|
174
|
-
t = self.model.schemas[oldname[0]].tables["person"]
|
|
175
|
-
t.alter(schema_name=newname[0],
|
|
176
|
-
update_mappings=UpdateMappings.deferred if deferred else UpdateMappings.immediate)
|
|
177
|
-
if deferred:
|
|
178
|
-
self._pre(condf(self.model.catalog.getCatalogModel()))
|
|
179
|
-
self.model.apply()
|
|
180
|
-
self._post(condf(self.model.catalog.getCatalogModel()))
|
|
181
|
-
else:
|
|
182
|
-
self._post(condf(self.model))
|
|
183
|
-
|
|
184
|
-
def test_rename_fkey_on_table_move(self):
|
|
185
|
-
self._do_test_rename_key_on_table_move()
|
|
186
|
-
|
|
187
|
-
def test_rename_fkey_on_table_move_deferred(self):
|
|
188
|
-
self._do_test_rename_key_on_table_move(deferred=True)
|
|
189
|
-
|
|
190
|
-
def _do_test_rename_constraints_on_schema_rename(self, deferred=False):
|
|
191
|
-
oldfk = ["person_schema", "person_dept_fkey"]
|
|
192
|
-
newfk = ["new_schema", "person_dept_fkey"]
|
|
193
|
-
oldk = ["person_schema", "person_RID_key"]
|
|
194
|
-
newk = ["new_schema", "person_RID_key"]
|
|
195
|
-
|
|
196
|
-
def condf(model):
|
|
197
|
-
def cond(before, after):
|
|
198
|
-
for tag_name, mapping_before, mapping_after, old_constraint, new_constraint in [
|
|
199
|
-
(tag.visible_columns, oldk, newk, oldk, newk),
|
|
200
|
-
(tag.visible_foreign_keys, oldfk, newfk, oldfk, newfk),
|
|
201
|
-
(tag.source_definitions, 'personnel', 'personnel', oldfk, newfk)
|
|
202
|
-
]:
|
|
203
|
-
before(any([m.tag == tag_name and m.mapping == mapping_before for m in mmo.find(model, old_constraint)]))
|
|
204
|
-
after(any([m.tag == tag_name and m.mapping == mapping_after for m in mmo.find(model, new_constraint)]))
|
|
205
|
-
return cond
|
|
206
|
-
|
|
207
|
-
self._pre(condf(self.model))
|
|
208
|
-
s = self.model.schemas[oldfk[0]]
|
|
209
|
-
s.alter(schema_name=newfk[0],
|
|
210
|
-
update_mappings=UpdateMappings.deferred if deferred else UpdateMappings.immediate)
|
|
211
|
-
if deferred:
|
|
212
|
-
self._pre(condf(self.model.catalog.getCatalogModel()))
|
|
213
|
-
self.model.apply()
|
|
214
|
-
self._post(condf(self.model.catalog.getCatalogModel()))
|
|
215
|
-
else:
|
|
216
|
-
self._post(condf(self.model))
|
|
217
|
-
|
|
218
|
-
def test_rename_constraints_on_schema_rename(self):
|
|
219
|
-
self._do_test_rename_constraints_on_schema_rename()
|
|
220
|
-
|
|
221
|
-
def test_rename_constraints_on_schema_rename_deferred(self):
|
|
222
|
-
self._do_test_rename_constraints_on_schema_rename(deferred=True)
|
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
"""Unit tests for MMO replace 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 TestMMOReplace (BaseMMOTestCase):
|
|
15
|
-
|
|
16
|
-
def _pre(self, fn):
|
|
17
|
-
"""Pre-condition evaluation."""
|
|
18
|
-
fn(self.assertTrue, self.assertFalse)
|
|
19
|
-
|
|
20
|
-
def _post(self, fn):
|
|
21
|
-
"""Post-condition evaluation"""
|
|
22
|
-
fn(self.assertFalse, self.assertTrue)
|
|
23
|
-
|
|
24
|
-
def test_replace_col_in_vizcols(self):
|
|
25
|
-
def cond(before, after):
|
|
26
|
-
before(len(mmo.find(self.model, ["dept_schema", "dept", "postal_code"])) == 1)
|
|
27
|
-
after(len(mmo.find(self.model, ["dept_schema", "dept", "zip"])) == 1)
|
|
28
|
-
|
|
29
|
-
self._pre(cond)
|
|
30
|
-
mmo.replace(self.model, ["dept_schema", "dept", "postal_code"], ["dept_schema", "dept", "zip"])
|
|
31
|
-
self._post(cond)
|
|
32
|
-
|
|
33
|
-
def test_replace_col_in_vizcols_pseudocol_simple(self):
|
|
34
|
-
def cond(before, after):
|
|
35
|
-
before(len(mmo.find(self.model, ["dept_schema", "dept", "street_address"])) == 1)
|
|
36
|
-
after(len(mmo.find(self.model, ["dept_schema", "dept", "number_and_street_name"])) == 1)
|
|
37
|
-
|
|
38
|
-
self._pre(cond)
|
|
39
|
-
mmo.replace(self.model, ["dept_schema", "dept", "street_address"], ["dept_schema", "dept", "number_and_street_name"])
|
|
40
|
-
self._post(cond)
|
|
41
|
-
|
|
42
|
-
def test_replace_col_in_sourcedefs_columns(self):
|
|
43
|
-
def cond(before, after):
|
|
44
|
-
before(len(mmo.find(self.model, ["dept_schema", "dept", "country"])) == 1)
|
|
45
|
-
after(len(mmo.find(self.model, ["dept_schema", "dept", "country_code"])) == 1)
|
|
46
|
-
|
|
47
|
-
self._pre(cond)
|
|
48
|
-
mmo.replace(self.model, ["dept_schema", "dept", "country"], ["dept_schema", "dept", "country_code"])
|
|
49
|
-
self._post(cond)
|
|
50
|
-
|
|
51
|
-
def test_replace_col_in_vizcols_pseudocol(self):
|
|
52
|
-
def cond(before, after):
|
|
53
|
-
before(len(mmo.find(self.model, ["dept_schema", "dept", "state"])) == 1)
|
|
54
|
-
after(len(mmo.find(self.model, ["dept_schema", "dept", "state_or_province"])) == 1)
|
|
55
|
-
|
|
56
|
-
self._pre(cond)
|
|
57
|
-
mmo.replace(self.model, ["dept_schema", "dept", "state"], ["dept_schema", "dept", "state_or_province"])
|
|
58
|
-
self._post(cond)
|
|
59
|
-
|
|
60
|
-
def test_replace_col_in_sourcedefs_sources(self):
|
|
61
|
-
def cond(before, after):
|
|
62
|
-
before(len(mmo.find(self.model, ["dept_schema", "dept", "city"])) == 1)
|
|
63
|
-
after(len(mmo.find(self.model, ["dept_schema", "dept", "township"])) == 1)
|
|
64
|
-
|
|
65
|
-
self._pre(cond)
|
|
66
|
-
mmo.replace(self.model, ["dept_schema", "dept", "city"], ["dept_schema", "dept", "township"])
|
|
67
|
-
self._post(cond)
|
|
68
|
-
|
|
69
|
-
def _do_test_replace_key_in_vizcols(self, oldfk, newfk):
|
|
70
|
-
replacement = newfk
|
|
71
|
-
newfk = [replacement[0], replacement[1] if replacement[1] else oldfk[1]]
|
|
72
|
-
|
|
73
|
-
def cond(before, after):
|
|
74
|
-
before(len(mmo.find(self.model, oldfk)) == 1)
|
|
75
|
-
after(len(mmo.find(self.model, newfk)) == 1)
|
|
76
|
-
|
|
77
|
-
self._pre(cond)
|
|
78
|
-
mmo.replace(self.model, oldfk, replacement)
|
|
79
|
-
self._post(cond)
|
|
80
|
-
|
|
81
|
-
def test_replace_key_in_vizcols(self):
|
|
82
|
-
self._do_test_replace_key_in_vizcols(["dept_schema", "dept_RID_key"], ["dept_schema", "dept_RID_key1"])
|
|
83
|
-
|
|
84
|
-
def test_replace_key_in_vizcols_by_schema_only(self):
|
|
85
|
-
self._do_test_replace_key_in_vizcols(["dept_schema", "dept_RID_key"], ["new_schema", None])
|
|
86
|
-
|
|
87
|
-
def _do_test_replace_fkey_in_vizsrc(self, tagname, oldfk, newfk):
|
|
88
|
-
replacement = newfk
|
|
89
|
-
newfk = [replacement[0], replacement[1] if replacement[1] else oldfk[1]]
|
|
90
|
-
|
|
91
|
-
def cond(before, after):
|
|
92
|
-
before(any([m.tag == tagname and m.mapping == oldfk for m in mmo.find(self.model, oldfk)]))
|
|
93
|
-
after(any([m.tag == tagname and m.mapping == newfk for m in mmo.find(self.model, newfk)]))
|
|
94
|
-
|
|
95
|
-
self._pre(cond)
|
|
96
|
-
mmo.replace(self.model, oldfk, replacement)
|
|
97
|
-
self._post(cond)
|
|
98
|
-
|
|
99
|
-
def test_replace_fkey_in_vizfkeys(self):
|
|
100
|
-
self._do_test_replace_fkey_in_vizsrc(tag.visible_foreign_keys, ["person_schema", "person_dept_fkey"], ["person_schema", "person_dept_fkey1"])
|
|
101
|
-
|
|
102
|
-
def test_replace_fkey_in_vizcols(self):
|
|
103
|
-
self._do_test_replace_fkey_in_vizsrc(tag.visible_columns, ["person_schema", "person_dept_fkey"], ["person_schema", "person_dept_fkey1"])
|
|
104
|
-
|
|
105
|
-
def test_replace_fkey_in_sourcedefs_fkeys(self):
|
|
106
|
-
self._do_test_replace_fkey_in_vizsrc(tag.source_definitions, ["person_schema", "person_dept_fkey"], ["person_schema", "person_dept_fkey1"])
|
|
107
|
-
|
|
108
|
-
def test_replace_fkey_in_vizfkeys_by_schema_only(self):
|
|
109
|
-
self._do_test_replace_fkey_in_vizsrc(tag.visible_foreign_keys, ["person_schema", "person_dept_fkey"], ["new_schema", None])
|
|
110
|
-
|
|
111
|
-
def test_replace_fkey_in_vizcols_by_schema_only(self):
|
|
112
|
-
self._do_test_replace_fkey_in_vizsrc(tag.visible_columns, ["person_schema", "person_dept_fkey"], ["new_schema", None])
|
|
113
|
-
|
|
114
|
-
def test_replace_fkey_in_sourcedefs_fkeys_by_schema_only(self):
|
|
115
|
-
self._do_test_replace_fkey_in_vizsrc(tag.source_definitions, ["person_schema", "person_dept_fkey"], ["new_schema", None])
|
|
116
|
-
|
|
117
|
-
def _do_test_replace_fkey_in_pseudocolumn(self, oldfk, newfk):
|
|
118
|
-
replacement = newfk
|
|
119
|
-
newfk = [replacement[0], replacement[1] if replacement[1] else oldfk[1]]
|
|
120
|
-
|
|
121
|
-
def cond(before, after):
|
|
122
|
-
before(any([m.tag == tag.visible_columns and isinstance(m.mapping, dict) for m in mmo.find(self.model, oldfk)]))
|
|
123
|
-
after(any([m.tag == tag.visible_columns and isinstance(m.mapping, dict) for m in mmo.find(self.model, newfk)]))
|
|
124
|
-
|
|
125
|
-
self._pre(cond)
|
|
126
|
-
mmo.replace(self.model, oldfk, replacement)
|
|
127
|
-
self._post(cond)
|
|
128
|
-
|
|
129
|
-
def test_replace_fkey_in_pseudocolumn(self):
|
|
130
|
-
self._do_test_replace_fkey_in_pseudocolumn(["person_schema", "person_dept_fkey"], ["person_schema", "person_dept_fkey1"])
|
|
131
|
-
|
|
132
|
-
def test_replace_fkey_in_pseudocolumn_by_schema_only(self):
|
|
133
|
-
self._do_test_replace_fkey_in_pseudocolumn(["person_schema", "person_dept_fkey"], ["new_schema", None])
|
|
134
|
-
|
|
135
|
-
def _do_test_replace_fkey_in_sourcedefs_sources(self, oldfk, newfk):
|
|
136
|
-
replacement = newfk
|
|
137
|
-
newfk = [replacement[0], replacement[1] if replacement[1] else oldfk[1]]
|
|
138
|
-
|
|
139
|
-
def cond(before, after):
|
|
140
|
-
before(any([m.tag == tag.source_definitions and m.mapping == 'personnel' for m in mmo.find(self.model, oldfk)]))
|
|
141
|
-
after(any([m.tag == tag.source_definitions and m.mapping == 'personnel' for m in mmo.find(self.model, newfk)]))
|
|
142
|
-
|
|
143
|
-
self._pre(cond)
|
|
144
|
-
mmo.replace(self.model, oldfk, replacement)
|
|
145
|
-
self._post(cond)
|
|
146
|
-
|
|
147
|
-
def test_replace_fkey_in_sourcedefs_sources(self):
|
|
148
|
-
self._do_test_replace_fkey_in_sourcedefs_sources(["person_schema", "person_dept_fkey"], ["person_schema", "person_dept_fkey1"])
|
|
149
|
-
|
|
150
|
-
def test_replace_fkey_in_sourcedefs_sources_by_schema_only(self):
|
|
151
|
-
self._do_test_replace_fkey_in_sourcedefs_sources(["person_schema", "person_dept_fkey"], ["new_schema", None])
|
|
152
|
-
|
|
153
|
-
def test_replace_col_in_search_box(self):
|
|
154
|
-
def cond(before, after):
|
|
155
|
-
before(len(mmo.find(self.model, ["person_schema", "person", "last_name"])) == 1)
|
|
156
|
-
after(len(mmo.find(self.model, ["person_schema", "person", "surname"])) == 1)
|
|
157
|
-
|
|
158
|
-
self._pre(cond)
|
|
159
|
-
mmo.replace(self.model, ["person_schema", "person", "last_name"], ["person_schema", "person", "surname"])
|
|
160
|
-
self._post(cond)
|
|
161
|
-
|
|
162
|
-
def test_replace_all_constraints_by_schema_only(self):
|
|
163
|
-
oldfk = ["person_schema", "person_dept_fkey"]
|
|
164
|
-
newfk = ["new_schema", "person_dept_fkey"]
|
|
165
|
-
oldk = ["person_schema", "person_RID_key"]
|
|
166
|
-
newk = ["new_schema", "person_RID_key"]
|
|
167
|
-
|
|
168
|
-
def cond(before, after):
|
|
169
|
-
for tag_name, mapping_before, mapping_after, old_constraint, new_constraint in [
|
|
170
|
-
(tag.visible_columns, oldk, newk, oldk, newk),
|
|
171
|
-
(tag.visible_foreign_keys, oldfk, newfk, oldfk, newfk),
|
|
172
|
-
(tag.source_definitions, 'personnel', 'personnel', oldfk, newfk)
|
|
173
|
-
]:
|
|
174
|
-
before(any([m.tag == tag_name and m.mapping == mapping_before for m in mmo.find(self.model, old_constraint)]))
|
|
175
|
-
after(any([m.tag == tag_name and m.mapping == mapping_after for m in mmo.find(self.model, new_constraint)]))
|
|
176
|
-
|
|
177
|
-
self._pre(cond)
|
|
178
|
-
mmo.replace(self.model, ["person_schema", None], ["new_schema", None])
|
|
179
|
-
self._post(cond)
|
|
180
|
-
|