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