from sqlalchemy import Table, Column, String, MetaData, ForeignKey, JSON from sqlalchemy.sql import select, func from sqlalchemy.types import Integer, BigInteger, String, Boolean, TIMESTAMP, Numeric, Float, BINARY, LargeBinary from sqlalchemy.dialects.postgresql import JSONB from .base import Base, Session class Device(Base): __tablename__ = "devices" id = Column(Integer, primary_key=True) name = Column(String(255)) mac_address = Column(String(255)) serial_number = Column(String(255)) configuration = Column(JSONB) library = Column(String(255)) library_version = Column(String(255)) device_version = Column(String(255)) type = Column(String(255)) battery = Column(Integer) temperature = Column(Float) auto_connect = Column(Boolean) connect_priority = Column(Integer) connect_time = Column(BigInteger) parameter_set = Column(JSONB) running = Column(Boolean) calibration = Column(LargeBinary) calibration_version = Column(Integer, default=-1) user_auth = Column(JSONB) deleted = Column(Boolean) created_at = Column(TIMESTAMP(timezone=True), server_default=func.now()) updated_at = Column(TIMESTAMP(timezone=True), onupdate=func.now()) @classmethod def update_device(cls, device, options): with Session() as session: result = session.query(Device).filter(Device.mac_address == device['mac_address']).first() for key, value in options.items(): setattr(result, key, value) session.commit() @classmethod def get_device(cls, device): with Session() as session: result = session.query(Device).filter(Device.mac_address == device['mac_address']).first() return result # def __repr__(self): # return f"User(id={self.id!r}, name={self.name!r}, fullname={self.task!r})"