home · contact · privacy
Rename "condition"/"blocker" input names to plurals, like they are everywhere else.
[plomtask] / plomtask / http.py
index 7c7fbd408edeb47dd48b9a4a04f93beca085f70a..f3173668492c9badd39cc73d013a7f9229e4e8b2 100644 (file)
@@ -17,7 +17,6 @@ from plomtask.db import DatabaseConnection, DatabaseFile
 from plomtask.processes import Process, ProcessStep, ProcessStepsNode
 from plomtask.conditions import Condition
 from plomtask.todos import Todo
-from plomtask.db import BaseModel
 
 TEMPLATES_DIR = 'templates'
 
@@ -42,15 +41,25 @@ class TaskServer(HTTPServer):
     def ctx_to_json(ctx: dict[str, object]) -> str:
         """Render ctx into JSON string."""
         def walk_ctx(node: object) -> Any:
-            if isinstance(node, BaseModel):
+            if hasattr(node, 'as_dict_into_reference'):
+                if hasattr(node, 'id_') and node.id_ is not None:
+                    return node.as_dict_into_reference(library)
+            if hasattr(node, 'as_dict'):
                 return node.as_dict
             if isinstance(node, (list, tuple)):
                 return [walk_ctx(x) for x in node]
+            if isinstance(node, dict):
+                d = {}
+                for k, v in node.items():
+                    d[k] = walk_ctx(v)
+                return d
             if isinstance(node, HandledException):
                 return str(node)
             return node
+        library: dict[str, dict[str | int, object]] = {}
         for k, v in ctx.items():
             ctx[k] = walk_ctx(v)
+        ctx['_library'] = library
         return json_dumps(ctx)
 
     def render(self, ctx: dict[str, object], tmpl_name: str = '') -> str:
@@ -143,7 +152,7 @@ class TaskHandler(BaseHTTPRequestHandler):
                    tmpl_name: str,
                    code: int = 200
                    ) -> None:
-        """Send HTML as proper HTTP response."""
+        """Send ctx as proper HTTP response."""
         body = self.server.render(ctx, tmpl_name)
         self.send_response(code)
         for header_tuple in self.server.headers:
@@ -571,8 +580,8 @@ class TaskHandler(BaseHTTPRequestHandler):
         effort = self._form_data.get_str('effort', ignore_strict=True)
         todo.effort = float(effort) if effort else None
         todo.set_conditions(self.conn,
-                            self._form_data.get_all_int('condition'))
-        todo.set_blockers(self.conn, self._form_data.get_all_int('blocker'))
+                            self._form_data.get_all_int('conditions'))
+        todo.set_blockers(self.conn, self._form_data.get_all_int('blockers'))
         todo.set_enables(self.conn, self._form_data.get_all_int('enables'))
         todo.set_disables(self.conn, self._form_data.get_all_int('disables'))
         todo.is_done = len(self._form_data.get_all_str('done')) > 0
@@ -608,8 +617,9 @@ class TaskHandler(BaseHTTPRequestHandler):
         process.description.set(self._form_data.get_str('description'))
         process.effort.set(self._form_data.get_float('effort'))
         process.set_conditions(self.conn,
-                               self._form_data.get_all_int('condition'))
-        process.set_blockers(self.conn, self._form_data.get_all_int('blocker'))
+                               self._form_data.get_all_int('conditions'))
+        process.set_blockers(self.conn,
+                             self._form_data.get_all_int('blockers'))
         process.set_enables(self.conn, self._form_data.get_all_int('enables'))
         process.set_disables(self.conn,
                              self._form_data.get_all_int('disables'))