0001-views-add-a-log-on-endpoint-result-60911.patch
passerelle/views.py | ||
---|---|---|
56 | 56 |
from passerelle.compat import json_loads |
57 | 57 |
from passerelle.utils.conversion import normalize |
58 | 58 |
from passerelle.utils.json import unflatten |
59 |
from passerelle.utils.jsonresponse import APIError |
|
59 |
from passerelle.utils.jsonresponse import APIError, JSONEncoder
|
|
60 | 60 |
from passerelle.utils.paginator import InfinitePaginator |
61 | 61 | |
62 | 62 |
from .forms import ResourceLogSearchForm |
... | ... | |
517 | 517 |
raise WrongParameter(missing, extra) |
518 | 518 | |
519 | 519 |
params = self.get_params(request, *args, **kwargs) |
520 |
in_cache = False |
|
520 | 521 |
if request.method == 'GET' and self.endpoint.endpoint_info.cache_duration: |
521 | 522 |
cache_key = hashlib.md5( |
522 | 523 |
force_bytes(repr(self.get_object().slug) + repr(self.endpoint) + repr(params)) |
... | ... | |
524 | 525 |
result = cache.get(cache_key) |
525 | 526 |
if result is not None: |
526 | 527 |
# filter result after caching |
528 |
in_cache = True |
|
527 | 529 |
result = self.filter_result(request, params, result) |
528 | 530 |
return result |
529 | 531 | |
... | ... | |
532 | 534 |
cache.set(cache_key, result, self.endpoint.endpoint_info.cache_duration) |
533 | 535 |
# filter result after caching |
534 | 536 |
result = self.filter_result(request, params, result) |
537 |
try: |
|
538 |
data = json.dumps(result, cls=JSONEncoder) |
|
539 |
except TypeError: |
|
540 |
data = str(result) |
|
541 |
self.connector.logger.debug( |
|
542 |
'endpoint %s %s (%r) ' % (request.method, url, payload), |
|
543 |
extra={ |
|
544 |
'request': request, |
|
545 |
'connector': connector_name, |
|
546 |
'connector_endpoint': endpoint_name, |
|
547 |
'connector_endpoint_method': request.method, |
|
548 |
'connector_endpoint_url': url, |
|
549 |
'connector_payload': payload, |
|
550 |
'connector_result': data, |
|
551 |
'connector_result_in_cache': in_cache, |
|
552 |
}, |
|
553 |
) |
|
535 | 554 |
return result |
536 | 555 | |
537 | 556 |
def filter_result(self, request, params, result): |
tests/test_generic_endpoint.py | ||
---|---|---|
132 | 132 |
assert '/arcgis/test/mapservice-query?' in log.extra['connector_endpoint_url'] |
133 | 133 | |
134 | 134 |
# Resource Generic Logger |
135 |
for record in caplog.records: |
|
136 |
if record.name != 'passerelle.resource.arcgis.test': |
|
137 |
continue |
|
138 |
assert record.levelno == 20 |
|
139 |
assert record.levelname == 'INFO' |
|
140 |
assert record.name == 'passerelle.resource.arcgis.test' |
|
141 |
assert u"endpoint GET /arcgis/test/mapservice-query?" in record.message |
|
135 |
record = caplog.records[0] |
|
136 |
assert record.levelno == 20 |
|
137 |
assert record.levelname == 'INFO' |
|
138 |
assert record.name == 'passerelle.resource.arcgis.test' |
|
139 |
assert u"endpoint GET /arcgis/test/mapservice-query?" in record.message |
|
140 |
assert not hasattr(record, 'connector_result') |
|
141 |
record = caplog.records[1] |
|
142 |
assert record.levelno == 10 |
|
143 |
assert record.levelname == 'DEBUG' |
|
144 |
assert record.name == 'passerelle.resource.arcgis.test' |
|
145 |
assert u"endpoint GET /arcgis/test/mapservice-query?" in record.message |
|
146 |
assert hasattr(record, 'connector_result') |
|
142 | 147 | |
143 | 148 |
data = resp.json['data'] |
144 | 149 |
assert data[0]['id'] == '4' |
... | ... | |
174 | 179 |
status=200, |
175 | 180 |
) |
176 | 181 | |
177 |
log1, log2 = ResourceLog.objects.filter(appname='arcgis', slug='test').all() |
|
178 |
assert log1.extra['transaction_id'] == log2.extra['transaction_id'] |
|
182 |
log1, log2, log3 = ResourceLog.objects.filter(appname='arcgis', slug='test').all()
|
|
183 |
assert log1.extra['transaction_id'] == log2.extra['transaction_id'] == log3.extra['transaction_id']
|
|
179 | 184 | |
180 | 185 | |
181 | 186 |
@mock.patch('passerelle.utils.Request.patch') |
182 |
- |