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()
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()
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)
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)
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))
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))
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))
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()
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()
def new_dataset(self, n=1, source='source'): return Dataset(**self.ds_params(n, source=source))