'''
import logging
+import pyramid.exceptions
+
+from . import exceptions as ex
# Logging
log = logging.getLogger(__name__)
def override_assets(config, settings):
pgwui = settings['pgwui']
if 'override_assets' not in pgwui:
- return
+ return []
+ errors = []
for asset, replacement in pgwui['override_assets'].items():
- config.override_asset(asset, replacement)
- log.debug(f'Overriding asset ({asset}) with ({replacement})')
+ try:
+ config.override_asset(asset, replacement)
+ except (pyramid.exceptions.ConfigurationError,
+ ModuleNotFoundError) as exp:
+ errors.append(ex.BadAssetOverrideError(asset, replacement, exp))
+ else:
+ log.debug(f'Overriding asset ({asset}) with ({replacement})')
+
+ return errors
.format(key))
+class BadAssetOverrideError(Error):
+ def __init__(self, asset, new_asset, exp):
+ super().__init__(
+ f'The asset ({asset}) cannot be overridden with ({new_asset}):'
+ f' {exp}')
+
+
+class BadSettingError(Error):
+ def __init__(self, exp):
+ super().__init__(
+ f'Bad settings caused an error: {exp}'
+ '\nHint: Overriding non-existant assets can cause this problem')
+
+
class BadPathError(Error):
pass
import pytest
import logging
+import pyramid.exceptions
import pgwui_common.assets as assets
+import pgwui_common.exceptions as common_ex
from pgwui_testing import testing
mock_override_asset = testing.instance_method_mock_fixture('override_asset')
-# override_asset()
+# override_assets()
@pytest.mark.parametrize(
('overrides', 'call_count'), [
({'some_asset': 'new_asset'}, 1),
({'some_asset': 'new_asset',
'other_asset': 'other new asset'}, 2)])
-def test_override_asset(
+def test_override_assets_success(
caplog, pyramid_config, mock_override_asset, overrides, call_count):
- '''override_asset() is called for each override
+ '''override_asset() is called and a debug message logged
+ for each good override
'''
caplog.set_level(logging.DEBUG)
mocked_override_asset = mock_override_asset(pyramid_config)
settings = {'override_assets': overrides}
else:
settings = {}
- assets.override_assets(pyramid_config, {'pgwui': settings})
+ result = assets.override_assets(pyramid_config, {'pgwui': settings})
+ assert result == []
assert mocked_override_asset.call_count == call_count
assert len(caplog.record_tuples) == call_count
+
+
+@pytest.mark.parametrize(
+ ('exception'), [
+ (pyramid.exceptions.ConfigurationError,),
+ (ModuleNotFoundError,)])
+def test_override_assets_failure(
+ caplog, pyramid_config, mock_override_asset, exception):
+ '''There is no logging when the override_asset call fails,
+ but an error is returned
+ '''
+ caplog.set_level(logging.DEBUG)
+ mocked_override_asset = mock_override_asset(pyramid_config)
+ mocked_override_asset.side_effect = exception
+
+ result = assets.override_assets(pyramid_config,
+ {'pgwui':
+ {'override_assets':
+ {'asset': 'new'}}})
+ assert len(result) == 1
+ assert isinstance(result[0], common_ex.BadAssetOverrideError)
+
+ logs = caplog.record_tuples
+ assert len(logs) == 0