Move common exceptions into pgwui_common
authorKarl O. Pinc <kop@karlpinc.com>
Sat, 29 Aug 2020 23:29:03 +0000 (18:29 -0500)
committerKarl O. Pinc <kop@karlpinc.com>
Sat, 29 Aug 2020 23:29:03 +0000 (18:29 -0500)
src/pgwui_server/__init__.py
src/pgwui_server/exceptions.py
tests/test___init__.py

index 0c623a6518c1a8f3222ff8c70f3abbcfad19cfde..0b380b33712263eaf9d3cae1b79126e02b2c7e32 100644 (file)
@@ -27,8 +27,9 @@ from pyramid.config import Configurator
 import logging
 import sys
 
-from . import exceptions
+from . import exceptions as server_ex
 from . import constants
+from pgwui_common import exceptions as common_ex
 from pgwui_common import plugin
 
 # Constants
@@ -65,12 +66,12 @@ def abort_on_bad_setting(
                     component_checkers[component](settings.get(key, {})))
         else:
             if key[6:] not in SETTINGS:
-                errors.append(exceptions.UnknownSettingKeyError(key))
+                errors.append(common_ex.UnknownSettingKeyError(key))
 
 
 def require_setting(errors, setting, settings):
     if setting not in settings:
-        errors.append(exceptions.MissingSettingError(setting))
+        errors.append(common_ex.MissingSettingError(setting))
 
 
 def boolean_setting(errors, setting, settings):
@@ -81,7 +82,7 @@ def boolean_setting(errors, setting, settings):
             val = None
         if (val is not True
                 and val is not False):
-            errors.append(exceptions.NotBooleanSettingError(
+            errors.append(common_ex.NotBooleanSettingError(
                 setting, settings[setting]))
 
 
@@ -122,11 +123,11 @@ def validate_hmac(errors, settings):
         return
 
     if 'session.secret' not in settings:
-        errors.append(exceptions.NoHMACError())
+        errors.append(server_ex.NoHMACError())
         return
 
     if len(settings['session.secret']) != constants.HMAC_LEN:
-        errors.append(exceptions.HMACLengthError())
+        errors.append(server_ex.HMACLengthError())
         return
 
 
@@ -137,7 +138,7 @@ def validate_literal_column_headings(errors, settings):
     if value is None:
         return
     if value not in ('on', 'off', 'ask'):
-        errors.append(exceptions.BadLiteralColumnHeadingsError(value))
+        errors.append(server_ex.BadLiteralColumnHeadingsError(value))
 
 
 def parse_assignments(lines):
@@ -184,7 +185,7 @@ def exit_reporting_errors(errors):
     '''Report errors and exit
     '''
     tagged = [(logging.ERROR, error) for error in errors]
-    tagged.append((logging.CRITICAL, exceptions.BadSettingsAbort()))
+    tagged.append((logging.CRITICAL, server_ex.BadSettingsAbort()))
 
     for (level, error) in tagged:
         log.log(level, error)
@@ -221,7 +222,7 @@ def autoconfigurable_components(settings, components):
         return []
 
     if 'pyramid.include' in settings:
-        log.info(exceptions.AutoconfigureConflict())
+        log.info(server_ex.AutoconfigureConflict())
 
     return components
 
index 6b45cd9ef0b05164737e0ee2ea9b08340c197705..ef82da5b02e711f1e8e26b12c938137a7d627fd8 100644 (file)
 '''Exceptions for PGWUI_Server
 '''
 
+from pgwui_common import exceptions
 from . import constants
 
 
-class Error(Exception):
-    '''Base error class for module
-    '''
+class ServerError(exceptions.Error):
     pass
 
 
-class AutoconfigureConflict(Error):
+class AutoconfigureConflict(ServerError):
     def __init__(self):
         super().__init__(
             'Autoconfigure is True and there is a pyramid.include setting')
 
 
-class BadSettingsAbort(Error):
+class BadSettingsAbort(ServerError):
     def __init__(self):
         super().__init__('Aborting due to bad setting(s)')
 
 
-class UnknownSettingKeyError(Error):
-    def __init__(self, key):
-        super().__init__('Unknown PGWUI setting: {}'.format(key))
-
-
-class MissingSettingError(Error):
-    def __init__(self, key):
-        super().__init__('Missing PGWUI setting: {}'.format(key))
-
-
-class NotBooleanSettingError(Error):
-    def __init__(self, key, value):
-        super().__init__(
-            'The "{}" PGWUI setting must be "True" or "False"'
-            .format(key))
-
-
-class BadLiteralColumnHeadingsError(Error):
+class BadLiteralColumnHeadingsError(ServerError):
     def __init__(self, value):
         super().__init__(
             'The "pgwui.literal_column_headings" PGWUI setting must be'
             '"on", "off", "ask", or not present')
 
 
-class BadHMACError(Error):
+class BadHMACError(ServerError):
     pass
 
 
index 185bf21ab4b2f7ec7321870ea4c527932db99d66..f4cc6c139ae619bc8ceec25aca722536d8c6a65e 100644 (file)
@@ -28,12 +28,13 @@ import unittest.mock
 
 import pyramid.testing
 
+import pgwui_common.exceptions as common_ex
 import pgwui_common.plugin
 # Use as a regular module, not a plugin, so lint checks work
 from pgwui_testing import testing
 
 import pgwui_server.constants as constants
-import pgwui_server.exceptions as ex
+import pgwui_server.exceptions as server_ex
 import pgwui_server.__init__ as pgwui_server_init
 
 
@@ -93,7 +94,7 @@ def test_abort_on_bad_setting_bad():
         errors, {}, {}, 'pgwui.foo', {})
 
     assert errors
-    assert isinstance(errors[0], ex.UnknownSettingKeyError)
+    assert isinstance(errors[0], common_ex.UnknownSettingKeyError)
 
 
 def test_abort_on_bad_setting_good():
@@ -149,7 +150,7 @@ def test_require_setting_missing():
     pgwui_server_init.require_setting(errors, 'key', {})
 
     assert errors
-    assert isinstance(errors[0], ex.MissingSettingError)
+    assert isinstance(errors[0], common_ex.MissingSettingError)
 
 
 def test_require_setting_present():
@@ -196,7 +197,7 @@ def test_boolean_setting_notboolean():
     pgwui_server_init.boolean_setting(errors, 'key', {'key': '0'})
 
     assert errors
-    assert isinstance(errors[0], ex.NotBooleanSettingError)
+    assert isinstance(errors[0], common_ex.NotBooleanSettingError)
 
 
 def test_boolean_setting_notparsable():
@@ -207,7 +208,7 @@ def test_boolean_setting_notparsable():
     pgwui_server_init.boolean_setting(errors, 'key', {'key': 'a'})
 
     assert errors
-    assert isinstance(errors[0], ex.NotBooleanSettingError)
+    assert isinstance(errors[0], common_ex.NotBooleanSettingError)
 
 
 mock_boolean_setting = testing.make_mock_fixture(
@@ -282,7 +283,7 @@ def test_validate_hmac_missing(mock_do_validate_hmac):
     pgwui_server_init.validate_hmac(errors, {})
 
     assert errors
-    assert isinstance(errors[0], ex.NoHMACError)
+    assert isinstance(errors[0], server_ex.NoHMACError)
 
 
 def test_validate_hmac_length(mock_do_validate_hmac):
@@ -292,7 +293,7 @@ def test_validate_hmac_length(mock_do_validate_hmac):
     pgwui_server_init.validate_hmac(errors, {'session.secret': ''})
 
     assert errors
-    assert isinstance(errors[0], ex.HMACLengthError)
+    assert isinstance(errors[0], server_ex.HMACLengthError)
 
 
 mock_validate_hmac = testing.make_mock_fixture(
@@ -344,7 +345,7 @@ def test_validate_literal_column_headings_bad():
 
     assert errors
     assert isinstance(
-        errors[0], ex.BadLiteralColumnHeadingsError)
+        errors[0], server_ex.BadLiteralColumnHeadingsError)
 
 
 mock_validate_literal_column_headings = testing.make_mock_fixture(
@@ -661,23 +662,3 @@ def test_main(monkeypatch):
 def test_main_integrated():
     '''Does not raise errors or warnings'''
     pgwui_server_init.main({}, **TEST_SETTINGS)
-
-
-# Functional tests
-
-def test_unknownsettingkeyerror():
-    '''Takes an argument'''
-    assert isinstance(ex.UnknownSettingKeyError('key'),
-                      ex.Error)
-
-
-def test_missingsettingerror():
-    '''Takes an argument'''
-    assert isinstance(ex.MissingSettingError('key'),
-                      ex.Error)
-
-
-def test_notbooleansettingerror():
-    '''Takes two arguments'''
-    assert isinstance(ex.NotBooleanSettingError('key', 'val'),
-                      ex.Error)