]> git.mar77i.info Git - hublib/blobdiff - hub/utils.py
big cleanup and refactoring #2: scramble master ws uri again
[hublib] / hub / utils.py
index b66fd97992c224a41e37928e5b68fc997349eb0e..3e91e239b6ad753beea77fcd90e22ab3e313cab1 100644 (file)
@@ -1,32 +1,38 @@
 from jinja2_simple_tags import StandaloneTag
 
-from .hubapp import TreeFileApp
+from .static import TreeFileApp
 
 class StaticTag(StandaloneTag):
     tags = {"static"}
 
+    @staticmethod
+    def get_hubapp(static_file, hubapp):
+        h = static_file.hubapp
+        if hubapp == "root":
+            return h.root
+        elif isinstance(hubapp, str):
+            return h.root.hubapps[hubapp]
+        elif isinstance(hubapp, TreeFileApp):
+            return hubapp
+        return static_file.hubapp
+
     def render(
         self, filename: str = "", hubapp: str | TreeFileApp | None = None
-    ):
+    ) -> str:
         """
         If filename starts with '/', interpret the path as relative to hubapp.base_dir,
         otherwise assume the path is relative to the current file.
         """
         static_file = self.context["static_file"]
-        h = static_file.hubapp
-        if isinstance(hubapp, str):
-            h = h.app.hubapps[hubapp]
-        elif isinstance(hubapp, TreeFileApp):
-            h = hubapp
-        del hubapp
-        if filename.startswith("/") or h != static_file.hubapp:
-            path = h.base_dir / filename.lstrip("/")
+        hubapp = self.get_hubapp(static_file, hubapp)
+        if filename.startswith("/") or hubapp != static_file.hubapp:
+            path = hubapp.base_dir / filename.lstrip("/")
         else:
             path = static_file.path.parent / filename
-        return h.uri(path)
+        return hubapp.uri(path)
 
 
-def get_redis_pass(redis_conf):
+def get_redis_pass(redis_conf: str) -> str:
     """
     Poor man's redis credentials: read the password from redis_conf.
     Requires redis being configured with a `requirepass` password set.