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
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_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'), ])
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_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())
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())
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, [])
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_) ]
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_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', )
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""")
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
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 ]
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())
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