Пример #1
0
    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
Пример #2
0
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')