From f53ae3f00d4415b8a0a87355c3ec3779397c5fc1 Mon Sep 17 00:00:00 2001 From: Tim Powell Date: Mon, 21 Jan 2019 22:41:07 -0500 Subject: [PATCH] Support EnumTypes that do not specify values --- odata/metadata.py | 5 ++++- odata/tests/demo_metadata.xml | 9 ++++++++- odata/tests/test_metadata.py | 6 ++++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/odata/metadata.py b/odata/metadata.py index 5b76be8..e1580e1 100644 --- a/odata/metadata.py +++ b/odata/metadata.py @@ -399,13 +399,16 @@ def _parse_enumtype(self, xmlq, enumtype_element, schema_name): 'fully_qualified_name': '.'.join([schema_name, enum_name]), 'members': [] } + next_value = 0 for enum_member in xmlq(enumtype_element, 'edm:Member'): member_name = enum_member.attrib['Name'] - member_value = int(enum_member.attrib['Value']) + member_value = enum_member.attrib.get('Value', next_value) + member_value = int(member_value) enum['members'].append({ 'name': member_name, 'value': member_value, }) + next_value += 1 return enum def parse_document(self, doc): diff --git a/odata/tests/demo_metadata.xml b/odata/tests/demo_metadata.xml index cb98786..ebe672c 100644 --- a/odata/tests/demo_metadata.xml +++ b/odata/tests/demo_metadata.xml @@ -15,6 +15,7 @@ + @@ -40,6 +41,12 @@ + + + + + + @@ -72,4 +79,4 @@ - \ No newline at end of file + diff --git a/odata/tests/test_metadata.py b/odata/tests/test_metadata.py index 8d6029b..eaef744 100644 --- a/odata/tests/test_metadata.py +++ b/odata/tests/test_metadata.py @@ -45,6 +45,12 @@ def test_read(self): self.assertIn('DemoUnboundAction', Service.actions) + ColorSelection = Service.types['DemoService.Models.ColorSelection'] + self.assertEqual(ColorSelection.Red.value, 1) + ShippingRestriction = Service.types[ + 'DemoService.Models.ShippingRestriction'] + self.assertEqual(ShippingRestriction.Fragile.value, 1) + def test_computed_value_in_insert(self): with responses.RequestsMock() as rsps: rsps.add(rsps.GET, 'http://demo.local/odata/$metadata/',