Generate schemas dynamically from pieces provided by each object class
This way we benefit from:
* knowing which attributes are used/required by each object class and
subclass
* Having validation function definitions near the class going to use them
Change-Id: I8fd6773c51d19405a585977af4ed72cad2b21db1
diff --git a/selftest/config_test.py b/selftest/config_test.py
index 83a8d06..c26ebd1 100755
--- a/selftest/config_test.py
+++ b/selftest/config_test.py
@@ -116,35 +116,35 @@
a = {'times': '2'}
b = {'type': 'osmo-bts-trx'}
res = {'times': '2', 'type': 'osmo-bts-trx'}
-config.combine(a, b)
+schema.combine(a, b)
assert a == res
print('- Combine dicts 2:')
a = {'times': '1', 'label': 'foo', 'type': 'osmo-bts-trx'}
b = {'type': 'osmo-bts-trx'}
res = {'times': '1', 'label': 'foo', 'type': 'osmo-bts-trx'}
-config.combine(a, b)
+schema.combine(a, b)
assert a == res
print('- Combine lists:')
a = { 'a_list': ['x', 'y', 'z'] }
b = { 'a_list': ['y'] }
res = {'a_list': ['x', 'y', 'z']}
-config.combine(a, b)
+schema.combine(a, b)
assert a == res
print('- Combine lists 2:')
a = { 'a_list': ['x'] }
b = { 'a_list': ['w', 'u', 'x', 'y', 'z'] }
res = {'a_list': ['x', 'w', 'u', 'y', 'z']}
-config.combine(a, b)
+schema.combine(a, b)
assert a == res
print('- Combine lists 3:')
a = { 'a_list': ['x', 3] }
b = { 'a_list': ['y', 'z'] }
try:
- config.combine(a, b)
+ schema.combine(a, b)
except ValueError:
print("ValueError expected")
@@ -152,7 +152,7 @@
a = { 'a_list': [2, 3] }
b = { 'a_list': ['y', 'z'] }
try:
- config.combine(a, b)
+ schema.combine(a, b)
except ValueError:
print("ValueError expected")
@@ -160,7 +160,7 @@
a = { 'a_list': [{}, {}] }
b = { 'a_list': ['y', 'z'] }
try:
- config.combine(a, b)
+ schema.combine(a, b)
except ValueError:
print("ValueError expected")
@@ -168,49 +168,49 @@
a = { 'a_list': [{}, {}] }
b = { 'a_list': [{}] }
res = {'a_list': [{}, {}]}
-config.combine(a, b)
+schema.combine(a, b)
assert a == res
print('- Combine lists 7:')
a = { 'times': '1', 'label': 'foo', 'trx': [{'nominal power': '10'}, {'nominal power': '12'}] }
b = { 'type': 'osmo-bts-trx', 'trx': [{'nominal power': '10'}, {'nominal power': '12'}] }
res = {'times': '1', 'label': 'foo', 'trx': [{'nominal power': '10'}, {'nominal power': '12'}], 'type': 'osmo-bts-trx'}
-config.combine(a, b)
+schema.combine(a, b)
assert a == res
print('- Combine lists 8:')
a = { 'times': '1', 'label': 'foo', 'trx': [{'nominal power': '10'}] }
b = { 'type': 'osmo-bts-trx', 'trx': [{'nominal power': '10'}, {'nominal power': '12'}] }
res = {'times': '1', 'label': 'foo', 'trx': [{'nominal power': '10'}, {'nominal power': '12'}], 'type': 'osmo-bts-trx'}
-config.combine(a, b)
+schema.combine(a, b)
assert a == res
print('- Combine lists 9:')
a = { 'times': '1', 'label': 'foo', 'trx': [{'nominal power': '10'}, {'nominal power': '12'}] }
b = { 'type': 'osmo-bts-trx', 'trx': [{'nominal power': '10'}] }
res = {'times': '1', 'label': 'foo', 'trx': [{'nominal power': '10'}, {'nominal power': '12'}], 'type': 'osmo-bts-trx'}
-config.combine(a, b)
+schema.combine(a, b)
assert a == res
print('- Combine lists 10:')
a = { 'times': '1', 'label': 'foo', 'trx': [{'nominal power': '10'}, {'nominal power': '12'}] }
b = { 'type': 'osmo-bts-trx', 'trx': [{}, {'nominal power': '12'}] }
res = {'times': '1', 'label': 'foo', 'trx': [{'nominal power': '10'}, {'nominal power': '12'}], 'type': 'osmo-bts-trx'}
-config.combine(a, b)
+schema.combine(a, b)
assert a == res
print('- Combine lists 13:')
a = { 'times': '1', 'label': 'foo', 'trx': [{}, {'nominal power': '12'}] }
b = { 'type': 'osmo-bts-trx', 'trx': [{'nominal power': '10'}, {'nominal power': '12'}] }
res = {'times': '1', 'label': 'foo', 'trx': [{'nominal power': '10'}, {'nominal power': '12'}], 'type': 'osmo-bts-trx'}
-config.combine(a, b)
+schema.combine(a, b)
assert a == res
print('- Combine lists 14:')
a = { 'times': '1', 'label': 'foo', 'trx': [] }
b = { 'type': 'osmo-bts-trx', 'trx': [] }
res = {'times': '1', 'label': 'foo', 'trx': [], 'type': 'osmo-bts-trx'}
-config.combine(a, b)
+schema.combine(a, b)
assert a == res
# vim: expandtab tabstop=4 shiftwidth=4
diff --git a/selftest/resource_test.py b/selftest/resource_test.py
index f399e20..ecbeb24 100755
--- a/selftest/resource_test.py
+++ b/selftest/resource_test.py
@@ -7,6 +7,7 @@
import atexit
import _prep
from osmo_gsm_tester.core import config, log, util
+from osmo_gsm_tester.core.schema import generate_schemas
from osmo_gsm_tester import resource
workdir = util.get_tempdir()
@@ -16,6 +17,9 @@
log.get_process_id = lambda: '123-1490837279'
+# Generate supported schemas dynamically from objects:
+generate_schemas()
+
print('- expect solutions:')
pprint.pprint(
resource.solve([ [0, 1, 2],
diff --git a/selftest/suite_test.py b/selftest/suite_test.py
index c4dd5bf..1fb95ec 100755
--- a/selftest/suite_test.py
+++ b/selftest/suite_test.py
@@ -3,6 +3,7 @@
import _prep
import shutil
from osmo_gsm_tester.core import log, config, util
+from osmo_gsm_tester.core.schema import generate_schemas
from osmo_gsm_tester import suite, report
config.ENV_CONF = './suite_test'
@@ -24,6 +25,9 @@
#log.style_change(trace=True)
+# Generate supported schemas dynamically from objects:
+generate_schemas()
+
print('- non-existing suite dir')
assert(log.run_logging_exceptions(suite.load, 'does_not_exist') == None)