retrieve latest annotation from db (#1723)

* add function to retrieve latest annotation from db, db updates

* dont create directory in s3
This commit is contained in:
Madison Dunitz
2020-08-11 15:48:12 -05:00
committed by GitHub
parent 49b89ba7af
commit 80f6137528
5 changed files with 114 additions and 22 deletions
+14 -11
View File
@@ -1,11 +1,12 @@
from datetime import datetime
import uuid
from sqlalchemy import (
Column,
DateTime,
ForeignKey,
String,
)
func, JSON)
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship
@@ -21,8 +22,8 @@ class CellxGeneUser(Base):
__tablename__ = "cxguser"
id = Column(String, primary_key=True)
created_at = Column(DateTime, nullable=False, default=datetime.utcnow)
updated_at = Column(DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow)
created_at = Column(DateTime, nullable=False, server_default=func.now())
updated_at = Column(DateTime, nullable=False, server_default=func.now(), onupdate=func.now())
# Relationships
annotations = relationship("Annotation", back_populates="cxguser")
@@ -36,12 +37,13 @@ class Annotation(Base):
__tablename__ = "annotation"
id = Column(String, primary_key=True)
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, unique=True, nullable=False)
tiledb_uri = Column(String)
user_id = Column(String, ForeignKey("cxguser.id"), nullable=False)
dataset_id = Column(String, ForeignKey("cxgdataset.id"), nullable=False)
created_at = Column(DateTime, nullable=False, default=datetime.utcnow)
dataset_id = Column(UUID, ForeignKey("cxgdataset.id"), nullable=False)
created_at = Column(DateTime, nullable=False, server_default=func.now())
schema_hints = Column(JSON)
# Relationships
cxguser = relationship("CellxGeneUser", back_populates="annotations")
dataset = relationship("CellxGeneDataset", back_populates="annotations")
@@ -49,12 +51,13 @@ class Annotation(Base):
class CellxGeneDataset(Base):
"""
Datasets refer to cellxgene datasets stored in tiledb
Datasets refer to datasets stored by cellxgene
"""
__tablename__ = "cxgdataset"
id = Column(String, primary_key=True)
name = Column(String)
created_at = Column(DateTime, nullable=False, default=datetime.utcnow)
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, unique=True, nullable=False)
name = Column(String, unique=True, index=True)
created_at = Column(DateTime, nullable=False, server_default=func.now())
annotations = relationship("Annotation", back_populates="dataset")
+3
View File
@@ -33,6 +33,9 @@ class DbUtils:
else self.session.query(*table_args).all()
)
def query_for_most_recent(self, table: Base, filter_args: typing.List[bool] = None) -> Base:
return self.session.query(table).filter(*filter_args).order_by(table.created_at.desc()).limit(1).all()[0]
class DBSessionMaker:
def __init__(self, database_uri):