Пример #1
0
    def _create(self):
        """Create the database from the base SQL."""
        from ambry.orm import Dataset, Partition, Table, Column, File, Code, ColumnStat
        from ..identity import Identity
        from sqlalchemy.orm import sessionmaker

        tables = [Dataset, Partition, Table, Column, File, Code, ColumnStat]

        for table in tables:
            table.__table__.create(bind=self.engine)

        # Create the Dataset record
        session = self.session

        idd = dict(self.bundle.metadata.identity)

        ds = Dataset(**idd)

        ident = Identity.from_dict(idd)

        ds.name = ident.sname
        ds.vname = ident.vname
        ds.fqname = ident.fqname
        ds.cache_key = ident.cache_key

        try:
            ds.creator = self.bundle.config.about.author
        except:
            ds.creator = 'n/a'

        session.add(ds)
        session.commit()
Пример #2
0
    def _create(self):
        """Create the database from the base SQL."""
        from ambry.orm import Dataset, Partition, Table, Column, File, Code, ColumnStat
        from ..identity import Identity
        # from sqlalchemy.orm import sessionmaker

        tables = [Dataset, Partition, Table, Column, File, Code, ColumnStat]

        for table in tables:
            table.__table__.create(bind=self.engine)

        # Create the Dataset record
        session = self.session

        idd = dict(self.bundle.metadata.identity)

        ds = Dataset(**idd)

        ident = Identity.from_dict(idd)

        ds.name = ident.sname
        ds.vname = ident.vname
        ds.fqname = ident.fqname
        ds.cache_key = ident.cache_key

        try:
            ds.creator = self.bundle.config.about.author
        except:
            ds.creator = 'n/a'

        session.add(ds)
        session.commit()
Пример #3
0
    def install_dataset_identity(self, identity, data={}, overwrite=True):
        """Create the record for the dataset.

        Does not add an File objects

        """
        from sqlalchemy.exc import IntegrityError
        from ..dbexceptions import ConflictError

        ds = Dataset(**identity.dict)
        ds.name = identity.sname
        ds.vname = identity.vname
        ds.fqname = identity.fqname
        ds.cache_key = identity.cache_key
        ds.creator = 'N/A'
        ds.data = data

        try:
            self.session.merge(ds)
            self.commit()
        except IntegrityError as e:
            self.session.rollback()

            if not overwrite:
                return

            try:
                self.session.merge(ds)
                self.commit()

            except IntegrityError as e:
                msg = "Can't install dataset vid={}; \nOne already exists. ('{}');\n {}" .format(
                    identity.vid, e.message, ds.dict)
                raise ConflictError(msg)
Пример #4
0
    def rewrite_dataset(self):
        from ..orm import Dataset
        # Now patch up the Dataset object


        ds = Dataset(**self.bundle.identity.dict)
        ds.name = self.bundle.identity.sname
        ds.vname = self.bundle.identity.vname
        ds.fqname = self.bundle.identity.fqname

        try:
            ds.creator = self.bundle.config.about.author
        except:
            ds.creator = 'n/a'

        self.unmanaged_session.merge(ds)
Пример #5
0
    def install_dataset_identity(self, identity, data={}, overwrite=True):
        """Create the record for the dataset.

        Does not add an File objects

        """
        from sqlalchemy.exc import IntegrityError
        from ..dbexceptions import ConflictError

        ds = Dataset(**identity.dict)
        ds.name = identity.sname
        ds.vname = identity.vname
        ds.fqname = identity.fqname
        ds.cache_key = identity.cache_key
        ds.creator = 'N/A'
        ds.data = data

        try:
            self.session.merge(ds)
            self.commit()
        except IntegrityError as e:
            self.session.rollback()

            if not overwrite:
                return

            try:
                self.session.merge(ds)
                self.commit()

            except IntegrityError as e:
                raise ConflictError(
                    "Can't install dataset vid={}; \nOne already exists. ('{}');\n {}" .format(
                        identity.vid,
                        e.message,
                        ds.dict))
Пример #6
0
    def install_dataset_identity(self, identity, location=Dataset.LOCATION.LIBRARY, data = {}):
        '''Create the record for the dataset. Does not add an File objects'''
        from sqlalchemy.exc import IntegrityError
        from ..dbexceptions import ConflictError

        ds = Dataset(**identity.dict)
        ds.name = identity.sname
        ds.vname = identity.vname
        ds.fqname = identity.fqname
        ds.cache_key = identity.cache_key
        ds.creator = 'N/A'
        ds.location = location
        ds.data = data
        try:
            try:
                self.session.add(ds)
                self.commit()
            except:
                self.session.rollback()
                self.session.merge(ds)
                self.commit()
        except IntegrityError as e:
            raise ConflictError("Can't install dataset vid={} vname={} cache_key={}; \nOne already exists. ('{}')"
                                .format(identity.vid, identity.vname, identity.cache_key,  e.message))
Пример #7
0
    def install_partition_identity(self, identity, data={}, overwrite=True):
        """Create the record for the dataset.

        Does not add an File objects

        """
        from sqlalchemy.exc import IntegrityError
        from ..dbexceptions import ConflictError

        ds = Dataset(**identity.as_dataset().dict)

        d = identity.dict
        del d['dataset']

        p = Partition(ds, **d)

        p.data = data

        try:
            try:
                self.session.add(p)
                self.commit()

            except IntegrityError as e:

                if not overwrite:
                    return

                self.session.rollback()
                self.session.merge(p)
                self.commit()

        except IntegrityError as e:
            raise ConflictError(
                "Can't install partition vid={};\nOne already exists. ('{}');\n{}" .format(
                    identity.vid,
                    e.message,
                    p.dict))
Пример #8
0
    def _add_config_root(self):
        from sqlalchemy.orm.exc import NoResultFound

        try:

            self.session.query(Dataset).filter(
                Dataset.vid == ROOT_CONFIG_NAME).one()
            self.close_session()
        except NoResultFound:
            o = Dataset(
                id=ROOT_CONFIG_NAME,
                name=ROOT_CONFIG_NAME,
                vname=ROOT_CONFIG_NAME_V,
                fqname='datasetroot-0.0.0~' + ROOT_CONFIG_NAME_V,
                cache_key=ROOT_CONFIG_NAME,
                version='0.0.0',
                source=ROOT_CONFIG_NAME,
                dataset=ROOT_CONFIG_NAME,
                creator=ROOT_CONFIG_NAME,
                revision=1,
            )
            self.session.add(o)
            self.commit()
Пример #9
0
    def rewrite_dataset(self):
        from ..orm import Dataset
        # Now patch up the Dataset object

        try:
            ds = self.get_dataset()

            for k, v in self.bundle.identity.dict.items():
                setattr(ds, k, v)

        except:
            ds = Dataset(**self.bundle.identity.dict)

        ds.name = self.bundle.identity.sname
        ds.vname = self.bundle.identity.vname
        ds.fqname = self.bundle.identity.fqname

        try:
            ds.creator = self.bundle.config.about.author
        except:
            ds.creator = 'n/a'

        self.session.merge(ds)
        self.session.commit()
Пример #10
0
    def rewrite_dataset(self):
        from ..orm import Dataset
        # Now patch up the Dataset object

        try:
            ds = self.get_dataset()

            for k, v in self.bundle.identity.dict.items():
                setattr(ds, k, v)

        except:
            ds = Dataset(**self.bundle.identity.dict)

        ds.name = self.bundle.identity.sname
        ds.vname = self.bundle.identity.vname
        ds.fqname = self.bundle.identity.fqname

        try:
            ds.creator = self.bundle.config.about.author
        except:
            ds.creator = 'n/a'

        self.session.merge(ds)
        self.session.commit()
Пример #11
0
 def new_dataset(self, n=1, source='source'):
     return Dataset(**self.ds_params(n, source=source))