home
·
contact
·
privacy
projects
/
plomtask
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Refactor .as_dict integration of Process.explicit_steps, Day.todos.
[plomtask]
/
plomtask
/
http.py
diff --git
a/plomtask/http.py
b/plomtask/http.py
index be791599ff21868fc82ed7080dfefe6b1130e3fd..f3173668492c9badd39cc73d013a7f9229e4e8b2 100644
(file)
--- a/
plomtask/http.py
+++ b/
plomtask/http.py
@@
-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.processes import Process, ProcessStep, ProcessStepsNode
from plomtask.conditions import Condition
from plomtask.todos import Todo
-from plomtask.db import BaseModel
TEMPLATES_DIR = 'templates'
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:
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]
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
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)
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:
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:
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:
body = self.server.render(ctx, tmpl_name)
self.send_response(code)
for header_tuple in self.server.headers:
@@
-335,7
+344,8
@@
class TaskHandler(BaseHTTPRequestHandler):
adoptables: dict[int, list[Todo]] = {}
any_adoptables = [Todo.by_id(self.conn, t.id_)
for t in Todo.by_date(self.conn, todo.date)
adoptables: dict[int, list[Todo]] = {}
any_adoptables = [Todo.by_id(self.conn, t.id_)
for t in Todo.by_date(self.conn, todo.date)
- if t != todo]
+ if t.id_ is not None
+ and t != todo]
for id_ in collect_adoptables_keys(steps_todo_to_process):
adoptables[id_] = [t for t in any_adoptables
if t.process.id_ == id_]
for id_ in collect_adoptables_keys(steps_todo_to_process):
adoptables[id_] = [t for t in any_adoptables
if t.process.id_ == id_]
@@
-410,13
+420,13
@@
class TaskHandler(BaseHTTPRequestHandler):
def do_GET_condition_titles(self) -> dict[str, object]:
"""Show title history of Condition of ?id=."""
def do_GET_condition_titles(self) -> dict[str, object]:
"""Show title history of Condition of ?id=."""
- id_ = self._params.get_int
_or_none
('id')
+ id_ = self._params.get_int('id')
condition = Condition.by_id(self.conn, id_)
return {'condition': condition}
def do_GET_condition_descriptions(self) -> dict[str, object]:
"""Show description historys of Condition of ?id=."""
condition = Condition.by_id(self.conn, id_)
return {'condition': condition}
def do_GET_condition_descriptions(self) -> dict[str, object]:
"""Show description historys of Condition of ?id=."""
- id_ = self._params.get_int
_or_none
('id')
+ id_ = self._params.get_int('id')
condition = Condition.by_id(self.conn, id_)
return {'condition': condition}
condition = Condition.by_id(self.conn, id_)
return {'condition': condition}
@@
-443,19
+453,19
@@
class TaskHandler(BaseHTTPRequestHandler):
def do_GET_process_titles(self) -> dict[str, object]:
"""Show title history of Process of ?id=."""
def do_GET_process_titles(self) -> dict[str, object]:
"""Show title history of Process of ?id=."""
- id_ = self._params.get_int
_or_none
('id')
+ id_ = self._params.get_int('id')
process = Process.by_id(self.conn, id_)
return {'process': process}
def do_GET_process_descriptions(self) -> dict[str, object]:
"""Show description historys of Process of ?id=."""
process = Process.by_id(self.conn, id_)
return {'process': process}
def do_GET_process_descriptions(self) -> dict[str, object]:
"""Show description historys of Process of ?id=."""
- id_ = self._params.get_int
_or_none
('id')
+ id_ = self._params.get_int('id')
process = Process.by_id(self.conn, id_)
return {'process': process}
def do_GET_process_efforts(self) -> dict[str, object]:
"""Show default effort history of Process of ?id=."""
process = Process.by_id(self.conn, id_)
return {'process': process}
def do_GET_process_efforts(self) -> dict[str, object]:
"""Show default effort history of Process of ?id=."""
- id_ = self._params.get_int
_or_none
('id')
+ id_ = self._params.get_int('id')
process = Process.by_id(self.conn, id_)
return {'process': process}
process = Process.by_id(self.conn, id_)
return {'process': process}
@@
-570,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,
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('condition
s
'))
+ todo.set_blockers(self.conn, self._form_data.get_all_int('blocker
s
'))
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
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
@@
-597,6
+607,8
@@
class TaskHandler(BaseHTTPRequestHandler):
# pylint: disable=too-many-branches
id_ = self._params.get_int_or_none('id')
for _ in self._form_data.get_all_str('delete'):
# pylint: disable=too-many-branches
id_ = self._params.get_int_or_none('id')
for _ in self._form_data.get_all_str('delete'):
+ if id_ is None:
+ raise NotFoundException('trying to delete non-saved Process')
process = Process.by_id(self.conn, id_)
process.remove(self.conn)
return '/processes'
process = Process.by_id(self.conn, id_)
process.remove(self.conn)
return '/processes'
@@
-605,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,
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'))
process.set_enables(self.conn, self._form_data.get_all_int('enables'))
process.set_disables(self.conn,
self._form_data.get_all_int('disables'))
@@
-673,7
+686,9
@@
class TaskHandler(BaseHTTPRequestHandler):
"""Update/insert Condition of ?id= and fields defined in postvars."""
id_ = self._params.get_int_or_none('id')
for _ in self._form_data.get_all_str('delete'):
"""Update/insert Condition of ?id= and fields defined in postvars."""
id_ = self._params.get_int_or_none('id')
for _ in self._form_data.get_all_str('delete'):
- condition = Condition.by_id(self.conn, id_)
+ if id_ is None:
+ raise NotFoundException('trying to delete non-saved Condition')
+ condition = Condition.by_id_or_create(self.conn, id_)
condition.remove(self.conn)
return '/conditions'
condition = Condition.by_id_or_create(self.conn, id_)
condition.remove(self.conn)
return '/conditions'
condition = Condition.by_id_or_create(self.conn, id_)