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')
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',
@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())