diff --git a/odata/reflect-templates/enum_entity.mako b/odata/reflect-templates/enum_entity.mako new file mode 100644 index 0000000..d2b4548 --- /dev/null +++ b/odata/reflect-templates/enum_entity.mako @@ -0,0 +1,7 @@ +<%page args="name, entity"/>\ +<% short_name = name.split(".")[-1] %>\ +${short_name} = Enum("${short_name}", {\ +%for prop in entity: +"${prop.name}" : "${prop.value}",\ +%endfor +}) \ No newline at end of file diff --git a/odata/reflect-templates/main.mako b/odata/reflect-templates/main.mako index 1d51e03..c1b6163 100644 --- a/odata/reflect-templates/main.mako +++ b/odata/reflect-templates/main.mako @@ -16,13 +16,20 @@ import datetime import uuid import decimal +from enum import Enum + from odata.entity import EntityBase from odata.property import StringProperty, IntegerProperty, NavigationProperty, DatetimeProperty, DecimalProperty, FloatProperty, BooleanProperty, UUIDProperty - +from odata.enumtype import EnumType, EnumTypeProperty class ReflectionBase(EntityBase): pass +# ************ Start enum type definitions ************ +%for type_name in enum_types: +<%include file="enum_entity.mako" args="name=type_name, entity=enum_types[type_name]"/> +%endfor +# ************ End enum type definitions ************ # ************ Start type definitions ************ %for type_name in types: diff --git a/odata/reflect-templates/property.mako b/odata/reflect-templates/property.mako index 43cf4d5..fccf8c7 100644 --- a/odata/reflect-templates/property.mako +++ b/odata/reflect-templates/property.mako @@ -16,4 +16,7 @@ % if property.is_computed_value: , is_computed_value=True\ % endif + % if hasattr(property, 'enum_class'): +, enum_class=${property.enum_class.__name__}\ + % endif ) \ No newline at end of file diff --git a/odata/reflector.py b/odata/reflector.py index 86cfff8..977a003 100644 --- a/odata/reflector.py +++ b/odata/reflector.py @@ -79,6 +79,7 @@ import rich from io import StringIO from pathlib import Path +from enum import EnumMeta from mako.lookup import TemplateLookup from mako.runtime import Context @@ -92,7 +93,8 @@ "DecimalProperty": "decimal.Decimal", "FloatProperty": "float", "BooleanProperty": "bool", - "UUIDProperty": "uuid.UUID" + "UUIDProperty": "uuid.UUID", + "EnumTypeProperty": "str" } @@ -109,10 +111,14 @@ def write_reflected_types(self): lookup = TemplateLookup(directories=[str(template_folder)], output_encoding="utf-8", preprocessor=[lambda x: x.replace("\r\n", "\n")]) template = lookup.get_template("main.mako") + types = {k: v for k, v in self.types.items() if not isinstance(v, EnumMeta)} + enum_types = {k: v for k, v in self.types.items() if isinstance(v, EnumMeta)} + buffer = StringIO() context = Context(buffer, entities=self.entities, - types=self.types, + types=types, + enum_types=enum_types, type_translations=type_translations, package=self.package, metadata_url=self.metadata_url)