diff --git a/storage_service/static/openapi/openapispecs/client.py b/storage_service/static/openapi/openapispecs/client.py index 98e2a5294..1b176c4c0 100644 --- a/storage_service/static/openapi/openapispecs/client.py +++ b/storage_service/static/openapi/openapispecs/client.py @@ -1,12 +1,13 @@ """Remple OpenAPI Client This module is not a code generator. It does not generate source code. It takes -an OpenAPI 3.0 definition of an API as a dict and returns a module with a -class (dynamically named according to the title of the API defined in the -OpenAPI spec) that provides a Pythonic interface to the OpenAPI-described API. +an OpenAPI 3.0 definition of an API as an OrderedDict (see OPENAPI_SPEC) and +returns a module with a class (dynamically named according to the title of the +API defined in the OpenAPI spec) that provides a Pythonic interface to the +OpenAPI-described API. -Imagine an API entitled "Archivematica Storage Service Api" and which exposes -CRUDS endpoints on two resources: locations and spaces. Example usage might be:: +Imagine an API entitled "Archivematica Storage Service API" and which exposes +CRUD endpoints on two resources: locations and spaces. Example usage might be:: >>> from clientbuilder import ArchivematicaStorageServiceApiClient >>> c = ArchivematicaStorageServiceApiClient( @@ -20,8 +21,9 @@ class (dynamically named according to the title of the API defined in the ... 'filter': ['space', 'uuid', '=', first_space['uuid']]})[ ... 'items'] >>> first_location = c.location.get(locations_of_first_space[0]['uuid']) + >>> first_location['purpose'] = 'AS' >>> updated_first_location = c.location.update( - ... pk=first_location['uuid'], purpose='AS') + ... pk=first_location['uuid'], **first_location) >>> new_location = c.location.create( ... purpose='AS', ... relative_path='some/path', @@ -42,9 +44,12 @@ class (dynamically named according to the title of the API defined in the TODOs: -- Review how update requests work wrt pre-existing values and nullification ... -- Use the OpenAPI response descriptions to handle HTTP responses gracefully. -- handle circular request bodies, e.g., search +- handle client-side validation of circular request bodies, i.e., search +- Document that `update` (PUT) is update and not PATCH. That is, the resource + sent with an update/PUT request determines the updated state of the new + resource completely. You cannot send just the updated attributes. You must + send all attributes. That is, you must do your "patching" on the client and + send the *entire* new state of the updated resource to the server. """ @@ -54,13 +59,14 @@ class (dynamically named according to the title of the API defined in the import json import pprint import sys +import textwrap import urllib3 import requests logger = logging.getLogger(__name__) -log_lvl = logging.DEBUG +log_lvl = logging.INFO out_hdlr = logging.StreamHandler(sys.stdout) logger.addHandler(out_hdlr) logger.setLevel(log_lvl) @@ -69,18 +75,40 @@ class (dynamically named according to the title of the API defined in the OPENAPI_SPEC = ( -OrderedDict([('openapi', '3.0.0'), ('info', OrderedDict([('version', '3.0.0'), ('title', 'Archivematica Storage Service API'), ('description', 'An API for the Archivematica Storage Service.')])), ('servers', [OrderedDict([('url', '/api/v3'), ('description', 'The default server for the Archivematica Storage Service.')])]), ('security', [OrderedDict([('ApiKeyAuth', [])])]), ('components', OrderedDict([('securitySchemes', OrderedDict([('ApiKeyAuth', OrderedDict([('type', 'apiKey'), ('in', 'header'), ('name', 'Authorization')]))])), ('parameters', OrderedDict([('items_per_page', OrderedDict([('in', 'query'), ('name', 'items_per_page'), ('required', False), ('schema', OrderedDict([('type', 'integer'), ('minimum', 1), ('default', 10)])), ('description', 'The maximum number of items to return.')])), ('page', OrderedDict([('in', 'query'), ('name', 'page'), ('required', False), ('schema', OrderedDict([('type', 'integer'), ('minimum', 1), ('default', 1)])), ('description', 'The page number to return.')])), ('order_by_direction', OrderedDict([('in', 'query'), ('name', 'order_by_direction'), ('schema', OrderedDict([('type', 'string'), ('enum', ['-', 'ascending', 'asc', 'descending', 'desc'])])), ('required', False), ('description', 'The direction of the ordering; omitting this parameter means ascending direction.')])), ('order_by_attribute', OrderedDict([('in', 'query'), ('name', 'order_by_attribute'), ('schema', {'type': 'string'}), ('description', 'Attribute of the resource that view results should be ordered by.'), ('required', False)])), ('order_by_subattribute', OrderedDict([('in', 'query'), ('name', 'order_by_subattribute'), ('schema', {'type': 'string'}), ('required', False), ('description', 'Attribute of the related attribute order_by_attribute of the resource that view results should be ordered by.')]))])), ('schemas', OrderedDict([('ErrorSchema', OrderedDict([('type', 'object'), ('properties', OrderedDict([('error', OrderedDict([('type', 'string')]))])), ('required', ['error'])])), ('PaginatorSchema', OrderedDict([('type', 'object'), ('properties', OrderedDict([('count', {'type': 'integer'}), ('page', {'default': 1, 'minimum': 1, 'type': 'integer'}), ('items_per_page', {'default': 10, 'minimum': 1, 'type': 'integer'})])), ('required', ['page', 'items_per_page'])])), ('LocationView', {'required': ['space', 'purpose', 'relative_path'], 'type': 'object', 'properties': {u'masters': OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uri')]))]), 'used': OrderedDict([('type', 'integer'), ('default', 0), ('description', 'Amount used, in bytes.')]), 'uuid': OrderedDict([('type', 'string'), ('format', 'uuid'), ('description', 'Unique identifier')]), 'space': OrderedDict([('type', 'string'), ('format', 'uri')]), u'locationpipeline_set': OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uri')]))]), 'enabled': OrderedDict([('type', 'boolean'), ('default', True), ('description', 'True if space can be accessed.')]), 'quota': OrderedDict([('type', 'integer'), ('nullable', True), ('default', None), ('description', 'Size, in bytes (optional)')]), 'relative_path': OrderedDict([('type', 'string'), ('description', "Path to location, relative to the storage space's path.")]), u'package_set': OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uri')]))]), 'purpose': OrderedDict([('type', 'string'), ('enum', ['AR', 'AS', 'CP', 'DS', 'SD', 'SS', 'BL', 'TS', 'RP']), ('description', 'Purpose of the space. Eg. AIP storage, Transfer source')]), 'replicators': OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uri')])), ('description', 'Other locations that will be used to create replicas of the packages stored in this location')]), 'pipeline': OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uri')])), ('description', 'UUID of the Archivematica instance using this location.')]), u'id': OrderedDict([('type', 'integer')]), 'description': OrderedDict([('type', 'string'), ('nullable', True), ('default', None), ('description', 'Human-readable description.')])}}), ('PaginatedSubsetOfLocations', OrderedDict([('type', 'object'), ('properties', OrderedDict([('paginator', {'$ref': '#/components/schemas/PaginatorSchema'}), ('items', OrderedDict([('type', 'array'), ('items', {'$ref': '#/components/schemas/LocationView'})]))])), ('required', ['paginator', 'items'])])), ('LocationCreate', {'required': ['space', 'relative_path', 'purpose'], 'type': 'object', 'properties': {'pipeline': OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uuid of a pipeline resource')])), ('description', 'UUID of the Archivematica instance using this location.')]), 'description': OrderedDict([('type', 'string'), ('maxLength', 256), ('default', None), ('description', 'Human-readable description.')]), 'space': OrderedDict([('type', 'string'), ('format', 'uuid of a space resource')]), 'enabled': OrderedDict([('type', 'boolean'), ('default', True), ('description', 'True if space can be accessed.')]), 'quota': OrderedDict([('type', 'integer'), ('default', None), ('description', 'Size, in bytes (optional)')]), 'relative_path': OrderedDict([('type', 'string'), ('description', "Path to location, relative to the storage space's path.")]), 'purpose': OrderedDict([('type', 'string'), ('enum', ['AR', 'AS', 'CP', 'DS', 'SD', 'SS', 'BL', 'TS', 'RP']), ('description', 'Purpose of the space. Eg. AIP storage, Transfer source')]), 'replicators': OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uuid of a location resource')])), ('description', 'Other locations that will be used to create replicas of the packages stored in this location')])}}), ('LocationUpdate', {'required': ['space', 'relative_path', 'purpose'], 'type': 'object', 'properties': {'pipeline': OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uuid of a pipeline resource')])), ('description', 'UUID of the Archivematica instance using this location.')]), 'description': OrderedDict([('type', 'string'), ('maxLength', 256), ('default', None), ('description', 'Human-readable description.')]), 'space': OrderedDict([('type', 'string'), ('format', 'uuid of a space resource')]), 'enabled': OrderedDict([('type', 'boolean'), ('default', True), ('description', 'True if space can be accessed.')]), 'quota': OrderedDict([('type', 'integer'), ('default', None), ('description', 'Size, in bytes (optional)')]), 'relative_path': OrderedDict([('type', 'string'), ('description', "Path to location, relative to the storage space's path.")]), 'purpose': OrderedDict([('type', 'string'), ('enum', ['AR', 'AS', 'CP', 'DS', 'SD', 'SS', 'BL', 'TS', 'RP']), ('description', 'Purpose of the space. Eg. AIP storage, Transfer source')]), 'replicators': OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uuid of a location resource')])), ('description', 'Other locations that will be used to create replicas of the packages stored in this location')])}}), ('NewLocation', OrderedDict([('type', 'object'), ('properties', OrderedDict([('spaces', OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uuid of an instance of the spaces resource')]))])), ('pipelines', OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uuid of an instance of the pipelines resource')]))])), ('locations', OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uuid of an instance of the locations resource')]))]))])), ('required', ['spaces', 'pipelines', 'locations'])])), ('EditALocation', OrderedDict([('type', 'object'), ('properties', OrderedDict([('data', {'$ref': '#/components/schemas/NewLocation'}), ('resource', {'$ref': '#/components/schemas/LocationView'})])), ('required', ['data', 'resource'])])), ('SimpleFilterOverLocations', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', ['used', 'uuid', 'enabled', 'quota', 'relative_path', 'purpose', u'id', 'description'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverLocationsMasters', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'masters'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['used', 'uuid', 'enabled', 'quota', 'relative_path', 'purpose', u'id', 'description'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverLocationsSpace', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', ['space'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['last_verified', 'used', 'verified', 'uuid', 'access_protocol', 'staging_path', 'size', 'path', u'id'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverLocationsLocationpipeline_set', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'locationpipeline_set'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', [u'id'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverLocationsPackage_set', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'package_set'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['size', 'status', 'package_type', 'uuid', 'misc_attributes', 'encryption_key_fingerprint', 'pointer_file_path', 'current_path', u'id', 'description'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverLocationsReplicators', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', ['replicators'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['used', 'uuid', 'enabled', 'quota', 'relative_path', 'purpose', u'id', 'description'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverLocationsPipeline', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', ['pipeline'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['api_key', 'uuid', 'enabled', 'api_username', 'remote_name', u'id', 'description'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('CoordinativeFilterOverLocations', OrderedDict([('type', 'object'), ('properties', OrderedDict([('conjunction', OrderedDict([('type', 'string'), ('enum', ['and', 'or'])])), ('complement', OrderedDict([('type', 'array'), ('items', {'$ref': '#/components/schemas/FilterOverLocations'})]))]))])), ('NegativeFilterOverLocations', OrderedDict([('type', 'object'), ('properties', OrderedDict([('negation', OrderedDict([('type', 'string'), ('enum', ['not'])])), ('complement', {'$ref': '#/components/schemas/FilterOverLocations'})]))])), ('ArrayFilterOverLocations', OrderedDict([('type', 'array'), ('items', {'oneOf': [{'type': 'string'}, {'type': 'integer'}]})])), ('ObjectFilterOverLocations', {'oneOf': [{'$ref': '#/components/schemas/CoordinativeFilterOverLocations'}, {'$ref': '#/components/schemas/NegativeFilterOverLocations'}, {'$ref': '#/components/schemas/SimpleFilterOverLocations'}, {'$ref': '#/components/schemas/FilterOverLocationsMasters'}, {'$ref': '#/components/schemas/FilterOverLocationsSpace'}, {'$ref': '#/components/schemas/FilterOverLocationsLocationpipeline_set'}, {'$ref': '#/components/schemas/FilterOverLocationsPackage_set'}, {'$ref': '#/components/schemas/FilterOverLocationsReplicators'}, {'$ref': '#/components/schemas/FilterOverLocationsPipeline'}]}), ('FilterOverLocations', {'oneOf': [{'$ref': '#/components/schemas/ObjectFilterOverLocations'}, {'$ref': '#/components/schemas/ArrayFilterOverLocations'}]}), ('SearchQueryOverLocations', OrderedDict([('type', 'object'), ('properties', OrderedDict([('filter', {'$ref': '#/components/schemas/FilterOverLocations'}), ('order_by', OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string')]))]))]))])), ('required', ['filter'])])), ('SearchOverLocations', OrderedDict([('type', 'object'), ('properties', OrderedDict([('query', {'$ref': '#/components/schemas/SearchQueryOverLocations'}), ('paginator', {'$ref': '#/components/schemas/PaginatorSchema'})])), ('required', ['query'])])), ('DataForNewSearchOverLocations', OrderedDict([('type', 'object'), ('properties', OrderedDict([('search_parameters', OrderedDict([('type', 'string')]))])), ('required', ['search_parameters'])])), ('PackageView', {'required': ['current_location', 'current_path', 'package_type', 'related_packages'], 'type': 'object', 'properties': {'size': OrderedDict([('type', 'integer'), ('default', 0), ('description', 'Size in bytes of the package')]), 'status': OrderedDict([('type', 'string'), ('enum', ['PENDING', 'STAGING', 'UPLOADED', 'VERIFIED', 'FAIL', 'DEL_REQ', 'DELETED', 'FINALIZE']), ('default', 'FAIL'), ('description', 'Status of the package in the storage service.')]), 'package_type': OrderedDict([('type', 'string'), ('enum', ['AIP', 'AIC', 'SIP', 'DIP', 'transfer', 'file', 'deposit'])]), u'fixitylog_set': OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uri')]))]), 'origin_pipeline': OrderedDict([('type', 'string'), ('format', 'uri'), ('nullable', True)]), 'uuid': OrderedDict([('type', 'string'), ('format', 'uuid'), ('description', 'Unique identifier')]), u'replicas': OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uri')]))]), u'event_set': OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uri')]))]), u'file_set': OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uri')]))]), 'replicated_package': OrderedDict([('type', 'string'), ('format', 'uri'), ('nullable', True)]), 'misc_attributes': OrderedDict([('type', 'object'), ('nullable', True), ('default', {}), ('description', 'For storing flexible, often Space-specific, attributes')]), 'pointer_file_location': OrderedDict([('type', 'string'), ('format', 'uri'), ('nullable', True)]), 'encryption_key_fingerprint': OrderedDict([('type', 'string'), ('nullable', True), ('default', None), ('description', 'The fingerprint of the GPG key used to encrypt the package, if applicable')]), u'packagedownloadtask_set': OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uri')]))]), 'current_location': OrderedDict([('type', 'string'), ('format', 'uri')]), 'pointer_file_path': OrderedDict([('type', 'string'), ('nullable', True)]), 'related_packages': OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uri')]))]), 'current_path': OrderedDict([('type', 'string')]), u'id': OrderedDict([('type', 'integer')]), 'description': OrderedDict([('type', 'string'), ('nullable', True), ('default', None), ('description', 'Human-readable description.')])}}), ('PaginatedSubsetOfPackages', OrderedDict([('type', 'object'), ('properties', OrderedDict([('paginator', {'$ref': '#/components/schemas/PaginatorSchema'}), ('items', OrderedDict([('type', 'array'), ('items', {'$ref': '#/components/schemas/PackageView'})]))])), ('required', ['paginator', 'items'])])), ('SimpleFilterOverPackages', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', ['size', 'status', 'package_type', 'uuid', 'misc_attributes', 'encryption_key_fingerprint', 'pointer_file_path', 'current_path', u'id', 'description'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverPackagesFixitylog_set', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'fixitylog_set'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['datetime_reported', 'error_details', u'id', 'success'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverPackagesOrigin_pipeline', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', ['origin_pipeline'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['api_key', 'uuid', 'enabled', 'api_username', 'remote_name', u'id', 'description'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverPackagesReplicas', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'replicas'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['size', 'status', 'package_type', 'uuid', 'misc_attributes', 'encryption_key_fingerprint', 'pointer_file_path', 'current_path', u'id', 'description'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverPackagesEvent_set', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'event_set'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['status', 'user_id', 'event_type', 'store_data', 'status_time', 'status_reason', u'id', 'user_email', 'event_reason'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverPackagesFile_set', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'file_set'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['accessionid', 'origin', 'source_package', 'name', 'checksum', 'stored', 'source_id', u'id', 'uuid'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverPackagesReplicated_package', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', ['replicated_package'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['size', 'status', 'package_type', 'uuid', 'misc_attributes', 'encryption_key_fingerprint', 'pointer_file_path', 'current_path', u'id', 'description'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverPackagesPointer_file_location', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', ['pointer_file_location'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['used', 'uuid', 'enabled', 'quota', 'relative_path', 'purpose', u'id', 'description'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverPackagesPackagedownloadtask_set', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'packagedownloadtask_set'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['uuid', 'download_completion_time', 'downloads_completed', u'id', 'downloads_attempted'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverPackagesCurrent_location', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', ['current_location'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['used', 'uuid', 'enabled', 'quota', 'relative_path', 'purpose', u'id', 'description'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverPackagesRelated_packages', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', ['related_packages'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['size', 'status', 'package_type', 'uuid', 'misc_attributes', 'encryption_key_fingerprint', 'pointer_file_path', 'current_path', u'id', 'description'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('CoordinativeFilterOverPackages', OrderedDict([('type', 'object'), ('properties', OrderedDict([('conjunction', OrderedDict([('type', 'string'), ('enum', ['and', 'or'])])), ('complement', OrderedDict([('type', 'array'), ('items', {'$ref': '#/components/schemas/FilterOverPackages'})]))]))])), ('NegativeFilterOverPackages', OrderedDict([('type', 'object'), ('properties', OrderedDict([('negation', OrderedDict([('type', 'string'), ('enum', ['not'])])), ('complement', {'$ref': '#/components/schemas/FilterOverPackages'})]))])), ('ArrayFilterOverPackages', OrderedDict([('type', 'array'), ('items', {'oneOf': [{'type': 'string'}, {'type': 'integer'}]})])), ('ObjectFilterOverPackages', {'oneOf': [{'$ref': '#/components/schemas/CoordinativeFilterOverPackages'}, {'$ref': '#/components/schemas/NegativeFilterOverPackages'}, {'$ref': '#/components/schemas/SimpleFilterOverPackages'}, {'$ref': '#/components/schemas/FilterOverPackagesFixitylog_set'}, {'$ref': '#/components/schemas/FilterOverPackagesOrigin_pipeline'}, {'$ref': '#/components/schemas/FilterOverPackagesReplicas'}, {'$ref': '#/components/schemas/FilterOverPackagesEvent_set'}, {'$ref': '#/components/schemas/FilterOverPackagesFile_set'}, {'$ref': '#/components/schemas/FilterOverPackagesReplicated_package'}, {'$ref': '#/components/schemas/FilterOverPackagesPointer_file_location'}, {'$ref': '#/components/schemas/FilterOverPackagesPackagedownloadtask_set'}, {'$ref': '#/components/schemas/FilterOverPackagesCurrent_location'}, {'$ref': '#/components/schemas/FilterOverPackagesRelated_packages'}]}), ('FilterOverPackages', {'oneOf': [{'$ref': '#/components/schemas/ObjectFilterOverPackages'}, {'$ref': '#/components/schemas/ArrayFilterOverPackages'}]}), ('SearchQueryOverPackages', OrderedDict([('type', 'object'), ('properties', OrderedDict([('filter', {'$ref': '#/components/schemas/FilterOverPackages'}), ('order_by', OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string')]))]))]))])), ('required', ['filter'])])), ('SearchOverPackages', OrderedDict([('type', 'object'), ('properties', OrderedDict([('query', {'$ref': '#/components/schemas/SearchQueryOverPackages'}), ('paginator', {'$ref': '#/components/schemas/PaginatorSchema'})])), ('required', ['query'])])), ('DataForNewSearchOverPackages', OrderedDict([('type', 'object'), ('properties', OrderedDict([('search_parameters', OrderedDict([('type', 'string')]))])), ('required', ['search_parameters'])])), ('PipelineView', {'required': ['uuid'], 'type': 'object', 'properties': {'api_key': OrderedDict([('type', 'string'), ('nullable', True), ('default', None), ('description', 'API key to use when making API calls to the pipeline.')]), 'uuid': OrderedDict([('type', 'string'), ('format', 'uuid'), ('description', 'Identifier for the Archivematica pipeline')]), u'event_set': OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uri')]))]), u'locationpipeline_set': OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uri')]))]), 'enabled': OrderedDict([('type', 'boolean'), ('default', True), ('description', 'Enabled if this pipeline is able to access the storage service.')]), u'package_set': OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uri')]))]), 'location': OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uri')]))]), 'api_username': OrderedDict([('type', 'string'), ('nullable', True), ('default', None), ('description', 'Username to use when making API calls to the pipeline.')]), 'remote_name': OrderedDict([('type', 'string'), ('nullable', True), ('default', None), ('description', 'Host or IP address of the pipeline server for making API calls.')]), u'id': OrderedDict([('type', 'integer')]), 'description': OrderedDict([('type', 'string'), ('nullable', True), ('default', None), ('description', 'Human readable description of the Archivematica instance.')])}}), ('PaginatedSubsetOfPipelines', OrderedDict([('type', 'object'), ('properties', OrderedDict([('paginator', {'$ref': '#/components/schemas/PaginatorSchema'}), ('items', OrderedDict([('type', 'array'), ('items', {'$ref': '#/components/schemas/PipelineView'})]))])), ('required', ['paginator', 'items'])])), ('PipelineCreate', {'type': 'object', 'properties': {'remote_name': OrderedDict([('anyOf', [OrderedDict([('type', 'string'), ('format', 'ipv4')]), OrderedDict([('type', 'string'), ('format', 'uri')])]), ('default', None), ('description', 'Host or IP address of the pipeline server for making API calls.')]), 'api_key': OrderedDict([('type', 'string'), ('maxLength', 256), ('default', None), ('description', 'API key to use when making API calls to the pipeline.')]), 'enabled': OrderedDict([('type', 'boolean'), ('default', True), ('description', 'Enabled if this pipeline is able to access the storage service.')]), 'description': OrderedDict([('type', 'string'), ('maxLength', 256), ('default', None), ('description', 'Human readable description of the Archivematica instance.')]), 'api_username': OrderedDict([('type', 'string'), ('maxLength', 256), ('default', None), ('description', 'Username to use when making API calls to the pipeline.')])}}), ('PipelineUpdate', {'type': 'object', 'properties': {'remote_name': OrderedDict([('anyOf', [OrderedDict([('type', 'string'), ('format', 'ipv4')]), OrderedDict([('type', 'string'), ('format', 'uri')])]), ('default', None), ('description', 'Host or IP address of the pipeline server for making API calls.')]), 'api_key': OrderedDict([('type', 'string'), ('maxLength', 256), ('default', None), ('description', 'API key to use when making API calls to the pipeline.')]), 'enabled': OrderedDict([('type', 'boolean'), ('default', True), ('description', 'Enabled if this pipeline is able to access the storage service.')]), 'description': OrderedDict([('type', 'string'), ('maxLength', 256), ('default', None), ('description', 'Human readable description of the Archivematica instance.')]), 'api_username': OrderedDict([('type', 'string'), ('maxLength', 256), ('default', None), ('description', 'Username to use when making API calls to the pipeline.')])}}), ('NewPipeline', OrderedDict([('type', 'object'), ('properties', OrderedDict()), ('required', [])])), ('EditAPipeline', OrderedDict([('type', 'object'), ('properties', OrderedDict([('data', {'$ref': '#/components/schemas/NewPipeline'}), ('resource', {'$ref': '#/components/schemas/PipelineView'})])), ('required', ['data', 'resource'])])), ('SimpleFilterOverPipelines', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', ['api_key', 'uuid', 'enabled', 'api_username', 'remote_name', u'id', 'description'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverPipelinesEvent_set', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'event_set'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['status', 'user_id', 'event_type', 'store_data', 'status_time', 'status_reason', u'id', 'user_email', 'event_reason'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverPipelinesLocationpipeline_set', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'locationpipeline_set'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', [u'id'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverPipelinesPackage_set', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'package_set'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['size', 'status', 'package_type', 'uuid', 'misc_attributes', 'encryption_key_fingerprint', 'pointer_file_path', 'current_path', u'id', 'description'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverPipelinesLocation', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', ['location'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['used', 'uuid', 'enabled', 'quota', 'relative_path', 'purpose', u'id', 'description'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('CoordinativeFilterOverPipelines', OrderedDict([('type', 'object'), ('properties', OrderedDict([('conjunction', OrderedDict([('type', 'string'), ('enum', ['and', 'or'])])), ('complement', OrderedDict([('type', 'array'), ('items', {'$ref': '#/components/schemas/FilterOverPipelines'})]))]))])), ('NegativeFilterOverPipelines', OrderedDict([('type', 'object'), ('properties', OrderedDict([('negation', OrderedDict([('type', 'string'), ('enum', ['not'])])), ('complement', {'$ref': '#/components/schemas/FilterOverPipelines'})]))])), ('ArrayFilterOverPipelines', OrderedDict([('type', 'array'), ('items', {'oneOf': [{'type': 'string'}, {'type': 'integer'}]})])), ('ObjectFilterOverPipelines', {'oneOf': [{'$ref': '#/components/schemas/CoordinativeFilterOverPipelines'}, {'$ref': '#/components/schemas/NegativeFilterOverPipelines'}, {'$ref': '#/components/schemas/SimpleFilterOverPipelines'}, {'$ref': '#/components/schemas/FilterOverPipelinesEvent_set'}, {'$ref': '#/components/schemas/FilterOverPipelinesLocationpipeline_set'}, {'$ref': '#/components/schemas/FilterOverPipelinesPackage_set'}, {'$ref': '#/components/schemas/FilterOverPipelinesLocation'}]}), ('FilterOverPipelines', {'oneOf': [{'$ref': '#/components/schemas/ObjectFilterOverPipelines'}, {'$ref': '#/components/schemas/ArrayFilterOverPipelines'}]}), ('SearchQueryOverPipelines', OrderedDict([('type', 'object'), ('properties', OrderedDict([('filter', {'$ref': '#/components/schemas/FilterOverPipelines'}), ('order_by', OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string')]))]))]))])), ('required', ['filter'])])), ('SearchOverPipelines', OrderedDict([('type', 'object'), ('properties', OrderedDict([('query', {'$ref': '#/components/schemas/SearchQueryOverPipelines'}), ('paginator', {'$ref': '#/components/schemas/PaginatorSchema'})])), ('required', ['query'])])), ('DataForNewSearchOverPipelines', OrderedDict([('type', 'object'), ('properties', OrderedDict([('search_parameters', OrderedDict([('type', 'string')]))])), ('required', ['search_parameters'])])), ('SpaceView', {'required': ['access_protocol', 'staging_path'], 'type': 'object', 'properties': {u'duracloud': OrderedDict([('type', 'string'), ('format', 'uri')]), u'lockssomatic': OrderedDict([('type', 'string'), ('format', 'uri')]), 'last_verified': OrderedDict([('type', 'string'), ('format', 'date-time'), ('nullable', True), ('default', None), ('description', 'Time this location was last verified to be accessible.')]), 'used': OrderedDict([('type', 'integer'), ('default', 0), ('description', 'Amount used in bytes')]), 'verified': OrderedDict([('type', 'boolean'), ('default', False), ('description', 'Whether or not the space has been verified to be accessible.')]), u'fedora': OrderedDict([('type', 'string'), ('format', 'uri')]), u'gpg': OrderedDict([('type', 'string'), ('format', 'uri')]), 'uuid': OrderedDict([('type', 'string'), ('format', 'uuid'), ('description', 'Unique identifier')]), 'access_protocol': OrderedDict([('type', 'string'), ('enum', ['ARKIVUM', 'DV', 'DC', 'DSPACE', 'FEDORA', 'GPG', 'FS', 'LOM', 'NFS', 'PIPE_FS', 'SWIFT']), ('description', 'How the space can be accessed.')]), 'staging_path': OrderedDict([('type', 'string'), ('description', 'Absolute path to a staging area. Must be UNIX filesystem compatible, preferably on the same filesystem as the path.')]), u'dspace': OrderedDict([('type', 'string'), ('format', 'uri')]), u'nfs': OrderedDict([('type', 'string'), ('format', 'uri')]), u'arkivum': OrderedDict([('type', 'string'), ('format', 'uri')]), 'size': OrderedDict([('type', 'integer'), ('nullable', True), ('default', None), ('description', 'Size in bytes (optional)')]), u'dataverse': OrderedDict([('type', 'string'), ('format', 'uri')]), 'path': OrderedDict([('type', 'string'), ('default', ''), ('description', 'Absolute path to the space on the storage service machine.')]), u'location_set': OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uri')]))]), u'localfilesystem': OrderedDict([('type', 'string'), ('format', 'uri')]), u'swift': OrderedDict([('type', 'string'), ('format', 'uri')]), u'id': OrderedDict([('type', 'integer')]), u'pipelinelocalfs': OrderedDict([('type', 'string'), ('format', 'uri')])}}), ('PaginatedSubsetOfSpaces', OrderedDict([('type', 'object'), ('properties', OrderedDict([('paginator', {'$ref': '#/components/schemas/PaginatorSchema'}), ('items', OrderedDict([('type', 'array'), ('items', {'$ref': '#/components/schemas/SpaceView'})]))])), ('required', ['paginator', 'items'])])), ('SpaceCreate', {'required': ['staging_path', 'access_protocol'], 'type': 'object', 'properties': {'path': OrderedDict([('type', 'string'), ('maxLength', 256), ('default', ''), ('description', 'Absolute path to the space on the storage service machine.')]), 'size': OrderedDict([('type', 'integer'), ('default', None), ('description', 'Size in bytes (optional)')]), 'access_protocol': OrderedDict([('type', 'string'), ('enum', ['ARKIVUM', 'DV', 'DC', 'DSPACE', 'FEDORA', 'GPG', 'FS', 'LOM', 'NFS', 'PIPE_FS', 'SWIFT']), ('description', 'How the space can be accessed.')]), 'staging_path': OrderedDict([('type', 'string'), ('maxLength', 256), ('description', 'Absolute path to a staging area. Must be UNIX filesystem compatible, preferably on the same filesystem as the path.')])}}), ('SpaceUpdate', {'required': ['staging_path'], 'type': 'object', 'properties': {'path': OrderedDict([('type', 'string'), ('maxLength', 256), ('default', ''), ('description', 'Absolute path to the space on the storage service machine.')]), 'staging_path': OrderedDict([('type', 'string'), ('maxLength', 256), ('description', 'Absolute path to a staging area. Must be UNIX filesystem compatible, preferably on the same filesystem as the path.')]), 'size': OrderedDict([('type', 'integer'), ('default', None), ('description', 'Size in bytes (optional)')])}}), ('NewSpace', OrderedDict([('type', 'object'), ('properties', OrderedDict()), ('required', [])])), ('EditASpace', OrderedDict([('type', 'object'), ('properties', OrderedDict([('data', {'$ref': '#/components/schemas/NewSpace'}), ('resource', {'$ref': '#/components/schemas/SpaceView'})])), ('required', ['data', 'resource'])])), ('SimpleFilterOverSpaces', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', ['last_verified', 'used', 'verified', 'uuid', 'access_protocol', 'staging_path', 'size', 'path', u'id'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverSpacesDuracloud', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'duracloud'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['duraspace', 'space', 'host', 'user', 'password', u'id'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverSpacesLockssomatic', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'lockssomatic'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['collection_iri', 'external_domain', 'space', 'content_provider_id', 'sd_iri', u'id', 'checksum_type', 'au_size', 'keep_local'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverSpacesFedora', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'fedora'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['fedora_name', 'fedora_password', 'fedora_user', u'id', 'space'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverSpacesGpg', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'gpg'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', [u'id', 'key', 'space'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverSpacesDspace', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'dspace'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['space', 'sd_iri', 'metadata_policy', 'user', 'archive_format', 'password', u'id'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverSpacesNfs', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'nfs'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['manually_mounted', 'space', 'remote_path', 'version', 'remote_name', u'id'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverSpacesArkivum', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'arkivum'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['host', 'remote_user', 'remote_name', u'id', 'space'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverSpacesDataverse', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'dataverse'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['agent_name', 'agent_identifier', 'space', 'host', 'agent_type', 'api_key', u'id'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverSpacesLocation_set', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'location_set'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['used', 'uuid', 'enabled', 'quota', 'relative_path', 'purpose', u'id', 'description'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverSpacesLocalfilesystem', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'localfilesystem'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', [u'id', 'space'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverSpacesSwift', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'swift'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['username', 'container', 'space', 'region', 'auth_version', 'auth_url', 'password', u'id', 'tenant'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverSpacesPipelinelocalfs', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'pipelinelocalfs'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['remote_user', 'space', 'assume_rsync_daemon', 'remote_name', u'id', 'rsync_password'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('CoordinativeFilterOverSpaces', OrderedDict([('type', 'object'), ('properties', OrderedDict([('conjunction', OrderedDict([('type', 'string'), ('enum', ['and', 'or'])])), ('complement', OrderedDict([('type', 'array'), ('items', {'$ref': '#/components/schemas/FilterOverSpaces'})]))]))])), ('NegativeFilterOverSpaces', OrderedDict([('type', 'object'), ('properties', OrderedDict([('negation', OrderedDict([('type', 'string'), ('enum', ['not'])])), ('complement', {'$ref': '#/components/schemas/FilterOverSpaces'})]))])), ('ArrayFilterOverSpaces', OrderedDict([('type', 'array'), ('items', {'oneOf': [{'type': 'string'}, {'type': 'integer'}]})])), ('ObjectFilterOverSpaces', {'oneOf': [{'$ref': '#/components/schemas/CoordinativeFilterOverSpaces'}, {'$ref': '#/components/schemas/NegativeFilterOverSpaces'}, {'$ref': '#/components/schemas/SimpleFilterOverSpaces'}, {'$ref': '#/components/schemas/FilterOverSpacesDuracloud'}, {'$ref': '#/components/schemas/FilterOverSpacesLockssomatic'}, {'$ref': '#/components/schemas/FilterOverSpacesFedora'}, {'$ref': '#/components/schemas/FilterOverSpacesGpg'}, {'$ref': '#/components/schemas/FilterOverSpacesDspace'}, {'$ref': '#/components/schemas/FilterOverSpacesNfs'}, {'$ref': '#/components/schemas/FilterOverSpacesArkivum'}, {'$ref': '#/components/schemas/FilterOverSpacesDataverse'}, {'$ref': '#/components/schemas/FilterOverSpacesLocation_set'}, {'$ref': '#/components/schemas/FilterOverSpacesLocalfilesystem'}, {'$ref': '#/components/schemas/FilterOverSpacesSwift'}, {'$ref': '#/components/schemas/FilterOverSpacesPipelinelocalfs'}]}), ('FilterOverSpaces', {'oneOf': [{'$ref': '#/components/schemas/ObjectFilterOverSpaces'}, {'$ref': '#/components/schemas/ArrayFilterOverSpaces'}]}), ('SearchQueryOverSpaces', OrderedDict([('type', 'object'), ('properties', OrderedDict([('filter', {'$ref': '#/components/schemas/FilterOverSpaces'}), ('order_by', OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string')]))]))]))])), ('required', ['filter'])])), ('SearchOverSpaces', OrderedDict([('type', 'object'), ('properties', OrderedDict([('query', {'$ref': '#/components/schemas/SearchQueryOverSpaces'}), ('paginator', {'$ref': '#/components/schemas/PaginatorSchema'})])), ('required', ['query'])])), ('DataForNewSearchOverSpaces', OrderedDict([('type', 'object'), ('properties', OrderedDict([('search_parameters', OrderedDict([('type', 'string')]))])), ('required', ['search_parameters'])]))]))])), ('paths', {'/packages/new_search/': {'get': OrderedDict([('summary', 'Get the data needed to search over all packages.'), ('description', 'Get the data needed to search over all packages.'), ('operationId', 'new_search.package'), ('responses', OrderedDict([('200', OrderedDict([('description', 'Successful request to get the data needed to search across all packages.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/DataForNewSearchOverPackages')]))]))]))]))])), ('tags', ['packages'])])}, '/locations/new/': {'get': OrderedDict([('summary', 'Get the data needed to create a new location.'), ('description', 'Get the data needed to create a new location.'), ('operationId', 'data_for_new.location'), ('responses', OrderedDict([('200', OrderedDict([('description', 'Successful requested data needed to create a new location resource.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/NewLocation')]))]))]))]))])), ('tags', ['locations'])])}, '/pipelines/{pk}/': {'put': OrderedDict([('summary', 'Update an existing pipeline.'), ('description', 'Update an existing pipeline.'), ('operationId', 'update.pipeline'), ('requestBody', OrderedDict([('description', 'JSON object required to update an existing pipeline'), ('required', True), ('content', {'application/json': {'schema': {'$ref': '#/components/schemas/PipelineUpdate'}}})])), ('responses', OrderedDict([('200', OrderedDict([('description', 'Succeeded in updating an existing pipeline resource.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/EditAPipeline')]))]))]))])), ('404', OrderedDict([('description', 'There is no pipeline resource with the specified key so it cannot be updated.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))])), ('403', OrderedDict([('description', 'The user is forbidden from updating this pipeline resource.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))])), ('400', OrderedDict([('description', 'Bad request to update an existing pipeline.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['pipelines'])]), 'get': OrderedDict([('summary', 'View an existing pipeline.'), ('description', 'View an existing pipeline.'), ('operationId', 'get.pipeline'), ('responses', OrderedDict([('200', OrderedDict([('description', 'Successfully requested a(n) pipeline resource.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/PipelineView')]))]))]))])), ('404', OrderedDict([('description', 'There is no pipeline resource with the specified key.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))])), ('403', OrderedDict([('description', 'The user is forbidden from viewing this pipeline resource.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['pipelines'])]), 'parameters': [OrderedDict([('in', 'path'), ('name', 'pk'), ('required', True), ('schema', OrderedDict([('type', 'string'), ('format', 'uuid')])), ('description', 'The primary key of the pipeline.')])], 'delete': OrderedDict([('summary', 'Delete an existing pipeline.'), ('description', 'Delete an existing pipeline.'), ('operationId', 'delete.pipeline'), ('responses', OrderedDict([('200', OrderedDict([('description', 'Successful deletion of a pipeline resource.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/PipelineView')]))]))]))])), ('404', OrderedDict([('description', 'There is no pipeline resource with the specified key so it cannot be deleted.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))])), ('403', OrderedDict([('description', 'The user is forbidden from deleting this pipeline resource.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['pipelines'])])}, '/spaces/new/': {'get': OrderedDict([('summary', 'Get the data needed to create a new space.'), ('description', 'Get the data needed to create a new space.'), ('operationId', 'data_for_new.space'), ('responses', OrderedDict([('200', OrderedDict([('description', 'Successful requested data needed to create a new space resource.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/NewSpace')]))]))]))]))])), ('tags', ['spaces'])])}, '/spaces/': {'post': OrderedDict([('summary', 'Create a new space.'), ('description', 'Create a new space.'), ('operationId', 'create.space'), ('requestBody', OrderedDict([('description', 'JSON object required to create a new space'), ('required', True), ('content', {'application/json': {'schema': {'$ref': '#/components/schemas/SpaceCreate'}}})])), ('responses', OrderedDict([('200', OrderedDict([('description', 'Succeeded in creating a new space.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/SpaceView')]))]))]))])), ('400', OrderedDict([('description', 'Bad request to create a new space.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['spaces'])]), 'search': OrderedDict([('summary', 'Search over all spaces.'), ('description', 'Search over all spaces.'), ('operationId', 'search.space'), ('requestBody', OrderedDict([('description', 'JSON object required to search over all spaces'), ('required', True), ('content', {'application/json': OrderedDict([('schema', {'$ref': '#/components/schemas/SearchOverSpaces'})])})])), ('responses', OrderedDict([('200', OrderedDict([('description', 'Successful request to search across all spaces.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/PaginatedSubsetOfSpaces')]))]))]))])), ('400', OrderedDict([('description', 'Failed request to search across all spaces.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['spaces'])]), 'get': OrderedDict([('summary', 'View all spaces.'), ('description', 'View all spaces.'), ('operationId', 'get_many.space'), ('parameters', [{'$ref': '#/components/parameters/items_per_page'}, {'$ref': '#/components/parameters/page'}, {'$ref': '#/components/parameters/order_by_attribute'}, {'$ref': '#/components/parameters/order_by_subattribute'}, {'$ref': '#/components/parameters/order_by_direction'}]), ('responses', OrderedDict([('200', OrderedDict([('description', 'Successful request to view all spaces.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/PaginatedSubsetOfSpaces')]))]))]))])), ('400', OrderedDict([('description', 'Failed request to view all spaces.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['spaces'])])}, '/pipelines/search/': {'post': OrderedDict([('summary', 'Search over all pipelines.'), ('description', 'Search over all pipelines.'), ('operationId', 'search.pipeline'), ('requestBody', OrderedDict([('description', 'JSON object required to search over all pipelines'), ('required', True), ('content', {'application/json': OrderedDict([('schema', {'$ref': '#/components/schemas/SearchOverPipelines'})])})])), ('responses', OrderedDict([('200', OrderedDict([('description', 'Successful request to search across all pipelines.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/PaginatedSubsetOfPipelines')]))]))]))])), ('400', OrderedDict([('description', 'Failed request to search across all pipelines.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['pipelines'])])}, '/locations/{pk}/edit/': {'parameters': [OrderedDict([('in', 'path'), ('name', 'pk'), ('required', True), ('schema', OrderedDict([('type', 'string'), ('format', 'uuid')])), ('description', 'The primary key of the location.')])], 'get': OrderedDict([('summary', 'Get the data needed to update an existing location.'), ('description', 'Get the data needed to update an existing location.'), ('operationId', 'data_for_edit.location'), ('responses', OrderedDict([('200', OrderedDict([('description', 'Succeeded in retrieving the data needed to edit a(n) location resource.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/EditALocation')]))]))]))])), ('404', OrderedDict([('description', 'There is no location resource with the specified key so it cannot be edited.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))])), ('403', OrderedDict([('description', 'The user is forbidden from editing this location resource.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['locations'])])}, '/spaces/{pk}/edit/': {'parameters': [OrderedDict([('in', 'path'), ('name', 'pk'), ('required', True), ('schema', OrderedDict([('type', 'string'), ('format', 'uuid')])), ('description', 'The primary key of the space.')])], 'get': OrderedDict([('summary', 'Get the data needed to update an existing space.'), ('description', 'Get the data needed to update an existing space.'), ('operationId', 'data_for_edit.space'), ('responses', OrderedDict([('200', OrderedDict([('description', 'Succeeded in retrieving the data needed to edit a(n) space resource.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/EditASpace')]))]))]))])), ('404', OrderedDict([('description', 'There is no space resource with the specified key so it cannot be edited.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))])), ('403', OrderedDict([('description', 'The user is forbidden from editing this space resource.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['spaces'])])}, '/pipelines/{pk}/edit/': {'parameters': [OrderedDict([('in', 'path'), ('name', 'pk'), ('required', True), ('schema', OrderedDict([('type', 'string'), ('format', 'uuid')])), ('description', 'The primary key of the pipeline.')])], 'get': OrderedDict([('summary', 'Get the data needed to update an existing pipeline.'), ('description', 'Get the data needed to update an existing pipeline.'), ('operationId', 'data_for_edit.pipeline'), ('responses', OrderedDict([('200', OrderedDict([('description', 'Succeeded in retrieving the data needed to edit a(n) pipeline resource.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/EditAPipeline')]))]))]))])), ('404', OrderedDict([('description', 'There is no pipeline resource with the specified key so it cannot be edited.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))])), ('403', OrderedDict([('description', 'The user is forbidden from editing this pipeline resource.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['pipelines'])])}, '/spaces/{pk}/': {'put': OrderedDict([('summary', 'Update an existing space.'), ('description', 'Update an existing space.'), ('operationId', 'update.space'), ('requestBody', OrderedDict([('description', 'JSON object required to update an existing space'), ('required', True), ('content', {'application/json': {'schema': {'$ref': '#/components/schemas/SpaceUpdate'}}})])), ('responses', OrderedDict([('200', OrderedDict([('description', 'Succeeded in updating an existing space resource.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/EditASpace')]))]))]))])), ('404', OrderedDict([('description', 'There is no space resource with the specified key so it cannot be updated.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))])), ('403', OrderedDict([('description', 'The user is forbidden from updating this space resource.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))])), ('400', OrderedDict([('description', 'Bad request to update an existing space.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['spaces'])]), 'get': OrderedDict([('summary', 'View an existing space.'), ('description', 'View an existing space.'), ('operationId', 'get.space'), ('responses', OrderedDict([('200', OrderedDict([('description', 'Successfully requested a(n) space resource.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/SpaceView')]))]))]))])), ('404', OrderedDict([('description', 'There is no space resource with the specified key.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))])), ('403', OrderedDict([('description', 'The user is forbidden from viewing this space resource.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['spaces'])]), 'parameters': [OrderedDict([('in', 'path'), ('name', 'pk'), ('required', True), ('schema', OrderedDict([('type', 'string'), ('format', 'uuid')])), ('description', 'The primary key of the space.')])], 'delete': OrderedDict([('summary', 'Delete an existing space.'), ('description', 'Delete an existing space.'), ('operationId', 'delete.space'), ('responses', OrderedDict([('200', OrderedDict([('description', 'Successful deletion of a space resource.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/SpaceView')]))]))]))])), ('404', OrderedDict([('description', 'There is no space resource with the specified key so it cannot be deleted.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))])), ('403', OrderedDict([('description', 'The user is forbidden from deleting this space resource.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['spaces'])])}, '/locations/': {'post': OrderedDict([('summary', 'Create a new location.'), ('description', 'Create a new location.'), ('operationId', 'create.location'), ('requestBody', OrderedDict([('description', 'JSON object required to create a new location'), ('required', True), ('content', {'application/json': {'schema': {'$ref': '#/components/schemas/LocationCreate'}}})])), ('responses', OrderedDict([('200', OrderedDict([('description', 'Succeeded in creating a new location.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/LocationView')]))]))]))])), ('400', OrderedDict([('description', 'Bad request to create a new location.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['locations'])]), 'search': OrderedDict([('summary', 'Search over all locations.'), ('description', 'Search over all locations.'), ('operationId', 'search.location'), ('requestBody', OrderedDict([('description', 'JSON object required to search over all locations'), ('required', True), ('content', {'application/json': OrderedDict([('schema', {'$ref': '#/components/schemas/SearchOverLocations'})])})])), ('responses', OrderedDict([('200', OrderedDict([('description', 'Successful request to search across all locations.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/PaginatedSubsetOfLocations')]))]))]))])), ('400', OrderedDict([('description', 'Failed request to search across all locations.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['locations'])]), 'get': OrderedDict([('summary', 'View all locations.'), ('description', 'View all locations.'), ('operationId', 'get_many.location'), ('parameters', [{'$ref': '#/components/parameters/items_per_page'}, {'$ref': '#/components/parameters/page'}, {'$ref': '#/components/parameters/order_by_attribute'}, {'$ref': '#/components/parameters/order_by_subattribute'}, {'$ref': '#/components/parameters/order_by_direction'}]), ('responses', OrderedDict([('200', OrderedDict([('description', 'Successful request to view all locations.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/PaginatedSubsetOfLocations')]))]))]))])), ('400', OrderedDict([('description', 'Failed request to view all locations.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['locations'])])}, '/locations/search/': {'post': OrderedDict([('summary', 'Search over all locations.'), ('description', 'Search over all locations.'), ('operationId', 'search.location'), ('requestBody', OrderedDict([('description', 'JSON object required to search over all locations'), ('required', True), ('content', {'application/json': OrderedDict([('schema', {'$ref': '#/components/schemas/SearchOverLocations'})])})])), ('responses', OrderedDict([('200', OrderedDict([('description', 'Successful request to search across all locations.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/PaginatedSubsetOfLocations')]))]))]))])), ('400', OrderedDict([('description', 'Failed request to search across all locations.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['locations'])])}, '/pipelines/new_search/': {'get': OrderedDict([('summary', 'Get the data needed to search over all pipelines.'), ('description', 'Get the data needed to search over all pipelines.'), ('operationId', 'new_search.pipeline'), ('responses', OrderedDict([('200', OrderedDict([('description', 'Successful request to get the data needed to search across all pipelines.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/DataForNewSearchOverPipelines')]))]))]))]))])), ('tags', ['pipelines'])])}, '/spaces/new_search/': {'get': OrderedDict([('summary', 'Get the data needed to search over all spaces.'), ('description', 'Get the data needed to search over all spaces.'), ('operationId', 'new_search.space'), ('responses', OrderedDict([('200', OrderedDict([('description', 'Successful request to get the data needed to search across all spaces.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/DataForNewSearchOverSpaces')]))]))]))]))])), ('tags', ['spaces'])])}, '/spaces/search/': {'post': OrderedDict([('summary', 'Search over all spaces.'), ('description', 'Search over all spaces.'), ('operationId', 'search.space'), ('requestBody', OrderedDict([('description', 'JSON object required to search over all spaces'), ('required', True), ('content', {'application/json': OrderedDict([('schema', {'$ref': '#/components/schemas/SearchOverSpaces'})])})])), ('responses', OrderedDict([('200', OrderedDict([('description', 'Successful request to search across all spaces.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/PaginatedSubsetOfSpaces')]))]))]))])), ('400', OrderedDict([('description', 'Failed request to search across all spaces.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['spaces'])])}, '/packages/search/': {'post': OrderedDict([('summary', 'Search over all packages.'), ('description', 'Search over all packages.'), ('operationId', 'search.package'), ('requestBody', OrderedDict([('description', 'JSON object required to search over all packages'), ('required', True), ('content', {'application/json': OrderedDict([('schema', {'$ref': '#/components/schemas/SearchOverPackages'})])})])), ('responses', OrderedDict([('200', OrderedDict([('description', 'Successful request to search across all packages.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/PaginatedSubsetOfPackages')]))]))]))])), ('400', OrderedDict([('description', 'Failed request to search across all packages.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['packages'])])}, '/pipelines/new/': {'get': OrderedDict([('summary', 'Get the data needed to create a new pipeline.'), ('description', 'Get the data needed to create a new pipeline.'), ('operationId', 'data_for_new.pipeline'), ('responses', OrderedDict([('200', OrderedDict([('description', 'Successful requested data needed to create a new pipeline resource.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/NewPipeline')]))]))]))]))])), ('tags', ['pipelines'])])}, '/locations/new_search/': {'get': OrderedDict([('summary', 'Get the data needed to search over all locations.'), ('description', 'Get the data needed to search over all locations.'), ('operationId', 'new_search.location'), ('responses', OrderedDict([('200', OrderedDict([('description', 'Successful request to get the data needed to search across all locations.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/DataForNewSearchOverLocations')]))]))]))]))])), ('tags', ['locations'])])}, '/pipelines/': {'post': OrderedDict([('summary', 'Create a new pipeline.'), ('description', 'Create a new pipeline.'), ('operationId', 'create.pipeline'), ('requestBody', OrderedDict([('description', 'JSON object required to create a new pipeline'), ('required', True), ('content', {'application/json': {'schema': {'$ref': '#/components/schemas/PipelineCreate'}}})])), ('responses', OrderedDict([('200', OrderedDict([('description', 'Succeeded in creating a new pipeline.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/PipelineView')]))]))]))])), ('400', OrderedDict([('description', 'Bad request to create a new pipeline.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['pipelines'])]), 'search': OrderedDict([('summary', 'Search over all pipelines.'), ('description', 'Search over all pipelines.'), ('operationId', 'search.pipeline'), ('requestBody', OrderedDict([('description', 'JSON object required to search over all pipelines'), ('required', True), ('content', {'application/json': OrderedDict([('schema', {'$ref': '#/components/schemas/SearchOverPipelines'})])})])), ('responses', OrderedDict([('200', OrderedDict([('description', 'Successful request to search across all pipelines.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/PaginatedSubsetOfPipelines')]))]))]))])), ('400', OrderedDict([('description', 'Failed request to search across all pipelines.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['pipelines'])]), 'get': OrderedDict([('summary', 'View all pipelines.'), ('description', 'View all pipelines.'), ('operationId', 'get_many.pipeline'), ('parameters', [{'$ref': '#/components/parameters/items_per_page'}, {'$ref': '#/components/parameters/page'}, {'$ref': '#/components/parameters/order_by_attribute'}, {'$ref': '#/components/parameters/order_by_subattribute'}, {'$ref': '#/components/parameters/order_by_direction'}]), ('responses', OrderedDict([('200', OrderedDict([('description', 'Successful request to view all pipelines.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/PaginatedSubsetOfPipelines')]))]))]))])), ('400', OrderedDict([('description', 'Failed request to view all pipelines.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['pipelines'])])}, '/packages/{pk}/': {'parameters': [OrderedDict([('in', 'path'), ('name', 'pk'), ('required', True), ('schema', OrderedDict([('type', 'string'), ('format', 'uuid')])), ('description', 'The primary key of the package.')])], 'get': OrderedDict([('summary', 'View an existing package.'), ('description', 'View an existing package.'), ('operationId', 'get.package'), ('responses', OrderedDict([('200', OrderedDict([('description', 'Successfully requested a(n) package resource.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/PackageView')]))]))]))])), ('404', OrderedDict([('description', 'There is no package resource with the specified key.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))])), ('403', OrderedDict([('description', 'The user is forbidden from viewing this package resource.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['packages'])])}, '/packages/': {'search': OrderedDict([('summary', 'Search over all packages.'), ('description', 'Search over all packages.'), ('operationId', 'search.package'), ('requestBody', OrderedDict([('description', 'JSON object required to search over all packages'), ('required', True), ('content', {'application/json': OrderedDict([('schema', {'$ref': '#/components/schemas/SearchOverPackages'}), ('example', {'ObjectSearchOverPackagesExample': {'paginator': {'items_per_page': 10, 'page': 1}, 'query': {'filter': {'complement': [{'attribute': 'description', 'relation': 'like', 'value': '%a%'}, {'complement': {'attribute': 'description', 'relation': 'like', 'value': 'T%'}, 'negation': 'not'}, {'complement': [{'attribute': 'size', 'relation': '<', 'value': 1000}, {'attribute': 'size', 'relation': '>', 'value': 512}], 'conjunction': 'or'}], 'conjunction': 'and'}}}, 'ArraySearchOverPackagesExample': {'paginator': {'items_per_page': 10, 'page': 1}, 'query': {'filter': ['and', [['description', 'like', '%a%'], ['not', ['description', 'like', 'T%']], ['or', [['size', '<', 1000], ['size', '>', 512]]]]]}}})])})])), ('responses', OrderedDict([('200', OrderedDict([('description', 'Successful request to search across all packages.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/PaginatedSubsetOfPackages')]))]))]))])), ('400', OrderedDict([('description', 'Failed request to search across all packages.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['packages'])]), 'get': OrderedDict([('summary', 'View all packages.'), ('description', 'View all packages.'), ('operationId', 'get_many.package'), ('parameters', [{'$ref': '#/components/parameters/items_per_page'}, {'$ref': '#/components/parameters/page'}, {'$ref': '#/components/parameters/order_by_attribute'}, {'$ref': '#/components/parameters/order_by_subattribute'}, {'$ref': '#/components/parameters/order_by_direction'}]), ('responses', OrderedDict([('200', OrderedDict([('description', 'Successful request to view all packages.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/PaginatedSubsetOfPackages')]))]))]))])), ('400', OrderedDict([('description', 'Failed request to view all packages.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['packages'])])}, '/locations/{pk}/': {'put': OrderedDict([('summary', 'Update an existing location.'), ('description', 'Update an existing location.'), ('operationId', 'update.location'), ('requestBody', OrderedDict([('description', 'JSON object required to update an existing location'), ('required', True), ('content', {'application/json': {'schema': {'$ref': '#/components/schemas/LocationUpdate'}}})])), ('responses', OrderedDict([('200', OrderedDict([('description', 'Succeeded in updating an existing location resource.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/EditALocation')]))]))]))])), ('404', OrderedDict([('description', 'There is no location resource with the specified key so it cannot be updated.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))])), ('403', OrderedDict([('description', 'The user is forbidden from updating this location resource.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))])), ('400', OrderedDict([('description', 'Bad request to update an existing location.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['locations'])]), 'get': OrderedDict([('summary', 'View an existing location.'), ('description', 'View an existing location.'), ('operationId', 'get.location'), ('responses', OrderedDict([('200', OrderedDict([('description', 'Successfully requested a(n) location resource.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/LocationView')]))]))]))])), ('404', OrderedDict([('description', 'There is no location resource with the specified key.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))])), ('403', OrderedDict([('description', 'The user is forbidden from viewing this location resource.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['locations'])]), 'parameters': [OrderedDict([('in', 'path'), ('name', 'pk'), ('required', True), ('schema', OrderedDict([('type', 'string'), ('format', 'uuid')])), ('description', 'The primary key of the location.')])], 'delete': OrderedDict([('summary', 'Delete an existing location.'), ('description', 'Delete an existing location.'), ('operationId', 'delete.location'), ('responses', OrderedDict([('200', OrderedDict([('description', 'Successful deletion of a location resource.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/LocationView')]))]))]))])), ('404', OrderedDict([('description', 'There is no location resource with the specified key so it cannot be deleted.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))])), ('403', OrderedDict([('description', 'The user is forbidden from deleting this location resource.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['locations'])])}}), ('tags', [OrderedDict([('name', 'locations'), ('description', 'Access to the Location resource')]), OrderedDict([('name', 'packages'), ('description', 'Access to the Package resource')]), OrderedDict([('name', 'pipelines'), ('description', 'Access to the Pipeline resource')]), OrderedDict([('name', 'spaces'), ('description', 'Access to the Space resource')])])]) +OrderedDict([('openapi', '3.0.0'), ('info', OrderedDict([('version', '3.0.0'), ('title', 'Archivematica Storage Service API'), ('description', 'An API for the Archivematica Storage Service.')])), ('servers', [OrderedDict([('url', '/api/v3'), ('description', 'The default server for the Archivematica Storage Service.')])]), ('security', [OrderedDict([('ApiKeyAuth', [])])]), ('components', OrderedDict([('securitySchemes', OrderedDict([('ApiKeyAuth', OrderedDict([('type', 'apiKey'), ('in', 'header'), ('name', 'Authorization')]))])), ('parameters', OrderedDict([('items_per_page', OrderedDict([('in', 'query'), ('name', 'items_per_page'), ('required', False), ('schema', OrderedDict([('type', 'integer'), ('minimum', 1), ('default', 10)])), ('description', 'The maximum number of items to return.')])), ('page', OrderedDict([('in', 'query'), ('name', 'page'), ('required', False), ('schema', OrderedDict([('type', 'integer'), ('minimum', 1), ('default', 1)])), ('description', 'The page number to return.')])), ('order_by_direction', OrderedDict([('in', 'query'), ('name', 'order_by_direction'), ('schema', OrderedDict([('type', 'string'), ('enum', ['-', 'ascending', 'asc', 'descending', 'desc'])])), ('required', False), ('description', 'The direction of the ordering; omitting this parameter means ascending direction.')])), ('order_by_attribute', OrderedDict([('in', 'query'), ('name', 'order_by_attribute'), ('schema', {'type': 'string'}), ('description', 'Attribute of the resource that view results should be ordered by.'), ('required', False)])), ('order_by_subattribute', OrderedDict([('in', 'query'), ('name', 'order_by_subattribute'), ('schema', {'type': 'string'}), ('required', False), ('description', 'Attribute of the related attribute order_by_attribute of the resource that view results should be ordered by.')]))])), ('schemas', OrderedDict([('ErrorSchema', OrderedDict([('type', 'object'), ('properties', OrderedDict([('error', OrderedDict([('type', 'string')]))])), ('required', ['error'])])), ('PaginatorSchema', OrderedDict([('type', 'object'), ('properties', OrderedDict([('count', {'type': 'integer'}), ('page', {'default': 1, 'minimum': 1, 'type': 'integer'}), ('items_per_page', {'default': 10, 'minimum': 1, 'type': 'integer'})])), ('required', ['page', 'items_per_page'])])), ('LocationView', {'required': ['space', 'purpose', 'relative_path'], 'type': 'object', 'properties': {u'masters': OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uri')]))]), 'used': OrderedDict([('type', 'integer'), ('default', 0), ('description', 'Amount used, in bytes.')]), 'uuid': OrderedDict([('type', 'string'), ('format', 'uuid'), ('description', 'Unique identifier')]), 'space': OrderedDict([('type', 'string'), ('format', 'uri')]), u'locationpipeline_set': OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uri')]))]), 'enabled': OrderedDict([('type', 'boolean'), ('default', True), ('description', 'True if space can be accessed.')]), 'quota': OrderedDict([('type', 'integer'), ('nullable', True), ('default', None), ('description', 'Size, in bytes (optional)')]), 'relative_path': OrderedDict([('type', 'string'), ('description', "Path to location, relative to the storage space's path.")]), u'package_set': OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uri')]))]), 'purpose': OrderedDict([('type', 'string'), ('enum', ['AR', 'AS', 'CP', 'DS', 'SD', 'SS', 'BL', 'TS', 'RP']), ('description', 'Purpose of the space. Eg. AIP storage, Transfer source')]), 'replicators': OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uri')])), ('description', 'Other locations that will be used to create replicas of the packages stored in this location')]), 'pipeline': OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uri')])), ('description', 'UUID of the Archivematica instance using this location.')]), u'id': OrderedDict([('type', 'integer')]), 'description': OrderedDict([('type', 'string'), ('nullable', True), ('default', None), ('description', 'Human-readable description.')])}}), ('PaginatedSubsetOfLocations', OrderedDict([('type', 'object'), ('properties', OrderedDict([('paginator', {'$ref': '#/components/schemas/PaginatorSchema'}), ('items', OrderedDict([('type', 'array'), ('items', {'$ref': '#/components/schemas/LocationView'})]))])), ('required', ['paginator', 'items'])])), ('LocationCreate', {'required': ['space', 'relative_path', 'purpose'], 'type': 'object', 'properties': {'pipeline': OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uuid of a pipeline resource')])), ('description', 'UUID of the Archivematica instance using this location.')]), 'description': OrderedDict([('type', 'string'), ('maxLength', 256), ('default', None), ('description', 'Human-readable description.')]), 'space': OrderedDict([('type', 'string'), ('format', 'uuid of a space resource')]), 'enabled': OrderedDict([('type', 'boolean'), ('default', True), ('description', 'True if space can be accessed.')]), 'quota': OrderedDict([('type', 'integer'), ('default', None), ('description', 'Size, in bytes (optional)')]), 'relative_path': OrderedDict([('type', 'string'), ('description', "Path to location, relative to the storage space's path.")]), 'purpose': OrderedDict([('type', 'string'), ('enum', ['AR', 'AS', 'CP', 'DS', 'SD', 'SS', 'BL', 'TS', 'RP']), ('description', 'Purpose of the space. Eg. AIP storage, Transfer source')]), 'replicators': OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uuid of a location resource')])), ('description', 'Other locations that will be used to create replicas of the packages stored in this location')])}}), ('LocationUpdate', {'required': ['space', 'relative_path', 'purpose'], 'type': 'object', 'properties': {'pipeline': OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uuid of a pipeline resource')])), ('description', 'UUID of the Archivematica instance using this location.')]), 'description': OrderedDict([('type', 'string'), ('maxLength', 256), ('default', None), ('description', 'Human-readable description.')]), 'space': OrderedDict([('type', 'string'), ('format', 'uuid of a space resource')]), 'enabled': OrderedDict([('type', 'boolean'), ('default', True), ('description', 'True if space can be accessed.')]), 'quota': OrderedDict([('type', 'integer'), ('default', None), ('description', 'Size, in bytes (optional)')]), 'relative_path': OrderedDict([('type', 'string'), ('description', "Path to location, relative to the storage space's path.")]), 'purpose': OrderedDict([('type', 'string'), ('enum', ['AR', 'AS', 'CP', 'DS', 'SD', 'SS', 'BL', 'TS', 'RP']), ('description', 'Purpose of the space. Eg. AIP storage, Transfer source')]), 'replicators': OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uuid of a location resource')])), ('description', 'Other locations that will be used to create replicas of the packages stored in this location')])}}), ('NewLocation', OrderedDict([('type', 'object'), ('properties', OrderedDict([('spaces', OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uuid of an instance of the spaces resource')]))])), ('pipelines', OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uuid of an instance of the pipelines resource')]))])), ('locations', OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uuid of an instance of the locations resource')]))]))])), ('required', ['spaces', 'pipelines', 'locations'])])), ('EditALocation', OrderedDict([('type', 'object'), ('properties', OrderedDict([('data', {'$ref': '#/components/schemas/NewLocation'}), ('resource', {'$ref': '#/components/schemas/LocationView'})])), ('required', ['data', 'resource'])])), ('SimpleFilterOverLocations', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', ['used', 'uuid', 'enabled', 'quota', 'relative_path', 'purpose', u'id', 'description'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverLocationsMasters', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'masters'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['used', 'uuid', 'enabled', 'quota', 'relative_path', 'purpose', u'id', 'description'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverLocationsSpace', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', ['space'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['last_verified', 'used', 'verified', 'uuid', 'access_protocol', 'staging_path', 'size', 'path', u'id'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverLocationsLocationpipeline_set', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'locationpipeline_set'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', [u'id'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverLocationsPackage_set', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'package_set'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['size', 'status', 'package_type', 'uuid', 'misc_attributes', 'encryption_key_fingerprint', 'pointer_file_path', 'current_path', u'id', 'description'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverLocationsReplicators', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', ['replicators'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['used', 'uuid', 'enabled', 'quota', 'relative_path', 'purpose', u'id', 'description'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverLocationsPipeline', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', ['pipeline'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['api_key', 'uuid', 'enabled', 'api_username', 'remote_name', u'id', 'description'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('CoordinativeFilterOverLocations', OrderedDict([('type', 'object'), ('properties', OrderedDict([('conjunction', OrderedDict([('type', 'string'), ('enum', ['and', 'or'])])), ('complement', OrderedDict([('type', 'array'), ('items', {'$ref': '#/components/schemas/FilterOverLocations'})]))]))])), ('NegativeFilterOverLocations', OrderedDict([('type', 'object'), ('properties', OrderedDict([('negation', OrderedDict([('type', 'string'), ('enum', ['not'])])), ('complement', {'$ref': '#/components/schemas/FilterOverLocations'})]))])), ('ArrayFilterOverLocations', OrderedDict([('type', 'array'), ('items', {'oneOf': [{'type': 'string'}, {'type': 'integer'}]})])), ('ObjectFilterOverLocations', {'oneOf': [{'$ref': '#/components/schemas/CoordinativeFilterOverLocations'}, {'$ref': '#/components/schemas/NegativeFilterOverLocations'}, {'$ref': '#/components/schemas/SimpleFilterOverLocations'}, {'$ref': '#/components/schemas/FilterOverLocationsMasters'}, {'$ref': '#/components/schemas/FilterOverLocationsSpace'}, {'$ref': '#/components/schemas/FilterOverLocationsLocationpipeline_set'}, {'$ref': '#/components/schemas/FilterOverLocationsPackage_set'}, {'$ref': '#/components/schemas/FilterOverLocationsReplicators'}, {'$ref': '#/components/schemas/FilterOverLocationsPipeline'}]}), ('FilterOverLocations', {'oneOf': [{'$ref': '#/components/schemas/ObjectFilterOverLocations'}, {'$ref': '#/components/schemas/ArrayFilterOverLocations'}]}), ('SearchQueryOverLocations', OrderedDict([('type', 'object'), ('properties', OrderedDict([('filter', {'$ref': '#/components/schemas/FilterOverLocations'}), ('order_by', OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string')]))]))]))])), ('required', ['filter'])])), ('SearchOverLocations', OrderedDict([('type', 'object'), ('properties', OrderedDict([('query', {'$ref': '#/components/schemas/SearchQueryOverLocations'}), ('paginator', {'$ref': '#/components/schemas/PaginatorSchema'})])), ('required', ['query'])])), ('DataForNewSearchOverLocations', OrderedDict([('type', 'object'), ('properties', OrderedDict([('search_parameters', OrderedDict([('type', 'string')]))])), ('required', ['search_parameters'])])), ('PackageView', {'required': ['current_location', 'current_path', 'package_type', 'related_packages'], 'type': 'object', 'properties': {'size': OrderedDict([('type', 'integer'), ('default', 0), ('description', 'Size in bytes of the package')]), 'status': OrderedDict([('type', 'string'), ('enum', ['PENDING', 'STAGING', 'UPLOADED', 'VERIFIED', 'FAIL', 'DEL_REQ', 'DELETED', 'FINALIZE']), ('default', 'FAIL'), ('description', 'Status of the package in the storage service.')]), 'package_type': OrderedDict([('type', 'string'), ('enum', ['AIP', 'AIC', 'SIP', 'DIP', 'transfer', 'file', 'deposit'])]), u'fixitylog_set': OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uri')]))]), 'origin_pipeline': OrderedDict([('type', 'string'), ('format', 'uri'), ('nullable', True)]), 'uuid': OrderedDict([('type', 'string'), ('format', 'uuid'), ('description', 'Unique identifier')]), u'replicas': OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uri')]))]), u'event_set': OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uri')]))]), u'file_set': OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uri')]))]), 'replicated_package': OrderedDict([('type', 'string'), ('format', 'uri'), ('nullable', True)]), 'misc_attributes': OrderedDict([('type', 'object'), ('nullable', True), ('default', {}), ('description', 'For storing flexible, often Space-specific, attributes')]), 'pointer_file_location': OrderedDict([('type', 'string'), ('format', 'uri'), ('nullable', True)]), 'encryption_key_fingerprint': OrderedDict([('type', 'string'), ('nullable', True), ('default', None), ('description', 'The fingerprint of the GPG key used to encrypt the package, if applicable')]), u'packagedownloadtask_set': OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uri')]))]), 'current_location': OrderedDict([('type', 'string'), ('format', 'uri')]), 'pointer_file_path': OrderedDict([('type', 'string'), ('nullable', True)]), 'related_packages': OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uri')]))]), 'current_path': OrderedDict([('type', 'string')]), u'id': OrderedDict([('type', 'integer')]), 'description': OrderedDict([('type', 'string'), ('nullable', True), ('default', None), ('description', 'Human-readable description.')])}}), ('PaginatedSubsetOfPackages', OrderedDict([('type', 'object'), ('properties', OrderedDict([('paginator', {'$ref': '#/components/schemas/PaginatorSchema'}), ('items', OrderedDict([('type', 'array'), ('items', {'$ref': '#/components/schemas/PackageView'})]))])), ('required', ['paginator', 'items'])])), ('SimpleFilterOverPackages', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', ['size', 'status', 'package_type', 'uuid', 'misc_attributes', 'encryption_key_fingerprint', 'pointer_file_path', 'current_path', u'id', 'description'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverPackagesFixitylog_set', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'fixitylog_set'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['datetime_reported', 'error_details', u'id', 'success'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverPackagesOrigin_pipeline', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', ['origin_pipeline'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['api_key', 'uuid', 'enabled', 'api_username', 'remote_name', u'id', 'description'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverPackagesReplicas', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'replicas'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['size', 'status', 'package_type', 'uuid', 'misc_attributes', 'encryption_key_fingerprint', 'pointer_file_path', 'current_path', u'id', 'description'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverPackagesEvent_set', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'event_set'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['status', 'user_id', 'event_type', 'store_data', 'status_time', 'status_reason', u'id', 'user_email', 'event_reason'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverPackagesFile_set', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'file_set'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['accessionid', 'origin', 'source_package', 'name', 'checksum', 'stored', 'source_id', u'id', 'uuid'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverPackagesReplicated_package', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', ['replicated_package'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['size', 'status', 'package_type', 'uuid', 'misc_attributes', 'encryption_key_fingerprint', 'pointer_file_path', 'current_path', u'id', 'description'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverPackagesPointer_file_location', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', ['pointer_file_location'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['used', 'uuid', 'enabled', 'quota', 'relative_path', 'purpose', u'id', 'description'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverPackagesPackagedownloadtask_set', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'packagedownloadtask_set'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['uuid', 'download_completion_time', 'downloads_completed', u'id', 'downloads_attempted'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverPackagesCurrent_location', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', ['current_location'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['used', 'uuid', 'enabled', 'quota', 'relative_path', 'purpose', u'id', 'description'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverPackagesRelated_packages', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', ['related_packages'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['size', 'status', 'package_type', 'uuid', 'misc_attributes', 'encryption_key_fingerprint', 'pointer_file_path', 'current_path', u'id', 'description'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('CoordinativeFilterOverPackages', OrderedDict([('type', 'object'), ('properties', OrderedDict([('conjunction', OrderedDict([('type', 'string'), ('enum', ['and', 'or'])])), ('complement', OrderedDict([('type', 'array'), ('items', {'$ref': '#/components/schemas/FilterOverPackages'})]))]))])), ('NegativeFilterOverPackages', OrderedDict([('type', 'object'), ('properties', OrderedDict([('negation', OrderedDict([('type', 'string'), ('enum', ['not'])])), ('complement', {'$ref': '#/components/schemas/FilterOverPackages'})]))])), ('ArrayFilterOverPackages', OrderedDict([('type', 'array'), ('items', {'oneOf': [{'type': 'string'}, {'type': 'integer'}]})])), ('ObjectFilterOverPackages', {'oneOf': [{'$ref': '#/components/schemas/CoordinativeFilterOverPackages'}, {'$ref': '#/components/schemas/NegativeFilterOverPackages'}, {'$ref': '#/components/schemas/SimpleFilterOverPackages'}, {'$ref': '#/components/schemas/FilterOverPackagesFixitylog_set'}, {'$ref': '#/components/schemas/FilterOverPackagesOrigin_pipeline'}, {'$ref': '#/components/schemas/FilterOverPackagesReplicas'}, {'$ref': '#/components/schemas/FilterOverPackagesEvent_set'}, {'$ref': '#/components/schemas/FilterOverPackagesFile_set'}, {'$ref': '#/components/schemas/FilterOverPackagesReplicated_package'}, {'$ref': '#/components/schemas/FilterOverPackagesPointer_file_location'}, {'$ref': '#/components/schemas/FilterOverPackagesPackagedownloadtask_set'}, {'$ref': '#/components/schemas/FilterOverPackagesCurrent_location'}, {'$ref': '#/components/schemas/FilterOverPackagesRelated_packages'}]}), ('FilterOverPackages', {'oneOf': [{'$ref': '#/components/schemas/ObjectFilterOverPackages'}, {'$ref': '#/components/schemas/ArrayFilterOverPackages'}]}), ('SearchQueryOverPackages', OrderedDict([('type', 'object'), ('properties', OrderedDict([('filter', {'$ref': '#/components/schemas/FilterOverPackages'}), ('order_by', OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string')]))]))]))])), ('required', ['filter'])])), ('SearchOverPackages', OrderedDict([('type', 'object'), ('properties', OrderedDict([('query', {'$ref': '#/components/schemas/SearchQueryOverPackages'}), ('paginator', {'$ref': '#/components/schemas/PaginatorSchema'})])), ('required', ['query'])])), ('DataForNewSearchOverPackages', OrderedDict([('type', 'object'), ('properties', OrderedDict([('search_parameters', OrderedDict([('type', 'string')]))])), ('required', ['search_parameters'])])), ('PipelineView', {'required': ['uuid'], 'type': 'object', 'properties': {'api_key': OrderedDict([('type', 'string'), ('nullable', True), ('default', None), ('description', 'API key to use when making API calls to the pipeline.')]), 'uuid': OrderedDict([('type', 'string'), ('format', 'uuid'), ('description', 'Identifier for the Archivematica pipeline')]), u'event_set': OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uri')]))]), u'locationpipeline_set': OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uri')]))]), 'enabled': OrderedDict([('type', 'boolean'), ('default', True), ('description', 'Enabled if this pipeline is able to access the storage service.')]), u'package_set': OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uri')]))]), 'location': OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uri')]))]), 'api_username': OrderedDict([('type', 'string'), ('nullable', True), ('default', None), ('description', 'Username to use when making API calls to the pipeline.')]), 'remote_name': OrderedDict([('type', 'string'), ('nullable', True), ('default', None), ('description', 'Host or IP address of the pipeline server for making API calls.')]), u'id': OrderedDict([('type', 'integer')]), 'description': OrderedDict([('type', 'string'), ('nullable', True), ('default', None), ('description', 'Human readable description of the Archivematica instance.')])}}), ('PaginatedSubsetOfPipelines', OrderedDict([('type', 'object'), ('properties', OrderedDict([('paginator', {'$ref': '#/components/schemas/PaginatorSchema'}), ('items', OrderedDict([('type', 'array'), ('items', {'$ref': '#/components/schemas/PipelineView'})]))])), ('required', ['paginator', 'items'])])), ('PipelineCreate', {'type': 'object', 'properties': {'remote_name': OrderedDict([('anyOf', [OrderedDict([('type', 'string'), ('format', 'ipv4')]), OrderedDict([('type', 'string'), ('format', 'uri')])]), ('default', None), ('description', 'Host or IP address of the pipeline server for making API calls.')]), 'api_key': OrderedDict([('type', 'string'), ('maxLength', 256), ('default', None), ('description', 'API key to use when making API calls to the pipeline.')]), 'enabled': OrderedDict([('type', 'boolean'), ('default', True), ('description', 'Enabled if this pipeline is able to access the storage service.')]), 'description': OrderedDict([('type', 'string'), ('maxLength', 256), ('default', None), ('description', 'Human readable description of the Archivematica instance.')]), 'api_username': OrderedDict([('type', 'string'), ('maxLength', 256), ('default', None), ('description', 'Username to use when making API calls to the pipeline.')])}}), ('PipelineUpdate', {'type': 'object', 'properties': {'remote_name': OrderedDict([('anyOf', [OrderedDict([('type', 'string'), ('format', 'ipv4')]), OrderedDict([('type', 'string'), ('format', 'uri')])]), ('default', None), ('description', 'Host or IP address of the pipeline server for making API calls.')]), 'api_key': OrderedDict([('type', 'string'), ('maxLength', 256), ('default', None), ('description', 'API key to use when making API calls to the pipeline.')]), 'enabled': OrderedDict([('type', 'boolean'), ('default', True), ('description', 'Enabled if this pipeline is able to access the storage service.')]), 'description': OrderedDict([('type', 'string'), ('maxLength', 256), ('default', None), ('description', 'Human readable description of the Archivematica instance.')]), 'api_username': OrderedDict([('type', 'string'), ('maxLength', 256), ('default', None), ('description', 'Username to use when making API calls to the pipeline.')])}}), ('NewPipeline', OrderedDict([('type', 'object'), ('properties', OrderedDict()), ('required', [])])), ('EditAPipeline', OrderedDict([('type', 'object'), ('properties', OrderedDict([('data', {'$ref': '#/components/schemas/NewPipeline'}), ('resource', {'$ref': '#/components/schemas/PipelineView'})])), ('required', ['data', 'resource'])])), ('SimpleFilterOverPipelines', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', ['api_key', 'uuid', 'enabled', 'api_username', 'remote_name', u'id', 'description'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverPipelinesEvent_set', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'event_set'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['status', 'user_id', 'event_type', 'store_data', 'status_time', 'status_reason', u'id', 'user_email', 'event_reason'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverPipelinesLocationpipeline_set', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'locationpipeline_set'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', [u'id'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverPipelinesPackage_set', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'package_set'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['size', 'status', 'package_type', 'uuid', 'misc_attributes', 'encryption_key_fingerprint', 'pointer_file_path', 'current_path', u'id', 'description'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverPipelinesLocation', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', ['location'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['used', 'uuid', 'enabled', 'quota', 'relative_path', 'purpose', u'id', 'description'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('CoordinativeFilterOverPipelines', OrderedDict([('type', 'object'), ('properties', OrderedDict([('conjunction', OrderedDict([('type', 'string'), ('enum', ['and', 'or'])])), ('complement', OrderedDict([('type', 'array'), ('items', {'$ref': '#/components/schemas/FilterOverPipelines'})]))]))])), ('NegativeFilterOverPipelines', OrderedDict([('type', 'object'), ('properties', OrderedDict([('negation', OrderedDict([('type', 'string'), ('enum', ['not'])])), ('complement', {'$ref': '#/components/schemas/FilterOverPipelines'})]))])), ('ArrayFilterOverPipelines', OrderedDict([('type', 'array'), ('items', {'oneOf': [{'type': 'string'}, {'type': 'integer'}]})])), ('ObjectFilterOverPipelines', {'oneOf': [{'$ref': '#/components/schemas/CoordinativeFilterOverPipelines'}, {'$ref': '#/components/schemas/NegativeFilterOverPipelines'}, {'$ref': '#/components/schemas/SimpleFilterOverPipelines'}, {'$ref': '#/components/schemas/FilterOverPipelinesEvent_set'}, {'$ref': '#/components/schemas/FilterOverPipelinesLocationpipeline_set'}, {'$ref': '#/components/schemas/FilterOverPipelinesPackage_set'}, {'$ref': '#/components/schemas/FilterOverPipelinesLocation'}]}), ('FilterOverPipelines', {'oneOf': [{'$ref': '#/components/schemas/ObjectFilterOverPipelines'}, {'$ref': '#/components/schemas/ArrayFilterOverPipelines'}]}), ('SearchQueryOverPipelines', OrderedDict([('type', 'object'), ('properties', OrderedDict([('filter', {'$ref': '#/components/schemas/FilterOverPipelines'}), ('order_by', OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string')]))]))]))])), ('required', ['filter'])])), ('SearchOverPipelines', OrderedDict([('type', 'object'), ('properties', OrderedDict([('query', {'$ref': '#/components/schemas/SearchQueryOverPipelines'}), ('paginator', {'$ref': '#/components/schemas/PaginatorSchema'})])), ('required', ['query'])])), ('DataForNewSearchOverPipelines', OrderedDict([('type', 'object'), ('properties', OrderedDict([('search_parameters', OrderedDict([('type', 'string')]))])), ('required', ['search_parameters'])])), ('SpaceView', {'required': ['access_protocol', 'staging_path'], 'type': 'object', 'properties': {u'duracloud': OrderedDict([('type', 'string'), ('format', 'uri')]), u'lockssomatic': OrderedDict([('type', 'string'), ('format', 'uri')]), 'last_verified': OrderedDict([('type', 'string'), ('format', 'date-time'), ('nullable', True), ('default', None), ('description', 'Time this location was last verified to be accessible.')]), 'used': OrderedDict([('type', 'integer'), ('default', 0), ('description', 'Amount used in bytes')]), 'verified': OrderedDict([('type', 'boolean'), ('default', False), ('description', 'Whether or not the space has been verified to be accessible.')]), u'fedora': OrderedDict([('type', 'string'), ('format', 'uri')]), u'gpg': OrderedDict([('type', 'string'), ('format', 'uri')]), 'uuid': OrderedDict([('type', 'string'), ('format', 'uuid'), ('description', 'Unique identifier')]), 'access_protocol': OrderedDict([('type', 'string'), ('enum', ['ARKIVUM', 'DV', 'DC', 'DSPACE', 'FEDORA', 'GPG', 'FS', 'LOM', 'NFS', 'PIPE_FS', 'SWIFT']), ('description', 'How the space can be accessed.')]), 'staging_path': OrderedDict([('type', 'string'), ('description', 'Absolute path to a staging area. Must be UNIX filesystem compatible, preferably on the same filesystem as the path.')]), u'dspace': OrderedDict([('type', 'string'), ('format', 'uri')]), u'nfs': OrderedDict([('type', 'string'), ('format', 'uri')]), u'arkivum': OrderedDict([('type', 'string'), ('format', 'uri')]), 'size': OrderedDict([('type', 'integer'), ('nullable', True), ('default', None), ('description', 'Size in bytes (optional)')]), u'dataverse': OrderedDict([('type', 'string'), ('format', 'uri')]), 'path': OrderedDict([('type', 'string'), ('default', ''), ('description', 'Absolute path to the space on the storage service machine.')]), u'location_set': OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string'), ('format', 'uri')]))]), u'localfilesystem': OrderedDict([('type', 'string'), ('format', 'uri')]), u'swift': OrderedDict([('type', 'string'), ('format', 'uri')]), u'id': OrderedDict([('type', 'integer')]), u'pipelinelocalfs': OrderedDict([('type', 'string'), ('format', 'uri')])}}), ('PaginatedSubsetOfSpaces', OrderedDict([('type', 'object'), ('properties', OrderedDict([('paginator', {'$ref': '#/components/schemas/PaginatorSchema'}), ('items', OrderedDict([('type', 'array'), ('items', {'$ref': '#/components/schemas/SpaceView'})]))])), ('required', ['paginator', 'items'])])), ('SpaceCreate', {'required': ['staging_path', 'access_protocol'], 'type': 'object', 'properties': {'path': OrderedDict([('type', 'string'), ('maxLength', 256), ('default', ''), ('description', 'Absolute path to the space on the storage service machine.')]), 'size': OrderedDict([('type', 'integer'), ('default', None), ('description', 'Size in bytes (optional)')]), 'access_protocol': OrderedDict([('type', 'string'), ('enum', ['ARKIVUM', 'DV', 'DC', 'DSPACE', 'FEDORA', 'GPG', 'FS', 'LOM', 'NFS', 'PIPE_FS', 'SWIFT']), ('description', 'How the space can be accessed.')]), 'staging_path': OrderedDict([('type', 'string'), ('maxLength', 256), ('description', 'Absolute path to a staging area. Must be UNIX filesystem compatible, preferably on the same filesystem as the path.')])}}), ('SpaceUpdate', {'required': ['staging_path'], 'type': 'object', 'properties': {'path': OrderedDict([('type', 'string'), ('maxLength', 256), ('default', ''), ('description', 'Absolute path to the space on the storage service machine.')]), 'staging_path': OrderedDict([('type', 'string'), ('maxLength', 256), ('description', 'Absolute path to a staging area. Must be UNIX filesystem compatible, preferably on the same filesystem as the path.')]), 'size': OrderedDict([('type', 'integer'), ('default', None), ('description', 'Size in bytes (optional)')])}}), ('NewSpace', OrderedDict([('type', 'object'), ('properties', OrderedDict()), ('required', [])])), ('EditASpace', OrderedDict([('type', 'object'), ('properties', OrderedDict([('data', {'$ref': '#/components/schemas/NewSpace'}), ('resource', {'$ref': '#/components/schemas/SpaceView'})])), ('required', ['data', 'resource'])])), ('SimpleFilterOverSpaces', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', ['last_verified', 'used', 'verified', 'uuid', 'access_protocol', 'staging_path', 'size', 'path', u'id'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverSpacesDuracloud', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'duracloud'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['duraspace', 'space', 'host', 'user', 'password', u'id'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverSpacesLockssomatic', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'lockssomatic'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['collection_iri', 'external_domain', 'space', 'content_provider_id', 'sd_iri', u'id', 'checksum_type', 'au_size', 'keep_local'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverSpacesFedora', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'fedora'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['fedora_name', 'fedora_password', 'fedora_user', u'id', 'space'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverSpacesGpg', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'gpg'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', [u'id', 'key', 'space'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverSpacesDspace', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'dspace'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['space', 'sd_iri', 'metadata_policy', 'user', 'archive_format', 'password', u'id'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverSpacesNfs', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'nfs'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['manually_mounted', 'space', 'remote_path', 'version', 'remote_name', u'id'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverSpacesArkivum', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'arkivum'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['host', 'remote_user', 'remote_name', u'id', 'space'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverSpacesDataverse', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'dataverse'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['agent_name', 'agent_identifier', 'space', 'host', 'agent_type', 'api_key', u'id'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverSpacesLocation_set', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'location_set'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['used', 'uuid', 'enabled', 'quota', 'relative_path', 'purpose', u'id', 'description'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverSpacesLocalfilesystem', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'localfilesystem'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', [u'id', 'space'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverSpacesSwift', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'swift'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['username', 'container', 'space', 'region', 'auth_version', 'auth_url', 'password', u'id', 'tenant'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('FilterOverSpacesPipelinelocalfs', OrderedDict([('type', 'object'), ('properties', OrderedDict([('attribute', OrderedDict([('type', 'string'), ('enum', [u'pipelinelocalfs'])])), ('subattribute', OrderedDict([('type', 'string'), ('enum', ['remote_user', 'space', 'assume_rsync_daemon', 'remote_name', u'id', 'rsync_password'])])), ('relation', OrderedDict([('type', 'string'), ('enum', ['regex', 'gt', 'like', '!=', '=', 'contains', 'ne', '<=', 'lt', '>=', 'lte', 'in', 'regexp', 'exact', '<', 'gte', '>'])])), ('value', {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}]})]))])), ('CoordinativeFilterOverSpaces', OrderedDict([('type', 'object'), ('properties', OrderedDict([('conjunction', OrderedDict([('type', 'string'), ('enum', ['and', 'or'])])), ('complement', OrderedDict([('type', 'array'), ('items', {'$ref': '#/components/schemas/FilterOverSpaces'})]))]))])), ('NegativeFilterOverSpaces', OrderedDict([('type', 'object'), ('properties', OrderedDict([('negation', OrderedDict([('type', 'string'), ('enum', ['not'])])), ('complement', {'$ref': '#/components/schemas/FilterOverSpaces'})]))])), ('ArrayFilterOverSpaces', OrderedDict([('type', 'array'), ('items', {'oneOf': [{'type': 'string'}, {'type': 'integer'}]})])), ('ObjectFilterOverSpaces', {'oneOf': [{'$ref': '#/components/schemas/CoordinativeFilterOverSpaces'}, {'$ref': '#/components/schemas/NegativeFilterOverSpaces'}, {'$ref': '#/components/schemas/SimpleFilterOverSpaces'}, {'$ref': '#/components/schemas/FilterOverSpacesDuracloud'}, {'$ref': '#/components/schemas/FilterOverSpacesLockssomatic'}, {'$ref': '#/components/schemas/FilterOverSpacesFedora'}, {'$ref': '#/components/schemas/FilterOverSpacesGpg'}, {'$ref': '#/components/schemas/FilterOverSpacesDspace'}, {'$ref': '#/components/schemas/FilterOverSpacesNfs'}, {'$ref': '#/components/schemas/FilterOverSpacesArkivum'}, {'$ref': '#/components/schemas/FilterOverSpacesDataverse'}, {'$ref': '#/components/schemas/FilterOverSpacesLocation_set'}, {'$ref': '#/components/schemas/FilterOverSpacesLocalfilesystem'}, {'$ref': '#/components/schemas/FilterOverSpacesSwift'}, {'$ref': '#/components/schemas/FilterOverSpacesPipelinelocalfs'}]}), ('FilterOverSpaces', {'oneOf': [{'$ref': '#/components/schemas/ObjectFilterOverSpaces'}, {'$ref': '#/components/schemas/ArrayFilterOverSpaces'}]}), ('SearchQueryOverSpaces', OrderedDict([('type', 'object'), ('properties', OrderedDict([('filter', {'$ref': '#/components/schemas/FilterOverSpaces'}), ('order_by', OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'array'), ('items', OrderedDict([('type', 'string')]))]))]))])), ('required', ['filter'])])), ('SearchOverSpaces', OrderedDict([('type', 'object'), ('properties', OrderedDict([('query', {'$ref': '#/components/schemas/SearchQueryOverSpaces'}), ('paginator', {'$ref': '#/components/schemas/PaginatorSchema'})])), ('required', ['query'])])), ('DataForNewSearchOverSpaces', OrderedDict([('type', 'object'), ('properties', OrderedDict([('search_parameters', OrderedDict([('type', 'string')]))])), ('required', ['search_parameters'])]))]))])), ('paths', {'/packages/new_search/': {'get': OrderedDict([('summary', 'Get the data needed to search over all packages.'), ('description', 'Get the data needed to search over all packages.'), ('operationId', 'new_search.package'), ('responses', OrderedDict([('200', OrderedDict([('description', 'Request to get the data needed to search across all packages succeeded.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/DataForNewSearchOverPackages')]))]))]))]))])), ('tags', ['packages'])])}, '/locations/new/': {'get': OrderedDict([('summary', 'Get the data needed to create a new location.'), ('description', 'Get the data needed to create a new location.'), ('operationId', 'data_for_new.location'), ('responses', OrderedDict([('200', OrderedDict([('description', 'Request for the data needed to create a new location resource succeeded.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/NewLocation')]))]))]))]))])), ('tags', ['locations'])])}, '/pipelines/{pk}/': {'put': OrderedDict([('summary', 'Update an existing pipeline.'), ('description', 'Update an existing pipeline.'), ('operationId', 'update.pipeline'), ('requestBody', OrderedDict([('description', 'JSON object required to update an existing pipeline'), ('required', True), ('content', {'application/json': {'schema': {'$ref': '#/components/schemas/PipelineUpdate'}}})])), ('responses', OrderedDict([('200', OrderedDict([('description', 'Updating of an existing pipeline resource succeeded.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/EditAPipeline')]))]))]))])), ('404', OrderedDict([('description', 'Updating of an existing pipeline resource failed because there is no pipeline with the specified pk.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))])), ('403', OrderedDict([('description', 'Updating of an existing pipeline resource failed because the user is forbidden from updating this pipeline resource.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))])), ('400', OrderedDict([('description', 'Updating of an existing pipeline resource failed.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['pipelines'])]), 'get': OrderedDict([('summary', 'View an existing pipeline.'), ('description', 'View an existing pipeline.'), ('operationId', 'get.pipeline'), ('responses', OrderedDict([('200', OrderedDict([('description', 'Request for a single pipeline succeeded.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/PipelineView')]))]))]))])), ('404', OrderedDict([('description', 'Request for a single pipeline failed because there is no pipeline resource with the specified pk.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))])), ('403', OrderedDict([('description', 'Request for a single pipeline failed because the user is forbidden from viewing this pipeline resource.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['pipelines'])]), 'parameters': [OrderedDict([('in', 'path'), ('name', 'pk'), ('required', True), ('schema', OrderedDict([('type', 'string'), ('format', 'uuid')])), ('description', 'The primary key of the pipeline.')])], 'delete': OrderedDict([('summary', 'Delete an existing pipeline.'), ('description', 'Delete an existing pipeline.'), ('operationId', 'delete.pipeline'), ('responses', OrderedDict([('200', OrderedDict([('description', 'Deletion of the pipeline resource succeeded.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/PipelineView')]))]))]))])), ('404', OrderedDict([('description', 'Deletion of the pipeline resource failed because there is no pipeline with the specified pk.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))])), ('403', OrderedDict([('description', 'Deletion of the pipeline resource failed because user is forbidden from performing this action'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['pipelines'])])}, '/spaces/new/': {'get': OrderedDict([('summary', 'Get the data needed to create a new space.'), ('description', 'Get the data needed to create a new space.'), ('operationId', 'data_for_new.space'), ('responses', OrderedDict([('200', OrderedDict([('description', 'Request for the data needed to create a new space resource succeeded.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/NewSpace')]))]))]))]))])), ('tags', ['spaces'])])}, '/spaces/': {'post': OrderedDict([('summary', 'Create a new space.'), ('description', 'Create a new space.'), ('operationId', 'create.space'), ('requestBody', OrderedDict([('description', 'JSON object required to create a new space'), ('required', True), ('content', {'application/json': {'schema': {'$ref': '#/components/schemas/SpaceCreate'}}})])), ('responses', OrderedDict([('200', OrderedDict([('description', 'Creation of a new space succeeded.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/SpaceView')]))]))]))])), ('400', OrderedDict([('description', 'Creation of a new space failed.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['spaces'])]), 'search': OrderedDict([('summary', 'Search over all spaces.'), ('description', 'Search over all spaces.'), ('operationId', 'search.space'), ('requestBody', OrderedDict([('description', 'JSON object required to search over all spaces'), ('required', True), ('content', {'application/json': OrderedDict([('schema', {'$ref': '#/components/schemas/SearchOverSpaces'})])})])), ('responses', OrderedDict([('200', OrderedDict([('description', 'Search across all spaces succeeded.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/PaginatedSubsetOfSpaces')]))]))]))])), ('400', OrderedDict([('description', 'Search across all spaces failed.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['spaces'])]), 'get': OrderedDict([('summary', 'View all spaces.'), ('description', 'View all spaces.'), ('operationId', 'get_many.space'), ('parameters', [{'$ref': '#/components/parameters/items_per_page'}, {'$ref': '#/components/parameters/page'}, {'$ref': '#/components/parameters/order_by_attribute'}, {'$ref': '#/components/parameters/order_by_subattribute'}, {'$ref': '#/components/parameters/order_by_direction'}]), ('responses', OrderedDict([('200', OrderedDict([('description', 'Request for a collection of spaces succeeded.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/PaginatedSubsetOfSpaces')]))]))]))])), ('400', OrderedDict([('description', 'Request for a collection of spaces failed.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['spaces'])])}, '/pipelines/search/': {'post': OrderedDict([('summary', 'Search over all pipelines.'), ('description', 'Search over all pipelines.'), ('operationId', 'search.pipeline'), ('requestBody', OrderedDict([('description', 'JSON object required to search over all pipelines'), ('required', True), ('content', {'application/json': OrderedDict([('schema', {'$ref': '#/components/schemas/SearchOverPipelines'})])})])), ('responses', OrderedDict([('200', OrderedDict([('description', 'Search across all pipelines succeeded.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/PaginatedSubsetOfPipelines')]))]))]))])), ('400', OrderedDict([('description', 'Search across all pipelines failed.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['pipelines'])])}, '/locations/{pk}/edit/': {'parameters': [OrderedDict([('in', 'path'), ('name', 'pk'), ('required', True), ('schema', OrderedDict([('type', 'string'), ('format', 'uuid')])), ('description', 'The primary key of the location.')])], 'get': OrderedDict([('summary', 'Get the data needed to update an existing location.'), ('description', 'Get the data needed to update an existing location.'), ('operationId', 'data_for_edit.location'), ('responses', OrderedDict([('200', OrderedDict([('description', 'Request for the data needed to edit a(n) location resource succeeded.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/EditALocation')]))]))]))])), ('404', OrderedDict([('description', 'Request for the data needed to edit a(n) location failed because there is no location resource with the specified pk'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))])), ('403', OrderedDict([('description', 'Request for the data needed to edit a(n) location failed because the user is forbidden from editing this location resource.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['locations'])])}, '/spaces/{pk}/edit/': {'parameters': [OrderedDict([('in', 'path'), ('name', 'pk'), ('required', True), ('schema', OrderedDict([('type', 'string'), ('format', 'uuid')])), ('description', 'The primary key of the space.')])], 'get': OrderedDict([('summary', 'Get the data needed to update an existing space.'), ('description', 'Get the data needed to update an existing space.'), ('operationId', 'data_for_edit.space'), ('responses', OrderedDict([('200', OrderedDict([('description', 'Request for the data needed to edit a(n) space resource succeeded.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/EditASpace')]))]))]))])), ('404', OrderedDict([('description', 'Request for the data needed to edit a(n) space failed because there is no space resource with the specified pk'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))])), ('403', OrderedDict([('description', 'Request for the data needed to edit a(n) space failed because the user is forbidden from editing this space resource.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['spaces'])])}, '/pipelines/{pk}/edit/': {'parameters': [OrderedDict([('in', 'path'), ('name', 'pk'), ('required', True), ('schema', OrderedDict([('type', 'string'), ('format', 'uuid')])), ('description', 'The primary key of the pipeline.')])], 'get': OrderedDict([('summary', 'Get the data needed to update an existing pipeline.'), ('description', 'Get the data needed to update an existing pipeline.'), ('operationId', 'data_for_edit.pipeline'), ('responses', OrderedDict([('200', OrderedDict([('description', 'Request for the data needed to edit a(n) pipeline resource succeeded.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/EditAPipeline')]))]))]))])), ('404', OrderedDict([('description', 'Request for the data needed to edit a(n) pipeline failed because there is no pipeline resource with the specified pk'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))])), ('403', OrderedDict([('description', 'Request for the data needed to edit a(n) pipeline failed because the user is forbidden from editing this pipeline resource.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['pipelines'])])}, '/spaces/{pk}/': {'put': OrderedDict([('summary', 'Update an existing space.'), ('description', 'Update an existing space.'), ('operationId', 'update.space'), ('requestBody', OrderedDict([('description', 'JSON object required to update an existing space'), ('required', True), ('content', {'application/json': {'schema': {'$ref': '#/components/schemas/SpaceUpdate'}}})])), ('responses', OrderedDict([('200', OrderedDict([('description', 'Updating of an existing space resource succeeded.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/EditASpace')]))]))]))])), ('404', OrderedDict([('description', 'Updating of an existing space resource failed because there is no space with the specified pk.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))])), ('403', OrderedDict([('description', 'Updating of an existing space resource failed because the user is forbidden from updating this space resource.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))])), ('400', OrderedDict([('description', 'Updating of an existing space resource failed.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['spaces'])]), 'get': OrderedDict([('summary', 'View an existing space.'), ('description', 'View an existing space.'), ('operationId', 'get.space'), ('responses', OrderedDict([('200', OrderedDict([('description', 'Request for a single space succeeded.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/SpaceView')]))]))]))])), ('404', OrderedDict([('description', 'Request for a single space failed because there is no space resource with the specified pk.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))])), ('403', OrderedDict([('description', 'Request for a single space failed because the user is forbidden from viewing this space resource.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['spaces'])]), 'parameters': [OrderedDict([('in', 'path'), ('name', 'pk'), ('required', True), ('schema', OrderedDict([('type', 'string'), ('format', 'uuid')])), ('description', 'The primary key of the space.')])], 'delete': OrderedDict([('summary', 'Delete an existing space.'), ('description', 'Delete an existing space.'), ('operationId', 'delete.space'), ('responses', OrderedDict([('200', OrderedDict([('description', 'Deletion of the space resource succeeded.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/SpaceView')]))]))]))])), ('404', OrderedDict([('description', 'Deletion of the space resource failed because there is no space with the specified pk.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))])), ('403', OrderedDict([('description', 'Deletion of the space resource failed because user is forbidden from performing this action'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['spaces'])])}, '/locations/': {'post': OrderedDict([('summary', 'Create a new location.'), ('description', 'Create a new location.'), ('operationId', 'create.location'), ('requestBody', OrderedDict([('description', 'JSON object required to create a new location'), ('required', True), ('content', {'application/json': {'schema': {'$ref': '#/components/schemas/LocationCreate'}}})])), ('responses', OrderedDict([('200', OrderedDict([('description', 'Creation of a new location succeeded.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/LocationView')]))]))]))])), ('400', OrderedDict([('description', 'Creation of a new location failed.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['locations'])]), 'search': OrderedDict([('summary', 'Search over all locations.'), ('description', 'Search over all locations.'), ('operationId', 'search.location'), ('requestBody', OrderedDict([('description', 'JSON object required to search over all locations'), ('required', True), ('content', {'application/json': OrderedDict([('schema', {'$ref': '#/components/schemas/SearchOverLocations'})])})])), ('responses', OrderedDict([('200', OrderedDict([('description', 'Search across all locations succeeded.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/PaginatedSubsetOfLocations')]))]))]))])), ('400', OrderedDict([('description', 'Search across all locations failed.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['locations'])]), 'get': OrderedDict([('summary', 'View all locations.'), ('description', 'View all locations.'), ('operationId', 'get_many.location'), ('parameters', [{'$ref': '#/components/parameters/items_per_page'}, {'$ref': '#/components/parameters/page'}, {'$ref': '#/components/parameters/order_by_attribute'}, {'$ref': '#/components/parameters/order_by_subattribute'}, {'$ref': '#/components/parameters/order_by_direction'}]), ('responses', OrderedDict([('200', OrderedDict([('description', 'Request for a collection of locations succeeded.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/PaginatedSubsetOfLocations')]))]))]))])), ('400', OrderedDict([('description', 'Request for a collection of locations failed.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['locations'])])}, '/locations/search/': {'post': OrderedDict([('summary', 'Search over all locations.'), ('description', 'Search over all locations.'), ('operationId', 'search.location'), ('requestBody', OrderedDict([('description', 'JSON object required to search over all locations'), ('required', True), ('content', {'application/json': OrderedDict([('schema', {'$ref': '#/components/schemas/SearchOverLocations'})])})])), ('responses', OrderedDict([('200', OrderedDict([('description', 'Search across all locations succeeded.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/PaginatedSubsetOfLocations')]))]))]))])), ('400', OrderedDict([('description', 'Search across all locations failed.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['locations'])])}, '/pipelines/new_search/': {'get': OrderedDict([('summary', 'Get the data needed to search over all pipelines.'), ('description', 'Get the data needed to search over all pipelines.'), ('operationId', 'new_search.pipeline'), ('responses', OrderedDict([('200', OrderedDict([('description', 'Request to get the data needed to search across all pipelines succeeded.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/DataForNewSearchOverPipelines')]))]))]))]))])), ('tags', ['pipelines'])])}, '/spaces/new_search/': {'get': OrderedDict([('summary', 'Get the data needed to search over all spaces.'), ('description', 'Get the data needed to search over all spaces.'), ('operationId', 'new_search.space'), ('responses', OrderedDict([('200', OrderedDict([('description', 'Request to get the data needed to search across all spaces succeeded.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/DataForNewSearchOverSpaces')]))]))]))]))])), ('tags', ['spaces'])])}, '/spaces/search/': {'post': OrderedDict([('summary', 'Search over all spaces.'), ('description', 'Search over all spaces.'), ('operationId', 'search.space'), ('requestBody', OrderedDict([('description', 'JSON object required to search over all spaces'), ('required', True), ('content', {'application/json': OrderedDict([('schema', {'$ref': '#/components/schemas/SearchOverSpaces'})])})])), ('responses', OrderedDict([('200', OrderedDict([('description', 'Search across all spaces succeeded.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/PaginatedSubsetOfSpaces')]))]))]))])), ('400', OrderedDict([('description', 'Search across all spaces failed.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['spaces'])])}, '/packages/search/': {'post': OrderedDict([('summary', 'Search over all packages.'), ('description', 'Search over all packages.'), ('operationId', 'search.package'), ('requestBody', OrderedDict([('description', 'JSON object required to search over all packages'), ('required', True), ('content', {'application/json': OrderedDict([('schema', {'$ref': '#/components/schemas/SearchOverPackages'})])})])), ('responses', OrderedDict([('200', OrderedDict([('description', 'Search across all packages succeeded.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/PaginatedSubsetOfPackages')]))]))]))])), ('400', OrderedDict([('description', 'Search across all packages failed.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['packages'])])}, '/pipelines/new/': {'get': OrderedDict([('summary', 'Get the data needed to create a new pipeline.'), ('description', 'Get the data needed to create a new pipeline.'), ('operationId', 'data_for_new.pipeline'), ('responses', OrderedDict([('200', OrderedDict([('description', 'Request for the data needed to create a new pipeline resource succeeded.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/NewPipeline')]))]))]))]))])), ('tags', ['pipelines'])])}, '/locations/new_search/': {'get': OrderedDict([('summary', 'Get the data needed to search over all locations.'), ('description', 'Get the data needed to search over all locations.'), ('operationId', 'new_search.location'), ('responses', OrderedDict([('200', OrderedDict([('description', 'Request to get the data needed to search across all locations succeeded.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/DataForNewSearchOverLocations')]))]))]))]))])), ('tags', ['locations'])])}, '/pipelines/': {'post': OrderedDict([('summary', 'Create a new pipeline.'), ('description', 'Create a new pipeline.'), ('operationId', 'create.pipeline'), ('requestBody', OrderedDict([('description', 'JSON object required to create a new pipeline'), ('required', True), ('content', {'application/json': {'schema': {'$ref': '#/components/schemas/PipelineCreate'}}})])), ('responses', OrderedDict([('200', OrderedDict([('description', 'Creation of a new pipeline succeeded.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/PipelineView')]))]))]))])), ('400', OrderedDict([('description', 'Creation of a new pipeline failed.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['pipelines'])]), 'search': OrderedDict([('summary', 'Search over all pipelines.'), ('description', 'Search over all pipelines.'), ('operationId', 'search.pipeline'), ('requestBody', OrderedDict([('description', 'JSON object required to search over all pipelines'), ('required', True), ('content', {'application/json': OrderedDict([('schema', {'$ref': '#/components/schemas/SearchOverPipelines'})])})])), ('responses', OrderedDict([('200', OrderedDict([('description', 'Search across all pipelines succeeded.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/PaginatedSubsetOfPipelines')]))]))]))])), ('400', OrderedDict([('description', 'Search across all pipelines failed.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['pipelines'])]), 'get': OrderedDict([('summary', 'View all pipelines.'), ('description', 'View all pipelines.'), ('operationId', 'get_many.pipeline'), ('parameters', [{'$ref': '#/components/parameters/items_per_page'}, {'$ref': '#/components/parameters/page'}, {'$ref': '#/components/parameters/order_by_attribute'}, {'$ref': '#/components/parameters/order_by_subattribute'}, {'$ref': '#/components/parameters/order_by_direction'}]), ('responses', OrderedDict([('200', OrderedDict([('description', 'Request for a collection of pipelines succeeded.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/PaginatedSubsetOfPipelines')]))]))]))])), ('400', OrderedDict([('description', 'Request for a collection of pipelines failed.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['pipelines'])])}, '/packages/{pk}/': {'parameters': [OrderedDict([('in', 'path'), ('name', 'pk'), ('required', True), ('schema', OrderedDict([('type', 'string'), ('format', 'uuid')])), ('description', 'The primary key of the package.')])], 'get': OrderedDict([('summary', 'View an existing package.'), ('description', 'View an existing package.'), ('operationId', 'get.package'), ('responses', OrderedDict([('200', OrderedDict([('description', 'Request for a single package succeeded.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/PackageView')]))]))]))])), ('404', OrderedDict([('description', 'Request for a single package failed because there is no package resource with the specified pk.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))])), ('403', OrderedDict([('description', 'Request for a single package failed because the user is forbidden from viewing this package resource.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['packages'])])}, '/packages/': {'search': OrderedDict([('summary', 'Search over all packages.'), ('description', 'Search over all packages.'), ('operationId', 'search.package'), ('requestBody', OrderedDict([('description', 'JSON object required to search over all packages'), ('required', True), ('content', {'application/json': OrderedDict([('schema', {'$ref': '#/components/schemas/SearchOverPackages'}), ('example', {'ObjectSearchOverPackagesExample': {'paginator': {'items_per_page': 10, 'page': 1}, 'query': {'filter': {'complement': [{'attribute': 'description', 'relation': 'like', 'value': '%a%'}, {'complement': {'attribute': 'description', 'relation': 'like', 'value': 'T%'}, 'negation': 'not'}, {'complement': [{'attribute': 'size', 'relation': '<', 'value': 1000}, {'attribute': 'size', 'relation': '>', 'value': 512}], 'conjunction': 'or'}], 'conjunction': 'and'}}}, 'ArraySearchOverPackagesExample': {'paginator': {'items_per_page': 10, 'page': 1}, 'query': {'filter': ['and', [['description', 'like', '%a%'], ['not', ['description', 'like', 'T%']], ['or', [['size', '<', 1000], ['size', '>', 512]]]]]}}})])})])), ('responses', OrderedDict([('200', OrderedDict([('description', 'Search across all packages succeeded.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/PaginatedSubsetOfPackages')]))]))]))])), ('400', OrderedDict([('description', 'Search across all packages failed.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['packages'])]), 'get': OrderedDict([('summary', 'View all packages.'), ('description', 'View all packages.'), ('operationId', 'get_many.package'), ('parameters', [{'$ref': '#/components/parameters/items_per_page'}, {'$ref': '#/components/parameters/page'}, {'$ref': '#/components/parameters/order_by_attribute'}, {'$ref': '#/components/parameters/order_by_subattribute'}, {'$ref': '#/components/parameters/order_by_direction'}]), ('responses', OrderedDict([('200', OrderedDict([('description', 'Request for a collection of packages succeeded.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/PaginatedSubsetOfPackages')]))]))]))])), ('400', OrderedDict([('description', 'Request for a collection of packages failed.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['packages'])])}, '/locations/{pk}/': {'put': OrderedDict([('summary', 'Update an existing location.'), ('description', 'Update an existing location.'), ('operationId', 'update.location'), ('requestBody', OrderedDict([('description', 'JSON object required to update an existing location'), ('required', True), ('content', {'application/json': {'schema': {'$ref': '#/components/schemas/LocationUpdate'}}})])), ('responses', OrderedDict([('200', OrderedDict([('description', 'Updating of an existing location resource succeeded.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/EditALocation')]))]))]))])), ('404', OrderedDict([('description', 'Updating of an existing location resource failed because there is no location with the specified pk.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))])), ('403', OrderedDict([('description', 'Updating of an existing location resource failed because the user is forbidden from updating this location resource.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))])), ('400', OrderedDict([('description', 'Updating of an existing location resource failed.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['locations'])]), 'get': OrderedDict([('summary', 'View an existing location.'), ('description', 'View an existing location.'), ('operationId', 'get.location'), ('responses', OrderedDict([('200', OrderedDict([('description', 'Request for a single location succeeded.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/LocationView')]))]))]))])), ('404', OrderedDict([('description', 'Request for a single location failed because there is no location resource with the specified pk.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))])), ('403', OrderedDict([('description', 'Request for a single location failed because the user is forbidden from viewing this location resource.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['locations'])]), 'parameters': [OrderedDict([('in', 'path'), ('name', 'pk'), ('required', True), ('schema', OrderedDict([('type', 'string'), ('format', 'uuid')])), ('description', 'The primary key of the location.')])], 'delete': OrderedDict([('summary', 'Delete an existing location.'), ('description', 'Delete an existing location.'), ('operationId', 'delete.location'), ('responses', OrderedDict([('200', OrderedDict([('description', 'Deletion of the location resource succeeded.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/LocationView')]))]))]))])), ('404', OrderedDict([('description', 'Deletion of the location resource failed because there is no location with the specified pk.'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))])), ('403', OrderedDict([('description', 'Deletion of the location resource failed because user is forbidden from performing this action'), ('content', OrderedDict([('application/json', OrderedDict([('schema', OrderedDict([('$ref', '#/components/schemas/ErrorSchema')]))]))]))]))])), ('tags', ['locations'])])}}), ('tags', [OrderedDict([('name', 'locations'), ('description', 'Access to the Location resource')]), OrderedDict([('name', 'packages'), ('description', 'Access to the Package resource')]), OrderedDict([('name', 'pipelines'), ('description', 'Access to the Pipeline resource')]), OrderedDict([('name', 'spaces'), ('description', 'Access to the Space resource')])])]) ) + HTTP_METHODS = ('get', 'delete', 'post', 'put') METHOD_GET = "GET" METHOD_POST = "POST" METHOD_DELETE = "DELETE" -class OpenAPIClientError(Exception): - pass +indented_wrapper = textwrap.TextWrapper( + width=80, + initial_indent=' ' * 4, + subsequent_indent=' ' * 8) + + +class ClientError(Exception): + """Base exception for this module.""" + + +class ValidationError(ClientError): + """If the arguments to a method are invalid given the API spec.""" + + +class HTTPError(ClientError): + """If an HTTP request fails unexpectedly.""" + + +class ResponseError(ClientError): + """if an HTTP response is unexpected given the API spec.""" + + +methods_raise = (ValidationError, HTTPError, ResponseError,) def _call_url_json(self, url, params=None, method=METHOD_GET, headers=None, @@ -119,7 +147,7 @@ def _call_url_json(self, url, params=None, method=METHOD_GET, headers=None, requests.exceptions.ConnectionError) as err: msg = 'Connection error {}'.format(err) logger.error(msg) - raise OpenAPIClientError(msg[:30]) + raise HTTPError(msg[:30]) responses_cfg = responses_cfg or {} return self._handle_response(response, method, url, responses_cfg) @@ -137,7 +165,7 @@ def _handle_response(self, response, method, url, responses_cfg): status_code=status_code, reason=response.reason, method=method, url=url)) logger.warning(msg) - raise OpenAPIClientError(msg) + raise ResponseError(msg) resp_descr = response_cfg.get('description', 'Response lacks a description') logger.debug('Received an expected response with this description: %s', resp_descr) @@ -148,22 +176,12 @@ def _handle_response(self, response, method, url, responses_cfg): except ValueError: # JSON could not be decoded msg = 'Could not parse JSON from response' logger.warning(msg) - raise OpenAPIClientError(msg) + raise ResponseError(msg) else: - return response.text - if response.ok: - return ret # How should the happy path response schema inform the return value? - resp_schema_path = resp_json_cfg.get('schema', {}).get('$ref') - if not resp_schema_path: - logger.warning('Unable to use response schema to parse the response') - return ret - resp_schema = deref(self.openapi_spec, resp_schema_path) - resp_type = resp_schema.get('type') - resp_required = resp_schema.get('required', []) - if resp_type == 'object' and resp_required: - return '\n'.join(str(ret[req]) for req in resp_required) - logger.warning('Unable to use response schema to parse the response') - return ret + return {'error': 'Not a JSON response; this client expects only JSON' + ' responses.', + 'response_text': response.text} + return ret # How should the happy path response schema inform the return value? def get_openapi_spec(): @@ -184,13 +202,14 @@ def get_client_class_docstring(openapi_spec, resource_classes): description = openapi_spec['info'].get('description') if description: docstring.append('\n\n') - docstring.append('The targeted API is described as follows. ') - docstring.append(description) + docstring.append(textwrap.fill(description, 80)) if resource_classes: docstring.append('\n\n') - docstring.append( + docstring.append(textwrap.fill( 'The following instance attributes allow interaction with the' - ' resources that the API exposes. See their documentation:\n\n') + ' resources that the API exposes. See their documentation:', + 80)) + docstring.append('\n\n') for attr_name in sorted(resource_classes): docstring.append('- ``self.{}``\n'.format(attr_name)) if description or resource_classes: @@ -279,7 +298,7 @@ def _reconstruct_params(locals_, args_, kwargs_): def get_param_docstring_line(arg, arg_cfg): - arg_line = [' ', arg] + arg_line = [arg] arg_type = arg_cfg.get('type', arg_cfg.get('schema', {}).get('type')) if arg_type: _, arg_type = openapitype2pythontype.get(arg_type, (None, arg_type)) @@ -298,10 +317,35 @@ def get_param_docstring_line(arg, arg_cfg): if arg_enum: arg_line.append(' Must be one of {}.'.format( ', '.join(repr(e) for e in arg_enum))) - return '\n' + ''.join(arg_line) + return '\n' + indented_wrapper.fill(''.join(arg_line)) + + +decapitalize = lambda s: s[:1].lower() + s[1:] if s else '' + + +def get_returns_docstring_line(openapi_spec, code, cfg): + return_description = [] + condition = decapitalize( + cfg.get('description', '{} response'.format(code))).rstrip('.') + ref = cfg.get('content', {}).get('application/json', {}).get( + 'schema', {}).get('$ref') + if ref: + schema = deref(openapi_spec, ref) + ret_type = {'object': 'dict'}.get( + schema.get('type'), 'unknown type') + return_description.append('{}:'.format(ret_type)) + if ret_type == 'dict': + required_keys = schema.get('required') + if required_keys: + return_description.append( + ' with key(s): "{}"'.format('", "'.join(required_keys))) + else: + return_description.append('\n unknown type:') + return_description.append(', if {}.'.format(condition)) + return '\n' + indented_wrapper.fill(''.join(return_description)) -def get_method_docstring(op_cfg, args, kwargs): +def get_method_docstring(op_cfg, args, kwargs, openapi_spec): summary = op_cfg.get('summary') description = op_cfg.get('description') if not summary: @@ -317,6 +361,15 @@ def get_method_docstring(op_cfg, args, kwargs): docstring.append(get_param_docstring_line(arg, arg_cfg)) for kwarg, kwarg_cfg in kwargs.items(): docstring.append(get_param_docstring_line(kwarg.replace('_param', ''), kwarg_cfg)) + docstring.append('\n\n') + docstring.append('Returns:') + for code, cfg in op_cfg.get('responses').items(): + docstring.append(get_returns_docstring_line(openapi_spec, code, cfg)) + docstring.append('\n\n') + docstring.append('Raises:') + for exc in methods_raise: + docstring.append('\n' + indented_wrapper.fill('{}: {}'.format( + exc.__name__, exc.__doc__))) return ''.join(docstring) @@ -324,7 +377,7 @@ def _validate_min(param_name, param_val, param_schema): param_min = param_schema.get('minimum') if param_min: if param_val < param_min: - raise ValueError( + raise ValidationError( 'Value {} for argument "{}" must be {} or greater.'.format( param_val, param_name, param_min)) @@ -333,7 +386,7 @@ def _validate_max(param_name, param_val, param_schema): param_max = param_schema.get('maximum') if param_max: if param_val > param_max: - raise ValueError( + raise ValidationError( 'Value {} for argument "{}" is greater than the maximum' ' allowed value {}.'.format( param_val, param_name, param_max)) @@ -343,14 +396,14 @@ def _validate_enum(param_name, param_val, param_schema): param_enum = param_schema.get('enum') if param_enum: if param_val not in param_enum: - raise ValueError( + raise ValidationError( 'Value {} for argument "{}" must be one of {}'.format( repr(param_val), param_name, ', '.join(repr(e) for e in param_enum))) def _is_uuid(inp): - err = ValueError('"{}" is not a valid UUID'.format(inp)) + err = ValidationError('"{}" is not a valid UUID'.format(inp)) try: recomposed = [] parts = inp.split('-') @@ -383,82 +436,54 @@ def _validate_format(param_name, param_val, param_schema): def _validate(params, args_, kwargs_): """Validate user-supplied ``params`` using the parameter configurations - described in the ``args_`` and ``kwargs_`` dicts. Raise a ``ValueError`` if - a value is invalid. Also remove unneeded values from ``params``, which is - what gets sent (as request body or query params) in the request. + described in the ``args_`` and ``kwargs_`` dicts. Raise a + ``ValidationError`` if a value is invalid. Also remove unneeded + values from ``params``, which is what gets sent (as request body or query + params) in the request. TODO: we need to validate complex objects in this + function but this is a non-trivial issue. """ - print('IN VALIDATE') - - print('params') - pprint.pprint(params) - - print('args_') - print(json.dumps(args_, indent=4)[:100] + '...') - - print('kwargs_') - print(json.dumps(kwargs_, indent=4)[:100] + '...') - to_delete = [] for param_name, param_val in params.items(): - - print('validating {} 1'.format(param_name)) - - param_cfg = args_.get(param_name, kwargs_.get(param_name, {})) - param_required = param_cfg.get('required', False) + param_required = False + param_cfg = args_.get(param_name) + if param_cfg: + param_required = True + else: + param_cfg = kwargs_[param_name] param_schema = param_cfg.get('schema', {}) - param_type = param_schema.get('type') + param_type = param_schema.get('type', param_cfg.get('type')) if not param_type: - param_type = param_cfg.get('type') - if param_type: - print('Type for {} is {}'.format(param_name, param_type)) - - print('FOX param_val') - pprint.pprint(param_val) - print('schema:') - print(json.dumps(param_cfg.get('properties', {}), indent=4)[:100] + '...') - - continue - - print('validating {} 2'.format(param_name)) - + if param_type == 'object': + if not param_val: + if param_required: + raise ValidationError( + 'Property {} is required'.format(param_name)) + continue + # TODO: we need to validate all of the properties of this object: + # for key, val in param_val.items(): + # # validate against param_cfg['properties'][key] + continue param_type, _ = openapitype2pythontype.get(param_type, (None, None)) if not param_type: continue - - print('validating {} 3'.format(param_name)) - if ((param_val is None) and (not param_required) and (not isinstance(None, param_type))): to_delete.append(param_name) continue - - print('validating {} 4'.format(param_name)) - if not isinstance(param_val, param_type): - raise ValueError( + raise ValidationError( 'Value "{}" for argument "{}" is of type {}; it must be of type(s)' ' {}'.format(param_val, param_name, type(param_val), ', '.join(str(t) for t in param_type))) - - print('validating {} 5'.format(param_name)) - _validate_min(param_name, param_val, param_schema) _validate_max(param_name, param_val, param_schema) _validate_format(param_name, param_val, param_schema) _validate_enum(param_name, param_val, param_schema) - - print('validating {} 6'.format(param_name)) - - param_in = param_cfg.get('in') if param_in == 'path': to_delete.append(param_name) - - print('validating {} 7'.format(param_name)) - - for td in to_delete: del params[td] @@ -483,13 +508,22 @@ def _serialize_params(self, params, request_body_config): return json.dumps(params) +def get_method_signature(method_name, arg_names, kwarg_names): + ret = 'def {method_name}(self{arg_names}{kwarg_names}):'.format( + method_name=method_name, arg_names=arg_names, kwarg_names=kwarg_names) + indent = ' ' * len('def {}('.format(method_name)) + return textwrap.TextWrapper(width=80, subsequent_indent=indent).fill(ret) + + def generate_method_code(method_name, docstring, args_, kwargs_): arg_names = '' if args_: arg_names = ', ' + ', '.join(args_) kwarg_names = _get_kwarg_names(kwargs_) + method_sig = get_method_signature(method_name, arg_names, kwarg_names) + return ''' -def {method_name}(self{arg_names}{kwarg_names}): +{method_sig} """{docstring} """ locals_copy = locals().copy() @@ -502,33 +536,26 @@ def {method_name}(self{arg_names}{kwarg_names}): return self._call_url_json( url, params=params, method=http_method.upper(), headers=self.get_auth_headers(), responses_cfg=responses_cfg) -'''.format(method_name=method_name, - docstring=docstring, - arg_names=arg_names, - kwarg_names=kwarg_names) +'''.format(method_sig=method_sig, docstring=docstring) def _get_request_body_schema(openapi_spec, operation_config): request_body = operation_config.get('requestBody') if not request_body: - return None, False + return None try: rb_ref_path = request_body[ 'content']['application/json']['schema']['$ref'] except KeyError: - return None, False - return recursive_deref(openapi_spec, rb_ref_path) + return None + schema, _ = recursive_deref(openapi_spec, rb_ref_path) + return schema def _get_request_body_args_kwargs(openapi_spec, op_cfg): args = OrderedDict() kwargs = {} - rb_schema, rb_circular = _get_request_body_schema(openapi_spec, op_cfg) - #if rb_circular: # TODO - # print('CIRCULAR') - # #pprint.pprint(rb_schema) - # print(json.dumps(rb_schema, indent=4)) - # return args, kwargs + rb_schema = _get_request_body_schema(openapi_spec, op_cfg) if rb_schema: for arg_name in sorted(rb_schema.get('required', [])): args[arg_name] = rb_schema['properties'][arg_name] @@ -550,12 +577,6 @@ def get_method(openapi_spec, path, path_params, http_method, op_cfg): # pylint: disable=exec-used,too-many-locals method_name, namespace = op_cfg['operationId'].split('.') rb_args, rb_kwargs = _get_request_body_args_kwargs(openapi_spec, op_cfg) - - if method_name == 'search': - print('search args:') - pprint.pprint(rb_args) - pprint.pprint(rb_kwargs) - parameters = op_cfg.get('parameters', []) args_ = OrderedDict() kwargs_ = {} @@ -571,7 +592,7 @@ def get_method(openapi_spec, path, path_params, http_method, op_cfg): args_[param_name] = param_cfg else: kwargs_[param_name] = param_cfg - docstring = get_method_docstring(op_cfg, args_, kwargs_) + docstring = get_method_docstring(op_cfg, args_, kwargs_, openapi_spec) method_ = generate_method_code(method_name, docstring, args_, kwargs_) # This is necessary so that the method is a closure over these values temp_globals = globals().copy() diff --git a/storage_service/static/openapi/openapispecs/storage-service-0.11.0-openapi-3.0.0.yml b/storage_service/static/openapi/openapispecs/storage-service-0.11.0-openapi-3.0.0.yml index 4b979b7f8..c051311fd 100644 --- a/storage_service/static/openapi/openapispecs/storage-service-0.11.0-openapi-3.0.0.yml +++ b/storage_service/static/openapi/openapispecs/storage-service-0.11.0-openapi-3.0.0.yml @@ -2552,13 +2552,13 @@ paths: - $ref: '#/components/parameters/order_by_direction' responses: '200': - description: Successful request to view all locations. + description: Request for a collection of locations succeeded. content: application/json: schema: $ref: '#/components/schemas/PaginatedSubsetOfLocations' '400': - description: Failed request to view all locations. + description: Request for a collection of locations failed. content: application/json: schema: @@ -2578,13 +2578,13 @@ paths: $ref: '#/components/schemas/LocationCreate' responses: '200': - description: Succeeded in creating a new location. + description: Creation of a new location succeeded. content: application/json: schema: $ref: '#/components/schemas/LocationView' '400': - description: Bad request to create a new location. + description: Creation of a new location failed. content: application/json: schema: @@ -2604,13 +2604,13 @@ paths: $ref: '#/components/schemas/SearchOverLocations' responses: '200': - description: Successful request to search across all locations. + description: Search across all locations succeeded. content: application/json: schema: $ref: '#/components/schemas/PaginatedSubsetOfLocations' '400': - description: Failed request to search across all locations. + description: Search across all locations failed. content: application/json: schema: @@ -2624,7 +2624,8 @@ paths: operationId: data_for_new.location responses: '200': - description: Successful requested data needed to create a new location resource. + description: Request for the data needed to create a new location resource + succeeded. content: application/json: schema: @@ -2638,8 +2639,8 @@ paths: operationId: new_search.location responses: '200': - description: Successful request to get the data needed to search across - all locations. + description: Request to get the data needed to search across all locations + succeeded. content: application/json: schema: @@ -2660,13 +2661,13 @@ paths: $ref: '#/components/schemas/SearchOverLocations' responses: '200': - description: Successful request to search across all locations. + description: Search across all locations succeeded. content: application/json: schema: $ref: '#/components/schemas/PaginatedSubsetOfLocations' '400': - description: Failed request to search across all locations. + description: Search across all locations failed. content: application/json: schema: @@ -2680,20 +2681,21 @@ paths: operationId: delete.location responses: '200': - description: Successful deletion of a location resource. + description: Deletion of the location resource succeeded. content: application/json: schema: $ref: '#/components/schemas/LocationView' '404': - description: There is no location resource with the specified key so it - cannot be deleted. + description: Deletion of the location resource failed because there is no + location with the specified pk. content: application/json: schema: $ref: '#/components/schemas/ErrorSchema' '403': - description: The user is forbidden from deleting this location resource. + description: Deletion of the location resource failed because user is forbidden + from performing this action content: application/json: schema: @@ -2706,19 +2708,21 @@ paths: operationId: get.location responses: '200': - description: Successfully requested a(n) location resource. + description: Request for a single location succeeded. content: application/json: schema: $ref: '#/components/schemas/LocationView' '404': - description: There is no location resource with the specified key. + description: Request for a single location failed because there is no location + resource with the specified pk. content: application/json: schema: $ref: '#/components/schemas/ErrorSchema' '403': - description: The user is forbidden from viewing this location resource. + description: Request for a single location failed because the user is forbidden + from viewing this location resource. content: application/json: schema: @@ -2746,26 +2750,27 @@ paths: $ref: '#/components/schemas/LocationUpdate' responses: '200': - description: Succeeded in updating an existing location resource. + description: Updating of an existing location resource succeeded. content: application/json: schema: $ref: '#/components/schemas/EditALocation' '404': - description: There is no location resource with the specified key so it - cannot be updated. + description: Updating of an existing location resource failed because there + is no location with the specified pk. content: application/json: schema: $ref: '#/components/schemas/ErrorSchema' '403': - description: The user is forbidden from updating this location resource. + description: Updating of an existing location resource failed because the + user is forbidden from updating this location resource. content: application/json: schema: $ref: '#/components/schemas/ErrorSchema' '400': - description: Bad request to update an existing location. + description: Updating of an existing location resource failed. content: application/json: schema: @@ -2779,21 +2784,22 @@ paths: operationId: data_for_edit.location responses: '200': - description: Succeeded in retrieving the data needed to edit a(n) location - resource. + description: Request for the data needed to edit a(n) location resource + succeeded. content: application/json: schema: $ref: '#/components/schemas/EditALocation' '404': - description: There is no location resource with the specified key so it - cannot be edited. + description: Request for the data needed to edit a(n) location failed because + there is no location resource with the specified pk content: application/json: schema: $ref: '#/components/schemas/ErrorSchema' '403': - description: The user is forbidden from editing this location resource. + description: Request for the data needed to edit a(n) location failed because + the user is forbidden from editing this location resource. content: application/json: schema: @@ -2821,13 +2827,13 @@ paths: - $ref: '#/components/parameters/order_by_direction' responses: '200': - description: Successful request to view all packages. + description: Request for a collection of packages succeeded. content: application/json: schema: $ref: '#/components/schemas/PaginatedSubsetOfPackages' '400': - description: Failed request to view all packages. + description: Request for a collection of packages failed. content: application/json: schema: @@ -2893,13 +2899,13 @@ paths: conjunction: and responses: '200': - description: Successful request to search across all packages. + description: Search across all packages succeeded. content: application/json: schema: $ref: '#/components/schemas/PaginatedSubsetOfPackages' '400': - description: Failed request to search across all packages. + description: Search across all packages failed. content: application/json: schema: @@ -2913,8 +2919,8 @@ paths: operationId: new_search.package responses: '200': - description: Successful request to get the data needed to search across - all packages. + description: Request to get the data needed to search across all packages + succeeded. content: application/json: schema: @@ -2935,13 +2941,13 @@ paths: $ref: '#/components/schemas/SearchOverPackages' responses: '200': - description: Successful request to search across all packages. + description: Search across all packages succeeded. content: application/json: schema: $ref: '#/components/schemas/PaginatedSubsetOfPackages' '400': - description: Failed request to search across all packages. + description: Search across all packages failed. content: application/json: schema: @@ -2955,19 +2961,21 @@ paths: operationId: get.package responses: '200': - description: Successfully requested a(n) package resource. + description: Request for a single package succeeded. content: application/json: schema: $ref: '#/components/schemas/PackageView' '404': - description: There is no package resource with the specified key. + description: Request for a single package failed because there is no package + resource with the specified pk. content: application/json: schema: $ref: '#/components/schemas/ErrorSchema' '403': - description: The user is forbidden from viewing this package resource. + description: Request for a single package failed because the user is forbidden + from viewing this package resource. content: application/json: schema: @@ -2995,13 +3003,13 @@ paths: - $ref: '#/components/parameters/order_by_direction' responses: '200': - description: Successful request to view all pipelines. + description: Request for a collection of pipelines succeeded. content: application/json: schema: $ref: '#/components/schemas/PaginatedSubsetOfPipelines' '400': - description: Failed request to view all pipelines. + description: Request for a collection of pipelines failed. content: application/json: schema: @@ -3021,13 +3029,13 @@ paths: $ref: '#/components/schemas/PipelineCreate' responses: '200': - description: Succeeded in creating a new pipeline. + description: Creation of a new pipeline succeeded. content: application/json: schema: $ref: '#/components/schemas/PipelineView' '400': - description: Bad request to create a new pipeline. + description: Creation of a new pipeline failed. content: application/json: schema: @@ -3047,13 +3055,13 @@ paths: $ref: '#/components/schemas/SearchOverPipelines' responses: '200': - description: Successful request to search across all pipelines. + description: Search across all pipelines succeeded. content: application/json: schema: $ref: '#/components/schemas/PaginatedSubsetOfPipelines' '400': - description: Failed request to search across all pipelines. + description: Search across all pipelines failed. content: application/json: schema: @@ -3067,7 +3075,8 @@ paths: operationId: data_for_new.pipeline responses: '200': - description: Successful requested data needed to create a new pipeline resource. + description: Request for the data needed to create a new pipeline resource + succeeded. content: application/json: schema: @@ -3081,8 +3090,8 @@ paths: operationId: new_search.pipeline responses: '200': - description: Successful request to get the data needed to search across - all pipelines. + description: Request to get the data needed to search across all pipelines + succeeded. content: application/json: schema: @@ -3103,13 +3112,13 @@ paths: $ref: '#/components/schemas/SearchOverPipelines' responses: '200': - description: Successful request to search across all pipelines. + description: Search across all pipelines succeeded. content: application/json: schema: $ref: '#/components/schemas/PaginatedSubsetOfPipelines' '400': - description: Failed request to search across all pipelines. + description: Search across all pipelines failed. content: application/json: schema: @@ -3123,20 +3132,21 @@ paths: operationId: delete.pipeline responses: '200': - description: Successful deletion of a pipeline resource. + description: Deletion of the pipeline resource succeeded. content: application/json: schema: $ref: '#/components/schemas/PipelineView' '404': - description: There is no pipeline resource with the specified key so it - cannot be deleted. + description: Deletion of the pipeline resource failed because there is no + pipeline with the specified pk. content: application/json: schema: $ref: '#/components/schemas/ErrorSchema' '403': - description: The user is forbidden from deleting this pipeline resource. + description: Deletion of the pipeline resource failed because user is forbidden + from performing this action content: application/json: schema: @@ -3149,19 +3159,21 @@ paths: operationId: get.pipeline responses: '200': - description: Successfully requested a(n) pipeline resource. + description: Request for a single pipeline succeeded. content: application/json: schema: $ref: '#/components/schemas/PipelineView' '404': - description: There is no pipeline resource with the specified key. + description: Request for a single pipeline failed because there is no pipeline + resource with the specified pk. content: application/json: schema: $ref: '#/components/schemas/ErrorSchema' '403': - description: The user is forbidden from viewing this pipeline resource. + description: Request for a single pipeline failed because the user is forbidden + from viewing this pipeline resource. content: application/json: schema: @@ -3189,26 +3201,27 @@ paths: $ref: '#/components/schemas/PipelineUpdate' responses: '200': - description: Succeeded in updating an existing pipeline resource. + description: Updating of an existing pipeline resource succeeded. content: application/json: schema: $ref: '#/components/schemas/EditAPipeline' '404': - description: There is no pipeline resource with the specified key so it - cannot be updated. + description: Updating of an existing pipeline resource failed because there + is no pipeline with the specified pk. content: application/json: schema: $ref: '#/components/schemas/ErrorSchema' '403': - description: The user is forbidden from updating this pipeline resource. + description: Updating of an existing pipeline resource failed because the + user is forbidden from updating this pipeline resource. content: application/json: schema: $ref: '#/components/schemas/ErrorSchema' '400': - description: Bad request to update an existing pipeline. + description: Updating of an existing pipeline resource failed. content: application/json: schema: @@ -3222,21 +3235,22 @@ paths: operationId: data_for_edit.pipeline responses: '200': - description: Succeeded in retrieving the data needed to edit a(n) pipeline - resource. + description: Request for the data needed to edit a(n) pipeline resource + succeeded. content: application/json: schema: $ref: '#/components/schemas/EditAPipeline' '404': - description: There is no pipeline resource with the specified key so it - cannot be edited. + description: Request for the data needed to edit a(n) pipeline failed because + there is no pipeline resource with the specified pk content: application/json: schema: $ref: '#/components/schemas/ErrorSchema' '403': - description: The user is forbidden from editing this pipeline resource. + description: Request for the data needed to edit a(n) pipeline failed because + the user is forbidden from editing this pipeline resource. content: application/json: schema: @@ -3264,13 +3278,13 @@ paths: - $ref: '#/components/parameters/order_by_direction' responses: '200': - description: Successful request to view all spaces. + description: Request for a collection of spaces succeeded. content: application/json: schema: $ref: '#/components/schemas/PaginatedSubsetOfSpaces' '400': - description: Failed request to view all spaces. + description: Request for a collection of spaces failed. content: application/json: schema: @@ -3290,13 +3304,13 @@ paths: $ref: '#/components/schemas/SpaceCreate' responses: '200': - description: Succeeded in creating a new space. + description: Creation of a new space succeeded. content: application/json: schema: $ref: '#/components/schemas/SpaceView' '400': - description: Bad request to create a new space. + description: Creation of a new space failed. content: application/json: schema: @@ -3316,13 +3330,13 @@ paths: $ref: '#/components/schemas/SearchOverSpaces' responses: '200': - description: Successful request to search across all spaces. + description: Search across all spaces succeeded. content: application/json: schema: $ref: '#/components/schemas/PaginatedSubsetOfSpaces' '400': - description: Failed request to search across all spaces. + description: Search across all spaces failed. content: application/json: schema: @@ -3336,7 +3350,8 @@ paths: operationId: data_for_new.space responses: '200': - description: Successful requested data needed to create a new space resource. + description: Request for the data needed to create a new space resource + succeeded. content: application/json: schema: @@ -3350,8 +3365,8 @@ paths: operationId: new_search.space responses: '200': - description: Successful request to get the data needed to search across - all spaces. + description: Request to get the data needed to search across all spaces + succeeded. content: application/json: schema: @@ -3372,13 +3387,13 @@ paths: $ref: '#/components/schemas/SearchOverSpaces' responses: '200': - description: Successful request to search across all spaces. + description: Search across all spaces succeeded. content: application/json: schema: $ref: '#/components/schemas/PaginatedSubsetOfSpaces' '400': - description: Failed request to search across all spaces. + description: Search across all spaces failed. content: application/json: schema: @@ -3392,20 +3407,21 @@ paths: operationId: delete.space responses: '200': - description: Successful deletion of a space resource. + description: Deletion of the space resource succeeded. content: application/json: schema: $ref: '#/components/schemas/SpaceView' '404': - description: There is no space resource with the specified key so it cannot - be deleted. + description: Deletion of the space resource failed because there is no space + with the specified pk. content: application/json: schema: $ref: '#/components/schemas/ErrorSchema' '403': - description: The user is forbidden from deleting this space resource. + description: Deletion of the space resource failed because user is forbidden + from performing this action content: application/json: schema: @@ -3418,19 +3434,21 @@ paths: operationId: get.space responses: '200': - description: Successfully requested a(n) space resource. + description: Request for a single space succeeded. content: application/json: schema: $ref: '#/components/schemas/SpaceView' '404': - description: There is no space resource with the specified key. + description: Request for a single space failed because there is no space + resource with the specified pk. content: application/json: schema: $ref: '#/components/schemas/ErrorSchema' '403': - description: The user is forbidden from viewing this space resource. + description: Request for a single space failed because the user is forbidden + from viewing this space resource. content: application/json: schema: @@ -3458,26 +3476,27 @@ paths: $ref: '#/components/schemas/SpaceUpdate' responses: '200': - description: Succeeded in updating an existing space resource. + description: Updating of an existing space resource succeeded. content: application/json: schema: $ref: '#/components/schemas/EditASpace' '404': - description: There is no space resource with the specified key so it cannot - be updated. + description: Updating of an existing space resource failed because there + is no space with the specified pk. content: application/json: schema: $ref: '#/components/schemas/ErrorSchema' '403': - description: The user is forbidden from updating this space resource. + description: Updating of an existing space resource failed because the user + is forbidden from updating this space resource. content: application/json: schema: $ref: '#/components/schemas/ErrorSchema' '400': - description: Bad request to update an existing space. + description: Updating of an existing space resource failed. content: application/json: schema: @@ -3491,21 +3510,21 @@ paths: operationId: data_for_edit.space responses: '200': - description: Succeeded in retrieving the data needed to edit a(n) space - resource. + description: Request for the data needed to edit a(n) space resource succeeded. content: application/json: schema: $ref: '#/components/schemas/EditASpace' '404': - description: There is no space resource with the specified key so it cannot - be edited. + description: Request for the data needed to edit a(n) space failed because + there is no space resource with the specified pk content: application/json: schema: $ref: '#/components/schemas/ErrorSchema' '403': - description: The user is forbidden from editing this space resource. + description: Request for the data needed to edit a(n) space failed because + the user is forbidden from editing this space resource. content: application/json: schema: