""" AssetAccessLog Model. This AssetAccessLog model uses sqlalchemy. It's used to store information about user activity on assets """ import datetime from typing import Any from sqlalchemy import Column, DateTime, Integer, String from assets.connectors import mysql class AssetAccessLog(mysql.AuModel): """Table definition for asset_access_log table.""" __tablename__ = "asset_access_log" asset_access_log_id = Column("id", Integer, primary_key=True, autoincrement=True) orchard_user_id = Column(String(45), nullable=False) track_id = Column(Integer, nullable=False) activity_type = Column(String(45), nullable=False) ip_address = Column(String(45), default=None, nullable=True) activity_date = Column(DateTime) def as_dict(self) -> dict[str, Any]: """Return object as dict. Returns: dict: Dictionary representation of object """ activity_date = None if isinstance(self.activity_date, datetime.datetime): activity_date = self.activity_date.timestamp() asset_access_log_dict = { "id": self.asset_access_log_id, "orchard_user_id": self.orchard_user_id, "track_id": self.track_id, "activity_type": self.activity_type, "ip_address": self.ip_address, "activity_date": activity_date, } return asset_access_log_dict def create_asset_access_log(data: dict[str, Any]) -> dict[str, Any]: """Create new asset access log item in the table. Args: data (dict): the data from which to create the asset access log. Returns: dict: Created asset access log info. """ data["activity_date"] = datetime.datetime.now() asset_access_log = AssetAccessLog(**data) with mysql.au_db_session() as session: session.add(asset_access_log) session.flush() return asset_access_log.as_dict()