Nattiden преди 5 месеца
родител
ревизия
d2cbbe00c0
променени са 3 файла, в които са добавени 41 реда и са изтрити 17 реда
  1. 16 5
      Project/modules/apis_v1.py
  2. 20 9
      Project/modules/debug.py
  3. 5 3
      Project/modules/minecraft_versions.py

+ 16 - 5
Project/modules/apis_v1.py

@@ -7,13 +7,17 @@ import json
 from homepagebuilder.interfaces import require
 from homepagebuilder.interfaces.Events import on
 from homepagebuilder.core.types import Context
+from homepagebuilder.core.logger import Logger
 from typing import NamedTuple
+import time
 
 mcv = require('minecraft_versions')  # 需求前置 MinecraftVersions
 MCVM = mcv.MCVM
 
 rest_apis_routes = []
 
+logger = Logger('API')
+
 # region API Routes
 
 def api(path, version=None, methods=None):
@@ -29,10 +33,18 @@ def api(path, version=None, methods=None):
                           api_object.generate, methods))
     return deco
 
-@on('server.setup_routes.return')
-def set_up_routes(server, *_, **__):
+@on('project.import.return')
+def set_up_routes(*_, **__):
+    app = Context.get_current_context().flask_app
+    if not app:
+        return
+    exist_endpoints = app.view_functions.keys()
     for route in rest_apis_routes:
-        server.app.add_url_rule('/api' + route[0], route[1], route[2], methods=route[3])
+        if route[1] in exist_endpoints:
+            app.view_functions[route[1]] = route[2]
+        else:
+            app.add_url_rule('/api' + route[0], route[1], route[2], methods=route[3])
+    logger.debug('routes setuped')
 
 # endregion
 
@@ -164,6 +176,7 @@ class LatestVersionAPI(RESTAPI):
         if self.latest_developing:
             respond['snapshot'] = self.extract_version_info(self.latest_developing)
         respond['release'] = self.extract_version_info(self.latest_release)
+        respond['cache-time'] = time.time()
         self.respond = respond
 
     def extract_version_info(self, card):
@@ -236,8 +249,6 @@ class MCVersionListAPI(RESTAPI):
             self._cache = self.get_list()
         return self._cache
 
-
-
 @api('/<path:path>')
 class DefaultNotFoundAPI(RESTAPI):
     def process(self, **_):

+ 20 - 9
Project/modules/debug.py

@@ -1,5 +1,7 @@
-from homepagebuilder.interfaces import script, config, enable_by
+from homepagebuilder.interfaces import script, config
+from homepagebuilder.core.config import is_debugging
 from homepagebuilder.core.utils.event import listen_event as on, ResultOverride
+from homepagebuilder.core.types.context import Context
 
 
 DEBUG_MODE = config('NewsHomepage.Debug', False, bool)
@@ -8,11 +10,20 @@ DEBUG_MODE = config('NewsHomepage.Debug', False, bool)
 def is_debug():
     return DEBUG_MODE
 
-@on('server.get.page.start')
-@enable_by(DEBUG_MODE)
-def test_reload(api, alias, client, args):
-    if alias != 'reload':
-        return
-    api.reload_project()
-    raise ResultOverride({'response':'Success.',
-                          'content-type':'text/plain'})
+@on('server.setup_routes.return')
+def set_up_routes(server, *_, **__):
+    server.app.add_url_rule('/reload', "reload", reload_project, ['GET'])
+
+def reload_project():
+    if not is_debugging():
+        return "Not in debug mode", 403
+    context = Context.get_current_context()
+    if not hasattr(context, "server_api"):
+        return "Outdated builder version", 400
+    if not context.server_api:
+        return "Not run in server mode", 400
+    try:
+        context.server_api.reload_project()
+        return "Success", 200
+    except Exception as ex:
+        return "Failed", 500

+ 5 - 3
Project/modules/minecraft_versions.py

@@ -27,10 +27,9 @@ LAUNCHER_MANIFEST_URL = 'https://piston-meta.mojang.com/mc/game/version_manifest
 # region 官网更新日志重载词典
 OFFICIAL_CHANGE_LOG_OVERRIDE_LINKS: dict[str, str] = {}
 
-
 @on('project.import.return')
 def setup_official_changelog_override_links(*_, **__) -> None:
-    global OFFICIAL_CHANGE_LOG_OVERRIDE_LINKS
+    global OFFICIAL_CHANGE_LOG_OVERRIDE_LINKS, MCVM
     OFFICIAL_CHANGE_LOG_OVERRIDE_LINKS = Context.get_current_context().data.get('OfficialLink')
 # endregion
 
@@ -139,7 +138,7 @@ class MinecraftVersionManager:
     __version_ids: list[str] = []
 
     def __init__(self):
-        self.__manifest = self.fetch_manifest()
+        self.refresh_manifest()
         self.__latest_development_version_id = self.__manifest['latest']['snapshot']
         self.__latest_release_version_id = self.__manifest['latest']['release']
         self.__manifest_versions = self.__manifest.get('versions', [])
@@ -204,6 +203,9 @@ class MinecraftVersionManager:
             latest_development_versions.append(version)
         return latest_development_versions
 
+    def refresh_manifest(self):
+        self.__manifest = self.fetch_manifest()
+
     @classmethod
     def fetch_manifest(cls) -> MinecraftManifest:
         logger.info("正在加载 MC 版本列表")