Skip to content

Commit 3e15ce1

Browse files
authored
Issue in Django context builder for non-masking (#7)
1 parent d0843d3 commit 3e15ce1

5 files changed

Lines changed: 64 additions & 35 deletions

File tree

README.rst

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,19 @@ Error Tracker
44

55
**Full featured error tracking module for Python apps supports Flask and Django**
66

7+
.. image:: https://img.shields.io/pypi/v/error-tracker.svg?color=dark-green
8+
:target: https://pypi.org/project/error-tracker
9+
10+
.. image:: https://img.shields.io/pypi/pyversions/error-tracker.svg?color=dark-green
11+
:target: https://pypi.org/project/error-tracker
12+
13+
.. image:: https://img.shields.io/github/license/sonus21/error-tracker.svg?color=dark-green
14+
:target: https://github.com/sonus21/error-tracker/blob/master/LICENSE.txt
15+
716
.. image:: https://travis-ci.org/sonus21/error-tracker.svg?branch=master
817
:target: https://travis-ci.org/sonus21/error-tracker
918

10-
.. image:: https://coveralls.io/repos/github/sonus21/error-tracker/badge.svg
19+
.. image:: https://coveralls.io/repos/github/sonus21/error-tracker/badge.svg?color=dark-green
1120
:target: https://coveralls.io/github/sonus21/error-tracker
1221

1322
Introduction

docs/source/index.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ We need to update settings.py file as
145145
.. [1] This should be added at the end so that it can process exception 1st in the middleware call stack.
146146
147147
.. note::
148-
Exception listing page is only enable for admin by default.
148+
Exception listing page is only enable for super users by default.
149149
You can enable for others by providing a custom implementation of ViewPermissionMixin.
150150
This class must return True/False based on the current request, False means not authorized, True means authorized.
151151

@@ -155,7 +155,7 @@ We need to update settings.py file as
155155
APP_ERROR_RECIPIENT_EMAIL = ('example@example.com',)
156156
APP_ERROR_SUBJECT_PREFIX = "Server Error"
157157
APP_ERROR_EMAIL_SENDER = 'user@example.com'
158-
# optional setting otherwise it's enabled for admin only
158+
# optional setting otherwise it's enabled for super users only
159159
APP_ERROR_VIEW_PERMISSION = 'permission.ErrorViewPermission'
160160
161161
INSTALLED_APPS = [

error_tracker/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
# :license: BSD-3-Clause
77
#
88

9-
__version__ = '1.1.3'
9+
__version__ = '1.1.5'
1010
__author__ = 'Sonu Kumar'
1111
__email__ = 'sonunitw12@gmail.com'
1212

error_tracker/django/utils.py

Lines changed: 25 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,20 @@
1111
from django.http import RawPostDataException
1212

1313
from error_tracker.libs.mixins import ContextBuilderMixin, NotificationMixin, ViewPermissionMixin
14+
from error_tracker.libs.utils import get_context_dict
1415
from django.core.mail import send_mail
1516

1617

17-
# noinspection PyMethodMayBeStatic
1818
class DefaultDjangoContextBuilder(ContextBuilderMixin):
1919
"""
2020
Default request builder, this records, form data, header and URL parameters and mask them if necessary
2121
"""
2222

23-
def _get_form_data(self, request):
23+
@staticmethod
24+
def _get_form_data(request):
2425
form = {}
26+
if request is None:
27+
return form
2528
post = request.POST
2629
if post is None or len(post) == 0:
2730
body = None
@@ -46,37 +49,28 @@ def _get_form_data(self, request):
4649
form = post.dict()
4750
return form
4851

49-
def _get_headers(self, request):
50-
try:
51-
headers = request.headers.dict()
52-
except AttributeError:
53-
regex = re.compile('^HTTP_')
54-
headers = dict((regex.sub('', header), value) for (header, value)
55-
in request.META.items() if header.startswith('HTTP_'))
56-
return headers
52+
@staticmethod
53+
def _get_headers(request):
54+
if request is not None:
55+
try:
56+
headers = request.headers.dict()
57+
except AttributeError:
58+
regex = re.compile('^HTTP_')
59+
headers = dict((regex.sub('', header), value) for (header, value)
60+
in request.META.items() if header.startswith('HTTP_'))
61+
return headers
5762

58-
def get_context(self, request, masking=None, additional_context=None):
59-
request_data = dict()
60-
if additional_context is not None and len(additional_context) != 0:
61-
request_data['context'] = additional_context
63+
@staticmethod
64+
def _get_args(request):
6265
if request is not None:
63-
form = self._get_form_data(request)
64-
headers = self._get_headers(request)
65-
if masking:
66-
for key in form:
67-
masked, value = masking(key)
68-
if masked:
69-
form[key] = value
70-
for key in headers:
71-
masked, value = masking(key)
72-
if masked:
73-
headers[key] = value
74-
request_data.update({
75-
'headers': headers,
76-
'args': request.GET.dict(),
77-
'form': form,
78-
})
79-
return str(request_data)
66+
return request.GET.dict()
67+
68+
def get_context(self, request, masking=None, additional_context=None):
69+
return str(get_context_dict(headers=self._get_headers(request),
70+
form=self._get_form_data(request),
71+
args=self._get_args(request),
72+
context=additional_context,
73+
masking=masking))
8074

8175

8276
class DjangoNotification(NotificationMixin):

error_tracker/libs/utils.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,3 +120,29 @@ def get_class_instance(module_path, mixin, default, message_prefix, *args):
120120
message = "Default " + message_prefix + " module will be used"
121121
warnings.warn(message)
122122
return default(*args)
123+
124+
125+
def get_context_dict(headers=None, context=None, form=None, args=None, masking=None):
126+
request_data = dict()
127+
form = form or {}
128+
headers = headers or {}
129+
args = args or {}
130+
context = context or {}
131+
if len(context) != 0:
132+
request_data['context'] = context
133+
if masking:
134+
for key in form:
135+
masked, value = masking(key)
136+
if masked:
137+
form[key] = value
138+
for key in headers:
139+
masked, value = masking(key)
140+
if masked:
141+
headers[key] = value
142+
if len(headers) != 0:
143+
request_data['headers'] = headers
144+
if len(args) != 0:
145+
request_data['args'] = args
146+
if len(form) != 0:
147+
request_data['form'] = form
148+
return request_data

0 commit comments

Comments
 (0)