Add enough boilerplate to get the templates to render
authorKarl O. Pinc <kop@karlpinc.com>
Sun, 4 Aug 2024 20:38:32 +0000 (15:38 -0500)
committerKarl O. Pinc <kop@karlpinc.com>
Sun, 4 Aug 2024 20:38:32 +0000 (15:38 -0500)
src/pgwui_upcen/views/upcen.py

index 522771f666c0afbb802fc3222f7e1cac3cd9c87d..26702a08a2e2f77d4a6920f0faeb5d57f7a46e0f 100644 (file)
@@ -22,10 +22,19 @@ from pyramid.view import view_config
 import logging
 
 import pgwui_core.core
+import pgwui_core.exceptions as core_ex
 import pgwui_core.utils
 from pgwui_common.view import auth_base_view
 
+from pgwui_upload_core.views.upload import (
+    BaseTableUploadHandler,
+    UploadCoreInitialPost,
+    match_insert_to_dataline,
+    set_upload_response,
+)
+
 from pgwui_upcen import exceptions as upcen_ex
+import psycopg
 
 # Useless usage of the imported exceptions to keep `make check` from failing
 upcen_ex.ExampleOnOffAskError('42')
@@ -33,8 +42,67 @@ upcen_ex.ExampleOnOffAskError('42')
 log = logging.getLogger(__name__)
 
 
-class YOURUploadHandler(pgwui_core.core.UploadHandler):
-    pass
+class SaveLine(pgwui_core.core.DataLineProcessor,
+               pgwui_core.core.ParameterExecutor):
+    def __init__(self, ue, uh, insert_stmt):
+        '''
+        ue             UploadEngine instance
+        uh             UploadHandler instance
+        insert_stmt    Statement used to insert into db.
+                       (psycopg3 formatted for substituion)
+        '''
+        super().__init__(ue, uh)
+        self.insert_stmt = insert_stmt
+
+    def eat(self, udl):
+        '''
+        Upload a line of data into the db.
+
+        udl  An UploadDataLine instance
+        '''
+        match_insert_to_dataline(udl, self.insert_stmt)
+        self.param_execute(self.insert_stmt.stmt, udl)
+
+
+class UpCenUploadHandler(BaseTableUploadHandler):
+    '''
+    Attributes:
+      request       A pyramid request instance
+      uf            A GCUploadForm instance
+      session       A pyramid session instance
+      ue
+      cur
+    '''
+    def make_form(self):
+        '''
+        Make the upload form needed by this handler.
+        '''
+        ip = UploadCoreInitialPost()
+        ip.set_component('pgwui_upcen')
+        return pgwui_core.core.UploadDoubleTableForm().build(
+            self, ip=ip)
+
+    def factory(self, ue):
+        '''Make a db loader function from an UploadEngine.
+
+        Input:
+
+        Side Effects:
+          Assigns: self.ue, self.cur
+          And, lots of changes to the db
+        '''
+
+        super().factory(ue)
+        qualified_table = self.uf['table']
+
+        try:
+            insert_stmt = self.build_insert_stmt(
+                ue.data, qualified_table, False, lambda x: x)
+
+            return SaveLine(ue, self, insert_stmt)
+        except (core_ex.PGWUIError, psycopg.Error):
+            self.data.lineno = 0  # Don't report partially read number of lines
+            raise
 
 
 @view_config(route_name='pgwui_upcen',
@@ -42,7 +110,7 @@ class YOURUploadHandler(pgwui_core.core.UploadHandler):
 @auth_base_view
 def upcen_view(request):
 
-    response = pgwui_core.core.UploadEngine(YOURUploadHandler(request)).run()
+    response = pgwui_core.core.UploadEngine(UpCenUploadHandler(request)).run()
 
     settings = request.registry.settings
     response.setdefault('pgwui', dict())