archive.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. from sql import db, 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, mysql: DB = db):
  7. """ 创建新归档 """
  8. cur = mysql.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. read_archive(cur.lastrowid, mysql)
  13. return cur.lastrowid
  14. def read_archive(archive_id: int, mysql: DB = db, not_cache=False):
  15. """ 获取归档 ID """
  16. if not not_cache:
  17. res = get_archive_from_cache(archive_id)
  18. if res is not None:
  19. return res
  20. cur = mysql.search("SELECT Name, DescribeText "
  21. "FROM archive "
  22. "WHERE ID=%s", archive_id)
  23. if cur is None or cur.rowcount == 0:
  24. return ["", ""]
  25. res = cur.fetchone()
  26. write_archive_to_cache(archive_id, *res)
  27. return res
  28. def get_blog_archive(blog_id: int, mysql: DB = db, not_cache=False):
  29. """ 获取文章的归档 """
  30. if not not_cache:
  31. res = get_blog_archive_from_cache(blog_id)
  32. if res is not None:
  33. return res
  34. cur = mysql.search("SELECT ArchiveID FROM blog_archive_with_name "
  35. "WHERE BlogID=%s "
  36. "ORDER BY ArchiveName", blog_id)
  37. if cur is None:
  38. return []
  39. res = [i[0] for i in cur.fetchall()]
  40. write_blog_archive_to_cache(blog_id, res)
  41. return res
  42. def delete_archive(archive_id: int, mysql: DB = db):
  43. delete_archive_from_cache(archive_id)
  44. delete_all_blog_archive_from_cache()
  45. conn = mysql.get_connection()
  46. cur = mysql.delete("DELETE FROM blog_archive WHERE ArchiveID=%s", archive_id, connection=conn)
  47. if cur is None:
  48. conn.rollback()
  49. conn.close()
  50. return False
  51. cur = mysql.delete("DELETE FROM archive WHERE ID=%s", archive_id, connection=conn)
  52. if cur is None or cur.rowcount == 0:
  53. conn.rollback()
  54. conn.close()
  55. return False
  56. conn.commit()
  57. conn.close()
  58. return True
  59. def add_blog_to_archive(blog_id: int, archive_id: int, mysql: DB = db):
  60. delete_blog_archive_from_cache(blog_id)
  61. cur = mysql.search("SELECT BlogID FROM blog_archive WHERE BlogID=%s AND ArchiveID=%s", blog_id, archive_id)
  62. if cur is None:
  63. return False
  64. if cur.rowcount > 0:
  65. return True
  66. cur = mysql.insert("INSERT INTO blog_archive(BlogID, ArchiveID) VALUES (%s, %s)", blog_id, archive_id)
  67. if cur is None or cur.rowcount != 1:
  68. return False
  69. return True
  70. def sub_blog_from_archive(blog_id: int, archive_id: int, mysql: DB = db):
  71. delete_blog_archive_from_cache(blog_id)
  72. cur = mysql.delete("DELETE FROM blog_archive WHERE BlogID=%s AND ArchiveID=%s", blog_id, archive_id)
  73. if cur is None:
  74. return False
  75. return True
  76. def get_archive_list(limit: Optional[int] = None, offset: Optional[int] = None, mysql: DB = db):
  77. """ 获取归档列表 """
  78. if limit is not None and offset is not None:
  79. cur = mysql.search("SELECT ID "
  80. "FROM archive "
  81. "ORDER BY Name "
  82. "LIMIT %s "
  83. "OFFSET %s ", limit, offset)
  84. else:
  85. cur = mysql.search("SELECT ID "
  86. "FROM archive "
  87. "ORDER BY Name")
  88. if cur is None or cur.rowcount == 0:
  89. return []
  90. return [i[0] for i in cur.fetchall()]
  91. def get_archive_list_iter(mysql: DB = db):
  92. """ 获取归档列表 """
  93. cur = mysql.search("SELECT ID "
  94. "FROM archive "
  95. "ORDER BY Name")
  96. if cur is None or cur.rowcount == 0:
  97. return []
  98. return cur