files.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  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, get_session
  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, 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. with get_session() as db:
  53. result = File(**file.model_dump())
  54. db.add(result)
  55. db.commit()
  56. db.refresh(result)
  57. if result:
  58. return FileModel.model_validate(result)
  59. else:
  60. return None
  61. except Exception as e:
  62. print(f"Error creating tool: {e}")
  63. return None
  64. def get_file_by_id(self, id: str) -> Optional[FileModel]:
  65. try:
  66. with get_session() as db:
  67. file = db.get(File, id)
  68. return FileModel.model_validate(file)
  69. except:
  70. return None
  71. def get_files(self) -> List[FileModel]:
  72. with get_session() as db:
  73. return [FileModel.model_validate(file) for file in db.query(File).all()]
  74. def delete_file_by_id(self, id: str) -> bool:
  75. try:
  76. with get_session() as db:
  77. db.query(File).filter_by(id=id).delete()
  78. db.commit()
  79. return True
  80. except:
  81. return False
  82. def delete_all_files(self) -> bool:
  83. try:
  84. with get_session() as db:
  85. db.query(File).delete()
  86. db.commit()
  87. return True
  88. except:
  89. return False
  90. Files = FilesTable()