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/',