Skip to content

Commit 70ebb0d

Browse files
committed
[property] Change DType Confirmation for Extend
Changing dtype confirmation, adding exceptions for dtypes possessing string type values to allow expending with new values. Related to issue #318.
1 parent 4d598c8 commit 70ebb0d

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

odml/property.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -587,9 +587,12 @@ def extend(self, obj, strict=True):
587587
return
588588

589589
new_value = self._convert_value_input(obj)
590+
special_dtypes = ["url", "person", "text"]
590591
if len(new_value) > 0 and strict and dtypes.infer_dtype(new_value[0]) != self.dtype:
591-
raise ValueError("odml.Property.extend: "
592-
"passed value data type does not match dtype!")
592+
593+
if not (dtypes.infer_dtype(new_value[0]) == "string" and self.dtype in special_dtypes):
594+
raise ValueError("odml.Property.extend: "
595+
"passed value data type does not match dtype!")
593596

594597
if not self._validate_values(new_value):
595598
raise ValueError("odml.Property.extend: passed value(s) cannot be converted "

test/test_property.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,27 @@ def test_value_extend(self):
285285
with self.assertRaises(ValueError):
286286
prop.extend([6, "some text"])
287287

288+
p1 = Property(name="prop", value=["A Abraham", "B Barnes", "C Clark"], dtype=DType.person)
289+
p1.extend("D Dickins")
290+
self.assertEqual(len(p1), 4)
291+
self.assertRaises(ValueError, p1.extend, 1)
292+
self.assertRaises(ValueError, p1.extend, 1.3)
293+
self.assertRaises(ValueError, p1.extend, True)
294+
295+
p2 = Property(name="prop", value=["https://en.wikipedia.org/wiki/Earth"], dtype=DType.url)
296+
p2.extend("https://en.wikipedia.org/wiki/Mars")
297+
self.assertEqual(len(p2), 2)
298+
self.assertRaises(ValueError, p2.append, 1)
299+
self.assertRaises(ValueError, p2.append, 1.3)
300+
self.assertRaises(ValueError, p2.append, True)
301+
302+
p3 = Property(name="prop", value=["Earth is No. 3."], dtype=DType.text)
303+
p3.extend("Mars is No. 4.")
304+
self.assertEqual(len(p3), 2)
305+
self.assertRaises(ValueError, p3.append, 1)
306+
self.assertRaises(ValueError, p3.append, 1.3)
307+
self.assertRaises(ValueError, p3.append, True)
308+
288309
def test_get_set_value(self):
289310
values = [1, 2, 3, 4, 5]
290311
p = Property("property", value=values)

0 commit comments

Comments
 (0)