Add a "trim" setting to control trim of whitespace in data
authorKarl O. Pinc <kop@karlpinc.com>
Sat, 23 Jan 2021 01:31:23 +0000 (19:31 -0600)
committerKarl O. Pinc <kop@karlpinc.com>
Sat, 23 Jan 2021 19:01:58 +0000 (13:01 -0600)
src/pgwui_bulk_upload/check_settings.py
src/pgwui_bulk_upload/pgwui_bulk_upload.py
src/pgwui_bulk_upload/templates/bulk_upload.mak
src/pgwui_bulk_upload/views/bulk_upload.py
tests/test_check_settings.py
tests/views/test_bulk_upload.py

index b3e3c8e6d7e4aa87e8967b145375a2c05b76255f..0b54e9ef76c6d7acb84c9cb14020d9601341b596 100644 (file)
@@ -42,6 +42,7 @@ def check_settings(component_config):
         PGWUI_COMPONENT, all_setngs,
         pgwui_upload_core.check_settings.REQUIRED_SETTINGS,
         pgwui_upload_core.check_settings.BOOLEAN_SETTINGS,
+        pgwui_upload_core.check_settings.BOOLEAN_CHOICE_SETTINGS,
         component_config))
 
     return errors
index 9600e2a45728d9b7e55fd1876f6ed23a029f3406..4dc3862c6de0bfac7ba80be016b2c7993e441658 100644 (file)
@@ -26,6 +26,8 @@ DEFAULT_BULK_UPLOAD_ROUTE = '/bulk_upload'
 DEFAULT_BULK_UPLOAD_MENU_LABEL = (
     'bulk_upload -- Upload Many Files Into PostgreSQL')
 DEFAULT_MAP_FILE = 'contents.yml'
+DEFAULT_LITERAL_COLUMN_HEADINGS = 'off'
+DEFAULT_TRIM = 'choice-yes'
 
 
 def establish_default_settings(config):
@@ -40,6 +42,10 @@ def establish_default_settings(config):
         'menu_label', DEFAULT_BULK_UPLOAD_MENU_LABEL)
     bulk_upload_settings.setdefault(
         'map_file', DEFAULT_MAP_FILE)
+    bulk_upload_settings.setdefault(
+        'literal_column_headings', DEFAULT_LITERAL_COLUMN_HEADINGS)
+    bulk_upload_settings.setdefault(
+        'trim', DEFAULT_TRIM)
 
 
 def includeme(config):
index b726ed9addb59203a895097303b0492a7536323d..f3d3dc0c3edc2fd2c45baf851143b6c1df8aeb42 100644 (file)
@@ -37,7 +37,7 @@
 
 <%inherit file="${upload_base_mak}" />
 
-<%block name="title">${pgwui['pgwui_bulk_upload']['menu_label']}</%block>
+<%block name="title">${pgwui['upload_settings']['menu_label']}</%block>
 <%block name="meta_keywords">
   <meta name="keywords"
         content="PGWUI bulk_upload" />
index 5c538981db76507a0a93fc43b7d8a5af74bd5b23..015891629c83434d903dfdc4d80cb736d2cacd70 100644 (file)
@@ -35,6 +35,7 @@ from pgwui_common.view import auth_base_view
 import pgwui_core.exceptions as core_ex
 
 from pgwui_core.core import (
+    UploadNullFileInitialPost,
     UploadNullFileWTForm,
     UploadEngine,
     ParameterExecutor,
@@ -47,6 +48,7 @@ from pgwui_core.core import (
 )
 from pgwui_upload_core.views.upload import (
     BaseTableUploadHandler,
+    set_upload_response,
 )
 
 import pgwui_bulk_upload.exceptions as ex
@@ -65,6 +67,27 @@ def archive_path(path):
     return os.path.join(*[os.fsdecode(part) for part in path.parts[-2:]])
 
 
+@attr.s
+class BulkUploadInitialPost(UploadNullFileInitialPost):
+    '''Get values from settings for when there's not user-supplied
+    values in POST
+    '''
+    def build(self, settings={}):
+        super().build(settings)
+        bulk_settings = settings['pgwui']['pgwui_bulk_upload']
+        self.trim_upload = (
+            bulk_settings['trim'] == 'choice-yes')
+        self.literal_col_headings = (
+            bulk_settings['literal_column_headings'] == 'yes')
+        return self
+
+
+class BulkUploadFileWTForm(UploadNullFileWTForm):
+    '''Use the appropriate initial values when there's no POST data
+    '''
+    ivals = BulkUploadInitialPost
+
+
 class BulkUploadForm(UploadNullMixin, UploadDoubleFileForm):
     '''
     Acts like a dict, but with extra methods.
@@ -442,7 +465,7 @@ class BulkTableUploadHandler(BaseTableUploadHandler):
         '''
         Make the upload form needed by this handler.
         '''
-        return BulkUploadForm(self, fc=UploadNullFileWTForm)
+        return BulkUploadForm(self, fc=BulkUploadFileWTForm)
 
     def get_data(self):
         '''
@@ -683,9 +706,6 @@ def bulk_upload_view(request):
     uh = BulkTableUploadHandler(request).init()
     response = UploadEngine(uh).run()
 
-    settings = request.registry.settings
-    response.setdefault('pgwui', dict())
-    response['pgwui']['pgwui_bulk_upload'] = (
-        settings['pgwui']['pgwui_bulk_upload'])
+    set_upload_response('pgwui_bulk_upload', request, response)
 
     return analyze_results(uh, response)
index c1e5ebb5a53ed128847478ccd655d0ab040d1199..d03836a3bf988c492a78ed74fa3a916152f41ae0 100644 (file)
@@ -65,6 +65,5 @@ def test_check_settings(mock_core_check_settings):
 
     call_args = mock_core_check_settings.call_args[0]
     assert 'map_file' in call_args[1]    # 'map_file' is a setting
-    assert 'map_file' in call_args[2]    # 'map_file' is required
 
     assert result == expected_errors
index d6c7ad2650fbdc22df9ad81169d541ed38d2b239..d51576ffec384b104ab1ac7f42ed4b3ee59ccb63 100644 (file)
@@ -227,7 +227,7 @@ def test_bulk_upload_view(isolate_bulk_upload_view):
     result = bulk_upload.bulk_upload_view(request)
 
     bulk_settings = request.registry.settings['pgwui']['pgwui_bulk_upload']
-    assert result['pgwui']['pgwui_bulk_upload'] == bulk_settings
+    assert result['pgwui']['upload_settings'] == bulk_settings
 
     del result['pgwui']  # Remove variables added by pgwui view decorators
     assert result == response