Source code for repository.tests.services.dspace_rest

"""
Mocks a DSPACE REST API.
"""

from repository.tests.services.base import MockResponse, mock_endpoint

import json, re


[docs]def read(o, **kwargs): """ Mock a response to an item request. """ match = re.match('/rest/items/[0-9]+/$', o.path) if match: with open('repository/tests/services/responses/dspace_item.xml', 'r') as f: data = f.read() else: data = [] return data
[docs]def bitstreams(o, **kwargs): """ Mock a response to a bitstreams request. """ match = re.match('/rest/items/[0-9]+/bitstreams/$', o.path) if match: with open('repository/tests/services/responses/dspace_item_bitstreams.xml', 'r') as f: data = f.read() else: data = [] return data
[docs]def collections(o, **kwargs): """ Mock a response to a bitstreams request. """ if re.match('/rest/collections/$', o.path): with open('repository/tests/services/responses/dspace_collections.xml', 'r') as f: data = f.read() else: data = [] return data
[docs]def collection(o, **kwargs): """ Mock a response to a bitstreams request. """ if re.match('/rest/collections/[0-9]+/items/$', o.path): with open('repository/tests/services/responses/dspace_collection_items.xml', 'r') as f: data = f.read() else: data = [] return data
@mock_endpoint def get(o, **kwargs): status = 200 if re.match('/rest/items/[0-9]+/$', o.path): data = read(o, **kwargs) elif re.match('/rest/items/[0-9]+/bitstreams/$', o.path): data = bitstreams(o, **kwargs) elif re.match('/rest/collections/$', o.path): data = collections(o, **kwargs) elif re.match('/rest/collections/[0-9]+/items/$', o.path): data = collection(o, **kwargs) else: status = 404 data = {'body': {'message': 'No such path'}} return status, data configuration = json.dumps({ 'name': 'DSPACE', 'format': 'xml', 'description': 'description', 'endpoint': 'http://localhost:8000/rest/', 'content_endpoint': 'https://hpsrepository.asu.edu/', 'namespace': 'https://hpsrepository.asu.edu/handle/', 'methods': { 'bitstreams': { 'name': 'bitstreams', 'method': 'GET', 'path': 'items/', 'request': { 'template': '{id}/bitstreams/', }, 'response': { 'results': 'list', 'path': 'bitstreams.bitstream', 'fields': { 'id': { 'name': 'id', 'type': 'int', 'display': 'ID', 'path': 'id', }, 'content_type': { 'name': 'content_type', 'type': 'text', 'display': 'Content type', 'path': 'mimeType' }, 'description': { 'name': 'description', 'type': 'text', 'display': 'Description', 'path': 'description' }, 'name': { 'name': 'name', 'type': 'text', 'display': 'Name', 'path': 'name' }, 'retrieve_link': { 'name': 'retrieve_link', 'type': 'text', 'display': None, 'path': 'retrieveLink', }, 'content_location': { 'name': 'content_location', 'type': 'template', 'display': 'Content location', 'template': '{content_endpoint}/{retrieve_link}', } }, } }, 'read': { 'name': 'read', 'method': 'GET', 'path': 'items/', 'request': { 'template': '{id}/', }, 'response': { 'results': 'instance', 'path': 'item', 'fields': { 'handle': { 'name': 'handle', 'display': 'Handle', 'type': 'text', 'path': 'handle', }, 'title': { 'name': 'title', 'display': 'Title', 'type': 'text', 'path': 'name', }, 'uri': { 'name': 'uri', 'display': 'URI', 'type': 'url', 'template': '{namespace}{handle}', }, 'updated': { 'name': 'updated', 'display': 'Last updated', 'type': 'datetime', 'path': 'lastModified', }, 'id': { 'name': 'id', 'display': 'ID', 'type': 'int', 'path': 'id' } }, 'content': { 'type': 'bitstream', 'method': 'bitstreams' } } }, 'collections': { 'name': 'collections', 'method': 'GET', 'path': 'collections/', 'request': {}, 'response': { 'results': 'list', 'path': 'collections.collection', 'fields': { 'handle': { 'name': 'handle', 'display': 'Handle', 'type': 'text', 'path': 'handle', }, 'name': { 'name': 'name', 'display': 'Name', 'type': 'text', 'path': 'name', }, 'uri': { 'name': 'uri', 'display': 'URI', 'type': 'url', 'template': '{namespace}{handle}', }, 'copyright': { 'name': 'copyright', 'display': 'Copyright', 'type': 'text', 'path': 'copyrightText', }, 'description': { 'name': 'description', 'display': 'Description', 'type': 'text', 'path': 'shortDescription', }, 'id': { 'name': 'id', 'display': 'ID', 'type': 'int', 'path': 'id' }, 'size': { 'name': 'size', 'display': 'Number of resources', 'type': 'int', 'path': 'numberItems', }, }, } }, 'collection': { 'name': 'collection', 'method': 'GET', 'path': 'collections/', 'request': { 'template': '{id}/items/' }, 'response': { 'results': 'list', 'path': 'items.item', 'fields': { 'handle': { 'name': 'handle', 'display': 'Handle', 'type': 'text', 'path': 'handle', }, 'title': { 'name': 'title', 'display': 'Title', 'type': 'text', 'path': 'name', }, 'uri': { 'name': 'uri', 'display': 'URI', 'type': 'url', 'template': '{namespace}{handle}', }, 'updated': { 'name': 'updated', 'display': 'Last updated', 'type': 'datetime', 'path': 'lastModified', }, 'id': { 'name': 'id', 'display': 'ID', 'type': 'int', 'path': 'id' } }, } }, } })