X-Git-Url: https://plomlompom.com/repos/foo.html?a=blobdiff_plain;f=plomtask%2Fhttp.py;h=cf8a8290ab35046124fc1db6f42418af7b42aea0;hb=1a9178b2b7bb66e77f3df01a0c7b2812839637ba;hp=bb05fa9618effaf7279ffe8553f872d3d1f16e05;hpb=5ff672be7e421fbbde8132a66ebb9b734d149a69;p=plomtask
diff --git a/plomtask/http.py b/plomtask/http.py
index bb05fa9..cf8a829 100644
--- a/plomtask/http.py
+++ b/plomtask/http.py
@@ -45,6 +45,13 @@ class InputsParser:
return default
return self.inputs[key][0]
+ def get_first_strings_starting(self, prefix: str) -> dict[str, str]:
+ """Retrieve list of (first) strings at key starting with prefix."""
+ ret = {}
+ for key in [k for k in self.inputs.keys() if k.startswith(prefix)]:
+ ret[key] = self.inputs[key][0]
+ return ret
+
def get_int(self, key: str) -> int:
"""Retrieve single/first value of key as int, error if empty."""
val = self.get_int_or_none(key)
@@ -90,6 +97,7 @@ class InputsParser:
class TaskHandler(BaseHTTPRequestHandler):
"""Handles single HTTP request."""
+ # pylint: disable=too-many-public-methods
server: TaskServer
def do_GET(self) -> None:
@@ -387,6 +395,31 @@ class TaskHandler(BaseHTTPRequestHandler):
condition.save(self.conn)
return f'/todo?id={todo.id_}'
+ def _do_POST_versioned_timestamps(self, cls: Any, attr_name: str) -> str:
+ """Update history timestamps for VersionedAttribute."""
+ id_ = self.params.get_int_or_none('id')
+ item = cls.by_id(self.conn, id_)
+ attr = getattr(item, attr_name)
+ for k, v in self.form_data.get_first_strings_starting('at:').items():
+ old = k[3:]
+ if old[19:] != v:
+ attr.reset_timestamp(old, f'{v}.0')
+ attr.save(self.conn)
+ cls_name = cls.__name__.lower()
+ return f'/{cls_name}_{attr_name}s?id={item.id_}'
+
+ def do_POST_process_descriptions(self) -> str:
+ """Update history timestamps for Process.description."""
+ return self._do_POST_versioned_timestamps(Process, 'description')
+
+ def do_POST_process_efforts(self) -> str:
+ """Update history timestamps for Process.effort."""
+ return self._do_POST_versioned_timestamps(Process, 'effort')
+
+ def do_POST_process_titles(self) -> str:
+ """Update history timestamps for Process.title."""
+ return self._do_POST_versioned_timestamps(Process, 'title')
+
def do_POST_process(self) -> str:
"""Update or insert Process of ?id= and fields defined in postvars."""
# pylint: disable=too-many-branches
@@ -455,6 +488,14 @@ class TaskHandler(BaseHTTPRequestHandler):
params = f'has_step={process.id_}&title_b64={title_b64_encoded}'
return f'/process?{params}'
+ def do_POST_condition_descriptions(self) -> str:
+ """Update history timestamps for Condition.description."""
+ return self._do_POST_versioned_timestamps(Condition, 'description')
+
+ def do_POST_condition_titles(self) -> str:
+ """Update history timestamps for Condition.title."""
+ return self._do_POST_versioned_timestamps(Condition, 'title')
+
def do_POST_condition(self) -> str:
"""Update/insert Condition of ?id= and fields defined in postvars."""
id_ = self.params.get_int_or_none('id')