import logging
import os.path
import shutil
-
import sqlalchemy
+import sqlmodel
+
from sqlalchemy import Column, ForeignKey
from sqlalchemy import Boolean, DateTime, Integer, Text
await repo.write()
-class Repo(database.Base, database.BackendMixin, database.SoftDeleteMixin):
+class Repo(sqlmodel.SQLModel, database.BackendMixin, database.SoftDeleteMixin, table=True):
__tablename__ = "repositories"
def __str__(self):
return NotImplemented
- def to_json(self):
- ret = {
- "name" : self.name,
- "slug" : self.slug,
- "description" : self.description,
- "created_at" : self.created_at.isoformat(),
-
- # Distribution
- "distro" : self.distro.slug,
- }
-
- if self.owner:
- ret["owner"] = self.owner.to_json()
+ # ID
- return ret
+ id : int = sqlmodel.Field(primary_key=True, exclude=True)
- # ID
+ # Distro ID
- id = Column(Integer, primary_key=True)
+ distro_id : int = sqlmodel.Field(foreign_key="distributions.id", exclude=True)
# Distro
- distro_id = Column(Integer, ForeignKey("distributions.id"), nullable=False)
-
- distro = sqlalchemy.orm.relationship("Distro", lazy="selectin")
+ distro: "Distro" = sqlmodel.Relationship()
# 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")}
)
# Repo Types
# Priority
- priority = Column(Integer, nullable=False)
+ priority: int
# 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", lazy="selectin")
+ owner: "User" = sqlmodel.Relationship()
def has_perm(self, user):
"""
# Slug
- slug = Column(Text, unique=True, nullable=False)
+ slug: str = sqlmodel.Field(unique=True)
@property
def path(self):
# Name
- name = Column(Text, nullable=False)
+ name: str
# Description
- description = Column(Text, nullable=False, default="")
+ description: str = sqlmodel.Field(default="")
# Key ID
- key_id = Column(Integer, ForeignKey("keys.id"))
+ key_id: int = sqlmodel.Field(foreign_key="keys.id", exclude=True)
# Key
- key = sqlalchemy.orm.relationship("Key", foreign_keys=[key_id], lazy="joined")
+ key: "Key" = sqlmodel.Relationship()
# Architectures
# Mirrored
- mirrored = Column(Boolean, nullable=False, default=False)
+ mirrored: bool = sqlmodel.Field(default=False)
# Listed
- listed = Column(Boolean, nullable=False, default=False)
+ listed: bool = sqlmodel.Field(default=False)
# Sibling repositories