| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- """
- API相关的页面
- """
- import json
- from homepagebuilder.interfaces import page_class_handles, require
- from homepagebuilder.core.page import CodeBasedPage
- from homepagebuilder.core.types import Context
- def get_args(context):
- if setter := context.setter:
- return setter.override.get('args', {})
- return {}
- def is_true(string:str):
- return string and isinstance(string,str) and string.lower() != 'false'
-
- @page_class_handles('apis/status')
- class StatusPage(CodeBasedPage):
- @property
- def display_name(self):
- return 'api/status'
- def generate(self, *args, **kwargs):
- return 'ok'
- def get_content_type(self, setter, *args, **kwargs):
- return 'text/plain'
- mcv = require('minecraft_version') # 需求前置 MinecraftVersions
- latest_version = mcv.get_latest()
- @page_class_handles('apis/versions/latest')
- class LatestVersionAPI(CodeBasedPage):
- def __init__(self, project):
- super().__init__(project)
- self.latest_release = self.project.base_library.get_card(mcv.get_latest('release'),False)
- if latest_snap_shot_id := mcv.get_latest('snapshot'):
- self.latest_snapshot = self.project.base_library.get_card(latest_snap_shot_id,False)
- else:
- self.latest_snapshot = None
- self.respond = None
- @property
- def display_name(self):
- return 'api/versions/latest'
- def pregen_respond(self):
- respond = {}
- if self.latest_snapshot:
- respond['snapshot'] = self.extract_version_info(self.latest_snapshot)
- respond['release'] = self.extract_version_info(self.latest_release)
- self.respond = respond
-
- def extract_version_info(self,card):
- respond = {}
- context = Context.get_current_context()
- expendedcard = context.builder.template_manager.expend_card_placeholders(card,'')
- self.copyinfo(respond,expendedcard,'version-type')
- self.copyinfo(respond,expendedcard,'intro')
- self.copyinfo(respond,expendedcard,'version-image-link')
- self.copyinfo(respond,expendedcard,'server-jar')
- self.copyinfo(respond,expendedcard,'translator')
- self.copyinfo(respond,expendedcard,'official-link')
- self.copyinfo(respond,expendedcard,'wiki-link')
- self.copyinfo(respond,expendedcard,'version-id')
- self.copyinfo(respond,expendedcard,'title')
- respond['homepage-json-link'] = f"https://news.bugjump.net/VersionDetail.json?ver={expendedcard['version-id']}"
- return respond
- def copyinfo(self,respond,card,key):
- respond[key] = card.get(key)
- def generate(self, *args, **kwargs):
- context = Context.get_current_context()
- args = get_args(context)
- ensure_ascii = is_true(args.get('ascii',False))
- print(args)
- if not self.respond:
- self.pregen_respond()
- return json.dumps(self.respond,ensure_ascii=ensure_ascii)
- def get_content_type(self, setter, *args, **kwargs):
- return 'application/json'
- @page_class_handles('apis/versions/latest-card')
- class LatestVersionCardAPI(CodeBasedPage):
- def generate(self, *args, **kwargs):
- context = Context.get_current_context()
- setter = context.setter
- card = self.project.base_library.get_card('VersionLatestListCard', False)
- card = setter.decorate(card)
- return context.builder.template_manager.build(card)
- def get_content_type(self, setter, *args, **kwargs):
- return 'application/xml'
|