api_old.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. """
  2. 旧 API,为兼容性考虑保留
  3. """
  4. import json
  5. from homepagebuilder.interfaces import page_class_handles, require
  6. from homepagebuilder.core.page import CodeBasedPage
  7. from homepagebuilder.core.types import Context
  8. mcv = require('minecraft_versions') # 需求前置 MinecraftVersions
  9. MCVM = mcv.MCVM
  10. def get_args(context):
  11. if setter := context.setter:
  12. return setter.override.get('args', {})
  13. return {}
  14. def is_true(string: str) -> bool:
  15. return bool(string and isinstance(string, str) and string.lower() != 'false')
  16. @page_class_handles('apis/status')
  17. class StatusPage(CodeBasedPage):
  18. @property
  19. def display_name(self):
  20. return 'api/status'
  21. def generate(self, *args, **kwargs):
  22. return 'ok'
  23. def get_content_type(self, *args, **kwargs):
  24. return 'text/plain'
  25. @page_class_handles('apis/versions/latest')
  26. class LatestVersionAPI(CodeBasedPage):
  27. def __init__(self, project):
  28. super().__init__(project)
  29. self.latest_release = self.project.base_library.get_card(MCVM.get_latest_version('release').id, False)
  30. if latest_developing := MCVM.get_latest_version('developing'):
  31. self.latest_developing = self.project.base_library.get_card(latest_developing.id, False)
  32. else:
  33. self.latest_developing = None
  34. self.respond = None
  35. @property
  36. def display_name(self):
  37. return 'api/versions/latest'
  38. def pregen_respond(self):
  39. respond = {}
  40. if self.latest_developing:
  41. respond['snapshot'] = self.extract_version_info(self.latest_developing)
  42. respond['release'] = self.extract_version_info(self.latest_release)
  43. self.respond = respond
  44. def extract_version_info(self, card):
  45. respond = {}
  46. context = Context.get_current_context()
  47. expendedcard = context.builder.template_manager.expend_card_placeholders(card, '')
  48. self.copyinfo(respond, expendedcard, 'version-type')
  49. self.copyinfo(respond, expendedcard, 'intro')
  50. self.copyinfo(respond, expendedcard, 'version-image-link')
  51. self.copyinfo(respond, expendedcard, 'server-jar')
  52. self.copyinfo(respond, expendedcard, 'translator')
  53. self.copyinfo(respond, expendedcard, 'official-link')
  54. self.copyinfo(respond, expendedcard, 'wiki-link')
  55. self.copyinfo(respond, expendedcard, 'version-id')
  56. self.copyinfo(respond, expendedcard, 'title')
  57. respond['homepage-json-link'] = f"https://news.bugjump.net/VersionDetail.json?ver={expendedcard['version-id']}"
  58. return respond
  59. def copyinfo(self, respond, card, key):
  60. respond[key] = card.get(key)
  61. def generate(self, *args, **kwargs):
  62. context = Context.get_current_context()
  63. args = get_args(context)
  64. ensure_ascii = is_true(args.get('ascii', False))
  65. if not self.respond:
  66. self.pregen_respond()
  67. return json.dumps(self.respond, ensure_ascii=ensure_ascii)
  68. def get_content_type(self, *args, **kwargs):
  69. return 'application/json'
  70. @page_class_handles('apis/versions/latest-card')
  71. class LatestVersionCardAPI(CodeBasedPage):
  72. def generate(self, *args, **kwargs):
  73. context = Context.get_current_context()
  74. setter = context.setter
  75. card = self.project.base_library.get_card('VersionLatestListCard', False)
  76. card = setter.decorate(card)
  77. return context.builder.template_manager.build(card)
  78. def get_content_type(self, *args, **kwargs):
  79. return 'application/xml'