42 lines
1.6 KiB
Python
42 lines
1.6 KiB
Python
import random
|
|
import string
|
|
import uuid
|
|
|
|
from datetime import datetime
|
|
|
|
from barker.models.login_history import LoginHistory
|
|
from barker.models.meta import Base
|
|
from sqlalchemy import Boolean, Column, DateTime, ForeignKey, Unicode, desc, text
|
|
from sqlalchemy.dialects.postgresql import UUID
|
|
from sqlalchemy.orm import Session, relationship
|
|
|
|
|
|
class Device(Base):
|
|
__tablename__ = "devices"
|
|
|
|
id = Column(
|
|
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
|
|
)
|
|
name = Column("name", Unicode(255), unique=True, nullable=False)
|
|
enabled = Column("enabled", Boolean, nullable=False)
|
|
section_id = Column("section_id", UUID(as_uuid=True), ForeignKey("sections.id"), nullable=False)
|
|
creation_date = Column("creation_date", DateTime(), nullable=False)
|
|
|
|
section = relationship("Section", foreign_keys=section_id)
|
|
login_history = relationship("LoginHistory", order_by=desc(LoginHistory.date), backref="device")
|
|
|
|
def __init__(self, name=None, enabled=None, section_id=None, creation_date=None, id_=None):
|
|
self.name = name
|
|
self.enabled = enabled
|
|
self.section_id = section_id
|
|
self.creation_date = datetime.utcnow() if creation_date is None else creation_date
|
|
self.id = id_
|
|
|
|
@classmethod
|
|
def create(cls, db: Session):
|
|
main_section = uuid.UUID("3f13f6e7-dc76-4fca-8fdb-b2bbf29b35df")
|
|
name = "".join(random.choices(string.ascii_lowercase + string.digits, k=6))
|
|
device = Device(name, False, main_section)
|
|
db.add(device)
|
|
return device
|