import os
import re
import sqlalchemy
+import sqlmodel
import tempfile
-from sqlalchemy import Column, ForeignKey
-from sqlalchemy import DateTime, Integer, Text
-
from . import base
from . import database
from . import config
await job.run()
-class Source(database.Base, database.BackendMixin, database.SoftDeleteMixin):
+class Source(sqlmodel.SQLModel, database.BackendMixin, database.SoftDeleteMixin, table=True):
__tablename__ = "sources"
def __str__(self):
# ID
- id = Column(Integer, primary_key=True)
+ id: int = sqlmodel.Field(primary_key=True, exclude=True)
# Name
- name = Column(Text, nullable=False)
+ name: str
# Slug
- slug = Column(Text, unique=True, nullable=False)
+ # XXX Must be unique
+ slug: str
# URL
- url = Column(Text, nullable=False)
+ url: str
# Gitweb
- gitweb = Column(Text)
+ gitweb: str | None = None
# Revision
- revision = Column(Text)
+ revision: str | None = None
# Branch
- branch = Column(Text, nullable=False)
+ branch: str
# Last Fetched At
- last_fetched_at = Column(DateTime(timezone=False))
+ last_fetched_at: datetime.datetime | None = None
# Repo ID
- repo_id = Column(Integer, ForeignKey("repositories.id"), nullable=False)
+ repo_id: int = sqlmodel.Field(foreign_key="repositories.id", exclude=True)
# Repo
- repo = sqlalchemy.orm.relationship(
- "Repo", foreign_keys=[repo_id], lazy="joined", innerjoin=True,
+ repo: "Repo" = sqlmodel.Relationship(
+ sa_relationship_kwargs={ "lazy" : "joined" },
)
# Distro
# Created At
- created_at = Column(DateTime(timezone=False), nullable=False,
- server_default=sqlalchemy.func.current_timestamp())
+ created_at : datetime.datetime = sqlmodel.Field(
+ sa_column_kwargs = {"server_default" : sqlalchemy.text("CURRENT_TIMESTAMP")}
+ )
# Created By ID
- created_by_id = Column(Integer, ForeignKey("users.id"))
+ created_by_id: int = sqlmodel.Field(foreign_key="users.id", exclude=True)
# Created By
- created_by = sqlalchemy.orm.relationship(
- "User", foreign_keys=[created_by_id], lazy="joined", innerjoin=True,
+ created_by: "User" = sqlmodel.Relationship(
+ sa_relationship_kwargs={ "foreign_keys" : "[Source.created_by_id]" },
)
# Deleted By ID
- deleted_by_id = Column(Integer, ForeignKey("users.id"))
+ deleted_by_id: int = sqlmodel.Field(foreign_key="users.id", exclude=True)
# Deleted By
- deleted_by = sqlalchemy.orm.relationship(
- "User", foreign_keys=[deleted_by_id], lazy="joined",
+ deleted_by: "User" = sqlmodel.Relationship(
+ sa_relationship_kwargs={ "foreign_keys" : "[Source.deleted_by_id]" },
)
# Path
self.last_fetched_at = sqlalchemy.func.current_timestamp()
-class SourceCommit(database.Base, database.BackendMixin, database.SoftDeleteMixin):
+class SourceCommit(sqlmodel.SQLModel, database.BackendMixin, database.SoftDeleteMixin, table=True):
__tablename__ = "source_commits"
def __str__(self):
# ID
- id = Column(Integer, primary_key=True)
+ id: int = sqlmodel.Field(primary_key=True, exclude=True)
# Source ID
- source_id = Column(Integer, ForeignKey("sources.id"), nullable=False)
+ source_id: int = sqlmodel.Field(foreign_key="sources.id")
# Source
- source = sqlalchemy.orm.relationship(
- "Source", foreign_keys=[source_id], lazy="joined",
+ source: "Source" = sqlmodel.Relationship(
+ sa_relationship_kwargs={ "lazy" : "selectin" },
)
# Revision
- revision = Column(Text, nullable=False)
+ revision: str
# Author
- author = Column(Text, nullable=False)
+ author: str
# Committer
- committer = Column(Text, nullable=False)
+ committer: str
# Date
- date = Column(DateTime(timezone=False), nullable=False)
+ date: datetime.datetime
# Subject
- subject = Column(Text, nullable=False)
+ subject: str
# Body
- body = Column(Text, nullable=False)
+ body: str
@functools.cached_property
def message(self):
# Build Group ID
- build_group_id = Column(Integer, ForeignKey("build_groups.id"))
+ build_group_id: int = sqlmodel.Field(foreign_key="build_groups.id", exclude=True)
# Build Group
- builds = sqlalchemy.orm.relationship(
- "BuildGroup", foreign_keys=[build_group_id], lazy="selectin",
+ builds: "BuildGroup" = sqlmodel.Relationship(
+ sa_relationship_kwargs={ "lazy" : "selectin" },
)
# Jobs
self.finished_at = sqlalchemy.func.current_timestamp()
-class SourceJob(database.Base, database.BackendMixin):
+class SourceJob(sqlmodel.SQLModel, database.BackendMixin, table=True):
__tablename__ = "source_commit_jobs"
# ID
- id = Column(Integer, primary_key=True)
+ id: int = sqlmodel.Field(primary_key=True, exclude=True)
# Commit ID
- commit_id = Column(Integer, ForeignKey("source_commits.id"), nullable=False)
+ commit_id: int = sqlmodel.Field(foreign_key="source_commits.id", exclude=True)
# Commit
- commit = sqlalchemy.orm.relationship(
- "SourceCommit", foreign_keys=[commit_id], lazy="joined",
+ commit: "SourceCommit" = sqlmodel.Relationship(
+ sa_relationship_kwargs={ "lazy" : "joined" },
)
# Action
- action = Column(Text, nullable=False)
+ action: str
# Name
- name = Column(Text, nullable=False)
+ name: str
# Finished At
- finished_at = Column(DateTime(timezone=False))
+ finished_at: datetime.datetime
# Error
- error = Column(Text)
+ error: str = ""
# Status