Skip to content

Commit 6713f8f

Browse files
committed
log transform exceptions to configured logger in webapp.py; use ConfigError instead of ResolverException in some cases
1 parent 898d87e commit 6713f8f

File tree

5 files changed

+19
-36
lines changed

5 files changed

+19
-36
lines changed

loris/resolver.py

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,6 @@ def __init__(self, config):
123123

124124
def raise_404_for_ident(self, ident):
125125
message = 'Source image not found for identifier: %s.' % (ident,)
126-
logger.warn(message)
127126
raise ResolverException(message)
128127

129128
def source_file_path(self, ident):
@@ -211,15 +210,13 @@ def __init__(self, config):
211210
if 'cache_root' in self.config:
212211
self.cache_root = self.config['cache_root']
213212
else:
214-
message = 'Server Side Error: Configuration incomplete and cannot resolve. Missing setting for cache_root.'
215-
logger.error(message)
216-
raise ResolverException(message)
213+
message = 'Configuration incomplete and cannot resolve. Missing setting for cache_root.'
214+
raise ConfigError(message)
217215

218216
if not self.uri_resolvable and self.source_prefix == '':
219-
message = 'Server Side Error: Configuration incomplete and cannot resolve. Must either set uri_resolvable' \
217+
message = 'Configuration incomplete and cannot resolve. Must either set uri_resolvable' \
220218
' or source_prefix settings.'
221-
logger.error(message)
222-
raise ResolverException(message)
219+
raise ConfigError(message)
223220

224221
def request_options(self):
225222
# parameters to pass to all head and get requests;
@@ -458,7 +455,6 @@ def _web_request_url(self, ident):
458455
# only split identifiers that look like template ids;
459456
# ignore other requests (e.g. favicon)
460457
if ':' not in ident:
461-
logger.warn('Bad URL request for identifier: %r.', ident)
462458
raise ResolverException(
463459
"Bad URL request made for identifier: %r." % ident
464460
)

loris/transforms.py

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,12 @@ def _validate_color_profile_conversion_config(config):
4747

4848

4949
class _AbstractTransformer(object):
50+
5051
def __init__(self, config):
5152
_validate_color_profile_conversion_config(config)
5253
self.config = config
5354
self.target_formats = config['target_formats']
5455
self.dither_bitonal_images = config['dither_bitonal_images']
55-
logger.debug('Initialized %s.%s', __name__, self.__class__.__name__)
5656

5757
def transform(self, target_fp, image_request, image_info):
5858
'''
@@ -216,22 +216,11 @@ class PNG_Transformer(_PillowTransformer):
216216
class _AbstractJP2Transformer(_AbstractTransformer):
217217
'''
218218
Shared methods and configuration for the Kakadu and OpenJPEG transformers.
219-
220-
Exits if OSError is raised during init.
221219
'''
222220
def __init__(self, config):
223221
self.tmp_dp = config['tmp_dp']
224-
225-
try:
226-
os.makedirs(self.tmp_dp, exist_ok=True)
227-
except OSError as ose:
228-
# Almost certainly a permissions error on one of the required dirs
229-
from sys import exit
230-
from os import strerror
231-
logger.fatal('%s (%s)', strerror(ose.errno), ose.filename)
232-
logger.fatal('Exiting')
233-
exit(77)
234-
222+
#if there's an error making the dirs, just let it propagate up
223+
os.makedirs(self.tmp_dp, exist_ok=True)
235224
super().__init__(config)
236225
self.transform_timeout = config.get('timeout', 120)
237226

@@ -330,8 +319,7 @@ def transform(self, target_fp, image_request, image_info):
330319
try:
331320
self._process(opj_cmd, target_fp, image_request, image_info, tmp_img_fp)
332321
except Exception as e:
333-
logger.error(f'openjpeg transform error: {e}')
334-
raise TransformException('error generating derivative image: see log')
322+
raise TransformException(f'openjpeg transform error: {e}')
335323

336324

337325
class KakaduJP2Transformer(_AbstractJP2Transformer):
@@ -391,5 +379,4 @@ def transform(self, target_fp, image_request, image_info):
391379
try:
392380
self._process(kdu_cmd, target_fp, image_request, image_info, tmp_img_fp)
393381
except Exception as e:
394-
logger.error(f'kakadu transform error: {e}')
395-
raise TransformException('error generating derivative image: see log')
382+
raise TransformException(f'kakadu transform error: {e}')

loris/webapp.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -701,7 +701,8 @@ def get_img(self, request, ident, region, size, rotation, quality, target_fmt, b
701701
)
702702

703703
except TransformException as te:
704-
return ServerSideErrorResponse(te)
704+
self.logger.error(f'{ident} transform exception: {te}')
705+
return ServerSideErrorResponse('error generating derivative image: see log')
705706
except (RequestException, SyntaxException) as e:
706707
return BadRequestResponse(str(e))
707708
except (CalledProcessError,IOError) as e:

tests/resolver_t.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
import pytest
1414
import responses
1515

16-
from loris.loris_exception import ResolverException
16+
from loris.loris_exception import ResolverException, ConfigError
1717
from loris.resolver import (
1818
_AbstractResolver,
1919
SimpleHTTPResolver,
@@ -233,15 +233,14 @@ def test_simple_http_resolver(self):
233233
self._mock_urls()
234234

235235
# First we test with no config...
236-
config = {
237-
}
238-
self.assertRaises(ResolverException, lambda: SimpleHTTPResolver(config))
236+
config = {}
237+
self.assertRaises(ConfigError, lambda: SimpleHTTPResolver(config))
239238

240239
# Then we test missing source_prefix and uri_resolvable
241240
config = {
242241
'cache_root' : self.SRC_IMAGE_CACHE
243242
}
244-
self.assertRaises(ResolverException, lambda: SimpleHTTPResolver(config))
243+
self.assertRaises(ConfigError, lambda: SimpleHTTPResolver(config))
245244

246245
# Then we test with the full config...
247246
#TODO: More granular testing of these settings...
@@ -537,7 +536,7 @@ class Test_TemplateHTTPResolver(object):
537536
}
538537

539538
def test_template_http_resolver_with_no_config_is_error(self):
540-
with pytest.raises(ResolverException):
539+
with pytest.raises(ConfigError):
541540
TemplateHTTPResolver({})
542541

543542
def test_allow_no_template_config(self):

tests/simple_http_resolver_ut.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import responses
66

77
from loris.resolver import SimpleHTTPResolver
8-
from loris.loris_exception import ResolverException
8+
from loris.loris_exception import ResolverException, ConfigError
99

1010

1111
class SimpleHTTPResolverTest(unittest.TestCase):
@@ -151,7 +151,7 @@ def setUp(self):
151151
def test_no_config(self):
152152
config = {}
153153
self.assertRaises(
154-
ResolverException,
154+
ConfigError,
155155
lambda: SimpleHTTPResolver(config)
156156
)
157157

@@ -160,7 +160,7 @@ def test_missing_required_config(self):
160160
'cache_root': self.cache_dir
161161
}
162162
self.assertRaises(
163-
ResolverException,
163+
ConfigError,
164164
lambda: SimpleHTTPResolver(config)
165165
)
166166

0 commit comments

Comments
 (0)