Set client-side connection encoding
authorKarl O. Pinc <kop@karlpinc.com>
Fri, 23 Feb 2024 20:28:39 +0000 (14:28 -0600)
committerKarl O. Pinc <kop@karlpinc.com>
Fri, 23 Feb 2024 20:28:39 +0000 (14:28 -0600)
src/pgwui_common/check_settings.py
src/pgwui_common/pgwui_common.py
tests/test_pgwui_common.py

index 2d48224f8e5e072509fe0f1ba91552da670b03b6..8330046bda5322135b1fb6ab8a4a4ee868221dcf 100644 (file)
@@ -71,6 +71,9 @@ def validate_setting_values(errors, settings):
 
     # default_db can be missing, then the user sees no default
 
+    # client_encoding can be missing, it defaults to the server encoding
+    # (in pg)
+
     # dry_run
     require_setting(errors, 'dry_run', pgwui_settings, key_to_ini)
     boolean_setting(errors, 'dry_run', pgwui_settings)
index 8ed3ec009200b9c56e5ea7a4a18edcda0e3ff96d..801326ef1e43b6b5cea0fb9c1f29ebbdbeac72ab 100644 (file)
@@ -1,4 +1,5 @@
-# Copyright (C) 2018, 2020 The Meme Factory, Inc.  http://www.karlpinc.com/
+# Copyright (C) 2018, 2020, 2024 The Meme Factory, Inc.
+# http://www.karlpinc.com/
 
 # This file is part of PGWUI_Common.
 #
@@ -24,6 +25,8 @@
 
 import pgwui_common.views.page_views
 
+DEFAULT_PGWUI_CLIENT_ENCODING = 'auto'
+
 
 def configure_page(config, pgwui_settings, page_name):
     '''Setup route and view for a file given in pgwui."page_name" setting,
@@ -42,14 +45,23 @@ def configure_page(config, pgwui_settings, page_name):
                             attr=page_name, route_name=route_name)
 
 
-def configure_pages(config):
+def configure_pages(config, pgwui_settings):
     '''Setup routes and views for "pgwui.xxxx_page" settings
     '''
-    pgwui_settings = config.get_settings()['pgwui']
     configure_page(config, pgwui_settings, 'home_page')
     configure_page(config, pgwui_settings, 'menu_page')
 
 
+def establish_settings(config):
+    '''Add defaults into settings when they are not present
+    and pre-process setting values as needed
+    '''
+    pgwui_settings = config.get_settings()['pgwui']
+    pgwui_settings.setdefault(
+        'client_encoding', DEFAULT_PGWUI_CLIENT_ENCODING)
+    configure_pages(config, pgwui_settings)
+
+
 def includeme(config):
     '''Pyramid configuration for PGWUI_Common
     '''
@@ -59,5 +71,5 @@ def includeme(config):
         'static/pgwui_common',
         'pgwui_common:static/',
         cache_max_age=3600)
-    configure_pages(config)
+    establish_settings(config)
     config.scan()
index 9ce55a2bf6b8ace466ad550c98c385a8b6b552a6..917f2f6ef7c5d9638561d1804bcf04f7ae47eed3 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2018, 2020, 2021 The Meme Factory, Inc.
+# Copyright (C) 2018, 2020, 2021, 2024 The Meme Factory, Inc.
 # http://www.karlpinc.com/
 
 # This file is part of PGWUI_Common.
@@ -109,7 +109,7 @@ def test_configure_pages(pyramid_request_config, mock_configure_page):
     '''
     pgwui = 'pgwui'
     pyramid_request_config.get_settings()['pgwui'] = pgwui
-    pgwui_common.configure_pages(pyramid_request_config)
+    pgwui_common.configure_pages(pyramid_request_config, pgwui)
 
     assert (set([call[0] for call in mock_configure_page.call_args_list])
             == set([(pyramid_request_config, pgwui, 'home_page'),
@@ -120,19 +120,50 @@ mock_configure_pages = testing.make_mock_fixture(
     pgwui_common, 'configure_pages')
 
 
+# establish_settings()
+@pytest.mark.unittest
+def test_establish_settings_check_defaults(
+        pyramid_request_config, mock_configure_pages):
+    '''Check that the defaults are set as expected
+    '''
+    pgwui = dict()
+    pyramid_request_config.get_settings()['pgwui'] = pgwui
+    pgwui_common.establish_settings(pyramid_request_config)
+
+    assert pgwui['client_encoding'] \
+        == pgwui_common.DEFAULT_PGWUI_CLIENT_ENCODING
+
+
+@pytest.mark.unittest
+def test_establish_settings_calls(
+        pyramid_request_config, mock_configure_pages):
+    '''Check that configure_pages() is called with the right args, once
+    '''
+    pgwui = dict()
+    pyramid_request_config.get_settings()['pgwui'] = pgwui
+    pgwui_common.establish_settings(pyramid_request_config)
+
+    assert ([call[0] for call in mock_configure_pages.call_args_list]
+            == [(pyramid_request_config, pgwui)])
+
+
+mock_establish_settings = testing.make_mock_fixture(
+    pgwui_common, 'establish_settings')
+
+
 # includeme()
 
 @pytest.mark.unittest
-def test_includeme_configurecalled(
-        mock_add_static_view, mock_include, mock_configure_pages):
-    '''Pyramid Configure() methods are called'''
+def test_includeme_establish_settings_called(
+        mock_add_static_view, mock_include, mock_establish_settings):
+    '''Pyramid Configure() methods and establish_settings are all called'''
     with pyramid.testing.testConfig() as config:
         mocked_include = mock_include(config)
         mocked_add_static_view = mock_add_static_view(config)
         pgwui_common.includeme(config)
         assert mocked_include.call_count == 2
         mocked_add_static_view.assert_called_once()
-    mock_configure_pages.assert_called_once()
+    mock_establish_settings.assert_called_once()
 
 
 # Integration tests