"""OpenAPI core models module"""


class BaseModel(dict):
    """Base class for OpenAPI models."""

    def __getattr__(self, attr_name):
        """Only search through properties if attribute not found normally.
        :type attr_name: str
        """
        try:
            return self[attr_name]
        except KeyError:
            raise AttributeError(
                'type object {0!r} has no attribute {1!r}'
                .format(type(self).__name__, attr_name)
            )


class ModelFactory(object):

    def create(self, properties, name=None):
        model = BaseModel
        if name is not None:
            model = type(name, (BaseModel, ), {})

        return model(**properties)