import logging
import os
import re
-
import sqlalchemy
-from sqlalchemy import Column, ForeignKey, Index
-from sqlalchemy import Boolean, DateTime, Integer, Text, UUID
+import sqlmodel
+
+from uuid import UUID
from . import base
from . import builds
class Builds(base.Object):
async def get_by_uuid(self, uuid):
stmt = (
- sqlalchemy
+ sqlmodel
.select(Build)
.where(
Build.deleted_at == None,
return group
-class Build(database.Base, database.BackendMixin, database.SoftDeleteMixin):
+class Build(sqlmodel.SQLModel, database.BackendMixin, database.SoftDeleteMixin):
__tablename__ = "builds"
def __str__(self):
# ID
- id = Column(Integer, primary_key=True)
+ id: int = sqlmodel.Field(primary_key=True, exclude=True)
@property
def url(self):
# UUID
- uuid = Column(UUID, unique=True, nullable=False,
- server_default=sqlalchemy.func.gen_random_uuid())
+ uuid: UUID = sqlmodel.Field(
+ unique = True,
+ sa_column_kwargs = {
+ "server_default" : sqlalchemy.text("gen_random_uuid()"),
+ },
+ )
# Package ID
- pkg_id = Column(Integer, ForeignKey("packages.id"), nullable=False)
+ pkg_id: int = sqlmodel.Field(foreign_key="packages.id")
# Package
- pkg = sqlalchemy.orm.relationship("Package", foreign_keys=[pkg_id], lazy="selectin")
+ pkg: "Package" = sqlmodel.Relationship()
@property
def name(self):
# 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")}
+ )
# Date
# Finished At
- finished_at = Column(DateTime(timezone=False))
+ finished_at: datetime.datetime
# Owner ID
- owner_id = Column(Integer, ForeignKey("users.id"))
+ owner_id: int = sqlmodel.Field(foreign_key="users.id", exclude=True)
# Owner
- owner = sqlalchemy.orm.relationship("User", foreign_keys=[owner_id], lazy="joined")
+ owner: "User" = sqlmodel.Relationship()
# Is this a scratch build?
# 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", lazy="selectin")
+ repo: "Repo" = sqlmodel.Relationship()
# Distro
# Group ID
- group_id = Column(Integer, ForeignKey("build_groups.id"))
+ group_id: int = sqlmodel.Field(foreign_key="build_groups.id")
# Group
- group = sqlalchemy.orm.relationship(
- "BuildGroup", foreign_keys=[group_id], back_populates="builds", lazy="selectin",
- )
+ group: "BuildGroup" = sqlmodel.Relationship(back_populates="builds")
# Severity
- severity = Column(Text)
+ severity : str
# Commit ID
- commit_id = Column(Integer, ForeignKey("source_commits.id"))
+ #commit_id = Column(Integer, ForeignKey("source_commits.id"))
# Commit
- commit = sqlalchemy.orm.relationship(
- "SourceCommit", foreign_keys=[commit_id], lazy="selectin",
- )
+ #commit = sqlalchemy.orm.relationship(
+ # "SourceCommit", foreign_keys=[commit_id], lazy="selectin",
+ #)
def has_perm(self, user):
"""
# Priority
- priority = Column(Integer, nullable=False, default=0)
+ priority: int = sqlmodel.Field(default=0)
# Arches
# Jobs - This fetches all jobs that have ever existed for this build
- alljobs = sqlalchemy.orm.relationship("Job", back_populates="build", lazy="joined")
+ #alljobs = sqlalchemy.orm.relationship("Job", back_populates="build", lazy="joined")
@property
def jobs(self):
# Notify
await comment.notify()
- comments = sqlalchemy.orm.relationship(
- "BuildComment", back_populates="build", lazy="selectin",
- )
+ #comments = sqlalchemy.orm.relationship(
+ # "BuildComment", back_populates="build", lazy="selectin",
+ #)
# Deleted By ID
- deleted_by_id = Column(Integer, ForeignKey("users.id"))
+ #deleted_by_id = Column(Integer, ForeignKey("users.id"))
# Deleted By
- deleted_by = sqlalchemy.orm.relationship(
- "User", foreign_keys=[deleted_by_id], lazy="selectin",
- )
+ #deleted_by = sqlalchemy.orm.relationship(
+ # "User", foreign_keys=[deleted_by_id], lazy="selectin",
+ #)
# Add Points
# Points
- points = Column(Integer, nullable=False, default=0)
+ points : int = sqlmodel.Field(default=0)
## Watchers
# Failed
- failed = Column(Boolean, nullable=False, default=False)
+ failed : bool = sqlmodel.Field(default=False)
# Failed?
# Repos
- repos = sqlalchemy.orm.relationship(
- "Repo",
- secondary = "repository_builds",
- primaryjoin = """and_(
- RepoBuild.build_id == Build.id,
- RepoBuild.removed_at == None
- )""",
- viewonly = True,
- lazy = "selectin",
- )
+ #repos = sqlalchemy.orm.relationship(
+ # "Repo",
+ # secondary = "repository_builds",
+ # primaryjoin = """and_(
+ # RepoBuild.build_id == Build.id,
+ # RepoBuild.removed_at == None
+ # )""",
+ # viewonly = True,
+ # lazy = "selectin",
+ #)
async def _update_repos(self, build=False):
"""
# Deprecated At
- deprecated_at = Column(DateTime(timezone=False))
+ deprecated_at : datetime.datetime | None
# Deprecated?
# Deprecated By ID
- deprecated_by_id = Column(Integer, ForeignKey("users.id"))
+ #deprecated_by_id = Column(Integer, ForeignKey("users.id"))
# Deprecated By
- deprecated_by = sqlalchemy.orm.relationship(
- "User", foreign_keys=[deprecated_by_id], lazy="selectin",
- )
+ #deprecated_by = sqlalchemy.orm.relationship(
+ # "User", foreign_keys=[deprecated_by_id], lazy="selectin",
+ #)
# Deprecating Build ID
- deprecating_build_id = Column(Integer, ForeignKey("builds.id"))
+ #deprecating_build_id = Column(Integer, ForeignKey("builds.id"))
- deprecating_build = sqlalchemy.orm.relationship(
- "Build", foreign_keys=[deprecating_build_id],
- )
+ #deprecating_build = sqlalchemy.orm.relationship(
+ # "Build", foreign_keys=[deprecating_build_id],
+ #)
@functools.cached_property
async def deprecated_builds(self):
# Tests Builds
- test = Column(Boolean, nullable=False, default=False)
+ test : bool = sqlmodel.Field(default=False)
# Test?
# Disable Test Builds?
- disable_test_builds = Column(Boolean, nullable=False, default=False)
+ disable_test_builds : bool = sqlmodel.Field(default=False)
async def create_test_builds(self):
"""
return clone
-class BuildGroup(database.Base, database.SoftDeleteMixin):
+class BuildGroup(sqlmodel.SQLModel, database.SoftDeleteMixin, table=True):
__tablename__ = "build_groups"
def __str__(self):
# ID
- id = Column(Integer, primary_key=True)
+ id: int = sqlmodel.Field(primary_key=True, exclude=True)
# UUID
- uuid = Column(UUID, nullable=False, server_default=sqlalchemy.func.gen_random_uuid())
+ uuid: UUID = sqlmodel.Field(
+ unique = True,
+ sa_column_kwargs = {
+ "server_default" : sqlalchemy.text("gen_random_uuid()"),
+ },
+ )
# 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")
# Created By
- created_by = sqlalchemy.orm.relationship(
- "User", foreign_keys=[created_by_id], lazy="selectin",
- )
+ created_by: "User" = sqlmodel.Relationship()
# Deleted By ID
- deleted_by_id = Column(Integer, ForeignKey("users.id"))
+ #deleted_by_id: int = sqlmodel.Field(foreign_key="users.id")
# Deleted By
- deleted_by = sqlalchemy.orm.relationship(
- "User", foreign_keys=[deleted_by_id], lazy="selectin",
- )
+ #deleted_by: "User" = sqlmodel.Relationship()
# Finished At
- finished_at = Column(DateTime(timezone=False), nullable=False)
+ finished_at: datetime.datetime
# Failed
- failed = Column(Boolean, nullable=False, default=False)
+ failed: bool = sqlmodel.Field(default=False)
# Builds
- builds = sqlalchemy.orm.relationship(
- "Build", foreign_keys=[Build.group_id], back_populates="group", lazy="joined",
- )
+ builds: "Build" = sqlmodel.Relationship(back_populates="group")
@staticmethod
def _sort_builds(build):
# Tested Build ID
- tested_build_id = Column(Integer, ForeignKey("builds.id"))
+ tested_build_id: int = sqlmodel.Field(foreign_key="builds.id")
# Tested Build
- tested_build = sqlalchemy.orm.relationship(
- "Build", foreign_keys=[tested_build_id], lazy="joined",
- )
+ tested_build: "Build" = sqlmodel.Relationship()
# Test?
self.failed = True
-class BuildBug(database.Base):
+class BuildBug(sqlmodel.SQLModel, table=True):
__tablename__ = "build_bugs"
def __str__(self):
# ID
- id = Column(Integer, primary_key=True)
+ id: int = sqlmodel.Field(primary_key=True, exclude=True)
# Build ID
- build_id = Column(Integer, ForeignKey("builds.id"), index=True, nullable=False)
+ build_id: int = sqlmodel.Field(foreign_key="builds.id", exclude=True)
# Build
- build = sqlalchemy.orm.relationship("Build")
+ build: "Build" = sqlmodel.Relationship()
# Bug ID
- bug_id = Column(Integer, nullable=False)
+ bug_id: int
# Added At
- added_at = Column(DateTime(timezone=False), nullable=False,
- default=sqlalchemy.func.current_timestamp())
+ added_at: datetime.datetime = sqlmodel.Field(
+ sa_column_kwargs = {"server_default" : sqlalchemy.text("CURRENT_TIMESTAMP")}
+ )
# Added By ID
- added_by_id = Column(Integer, ForeignKey("users.id"), nullable=False)
+ added_by_id: int = sqlmodel.Field(foreign_key="users.id", exclude=True)
# Added By
- added_by = sqlalchemy.orm.relationship(
- "User", foreign_keys=[added_by_id], lazy="joined", innerjoin=True,
- )
+ added_by: "User" = sqlmodel.Relationship()
# Removed At
- removed_at = Column(DateTime(timezone=False))
+ removed_at: datetime.datetime
# Removed By ID
- removed_by_id = Column(Integer, ForeignKey("users.id"))
+ #removed_by_id: int = sqlmodel.Field(foreign_key="users.id", exclude=True)
# Removed ID
- removed_by = sqlalchemy.orm.relationship(
- "User", foreign_keys=[removed_by_id], lazy="selectin",
- )
+ #removed_by: "User" = sqlmodel.Relationship()
# Remove!
self.removed_by = removed_by
-class BuildComment(database.Base, database.BackendMixin, database.SoftDeleteMixin):
+class BuildComment(sqlmodel.SQLModel, database.BackendMixin, database.SoftDeleteMixin, table=True):
__tablename__ = "build_comments"
# ID
- id = Column(Integer, primary_key=True)
+ id: int = sqlmodel.Field(primary_key=True, exclude=True)
# Build ID
- build_id = Column(Integer, ForeignKey("builds.id"), index=True, nullable=False)
+ build_id: int = sqlmodel.Field(foreign_key="builds.id", exclude=True)
# Build
- build = sqlalchemy.orm.relationship("Build", back_populates="comments")
+ build: "Build" = sqlmodel.Relationship(back_populates="comments")
# User ID
- user_id = Column(Integer, ForeignKey("users.id"), index=True, nullable=False)
+ # XXX Create an index on this field
+ user_id: int = sqlmodel.Field(foreign_key="users.id", exclude=True)
# User
- user = sqlalchemy.orm.relationship("User")
+ user: "User" = sqlmodel.Relationship()
# Text
- text = Column(Text, nullable=False, default="")
+ text: str = sqlmodel.Field(default="")
# 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")}
+ )
# Notify!
exclude=[self.user], build=self.build, comment=self)
-class BuildPoint(database.Base, database.BackendMixin):
+class BuildPoint(sqlmodel.SQLModel, database.BackendMixin, table=True):
__tablename__ = "build_points"
+ # ID
+
+ id: int = sqlmodel.Field(primary_key=True, exclude=True)
+
# Build ID
- build_id = Column(Integer, ForeignKey("builds.id"), primary_key=True, nullable=False)
+ build_id: int = sqlmodel.Field(foreign_key="builds.id", exclude=True)
# Build
- build = sqlalchemy.orm.relationship("Build", foreign_keys=[build_id], lazy="selectin")
+ build: "Build" = sqlmodel.Relationship(back_populates="comments")
# Created At
- created_at = Column(DateTime(timezone=False), primary_key=True,
- nullable=False, server_default=sqlalchemy.func.current_timestamp())
+ created_at: datetime.datetime = sqlmodel.Field(
+ sa_column_kwargs = {"server_default" : sqlalchemy.text("CURRENT_TIMESTAMP")}
+ )
# Points
- points = Column(Integer, nullable=False)
+ points: int
# User ID
- user_id = Column(Integer, ForeignKey("users.id"))
+ user_id: int = sqlmodel.Field(foreign_key="users.id", exclude=True)
# User
- user = sqlalchemy.orm.relationship("User", foreign_keys=[user_id], lazy="selectin")
+ user: "User" = sqlmodel.Relationship()
-class BuildWatcher(database.Base, database.BackendMixin, database.SoftDeleteMixin):
+class BuildWatcher(sqlmodel.SQLModel, database.BackendMixin, database.SoftDeleteMixin, table=True):
__tablename__ = "build_watchers"
def __lt__(self, other):
return NotImplemented
+ # ID
+
+ id: int = sqlmodel.Field(primary_key=True, exclude=True)
+
# Build ID
- build_id = Column(Integer, ForeignKey("builds.id"), primary_key=True, nullable=False)
+ build_id: int = sqlmodel.Field(foreign_key="builds.id", exclude=True)
# Build
- build = sqlalchemy.orm.relationship("Build", lazy="selectin")
+ build: "Build" = sqlmodel.Relationship(back_populates="comments")
# User ID
- user_id = Column(Integer, ForeignKey("users.id"), primary_key=True, nullable=False)
+ user_id: int = sqlmodel.Field(foreign_key="users.id", exclude=True)
# User
- user = sqlalchemy.orm.relationship("User", lazy="joined", innerjoin=True)
+ user: "User" = sqlmodel.Relationship()
# Added At
- added_at = Column(DateTime(timezone=False), nullable=False,
- server_default=sqlalchemy.func.current_timestamp())
+ added_at: datetime.datetime = sqlmodel.Field(
+ sa_column_kwargs = {"server_default" : sqlalchemy.text("CURRENT_TIMESTAMP")}
+ )