def get_all_enum_proxies(): """Produce a collection of all the application Enums (subclasses of `Enum`) in proxy form. Note: Subclasses of `Enum` will only be found if they were previously imported. :return: A list of dicts of the form:: { 'name': <Enum.__name__>, 'items: [ { 'name': <EnumItem.name>, 'key': <EnumItem.key>, 'value': <EnumItem.value>, 'metadata': <EnumItem.metadata>, }, ], 'metadata': {...}, } """ enum_proxies = [] for enum_cls in sorted(cu.subclasses(Enum), key=lambda obj: obj.__name__): if is_dynamic_enum(enum_cls): # Explicitly refresh the dynamic enums enum_cls.__refresh__() items = [create_enum_item_proxy( su.snake_to_spinal(enum_cls.lookup(x[0])), x[0], x[1], enum_cls.metadata(x[0])) for x in enum_cls.verbose()] enum_metadata = enum_cls.__metadata__ if hasattr(enum_cls, '__metadata__') else None enum_proxies.append(create_enum_proxy(enum_cls.__name__, items, enum_metadata)) return enum_proxies
def register_schema_models(self, exclusions=None): """Register all the Swagger schema models by locating classes that extend from `APISchema`. The schema fields are converted to Restplus fields in order to generate the Swagger-compliant schema models. If there are `SchemaView`s defined for the `APISchema` class, the view-specific schema models are also generated. """ exclusions = exclusions or set() for schema_model_cls in filter(lambda x: x not in exclusions, cu.subclasses(schema.APISchema)): self.schema_model(schema_model_cls) if hasattr(schema_model_cls.Meta, 'views'): for schema_view in schema_model_cls.Meta.views: self.schema_model(schema_model_cls, schema_view.name)