Exemplo n.º 1
0
class Activity(db.Model):
    class ActivityType(enum.Enum):
        created = "Created"
        changed_name = "Changed name"
        changed_description = "Changed Description"
        added_version = "Added version"
        started_log = "Log started"

    __tablename__ = "activities"

    id: str = db.Column(GUID, primary_key=True, default=generate_uuid)

    user_id: str = db.Column(GUID, db.ForeignKey("users.id"))

    user: User = db.relationship("User", backref=__tablename__)

    dataset_id: str = db.Column(GUID, db.ForeignKey("datasets.id"))

    dataset: Dataset = db.relationship("Dataset", backref=__tablename__)

    # We would want the type of change and the comments associated
    type: ActivityType = db.Column(db.Enum(ActivityType), nullable=False)

    timestamp: datetime.datetime = db.Column(db.DateTime,
                                             default=datetime.datetime.utcnow)

    comments: str = db.Column(db.Text)

    __mapper_args__ = {"polymorphic_on": type}
Exemplo n.º 2
0
class UploadSessionFile(db.Model):
    __tablename__ = "upload_session_files"

    id: str = db.Column(GUID, primary_key=True, default=generate_uuid)

    session_id: str = db.Column(GUID, db.ForeignKey("upload_sessions.id"))

    session: UploadSession = db.relationship("UploadSession",
                                             backref=__tablename__)

    # filename submitted by user
    filename: str = db.Column(db.Text)
    encoding: str = db.Column(db.Text)

    initial_filetype: InitialFileType = db.Column(db.Enum(InitialFileType))
    initial_s3_key: str = db.Column(db.Text)

    converted_filetype: S3DataFile.DataFileFormat = db.Column(
        db.Enum(S3DataFile.DataFileFormat))
    converted_s3_key: str = db.Column(db.Text)

    compressed_s3_key: str = db.Column(db.Text)

    s3_bucket: str = db.Column(db.Text)

    gcs_path: str = db.Column(db.Text)
    generation_id: str = db.Column(db.Text)

    short_summary: str = db.Column(db.Text)
    long_summary: str = db.Column(db.Text)
    column_types_as_json: Dict[str, str] = db.Column(db.JSON)
    original_file_sha256: str = db.Column(db.Text)
    original_file_md5: str = db.Column(db.Text)

    data_file_id: str = db.Column(GUID, db.ForeignKey("datafiles.id"))
    data_file: DataFile = db.relationship(
        "DataFile",
        uselist=False,
        foreign_keys="UploadSessionFile.data_file_id")
Exemplo n.º 3
0
class ProvenanceNode(db.Model):
    __tablename__ = "provenance_nodes"

    class NodeType(enum.Enum):
        Dataset = "dataset"
        External = "external"
        Process = "process"

    node_id = db.Column(GUID, primary_key=True, default=generate_uuid)

    graph_id = db.Column(GUID, db.ForeignKey("provenance_graphs.graph_id"))
    graph = db.relationship("ProvenanceGraph", backref=__tablename__)

    datafile_id = db.Column(GUID, db.ForeignKey("datafiles.id"), nullable=True)
    datafile = db.relationship("DataFile", backref=__tablename__)

    label = db.Column(db.Text)

    type = db.Column(db.Enum(NodeType))
Exemplo n.º 4
0
class ConversionCache(db.Model):
    __tablename__ = "conversion_cache"

    id: str = db.Column(GUID, primary_key=True, default=generate_uuid)

    dataset_version_id: str = db.Column(GUID,
                                        db.ForeignKey("dataset_versions.id"))

    datafile_name: str = db.Column(db.String(80))

    format: str = db.Column(db.String(80))

    status: str = db.Column(db.Text)

    task_id: str = db.Column(db.Text)

    urls_as_json: str = db.Column(db.Text)

    state: ConversionEntryState = db.Column(db.Enum(ConversionEntryState))
Exemplo n.º 5
0
class Folder(Entry):
    # Enum Folder types
    # TODO: Could be a good idea to transform these enums into Classes. So they can have different behaviors if needed
    class FolderType(enum.Enum):
        home = "home"
        trash = "trash"
        folder = "folder"

    __tablename__ = "folders"

    # TODO: Instead of using a string 'entry.id', can we use Entry.id?
    id: str = db.Column(GUID, db.ForeignKey("entries.id"), primary_key=True)

    folder_type: FolderType = db.Column(db.Enum(FolderType))

    # TODO: This should be a set, not a list.
    entries: List[Entry] = db.relationship(
        "Entry", secondary=folder_entry_association_table, backref="parents")

    __mapper_args__ = {"polymorphic_identity": "Folder"}

    def __repr__(self):
        return "Folder name: {} and id: {}".format(self.name, self.id)
Exemplo n.º 6
0
class DatasetVersion(Entry):
    class DatasetVersionState(enum.Enum):
        approved = "Approved"
        deprecated = "Deprecated"
        deleted = "Deleted"

    # TODO: Missing the permaname of the DatasetVersion
    __tablename__ = "dataset_versions"

    id: str = db.Column(GUID, db.ForeignKey("entries.id"), primary_key=True)

    dataset_id: str = db.Column(GUID, db.ForeignKey("datasets.id"))

    dataset: Dataset = db.relationship(
        "Dataset",
        foreign_keys=[dataset_id],
        backref=db.backref(__tablename__),
        single_parent=True,
        cascade="all, delete-orphan",
    )

    # Filled out by the server
    version: int = db.Column(db.Integer)

    # State of the version
    state: DatasetVersionState = db.Column(
        db.Enum(DatasetVersionState), default=DatasetVersionState.approved)
    # Reason for the state of the version. Should be empty if approved
    reason_state: str = db.Column(db.Text)

    changes_description: str = db.Column(db.Text)

    __table_args__ = (UniqueConstraint("dataset_id", "version"), )

    # TODO: See how to manage the status (persist.py)

    __mapper_args__ = {"polymorphic_identity": "DatasetVersion"}
Exemplo n.º 7
0
class S3DataFile(DataFile):
    # IMPORTANT: Need to sync with frontend for each changes
    class DataFileFormat(enum.Enum):
        Raw = "Raw"
        HDF5 = "HDF5"
        Columnar = "Columnar"

    format: DataFileFormat = db.Column(db.Enum(DataFileFormat))
    encoding = db.Column(db.Text)
    s3_bucket: str = db.Column(db.Text)
    s3_key: str = db.Column(db.Text)
    compressed_s3_key: str = db.Column(db.Text)

    short_summary: str = db.Column(db.Text)
    long_summary: str = db.Column(db.Text)
    column_types_as_json: Dict[str, str] = db.Column(db.JSON)
    original_file_sha256: str = db.Column(db.Text)
    original_file_md5: str = db.Column(db.Text)

    __mapper_args__ = {"polymorphic_identity": "s3"}

    @property
    def underlying_file_id(self):
        return None