Bladeren bron

api/versions/latest

Light Beacon 2 jaren geleden
bovenliggende
commit
5880fc9a8f
1 gewijzigde bestanden met toevoegingen van 62 en 2 verwijderingen
  1. 62 2
      Modules/APIs.py

+ 62 - 2
Modules/APIs.py

@@ -1,5 +1,14 @@
-from Interfaces import page_class_handles, PageBase
+from Interfaces import page_class_handles, PageBase, require, format_code
+import json
 
+def get_args(kwargs):
+    if setter := kwargs.get('setter'):
+        return setter.override
+    return {}
+
+def is_true(string:str):
+    return string and isinstance(string,str) and string.lower() != 'false'
+    
 @page_class_handles('apis/status')
 class StatusPage(PageBase):
 
@@ -8,4 +17,55 @@ class StatusPage(PageBase):
         return 'api/status'
     
     def generate(self, *args, **kwargs):
-        return 'ok'
+        return 'ok'
+
+mcv = require('MinecraftVersions') # 需求前置 MinecraftVersions
+latest_version = mcv.get_latest()
+
+@page_class_handles('apis/versions/latest')
+class LatestVersionAPI(PageBase):
+
+    def __init__(self, project):
+        super().__init__(project)
+        self.latest_release = self.project.base_library.get_card(mcv.get_latest('release'),False)
+        if mcv.get_version_type(latest_version) == 'snapshot':
+            self.latest_snapshot = self.project.base_library.get_card(mcv.get_latest(),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 = {}
+        expendedcard = self.project.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):
+        args = get_args(kwargs)
+        ensure_ascii = is_true(args.get('ascii',False))
+        if not self.respond:
+            self.pregen_respond()
+        return json.dumps(self.respond,ensure_ascii=ensure_ascii)