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_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'),
    ])
Example #3
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():
    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)
Example #5
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, [])
Example #6
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', )