archive.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. from sql import db
  2. from sql.cache import (get_archive_from_cache, write_archive_to_cache, delete_archive_from_cache,
  3. get_blog_archive_from_cache, write_blog_archive_to_cache, delete_blog_archive_from_cache,
  4. delete_all_blog_archive_from_cache)
  5. from typing import Optional
  6. def create_archive(name: str, describe: str):
  7. """ 创建新归档 """
  8. cur = db.insert("INSERT INTO archive(Name, DescribeText) "
  9. "VALUES (%s, %s)", name, describe)
  10. if cur is None or cur.rowcount == 0:
  11. return None
  12. return cur.lastrowid
  13. def read_archive(archive_id: int):
  14. """ 获取归档 ID """
  15. res = get_archive_from_cache(archive_id)
  16. if res is not None:
  17. return res
  18. cur = db.search("SELECT Name, DescribeText "
  19. "FROM archive "
  20. "WHERE ID=%s", archive_id)
  21. if cur is None or cur.rowcount == 0:
  22. return ["", ""]
  23. res = cur.fetchone()
  24. write_archive_to_cache(archive_id, *res)
  25. return res
  26. def get_blog_archive(blog_id: int):
  27. """ 获取文章的归档 """
  28. res = get_blog_archive_from_cache(blog_id)
  29. if res is not None:
  30. return res
  31. cur = db.search("SELECT ArchiveID FROM blog_archive_with_name "
  32. "WHERE BlogID=%s "
  33. "ORDER BY ArchiveName", blog_id)
  34. if cur is None:
  35. return []
  36. res = [i[0] for i in cur.fetchall()]
  37. write_blog_archive_to_cache(blog_id, res)
  38. return res
  39. def delete_archive(archive_id: int):
  40. delete_archive_from_cache(archive_id)
  41. delete_all_blog_archive_from_cache()
  42. cur = db.delete("DELETE FROM blog_archive WHERE ArchiveID=%s", archive_id)
  43. if cur is None:
  44. return False
  45. cur = db.delete("DELETE FROM archive WHERE ID=%s", archive_id)
  46. if cur is None or cur.rowcount == 0:
  47. return False
  48. return True
  49. def add_blog_to_archive(blog_id: int, archive_id: int):
  50. delete_blog_archive_from_cache(blog_id)
  51. cur = db.search("SELECT BlogID FROM blog_archive WHERE BlogID=%s AND ArchiveID=%s", blog_id, archive_id)
  52. if cur is None:
  53. return False
  54. if cur.rowcount > 0:
  55. return True
  56. cur = db.insert("INSERT INTO blog_archive(BlogID, ArchiveID) VALUES (%s, %s)", blog_id, archive_id)
  57. if cur is None or cur.rowcount != 1:
  58. return False
  59. return True
  60. def sub_blog_from_archive(blog_id: int, archive_id: int):
  61. delete_blog_archive_from_cache(blog_id)
  62. cur = db.delete("DELETE FROM blog_archive WHERE BlogID=%s AND ArchiveID=%s", blog_id, archive_id)
  63. if cur is None:
  64. return False
  65. return True
  66. def get_archive_list(limit: Optional[int] = None, offset: Optional[int] = None):
  67. """ 获取归档列表 """
  68. if limit is not None and offset is not None:
  69. cur = db.search("SELECT ID "
  70. "FROM archive "
  71. "ORDER BY Name "
  72. "LIMIT %s "
  73. "OFFSET %s ", limit, offset)
  74. else:
  75. cur = db.search("SELECT ID "
  76. "FROM archive "
  77. "ORDER BY Name")
  78. if cur is None or cur.rowcount == 0:
  79. return []
  80. return [i[0] for i in cur.fetchall()]