Skip to content

Commit dde9a48

Browse files
author
Sonu Kumar
committed
flask bug fix due to detached context
1 parent 439f9a8 commit dde9a48

File tree

5 files changed

+27
-19
lines changed

5 files changed

+27
-19
lines changed

error_tracker/flask/flask_error.py

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ def create_or_update_entity(cls, rhash, host, path, method, request_data,
215215
@classmethod
216216
def get_exceptions_per_page(cls, page_number=1):
217217
return cls.query.order_by(desc(cls.last_seen)).paginate(
218-
page_number, page_size, False)
218+
page=page_number, per_page=page_size, error_out=False)
219219

220220
@classmethod
221221
def get_entity(cls, rhash):
@@ -285,10 +285,11 @@ def capture_exception(self, additional_context=None):
285285

286286
ty, frames, frame_str, traceback_str, rhash, request_data = \
287287
get_context_detail(rq, self.masking, self.context_builder, additional_context)
288-
error = self.model.create_or_update_entity(rhash, host, path, method,
289-
str(request_data),
290-
get_exception_name(ty),
291-
traceback_str)
288+
with self.app.app_context():
289+
error = self.model.create_or_update_entity(rhash, host, path, method,
290+
str(request_data),
291+
get_exception_name(ty),
292+
traceback_str)
292293
self._post_process(rq, frame_str, frames, error)
293294

294295
def auto_track_exception(self, func, additional_context=None, silent=False):
@@ -329,7 +330,8 @@ def get_exceptions(self, page_number=1):
329330
:return: list of exception objects
330331
"""
331332
if self.model:
332-
return self.model.get_exceptions_per_page(page_number=page_number).items
333+
with self.app.app_context():
334+
return self.model.get_exceptions_per_page(page_number=page_number).items
333335
raise ConfigError
334336

335337
def get_exception(self, rhash):
@@ -339,7 +341,8 @@ def get_exception(self, rhash):
339341
:return: exception object
340342
"""
341343
if self.model:
342-
return self.model.get_entity(rhash)
344+
with self.app.app_context():
345+
return self.model.get_entity(rhash)
343346
raise ConfigError
344347

345348
def delete_exception(self, rhash):
@@ -349,12 +352,14 @@ def delete_exception(self, rhash):
349352
:return: whatever model returns
350353
"""
351354
if self.model:
352-
return self.model.delete_entity(rhash)
355+
with self.app.app_context():
356+
return self.model.delete_entity(rhash)
353357
raise ConfigError
354358

355359
def create_or_update_exception(self, rhash, host, path, method, request_data,
356360
exception_name, traceback):
357361
if self.model:
358-
return self.model.create_or_update_entity(rhash, host, path, method, request_data,
359-
exception_name, traceback)
362+
with self.app.app_context():
363+
return self.model.create_or_update_entity(rhash, host, path, method, request_data,
364+
exception_name, traceback)
360365
raise ConfigError

run-tests.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ for tst in tests/DjangoTest/runners/*.py; do
44
python "$tst"
55
done
66

7-
#python tests/flask-test-runner.py
7+
python tests/flask-test-runner.py

tests/FlaskTest/test_end_point.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,18 +69,19 @@ def test_pagination(self):
6969
exception = error_tracker.get_exceptions()[0]
7070
hashx = exception.hash
7171
inserted = 0
72-
i = 0
7372
while inserted < 20:
74-
i += 1
75-
idx = str(i) + hashx[2:]
7673
inserted += 1
74+
idx = str(inserted) + hashx[2:]
75+
print("Inserting ", idx)
7776
error_tracker.create_or_update_exception(idx, exception.host, exception.path,
7877
exception.method, exception.request_data,
7978
exception.exception_name,
8079
exception.traceback)
8180

81+
8282
response = c.get('/dev/error', follow_redirects=True)
83-
urls = [node.attrib['href'] for node in pyquery.PyQuery(response.data)('a')]
83+
data = response.data
84+
urls = [node.attrib['href'] for node in pyquery.PyQuery(data)('a')]
8485
self.assertEqual(len(urls), pagination_config.APP_DEFAULT_LIST_SIZE * 2 + 1)
8586
self.assertTrue('/dev/error/?page=2' in urls)
8687

tests/FlaskTest/test_init_later.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,9 @@ def _setup(self, db_file):
2424
db = SQLAlchemy(app)
2525
error_tracker = AppErrorTracker()
2626
error_tracker.init_app(app, db, view_permission=ViewPermission())
27-
db.drop_all()
28-
db.create_all()
27+
with app.app_context():
28+
db.drop_all()
29+
db.create_all()
2930
return app, db, error_tracker
3031

3132

tests/FlaskTest/utils.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ def _setup(self, db_file):
9797
app.config['SQLALCHEMY_DATABASE_URI'] = "sqlite:///%s" % db_file
9898
db = SQLAlchemy(app)
9999
error_tracker = AppErrorTracker(app=app, db=db, view_permission=ViewPermission(), **self.kwargs)
100-
db.drop_all()
101-
db.create_all()
100+
with app.app_context():
101+
db.drop_all()
102+
db.create_all()
102103
return app, db, error_tracker

0 commit comments

Comments
 (0)