home · contact · privacy
Extend POST tests, and handling of missing form data.
[plomtask] / plomtask / http.py
index af1a60cd148ec86a83bf27bad8759a7e1cf74e6f..33961255889a2e00933e6110422ccb02e5aae88d 100644 (file)
@@ -6,7 +6,8 @@ from urllib.parse import urlparse, parse_qs
 from os.path import split as path_split
 from jinja2 import Environment as JinjaEnv, FileSystemLoader as JinjaFSLoader
 from plomtask.days import Day, todays_date
-from plomtask.exceptions import HandledException, BadFormatException
+from plomtask.exceptions import HandledException, BadFormatException, \
+        NotFoundException
 from plomtask.db import DatabaseConnection, DatabaseFile
 from plomtask.processes import Process
 
@@ -47,9 +48,11 @@ class TaskHandler(BaseHTTPRequestHandler):
                 html = self.do_GET_process(conn, id__)
             elif 'processes' == site:
                 html = self.do_GET_processes(conn)
+            elif '' == site:
+                self._redirect('/day')
+                return
             else:
-                raise HandledException('Test!')
-            conn.commit()
+                raise NotFoundException(f'Unknown page: /{site}')
             conn.close()
             self._send_html(html)
         except HandledException as error:
@@ -104,6 +107,8 @@ class TaskHandler(BaseHTTPRequestHandler):
                     date: str, postvars: dict[str, list[str]]) -> None:
         """Update or insert Day of date and fields defined in postvars."""
         day = Day.by_date(conn, date, create=True)
+        if 'comment' not in postvars.keys():
+            raise BadFormatException('missing Day.comment value')
         day.comment = postvars['comment'][0]
         day.save(conn)
 
@@ -111,6 +116,12 @@ class TaskHandler(BaseHTTPRequestHandler):
                         postvars: dict[str, list[str]]) -> None:
         """Update or insert Process of id_ and fields defined in postvars."""
         process = Process.by_id(conn, id_, create=True)
+        if 'title' not in postvars.keys():
+            raise BadFormatException('missing Process.title value')
+        if 'description' not in postvars.keys():
+            raise BadFormatException('missing Process.description value')
+        if 'effort' not in postvars.keys():
+            raise BadFormatException('missing Process.effort value')
         process.title.set(postvars['title'][0])
         process.description.set(postvars['description'][0])
         effort = postvars['effort'][0]