Source code for datacatalog.linkedstores.structured_request.document

import re
import validators

from datacatalog.extensible import ExtensibleAttrDict
from datacatalog.linkedstores.basestore import HeritableDocumentSchema
from datacatalog.settings import MONGO_DELETE_FIELD

TYPE_SIGNATURE = ('structured_request', '125', 'Structured Experiment Request')

NAME_MAX_LEN = 256
NAME_REGEX = re.compile('^[a-zA-Z0-9][a-zA-Z0-9-.]{1,62}[a-zA-Z0-9]$')
DESC_MAX_LEN = 256
DESC_REGEX = re.compile('^.{0,256}$')

[docs]class StructuredRequestSchema(HeritableDocumentSchema): """Defines the Structured Request schema""" def __init__(self, inheritance=True, **kwargs): super(StructuredRequestSchema, self).__init__( inheritance=True, document='schema.json', filters='filters.json', **kwargs) self.update_id()
[docs]class StructuredRequestDocument(ExtensibleAttrDict): """Instantiates an instance of Structured Request""" DELETE_FIELD = MONGO_DELETE_FIELD PARAMS = [('name', True, 'name', None), ('description', False, 'description', ''), ('experiment_id', True, 'experiment id', None), (DELETE_FIELD, False, DELETE_FIELD, True)] def __init__(self, schema=None, **kwargs): if schema is None: schema = StructuredRequestSchema() for attr, req, param, default in self.PARAMS: if req is True: if attr not in kwargs: raise KeyError('{} is a mandatory field'.format(attr)) setattr(self, attr, kwargs.get(param, default)) # Request name length (technically redundant with regex validation) if len(self.name) >= NAME_MAX_LEN: raise ValueError( 'Structured request name can have a max of {} characters'.format( NAME_MAX_LEN)) # Validate name with regex if not NAME_REGEX.search(self.name): raise ValueError('{} is not a valid structured request name'.format(self.name)) # Max description length (technically redundant with regex validation) if len(self.description) >= DESC_MAX_LEN: raise ValueError( 'Structured request description can have a max of {} characters'.format( DESC_MAX_LEN)) # Validate description with regex if not DESC_REGEX.search(self.description): raise ValueError('This is not a valid structured request description')