Exemple #1
0
class OutputType(db.Model, BaseMixin, SerializerMixin):
    """
    Type of an output files (geometry, cache, etc.)
    """

    name = db.Column(db.String(40), unique=True, nullable=False, index=True)
    short_name = db.Column(db.String(20), nullable=False)
Exemple #2
0
class FileStatus(db.Model, BaseMixin, SerializerMixin):
    """
    Describe the state of a given file.
    """

    name = db.Column(db.String(40), unique=True, nullable=False)
    color = db.Column(db.String(7), nullable=False)
Exemple #3
0
class Subscription(db.Model, BaseMixin, SerializerMixin):
    """
    Allow to subscribe to an entity
    """

    person_id = db.Column(
        UUIDType(binary=False),
        db.ForeignKey("person.id"),
        nullable=False,
        index=True,
    )
    task_id = db.Column(
        UUIDType(binary=False), db.ForeignKey("task.id"), index=True
    )

    entity_id = db.Column(
        UUIDType(binary=False), db.ForeignKey("entity.id"), index=True
    )
    task_type_id = db.Column(
        UUIDType(binary=False), db.ForeignKey("task_type.id"), index=True
    )

    __table_args__ = (
        db.UniqueConstraint(
            "person_id", "task_id", name="subscription_task_uc"
        ),
        db.UniqueConstraint(
            "person_id",
            "task_type_id",
            "entity_id",
            name="subscription_entity_uc",
        ),
    )
Exemple #4
0
class TimeSpentStatus(db.Model, BaseMixin, SerializerMixin):
    """
    Describe the state of a given file.
    """

    name = db.Column(db.String(40), unique=False, nullable=False)
    short_name = db.Column(db.String(40), unique=True, nullable=False)
Exemple #5
0
class EntityLink(db.Model, BaseMixin, SerializerMixin):
    __tablename__ = "entity_link"
    entity_in_id = db.Column(
        UUIDType(binary=False), db.ForeignKey("entity.id"), primary_key=True,
        index=True
    )
    entity_out_id = db.Column(
        UUIDType(binary=False), db.ForeignKey("entity.id"), primary_key=True,
        index=True
    )
    nb_occurences = db.Column(db.Integer, default=1)
    label = db.Column(db.String(80), default="")

    @classmethod
    def create_from_import(cls, data):
        del data["type"]
        if "project_name" in data:
            del data["project_name"]
        entity_link = cls.get_by(
            entity_in_id=data["entity_in_id"],
            entity_out_id=data["entity_out_id"],
        )
        if entity_link is None:
            return cls.create(**data)
        else:
            entity_link.update(data)
            return entity_link
Exemple #6
0
class DataImportError(db.Model, BaseMixin, SerializerMixin):
    """
    Table to allow the storage of import errors.
    """

    event_data = db.Column(JSONB, nullable=False)
    source = db.Column(db.Enum("csv", "shotgun", name="import_source_enum"))
Exemple #7
0
class AttachmentFile(db.Model, BaseMixin, SerializerMixin):
    """
    Describes a file which is attached to a comment.
    """

    name = db.Column(db.String(250))
    size = db.Column(db.Integer(), default=1)
    extension = db.Column(db.String(6))
    mimetype = db.Column(db.String(255))
    comment_id = db.Column(UUIDType(binary=False),
                           db.ForeignKey("comment.id"),
                           index=True)

    __table_args__ = (db.UniqueConstraint("name",
                                          "comment_id",
                                          name="attachment_uc"), )

    def __repr__(self):
        return "<AttachmentFile %s>" % self.id

    def present(self):
        return {
            "id": str(self.id),
            "name": self.name,
            "extension": self.extension,
            "size": self.size,
        }
Exemple #8
0
class WorkingFile(db.Model, BaseMixin, SerializerMixin):
    shotgun_id = db.Column(db.Integer())

    name = db.Column(db.String(250))
    description = db.Column(db.String(200))
    comment = db.Column(db.Text())
    revision = db.Column(db.Integer())
    size = db.Column(db.Integer())
    checksum = db.Column(db.Integer())

    task_id = db.Column(UUIDType(binary=False), db.ForeignKey("task.id"))
    entity_id = db.Column(UUIDType(binary=False), db.ForeignKey("entity.id"))
    person_id = \
        db.Column(UUIDType(binary=False), db.ForeignKey("person.id"))

    __table_args__ = (
        db.UniqueConstraint(
            "name",
            "task_id",
            "entity_id",
            "revision",
            name="working_file_uc"
        ),
    )

    def __repr__(self):
        return "<WorkingFile %s>" % self.id
Exemple #9
0
class BuildJob(db.Model, BaseMixin, SerializerMixin):
    """
    A build job stores information about the state of the building
    of a given playlist.
    """

    status = db.Column(ChoiceType(STATUSES))
    job_type = db.Column(ChoiceType(TYPES))
    ended_at = db.Column(db.DateTime)

    playlist_id = db.Column(
        UUIDType(binary=False),
        db.ForeignKey("playlist.id"),
        nullable=False,
        index=True,
    )

    def end(self, status):
        self.update({"status": status, "ended_at": datetime.datetime.now()})

    def present(self):
        return fields.serialize_dict(
            {
                "id": self.id,
                "status": self.status,
                "created_at": self.created_at,
            }
        )
Exemple #10
0
class Playlist(db.Model, BaseMixin, SerializerMixin):
    """
    Describes a playlist. The goal is to discuss around a defined set of
    shipped materials in a meeting.
    """

    name = db.Column(db.String(80), nullable=False)
    shots = db.Column(JSONB)

    project_id = db.Column(
        UUIDType(binary=False), db.ForeignKey("project.id"), index=True
    )
    episode_id = db.Column(
        UUIDType(binary=False), db.ForeignKey("entity.id"), index=True
    )
    for_client = db.Column(db.Boolean(), default=False, index=True)

    build_jobs = relationship("BuildJob")

    __table_args__ = (
        db.UniqueConstraint(
            "name", "project_id", "episode_id", name="playlist_uc"
        ),
    )

    @classmethod
    def create_from_import(cls, data):
        del data["type"]
        del data["build_jobs"]
        previous_data = cls.get(data["id"])
        if previous_data is None:
            return cls.create(**data)
        else:
            previous_data.update(data)
            return previous_data
Exemple #11
0
class Comment(db.Model, BaseMixin, SerializerMixin):
    """
    Comment can occurs on any object but they are mainly used on tasks.
    In the case of comment tasks, they are linked to a task status and
    eventually on a preview file.
    The status means that comment leads to task status change. The preview file
    means that the comment relates to this preview in the context of the task.
    """
    shotgun_id = db.Column(db.Integer)

    object_id = db.Column(UUIDType(binary=False), nullable=False, index=True)
    object_type = db.Column(db.String(80), nullable=False, index=True)
    text = db.Column(db.Text())
    data = db.Column(JSONB)
    checklist = db.Column(JSONB)
    pinned = db.Column(db.Boolean)

    task_status_id = db.Column(UUIDType(binary=False),
                               db.ForeignKey("task_status.id"))
    person_id = db.Column(UUIDType(binary=False),
                          db.ForeignKey("person.id"),
                          nullable=False)
    preview_file_id = db.Column(UUIDType(binary=False),
                                db.ForeignKey("preview_file.id"))
    previews = db.relationship("PreviewFile",
                               secondary=preview_link_table,
                               backref="comments")
    mentions = db.relationship("Person", secondary=mentions_table)

    def __repr__(self):
        return "<Comment of %s>" % self.object_id
Exemple #12
0
class Milestone(db.Model, BaseMixin, SerializerMixin):
    """
    Allow to set a milestone date to the production schedule.
    """

    date = db.Column(db.Date())
    name = db.Column(db.String(40), nullable=False)

    project_id = db.Column(
        UUIDType(binary=False), db.ForeignKey("project.id"), index=True
    )
    task_type_id = db.Column(
        UUIDType(binary=False), db.ForeignKey("task_type.id"), index=True
    )

    def present(self):
        return fields.serialize_dict(
            {
                "id": self.id,
                "date": self.date,
                "name": self.name,
                "project_id": self.project_id,
                "task_type_id": self.task_type_id,
            }
        )
Exemple #13
0
class ProjectTaskStatusLink(db.Model):
    __tablename__ = "project_task_status_link"
    project_id = db.Column(UUIDType(binary=False),
                           db.ForeignKey("project.id"),
                           primary_key=True)
    task_status_id = db.Column(UUIDType(binary=False),
                               db.ForeignKey("task_status.id"),
                               primary_key=True)
Exemple #14
0
class ProjectAssetTypeLink(db.Model):
    __tablename__ = "project_asset_type_link"
    project_id = db.Column(UUIDType(binary=False),
                           db.ForeignKey("project.id"),
                           primary_key=True)
    asset_type_id = db.Column(UUIDType(binary=False),
                              db.ForeignKey("entity_type.id"),
                              primary_key=True)
Exemple #15
0
class Software(db.Model, BaseMixin, SerializerMixin):
    """
    Describes software used by working files.
    """
    name = db.Column(db.String(40), unique=True, nullable=False)
    short_name = db.Column(db.String(20), nullable=False)
    file_extension = db.Column(db.String(20), nullable=False)
    secondary_extensions = db.Column(JSONB)
Exemple #16
0
class AssetInstanceLink(db.Model):
    __tablename__ = "asset_instance_link"
    entity_id = db.Column(UUIDType(binary=False),
                          db.ForeignKey("entity.id"),
                          primary_key=True)
    asset_instance_id = db.Column(UUIDType(binary=False),
                                  db.ForeignKey("asset_instance.id"),
                                  primary_key=True)
Exemple #17
0
class Project(db.Model, BaseMixin, SerializerMixin):
    name = db.Column(db.String(80), nullable=False, unique=True)
    description = db.Column(db.String(200))
    shotgun_id = db.Column(db.Integer)
    file_tree = db.Column(JSONB)

    project_status_id = \
        db.Column(UUIDType(binary=False), db.ForeignKey('project_status.id'))
Exemple #18
0
class ProjectPersonLink(db.Model):
    __tablename__ = "project_person_link"
    project_id = db.Column(
        UUIDType(binary=False), db.ForeignKey("project.id"), primary_key=True
    )
    person_id = db.Column(
        UUIDType(binary=False), db.ForeignKey("person.id"), primary_key=True
    )
    shotgun_id = db.Column(db.Integer)
Exemple #19
0
class CustomAction(db.Model, BaseMixin, SerializerMixin):
    """
    Custom actions are HTTP links that can be activated outside of the API.
    They are mainly aimed at being used by the web frontend to allow studio
    to make custom HTTP calls.
    """
    name = db.Column(db.String(80), nullable=False)
    url = db.Column(db.String(400))
    entity_type = db.Column(db.String(40), default="all")
Exemple #20
0
class EntityVersion(db.Model, BaseMixin, SerializerMixin):
    name = db.Column(db.String(160), nullable=False)
    data = db.Column(JSONB)
    entity_id = db.Column(UUIDType(binary=False),
                          db.ForeignKey("entity.id"),
                          index=True)
    person_id = db.Column(UUIDType(binary=False),
                          db.ForeignKey("person.id"),
                          index=True)
Exemple #21
0
class EntityLink(db.Model, BaseMixin):
    __tablename__ = "entity_link"
    entity_in_id = db.Column(UUIDType(binary=False),
                             db.ForeignKey("entity.id"),
                             primary_key=True)
    entity_out_id = db.Column(UUIDType(binary=False),
                              db.ForeignKey("entity.id"),
                              primary_key=True)
    nb_occurences = db.Column(db.Integer, default=1)
Exemple #22
0
class ApiEvent(db.Model, BaseMixin, SerializerMixin):
    """
    Represent notable events occuring on database (asset creation,
    task assignation, etc.).
    """
    name = db.Column(db.String(80), nullable=False, index=True)
    user_id = db.Column(UUIDType(binary=False),
                        db.ForeignKey("person.id"),
                        index=True)
    data = db.Column(JSONB)
Exemple #23
0
class ProjectStatusAutomationLink(db.Model):
    __tablename__ = "project_status_automation_link"
    project_id = db.Column(
        UUIDType(binary=False), db.ForeignKey("project.id"), primary_key=True
    )
    status_automation_id = db.Column(
        UUIDType(binary=False),
        db.ForeignKey("status_automation.id"),
        primary_key=True,
    )
Exemple #24
0
class Organisation(db.Model, BaseMixin, SerializerMixin):
    """
    Model to represent current organisation settings.
    """

    name = db.Column(db.String(80), unique=True, nullable=False)
    hours_by_day = db.Column(db.Integer(), default=8, nullable=False)
    has_avatar = db.Column(db.Boolean(), default=False)
    use_original_file_name = db.Column(db.Boolean(), default=False)
    timesheets_locked = db.Column(db.Boolean(), default=False)
    hd_by_default = db.Column(db.Boolean(), default=False)
    chat_token_slack = db.Column(db.String(80), default="")
    chat_webhook_mattermost = db.Column(db.String(80), default="")
    chat_token_discord = db.Column(db.String(80), default="")

    def present(self):
        return fields.serialize_dict(
            {
                "id": self.id,
                "chat_token_slack": self.chat_token_slack,
                "chat_webhook_mattermost": self.chat_webhook_mattermost,
                "chat_token_discord": self.chat_token_discord,
                "name": self.name,
                "has_avatar": self.has_avatar,
                "hours_by_day": self.hours_by_day,
                "hd_by_default": self.hd_by_default,
                "use_original_file_name": self.use_original_file_name,
                "timesheets_locked": self.timesheets_locked,
            }
        )
Exemple #25
0
class TaskType(db.Model, BaseMixin, SerializerMixin):
    """
    Categorize tasks in domain areas: modeling, animation, etc.
    """
    name = db.Column(db.String(40), nullable=False)
    short_name = db.Column(db.String(20))
    color = db.Column(db.String(7), default="#FFFFFF")
    priority = db.Column(db.Integer, default=1)
    for_shots = db.Column(db.Boolean, default=False)
    for_entity = db.Column(db.String(30), default="Asset")
    allow_timelog = db.Column(db.Boolean, default=True)
    shotgun_id = db.Column(db.Integer, index=True)

    department_id = db.Column(
        UUIDType(binary=False),
        db.ForeignKey("department.id")
    )

    __table_args__ = (
        db.UniqueConstraint(
            'name',
            'for_entity',
            'department_id',
            name='task_type_uc'
        ),
    )
Exemple #26
0
class LoginLog(db.Model, BaseMixin, SerializerMixin):
    """
    Table to log all web session logins. The aim is to build a table that
    helps finding suspicious behaviours.
    """
    person_id = db.Column(UUIDType(binary=False),
                          db.ForeignKey('person.id'),
                          nullable=False,
                          index=True)
    ip_address = db.Column(IPAddressType)
    origin = db.Column(ChoiceType(ORIGINS))
Exemple #27
0
class DayOff(db.Model, BaseMixin, SerializerMixin):
    """
    Tells that someone will have a day off this day.
    """
    date = db.Column(db.Date, nullable=False)
    person_id = db.Column(UUIDType(binary=False),
                          db.ForeignKey("person.id"),
                          index=True)
    __table_args__ = (db.UniqueConstraint("person_id",
                                          "date",
                                          name="day_off_uc"), )
Exemple #28
0
class Snapshot(db.Model, BaseMixin, SerializerMixin):
    revision = db.Column(db.Integer())
    working_file_id = \
        db.Column(UUIDType(binary=False), db.ForeignKey("working_file_id"))

    __table_args__ = (
        db.UniqueConstraint(
            "revision",
            "working_file_id",
            name="snapshot_uc"
        ),
    )
Exemple #29
0
class DesktopLoginLog(db.Model, BaseMixin, SerializerMixin):
    """
    Table to log all desktop session logins. The aim is to build report that
    helps validating presence form.
    """
    person_id = db.Column(
        UUIDType(binary=False),
        db.ForeignKey('person.id'),
        nullable=False,
        index=True
    )
    date = db.Column(db.DateTime, nullable=False)
Exemple #30
0
class ProjectTaskTypeLink(db.Model, BaseMixin):
    __tablename__ = "project_task_type_link"
    project_id = db.Column(UUIDType(binary=False),
                           db.ForeignKey("project.id"),
                           primary_key=True)
    task_type_id = db.Column(UUIDType(binary=False),
                             db.ForeignKey("task_type.id"),
                             primary_key=True)
    priority = db.Column(db.Integer, default=None)

    __table_args__ = (db.UniqueConstraint("project_id",
                                          "task_type_id",
                                          name="project_tasktype_uc"), )