def test_happy_path(self, model_property_factory, string_property_factory,
                        date_time_property_factory):
        from openapi_python_client.parser.properties import Class, Schemas, build_model_property

        name = "prop"
        nullable = False
        required = True

        data = oai.Schema.construct(
            required=["req"],
            title="MyModel",
            properties={
                "req": oai.Schema.construct(type="string"),
                "opt": oai.Schema(type="string", format="date-time"),
            },
            description="A class called MyModel",
            nullable=nullable,
        )
        schemas = Schemas(classes_by_reference={"OtherModel": None},
                          classes_by_name={"OtherModel": None})

        model, new_schemas = build_model_property(data=data,
                                                  name=name,
                                                  schemas=schemas,
                                                  required=required,
                                                  parent_name="parent",
                                                  config=Config())

        assert new_schemas != schemas
        assert new_schemas.classes_by_name == {
            "OtherModel": None,
            "ParentMyModel": model,
        }
        assert new_schemas.classes_by_reference == {
            "OtherModel": None,
        }
        assert model == model_property_factory(
            name=name,
            required=required,
            nullable=nullable,
            class_info=Class(name="ParentMyModel",
                             module_name="parent_my_model"),
            required_properties=[
                string_property_factory(name="req", required=True)
            ],
            optional_properties=[
                date_time_property_factory(name="opt", required=False)
            ],
            description=data.description,
            relative_imports={
                "from dateutil.parser import isoparse",
                "from typing import cast",
                "import datetime",
                "from ..types import UNSET, Unset",
                "from typing import Union",
            },
            additional_properties=True,
        )
Example #2
0
    def test_model_name_conflict(self):
        from openapi_python_client.parser.properties import Schemas, build_model_property

        data = oai.Schema.construct()
        schemas = Schemas(classes_by_name={"OtherModel": None})

        err, new_schemas = build_model_property(
            data=data, name="OtherModel", schemas=schemas, required=True, parent_name=None, config=Config()
        )

        assert new_schemas == schemas
        assert err == PropertyError(detail='Attempted to generate duplicate models with name "OtherModel"', data=data)
Example #3
0
    def test_additional_schemas(self, additional_properties_schema, expected_additional_properties):
        from openapi_python_client.parser.properties import Schemas, build_model_property

        data = oai.Schema.construct(
            additionalProperties=additional_properties_schema,
        )

        model, _ = build_model_property(
            data=data, name="prop", schemas=Schemas(), required=True, parent_name="parent", config=MagicMock()
        )

        assert model.additional_properties == expected_additional_properties
    def test_model_bad_properties(self):
        from openapi_python_client.parser.properties import Schemas, build_model_property

        data = oai.Schema(properties={
            "bad":
            oai.Reference.construct(ref="#/components/schema/NotExist"),
        }, )
        result = build_model_property(data=data,
                                      name="prop",
                                      schemas=Schemas(),
                                      required=True,
                                      parent_name="parent",
                                      config=Config())[0]
        assert isinstance(result, PropertyError)
Example #5
0
    def test_bad_props_return_error(self):
        from openapi_python_client.parser.properties import Schemas, build_model_property

        data = oai.Schema(
            properties={
                "bad": oai.Schema(type="not_real"),
            },
        )
        schemas = Schemas()

        err, new_schemas = build_model_property(
            data=data, name="prop", schemas=schemas, required=True, parent_name=None, config=MagicMock()
        )

        assert new_schemas == schemas
        assert err == PropertyError(detail="unknown type not_real", data=oai.Schema(type="not_real"))
def test_build_model_property(additional_properties_schema, expected_additional_properties):
    from openapi_python_client.parser.properties import Schemas, build_model_property

    data = oai.Schema.construct(
        required=["req"],
        title="MyModel",
        properties={
            "req": oai.Schema.construct(type="string"),
            "opt": oai.Schema(type="string", format="date-time"),
        },
        description="A class called MyModel",
        nullable=False,
        additionalProperties=additional_properties_schema,
    )
    schemas = Schemas(models={"OtherModel": None})

    model, new_schemas = build_model_property(
        data=data,
        name="prop",
        schemas=schemas,
        required=True,
        parent_name="parent",
    )

    assert new_schemas != schemas
    assert new_schemas.models == {
        "OtherModel": None,
        "ParentMyModel": model,
    }
    assert model == ModelProperty(
        name="prop",
        required=True,
        nullable=False,
        default=None,
        reference=Reference(class_name="ParentMyModel", module_name="parent_my_model"),
        required_properties=[StringProperty(name="req", required=True, nullable=False, default=None)],
        optional_properties=[DateTimeProperty(name="opt", required=False, nullable=False, default=None)],
        description=data.description,
        relative_imports={
            "from dateutil.parser import isoparse",
            "from typing import cast",
            "import datetime",
            "from ..types import UNSET, Unset",
            "from typing import Union",
        },
        additional_properties=expected_additional_properties,
    )
    def test_model_bad_additional_properties(self):
        from openapi_python_client.parser.properties import Schemas, build_model_property

        additional_properties = oai.Schema(
            type="object",
            properties={
                "bad": oai.Reference(ref="#/components/schemas/not_exist"),
            },
        )
        data = oai.Schema(additionalProperties=additional_properties)
        result = build_model_property(data=data,
                                      name="prop",
                                      schemas=Schemas(),
                                      required=True,
                                      parent_name="parent",
                                      config=Config())[0]
        assert isinstance(result, PropertyError)
    def test_bad_additional_props_return_error(self):
        from openapi_python_client.parser.properties import Config, Schemas, build_model_property

        additional_properties = oai.Schema(
            type="object",
            properties={
                "bad": oai.Schema(type="not_real"),
            },
        )
        data = oai.Schema(additionalProperties=additional_properties)
        schemas = Schemas()

        err, new_schemas = build_model_property(
            data=data, name="prop", schemas=schemas, required=True, parent_name=None, config=Config()
        )

        assert new_schemas == schemas
        assert err == PropertyError(detail="unknown type not_real", data=oai.Schema(type="not_real"))
def test_build_model_property_bad_prop():
    from openapi_python_client.parser.properties import Schemas, build_model_property

    data = oai.Schema(
        properties={
            "bad": oai.Schema(type="not_real"),
        },
    )
    schemas = Schemas(models={"OtherModel": None})

    err, new_schemas = build_model_property(
        data=data,
        name="prop",
        schemas=schemas,
        required=True,
        parent_name=None,
    )

    assert new_schemas == schemas
    assert err == PropertyError(detail="unknown type not_real", data=oai.Schema(type="not_real"))
Example #10
0
def test_build_model_property_conflict():
    from openapi_python_client.parser.properties import Schemas, build_model_property

    data = oai.Schema.construct(
        required=["req"],
        properties={
            "req": oai.Schema.construct(type="string"),
            "opt": oai.Schema(type="string", format="date-time"),
        },
        nullable=False,
    )
    schemas = Schemas(models={"OtherModel": None})

    err, new_schemas = build_model_property(
        data=data,
        name="OtherModel",
        schemas=schemas,
        required=True,
        parent_name=None,
    )

    assert new_schemas == schemas
    assert err == PropertyError(detail='Attempted to generate duplicate models with name "OtherModel"', data=data)