def test_register_schema(app, dir_factory): ext = InvenioJSONSchemas(app, entry_point_group=None) schema_files = build_schemas(1) with dir_factory(schema_files) as directory: registered_schemas = set(list(schema_files.keys())[:1]) nonregistered_schema = [s for s in schema_files if s not in registered_schemas] for schema in registered_schemas: ext.register_schema(directory, schema) assert set(ext.list_schemas()) == registered_schemas for schema in nonregistered_schema: with pytest.raises(JSONSchemaNotFound): ext.get_schema(schema)
def test_register_schema(app, dir_factory): ext = InvenioJSONSchemas(app, entry_point_group=None) schema_files = build_schemas(1) with dir_factory(schema_files) as directory: registered_schemas = set(list(schema_files.keys())[:1]) nonregistered_schema = [ s for s in schema_files if s not in registered_schemas ] for schema in registered_schemas: ext.register_schema(directory, schema) assert set(ext.list_schemas()) == registered_schemas for schema in nonregistered_schema: with pytest.raises(JSONSchemaNotFound): ext.get_schema(schema)
def test_api(app, dir_factory): ext = InvenioJSONSchemas(app, entry_point_group=None) schema_files = build_schemas(1) with dir_factory(schema_files) as directory: ext.register_schemas_dir(directory) for path in schema_files.keys(): # test get_schema_dir assert ext.get_schema_dir(path) == directory # test get_schema_path assert ext.get_schema_path(path) == \ os.path.join(directory, path) # test get_schema assert ext.get_schema(path) == json.loads(schema_files[path]) # test list_schemas assert set(schema_files.keys()) == set(ext.list_schemas()) # test failure when asking for non existing schemas fails with pytest.raises(JSONSchemaNotFound) as exc_info: ext.get_schema('not_existing_schema.json') assert exc_info.value.schema == 'not_existing_schema.json' # test failure when asking for non existing schemas' path with pytest.raises(JSONSchemaNotFound) as exc_info: ext.get_schema_path('not_existing_schema.json') assert exc_info.value.schema == 'not_existing_schema.json'
def test_cache(app, dir_factory): """Test cached schema loading.""" m = mock_open with mock.patch('invenio_jsonschemas.ext.open', m): ext = InvenioJSONSchemas(app, entry_point_group=None) schema_files = build_schemas(1) with dir_factory(schema_files) as directory: ext.register_schemas_dir(directory) assert m.counter == 0 ext.get_schema('rootschema_1.json') assert m.counter == 1 ext.get_schema('rootschema_1.json') ext.get_schema('rootschema_1.json') assert m.counter == 1 ext.get_schema('sub1/subschema_1.json') assert m.counter == 2 ext.get_schema('sub1/subschema_1.json') assert m.counter == 2
import json from flask import Flask from invenio_jsonschemas import InvenioJSONSchemas # Create Flask application app = Flask(__name__) # set the endpoint serving the JSON schemas app.config[InvenioJSONSchemas.CONFIG_ENDPOINT] = '/schemas' # Initialize the application with the InvenioJSONSchema extension. # This registers the jsonschemas from examples/samplepkg/jsonschemas as # samplepkg's setup.py has the "invenio_jsonschemas.schemas" entrypoint. ext = InvenioJSONSchemas(app) # list all registered schemas print('SCHEMAS >> {}'.format(ext.list_schemas())) for schema in ext.list_schemas(): print('=' * 50) print('SCHEMA {}'.format(schema)) # retrieve the schema content print(json.dumps(ext.get_schema(schema), indent=4)) # InvenioJSONSchemas registers a blueprint serving the JSON schemas print('>> You can retrieve the schemas using the url in their "id".') if __name__ == "__main__": app.run()
import json from flask import Flask from invenio_jsonschemas import InvenioJSONSchemas # Create Flask application app = Flask(__name__) # set the endpoint serving the JSON schemas app.config['JSONSCHEMAS_ENDPOINT'] = '/schemas' # Initialize the application with the InvenioJSONSchema extension. # This registers the jsonschemas from examples/samplepkg/jsonschemas as # samplepkg's setup.py has the "invenio_jsonschemas.schemas" entrypoint. ext = InvenioJSONSchemas(app) # list all registered schemas print('SCHEMAS >> {}'.format(ext.list_schemas())) for schema in ext.list_schemas(): print('=' * 50) print('SCHEMA {}'.format(schema)) # retrieve the schema content print(json.dumps(ext.get_schema(schema), indent=4)) # InvenioJSONSchemas registers a blueprint serving the JSON schemas print('>> You can retrieve the schemas using the url in their "id".') if __name__ == "__main__": app.run()