barker/barker/barker/models/device.py

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