APIs.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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 mcv.get_version_type(latest_version) == 'snapshot':
  26. self.latest_snapshot = self.project.base_library.get_card(mcv.get_latest(),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'