APIs.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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. mcv = require('MinecraftVersions') # 需求前置 MinecraftVersions
  17. latest_version = mcv.get_latest()
  18. @page_class_handles('apis/versions/latest')
  19. class LatestVersionAPI(PageBase):
  20. def __init__(self, project):
  21. super().__init__(project)
  22. self.latest_release = self.project.base_library.get_card(mcv.get_latest('release'),False)
  23. if mcv.get_version_type(latest_version) == 'snapshot':
  24. self.latest_snapshot = self.project.base_library.get_card(mcv.get_latest(),False)
  25. else:
  26. self.latest_snapshot = None
  27. self.respond = None
  28. @property
  29. def display_name(self):
  30. return 'api/versions/latest'
  31. def pregen_respond(self):
  32. respond = {}
  33. if self.latest_snapshot:
  34. respond['snapshot'] = self.extract_version_info(self.latest_snapshot)
  35. respond['release'] = self.extract_version_info(self.latest_release)
  36. self.respond = respond
  37. def extract_version_info(self,card):
  38. respond = {}
  39. expendedcard = self.project.template_manager.expend_card_placeholders(card,'')
  40. self.copyinfo(respond,expendedcard,'version-type')
  41. self.copyinfo(respond,expendedcard,'intro')
  42. self.copyinfo(respond,expendedcard,'version-image-link')
  43. self.copyinfo(respond,expendedcard,'server-jar')
  44. self.copyinfo(respond,expendedcard,'translator')
  45. self.copyinfo(respond,expendedcard,'official-link')
  46. self.copyinfo(respond,expendedcard,'wiki-link')
  47. self.copyinfo(respond,expendedcard,'version-id')
  48. self.copyinfo(respond,expendedcard,'title')
  49. respond['homepage-json-link'] = f"https://news.bugjump.net/VersionDetail.json?ver={expendedcard['version-id']}"
  50. return respond
  51. def copyinfo(self,respond,card,key):
  52. respond[key] = card.get(key)
  53. def generate(self, *args, **kwargs):
  54. args = get_args(kwargs)
  55. ensure_ascii = is_true(args.get('ascii',False))
  56. if not self.respond:
  57. self.pregen_respond()
  58. return json.dumps(self.respond,ensure_ascii=ensure_ascii)