files.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. from pydantic import BaseModel, ConfigDict
  2. from typing import List, Union, Optional
  3. import time
  4. import logging
  5. from sqlalchemy import Column, String, BigInteger
  6. from sqlalchemy.orm import Session
  7. from apps.webui.internal.db import JSONField, Base
  8. import json
  9. from config import SRC_LOG_LEVELS
  10. log = logging.getLogger(__name__)
  11. log.setLevel(SRC_LOG_LEVELS["MODELS"])
  12. ####################
  13. # Files DB Schema
  14. ####################
  15. class File(Base):
  16. __tablename__ = "file"
  17. id = Column(String, primary_key=True)
  18. user_id = Column(String)
  19. filename = Column(String)
  20. meta = Column(JSONField)
  21. created_at = Column(BigInteger)
  22. class FileModel(BaseModel):
  23. id: str
  24. user_id: str
  25. filename: str
  26. meta: dict
  27. created_at: int # timestamp in epoch
  28. model_config = ConfigDict(from_attributes=True)
  29. ####################
  30. # Forms
  31. ####################
  32. class FileModelResponse(BaseModel):
  33. id: str
  34. user_id: str
  35. filename: str
  36. meta: dict
  37. created_at: int # timestamp in epoch
  38. class FileForm(BaseModel):
  39. id: str
  40. filename: str
  41. meta: dict = {}
  42. class FilesTable:
  43. def insert_new_file(self, db: Session, user_id: str, form_data: FileForm) -> Optional[FileModel]:
  44. file = FileModel(
  45. **{
  46. **form_data.model_dump(),
  47. "user_id": user_id,
  48. "created_at": int(time.time()),
  49. }
  50. )
  51. try:
  52. result = File(**file.model_dump())
  53. db.add(result)
  54. db.commit()
  55. db.refresh(result)
  56. if result:
  57. return FileModel.model_validate(result)
  58. else:
  59. return None
  60. except Exception as e:
  61. print(f"Error creating tool: {e}")
  62. return None
  63. def get_file_by_id(self, db: Session, id: str) -> Optional[FileModel]:
  64. try:
  65. file = db.get(File, id)
  66. return FileModel.model_validate(file)
  67. except:
  68. return None
  69. def get_files(self, db: Session) -> List[FileModel]:
  70. return [FileModel.model_validate(file) for file in db.query(File).all()]
  71. def delete_file_by_id(self, db: Session, id: str) -> bool:
  72. try:
  73. db.query(File).filter_by(id=id).delete()
  74. return True
  75. except:
  76. return False
  77. def delete_all_files(self, db: Session) -> bool:
  78. try:
  79. db.query(File).delete()
  80. return True
  81. except:
  82. return False
  83. Files = FilesTable()