Browse Source

support simple global exception for NotFound and Operational Sqlalchemy error

Guénaël Muller 6 years ago
parent
commit
641b48b7d3
3 changed files with 9 additions and 8 deletions
  1. 1 1
      setup.py
  2. 8 5
      tracim/__init__.py
  3. 0 2
      tracim/tests/functional/test_session.py

+ 1 - 1
setup.py View File

@@ -24,7 +24,7 @@ requires = [
24 24
     'zope.sqlalchemy',
25 25
     'alembic',
26 26
     # API
27
-    'hapic',
27
+    'hapic>=0.40',
28 28
     'marshmallow <3.0.0a1,>2.0.0',
29 29
     # CLI
30 30
     'cliff',

+ 8 - 5
tracim/__init__.py View File

@@ -5,6 +5,8 @@ import time
5 5
 from pyramid.config import Configurator
6 6
 from pyramid.authentication import BasicAuthAuthenticationPolicy
7 7
 from hapic.ext.pyramid import PyramidContext
8
+from pyramid.exceptions import NotFound
9
+from sqlalchemy.exc import OperationalError
8 10
 
9 11
 from tracim.extensions import hapic
10 12
 from tracim.config import CFG
@@ -49,12 +51,13 @@ def main(global_config, **settings):
49 51
     # Add SqlAlchemy DB
50 52
     configurator.include('.models')
51 53
     # set Hapic
52
-    hapic.set_context(
53
-        PyramidContext(
54
-            configurator=configurator,
55
-            default_error_builder=ErrorSchema()
56
-        )
54
+    context = PyramidContext(
55
+        configurator=configurator,
56
+        default_error_builder=ErrorSchema()
57 57
     )
58
+    hapic.set_context(context)
59
+    context.handle_exception(NotFound, 404)
60
+    context.handle_exception(OperationalError, 500)
58 61
     # Add controllers
59 62
     session_api = SessionController()
60 63
     configurator.include(session_api.bind, route_prefix=BASE_API_V2)

+ 0 - 2
tracim/tests/functional/test_session.py View File

@@ -17,8 +17,6 @@ class TestLogoutEndpoint(FunctionalTest):
17 17
 
18 18
 class TestLoginEndpointUnititedDB(FunctionalTestNoDB):
19 19
 
20
-    @pytest.mark.xfail(raises=OperationalError,
21
-                       reason='Not supported yet by hapic')
22 20
     def test_api__try_login_enpoint__err_500__no_inited_db(self):
23 21
         params = {
24 22
             'email': 'admin@admin.admin',