Skip to content

Commit b34e681

Browse files
committed
iter validation
1 parent 1ac624a commit b34e681

File tree

3 files changed

+20
-14
lines changed

3 files changed

+20
-14
lines changed

openapiart/common.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -662,8 +662,7 @@ def append(self, item):
662662
"""Append an item to the end of OpenApiIter
663663
TBD: type check, raise error on mismatch
664664
"""
665-
if isinstance(item, OpenApiObject) is False:
666-
raise Exception("Item is not an instance of OpenApiObject")
665+
self._instanceOf(item)
667666
self._add(item)
668667
return self
669668

@@ -672,8 +671,7 @@ def clear(self):
672671
self._index = -1
673672

674673
def set(self, index, item):
675-
if isinstance(item, OpenApiObject) is False:
676-
raise Exception("Item is not an instance of OpenApiObject")
674+
self._instanceOf(item)
677675
self._items[index] = item
678676
return self
679677

@@ -699,3 +697,6 @@ def __str__(self):
699697

700698
def __eq__(self, other):
701699
return self.__str__() == other.__str__()
700+
701+
def _instanceOf(self, item):
702+
raise NotImplementedError("validating an OpenApiIter object is not supported")

openapiart/generator.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -583,6 +583,10 @@ def _write_openapilist_special_methods(self, contained_class_name, schema_object
583583
self._write(1, "def next(self):")
584584
self._write(2, "# type: () -> %s" % contained_class_name)
585585
self._write(2, "return self._next()")
586+
self._write()
587+
self._write(1, "def _instanceOf(self, item):")
588+
self._write(2, "if not isinstance(item, %s):" % (contained_class_name))
589+
self._write(3, "raise Exception(\"Item is not an instance of %s\")" % (contained_class_name))
586590

587591
def _write_factory_method(self, contained_class_name, method_name, ref, openapi_list=False, choice_method=False):
588592
yobject = self._get_object_from_ref(ref)

openapiart/tests/test_py_go_diff.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,18 @@ def test_iter_set_method(default_config):
77
default_config.j.add()
88
default_config.j.set(0, module.JObject())
99
assert len(default_config.j) == 1
10-
# below 2 statements shall raise exception need to modify generator
11-
# if exception is raised, it would conflict with below mentioned
12-
# comments about flow.packet
13-
default_config.j.append(module.FObject())
14-
default_config.j.set(1, module.FObject())
10+
try:
11+
default_config.j.append(module.FObject())
12+
pytest.fail("appending an invalid object is not throwing exception")
13+
except Exception:
14+
pass
15+
try:
16+
default_config.j.set(0, module.FObject())
17+
pytest.fail("setting an invalid object is not throwing exception")
18+
except Exception:
19+
pass
1520

16-
default_config.j.set(1, module.JObject())
17-
# below statement is a replica of snappi flow.packet Iter
18-
# indexing will return protocol header obj instead of FlowHeader
19-
# which is actually set with set or append or add methods
20-
assert isinstance(default_config.j[1], module.EObject)
21+
assert isinstance(default_config.j[0], module.EObject)
2122

2223

2324
def test_validation_errors():

0 commit comments

Comments
 (0)