From 7ac6049c0d26828cd7f5d24d6a0dae4dfa7ba760 Mon Sep 17 00:00:00 2001 From: "Karl O. Pinc" Date: Fri, 23 Feb 2024 14:28:39 -0600 Subject: [PATCH] Set client-side connection encoding --- src/pgwui_common/check_settings.py | 3 +++ src/pgwui_common/pgwui_common.py | 20 +++++++++++--- tests/test_pgwui_common.py | 43 +++++++++++++++++++++++++----- 3 files changed, 56 insertions(+), 10 deletions(-) diff --git a/src/pgwui_common/check_settings.py b/src/pgwui_common/check_settings.py index 2d48224..8330046 100644 --- a/src/pgwui_common/check_settings.py +++ b/src/pgwui_common/check_settings.py @@ -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) diff --git a/src/pgwui_common/pgwui_common.py b/src/pgwui_common/pgwui_common.py index 8ed3ec0..801326e 100644 --- a/src/pgwui_common/pgwui_common.py +++ b/src/pgwui_common/pgwui_common.py @@ -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() diff --git a/tests/test_pgwui_common.py b/tests/test_pgwui_common.py index 9ce55a2..917f2f6 100644 --- a/tests/test_pgwui_common.py +++ b/tests/test_pgwui_common.py @@ -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 -- 2.34.1