def _add_schema(name, deposit_schema=None, is_indexed=True, use_deposit_as_record=True, version="1.0.0", **kwargs): """ Add new schema into db """ default_json = {'title': {'type': 'string'}} try: schema = Schema.get(name, version) except JSONSchemaNotFound: schema = Schema(name=name, version=version, is_indexed=is_indexed, use_deposit_as_record=use_deposit_as_record, deposit_schema=deposit_schema or default_json, **kwargs) db.session.add(schema) db.session.commit() if not schema.experiment: schema.add_read_access_for_all_users() db.session.commit() return schema
def add_schema_from_fixture(data=None): """Add or update schema.""" allow_all = data.pop("allow_all", False) name = data['name'] try: with db.session.begin_nested(): with db.session.begin_nested(): try: schema = Schema.get(name=data['name'], version=data['version']) click.secho('{} already exist in the db.'.format( str(name))) return except JSONSchemaNotFound: schema = Schema(**data) db.session.add(schema) if allow_all: schema.add_read_access_for_all_users() except IntegrityError: click.secho('Error occured during adding {} to the db. \n'.format( str(name)), fg='red') return db.session.commit() click.secho('{} has been added.'.format(str(name)), fg='green')
def add_schema_from_json(data, replace=None, force_version=None): """Add or update schema, using a json file.""" allow_all = data.pop("allow_all", False) version = data['version'] name = data['name'] try: with db.session.begin_nested(): try: _schema = Schema.get(name=name, version=version) if replace: _schema.update(**data) db.session.add(_schema) else: click.secho(f'{name}-{version} already exists in the db.') return except JSONSchemaNotFound: try: _schema = Schema.get_latest(name=name) if is_later_version(_schema.version, version) and not force_version: click.secho( f'A later version ({_schema.version}) of ' f'{name} is already in the db. Error while ' f'adding {name}-{version}', fg='red') return else: _schema = Schema(**data) db.session.add(_schema) except JSONSchemaNotFound: _schema = Schema(**data) db.session.add(_schema) # throws error if you try to re-insert the same action roles if allow_all and not replace: _schema.add_read_access_for_all_users() db.session.commit() click.secho(f'{name} has been added.', fg='green') except IntegrityError: click.secho(f'An db error occurred while adding {name}.', fg='red')