Exemplo n.º 1
0
def test_parse_any_root_object(source_obj, generated_classes):
    parser = JsonSchemaParser(BaseModel,
                              CustomRootType,
                              data_model_field_type=DataModelField)
    parser.parse_root_type('AnyObject', JsonSchemaObject.parse_obj(source_obj),
                           [])
    assert dump_templates(list(parser.results)) == generated_classes
def test_parse_object(source_obj, generated_classes):
    parser = JsonSchemaParser(
        data_model_field_type=DataModelFieldBase,
        source='',
    )
    parser.parse_object('Person', JsonSchemaObject.parse_obj(source_obj), [])
    assert dump_templates(list(parser.results)) == generated_classes
Exemplo n.º 3
0
def test_get_data_type_array(schema_types, result_types):
    parser = JsonSchemaParser('')
    assert parser.get_data_type(JsonSchemaObject(type=schema_types)) == DataType(
        data_types=[DataType(type=r,) for r in result_types],
        is_optional='null' in schema_types,
        imports=[IMPORT_OPTIONAL] if 'null' in schema_types else [],
    )
def test_json_schema_ref_url_json(mocker):
    parser = JsonSchemaParser('')
    obj = {
        "type": "object",
        "properties": {
            "user": {
                '$ref': 'https://example.org/schema.json#/definitions/User'
            }
        },
    }
    mock_get = mocker.patch('httpx.get')
    mock_get.return_value.text = json.dumps(
        json.load((DATA_PATH / 'user.json').open()))

    parser.parse_raw_obj('Model', obj, ['Model'])
    assert (dump_templates(list(parser.results)) == '''class Model(BaseModel):
    user: Optional[User] = None


class User(BaseModel):
    name: Optional[str] = Field(None, example='ken')


class Pet(BaseModel):
    name: Optional[str] = Field(None, examples=['dog', 'cat'])''')
    mock_get.assert_called_once_with('https://example.org/schema.json', )
def test_json_schema_object_cached_ref_url_yaml(mocker):
    parser = JsonSchemaParser('')

    obj = JsonSchemaObject.parse_obj({
        'type': 'object',
        'properties': {
            'pet': {
                '$ref': 'https://example.org/schema.yaml#/definitions/Pet'
            },
            'user': {
                '$ref': 'https://example.org/schema.yaml#/definitions/User'
            },
        },
    })
    mock_get = mocker.patch('httpx.get')
    mock_get.return_value.text = yaml.safe_dump(
        json.load((DATA_PATH / 'user.json').open()))

    parser.parse_ref(obj, [])
    assert (dump_templates(list(parser.results)) == '''class Pet(BaseModel):
    name: Optional[str] = Field(None, examples=['dog', 'cat'])


class User(BaseModel):
    name: Optional[str] = Field(None, example='ken')''')
    mock_get.assert_called_once_with('https://example.org/schema.yaml', )
def test_json_schema_object_ref_url():
    parser = JsonSchemaParser(BaseModel,
                              CustomRootType,
                              data_model_field_type=DataModelField)
    obj = JsonSchemaObject.parse_obj({'$ref': 'https://example.org'})
    with pytest.raises(NotImplementedError):
        parser.parse_ref(obj)
def test_get_data_type_array(schema_types, result_types):
    parser = JsonSchemaParser('')
    assert parser.get_data_type(
        JsonSchemaObject(type=schema_types)) == parser.data_type(
            data_types=[parser.data_type(type=r, ) for r in result_types],
            is_optional='null' in schema_types,
        )
def test_get_data_type_array(schema_types, result_types):
    parser = JsonSchemaParser(BaseModel, CustomRootType)
    assert parser.get_data_type(JsonSchemaObject(type=schema_types)) == [
        DataType(
            type=r,
            optional='null' in schema_types,
            imports_=[IMPORT_OPTIONAL] if 'null' in schema_types else None,
        ) for r in result_types
    ]
def test_parse_nested_array():
    parser = JsonSchemaParser(
        DATA_PATH / 'nested_array.json',
        data_model_field_type=DataModelFieldBase,
    )
    parser.parse()
    assert (dump_templates(list(
        parser.results)) == (DATA_PATH /
                             'nested_array.json.snapshot').read_text())
Exemplo n.º 10
0
def test_get_data_type(schema_type, schema_format, result_type, from_, import_):
    if from_ and import_:
        imports: Optional[List[Import]] = [Import(from_=from_, import_=import_)]
    else:
        imports = []

    parser = JsonSchemaParser('')
    assert parser.get_data_type(
        JsonSchemaObject(type=schema_type, format=schema_format)
    ) == DataType(type=result_type, imports=imports)
def test_get_data_type(schema_type, schema_format, result_type, from_,
                       import_):
    if from_ and import_:
        import_: Optional[Import] = Import(from_=from_, import_=import_)
    else:
        import_ = None

    parser = JsonSchemaParser('')
    assert (parser.get_data_type(
        JsonSchemaObject(type=schema_type,
                         format=schema_format)).dict() == DataType(
                             type=result_type, import_=import_).dict())
Exemplo n.º 12
0
def test_get_data_type(schema_type, schema_format, result_type, from_,
                       import_):
    if from_ and import_:
        imports_: Optional[List[Import]] = [
            Import(from_=from_, import_=import_)
        ]
    else:
        imports_ = None

    parser = JsonSchemaParser(BaseModel, CustomRootType)
    assert parser.get_data_type(
        JsonSchemaObject(type=schema_type, format=schema_format)) == [
            DataType(type=result_type, imports_=imports_)
        ]
Exemplo n.º 13
0
def translate(input_text: Union[Json, Dict[str, Any]], all_optional: bool,
              snake_case_field: bool) -> str:
    builder = SchemaBuilder()
    builder.add_object(input_text)
    schema = builder.to_schema()
    if all_optional:
        schema["required"] = []

    parser = JsonSchemaParser(
        source=json.dumps(schema),
        base_class="pydantic.BaseModel",
        snake_case_field=snake_case_field,
    )

    return parser.parse()
def test_parse_nested_array():
    parser = JsonSchemaParser(
        BaseModel,
        CustomRootType,
        data_model_field_type=DataModelField,
        text=(DATA_PATH / 'nested_array.json').read_text(),
    )
    parser.parse()
    assert (dump_templates(list(parser.results)) == """\
class BoundingBox(BaseModel):
    type: str
    coordinates: List[Union[float, str]]


class Model(BaseModel):
    bounding_box: Optional[BoundingBox] = None
    attributes: Optional[Dict[str, Any]] = None""")
Exemplo n.º 15
0
def test_json_schema_parser_parse_ref():
    parser = JsonSchemaParser(BaseModel, CustomRootType)
    parser.parse_raw_obj = Mock()
    external_parent_path = Path(DATA_PATH / 'external_parent.json')
    parser.base_path = external_parent_path.parent
    parser.excludes_ref_path = set()
    external_parent = external_parent_path.read_text()
    obj = JsonSchemaObject.parse_raw(external_parent)

    parser.parse_ref(obj)
    parser.parse_raw_obj.assert_has_calls([
        call(
            'Yaml',
            {
                'properties': {
                    'firstName': {
                        'type': 'string'
                    }
                },
                'type': 'object'
            },
        ),
        call(
            'Json',
            {
                'properties': {
                    'firstName': {
                        'type': 'string'
                    }
                },
                'type': 'object'
            },
        ),
    ])
def test_json_schema_object_ref_url_json(mocker):
    parser = JsonSchemaParser('')
    obj = JsonSchemaObject.parse_obj(
        {'$ref': 'https://example.com/person.schema.json#/definitions/User'})
    mock_get = mocker.patch('httpx.get')
    mock_get.return_value.text = json.dumps(
        {
            "$id": "https://example.com/person.schema.json",
            "$schema": "http://json-schema.org/draft-07/schema#",
            "definitions": {
                "User": {
                    "type": "object",
                    "properties": {
                        "name": {
                            "type": "string",
                        }
                    },
                }
            },
        }, )

    parser.parse_ref(obj, ['Model'])
    assert (dump_templates(list(parser.results)) == '''class User(BaseModel):
    name: Optional[str] = None''')
    parser.parse_ref(obj, ['Model'])
    mock_get.assert_has_calls([
        call('https://example.com/person.schema.json'),
    ])
Exemplo n.º 17
0
def test_json_schema_parser_parse_ref():
    parser = JsonSchemaParser(BaseModel,
                              CustomRootType,
                              data_model_field_type=DataModelField)
    parser.parse_raw_obj = Mock()
    external_parent_path = Path(DATA_PATH / 'external_parent.json')
    parser.base_path = external_parent_path.parent
    parser.excludes_ref_path = set()
    external_parent = external_parent_path.read_text()
    obj = JsonSchemaObject.parse_raw(external_parent)

    parser.parse_ref(obj, [])
Exemplo n.º 18
0
def test_json_schema_object_ref_url_yaml(mocker):
    parser = JsonSchemaParser(BaseModel,
                              CustomRootType,
                              data_model_field_type=DataModelField)
    obj = JsonSchemaObject.parse_obj(
        {'$ref': 'https://example.org/schema.yaml#/definitions/User'})
    mock_get = mocker.patch('httpx.get')
    mock_get.return_value.text = yaml.safe_dump(
        json.load((DATA_PATH / 'user.json').open()))

    parser.parse_ref(obj, ['User'])
    assert (dump_templates(list(parser.results)) == '''class User(BaseModel):
    name: Optional[str] = None''')
    parser.parse_ref(obj, [])
    mock_get.assert_called_once_with('https://example.org/schema.yaml', )
Exemplo n.º 19
0
def test_parse_default(source_obj, generated_classes):
    parser = JsonSchemaParser(BaseModel,
                              CustomRootType,
                              data_model_field_type=DataModelField)
    parser.parse_raw_obj('Defaults', source_obj, [])
    assert dump_templates(list(parser.results)) == generated_classes
def test_parse_default(source_obj, generated_classes):
    parser = JsonSchemaParser('')
    parser.parse_raw_obj('Defaults', source_obj, [])
    assert dump_templates(list(parser.results)) == generated_classes
def test_parse_one_of_object(source_obj, generated_classes):
    parser = JsonSchemaParser('')
    parser.parse_raw_obj('onOfObject', source_obj, [])
    assert dump_templates(list(parser.results)) == generated_classes
def test_parse_any_root_object(source_obj, generated_classes):
    parser = JsonSchemaParser('')
    parser.parse_root_type('AnyObject', JsonSchemaObject.parse_obj(source_obj),
                           [])
    assert dump_templates(list(parser.results)) == generated_classes
Exemplo n.º 23
0
def test_parse_object(source_obj, generated_classes):
    parser = JsonSchemaParser(BaseModel, CustomRootType)
    parser.parse_object('Person', JsonSchemaObject.parse_obj(source_obj))
    assert dump_templates(list(parser.results)) == generated_classes
Exemplo n.º 24
0
def test_get_data_type_array(schema_types, result_types):
    parser = JsonSchemaParser(BaseModel, CustomRootType)
    assert parser.get_data_type(JsonSchemaObject(type=schema_types)) == [
        DataType(type=r) for r in result_types
    ]
Exemplo n.º 25
0
def test_get_data_type_invalid_obj():
    with pytest.raises(ValueError, match='invalid schema object'):
        parser = JsonSchemaParser(BaseModel, CustomRootType)
        assert parser.get_data_type(JsonSchemaObject())