APIs.py 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. from Interfaces import page_class_handles, PageBase, require, format_code
  2. import json
  3. def get_args(kwargs):
  4. if setter := kwargs.get('setter'):
  5. return setter.override
  6. return {}
  7. def is_true(string:str):
  8. return string and isinstance(string,str) and string.lower() != 'false'
  9. @page_class_handles('apis/status')
  10. class StatusPage(PageBase):
  11. @property
  12. def display_name(self):
  13. return 'api/status'
  14. def generate(self, *args, **kwargs):
  15. return 'ok'
  16. def get_content_type(self, setter):
  17. return 'text/plain'
  18. mcv = require('MinecraftVersions') # 需求前置 MinecraftVersions
  19. latest_version = mcv.get_latest()
  20. @page_class_handles('apis/versions/latest')
  21. class LatestVersionAPI(PageBase):
  22. def __init__(self, project):
  23. super().__init__(project)
  24. self.latest_release = self.project.base_library.get_card(mcv.get_latest('release'),False)
  25. if latest_snap_shot_id := mcv.get_latest('snapshot'):
  26. self.latest_snapshot = self.project.base_library.get_card(latest_snap_shot_id,False)
  27. else:
  28. self.latest_snapshot = None
  29. self.respond = None
  30. @property
  31. def display_name(self):
  32. return 'api/versions/latest'
  33. def pregen_respond(self):
  34. respond = {}
  35. if self.latest_snapshot:
  36. respond['snapshot'] = self.extract_version_info(self.latest_snapshot)
  37. respond['release'] = self.extract_version_info(self.latest_release)
  38. self.respond = respond
  39. def extract_version_info(self,card):
  40. respond = {}
  41. expendedcard = self.project.template_manager.expend_card_placeholders(card,'')
  42. self.copyinfo(respond,expendedcard,'version-type')
  43. self.copyinfo(respond,expendedcard,'intro')
  44. self.copyinfo(respond,expendedcard,'version-image-link')
  45. self.copyinfo(respond,expendedcard,'server-jar')
  46. self.copyinfo(respond,expendedcard,'translator')
  47. self.copyinfo(respond,expendedcard,'official-link')
  48. self.copyinfo(respond,expendedcard,'wiki-link')
  49. self.copyinfo(respond,expendedcard,'version-id')
  50. self.copyinfo(respond,expendedcard,'title')
  51. respond['homepage-json-link'] = f"https://news.bugjump.net/VersionDetail.json?ver={expendedcard['version-id']}"
  52. return respond
  53. def copyinfo(self,respond,card,key):
  54. respond[key] = card.get(key)
  55. def generate(self, *args, **kwargs):
  56. args = get_args(kwargs)
  57. ensure_ascii = is_true(args.get('ascii',False))
  58. if not self.respond:
  59. self.pregen_respond()
  60. return json.dumps(self.respond,ensure_ascii=ensure_ascii)
  61. def get_content_type(self, setter):
  62. return 'application/json'
  63. @page_class_handles('apis/versions/latest-card')
  64. class LatestVersionCardAPI(PageBase):
  65. def generate(self, *args, **kwargs):
  66. setter = kwargs.get('setter')
  67. card = self.project.base_library.get_card('VersionLatestListCard', False)
  68. card = setter.decorate(card)
  69. return self.project.template_manager.build(card)