Skip to content

Commit 5a589af

Browse files
Addressed error when deleting a user session in async app (Fixes #86)
1 parent c841cbe commit 5a589af

File tree

2 files changed

+79
-22
lines changed

2 files changed

+79
-22
lines changed

src/microdot_asyncio.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,8 @@ async def dispatch_request(self, req):
381381
res = await self._invoke_handler(
382382
handler, req, res) or res
383383
for handler in req.after_request_handlers:
384-
res = await handler(req, res) or res
384+
res = await self._invoke_handler(
385+
handler, req, res) or res
385386
elif f in self.error_handlers:
386387
res = await self._invoke_handler(
387388
self.error_handlers[f], req)

tests/test_session.py

Lines changed: 77 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,75 +1,131 @@
1+
try:
2+
import uasyncio as asyncio
3+
except ImportError:
4+
import asyncio
15
import unittest
26
from microdot import Microdot
7+
from microdot_asyncio import Microdot as MicrodotAsync
38
from microdot_session import set_session_secret_key, get_session, \
49
update_session, delete_session, with_session
510
from microdot_test_client import TestClient
11+
from microdot_asyncio_test_client import TestClient as TestClientAsync
612

713
set_session_secret_key('top-secret!')
814

915

1016
class TestSession(unittest.TestCase):
11-
def setUp(self):
12-
self.app = Microdot()
13-
self.client = TestClient(self.app)
14-
15-
def tearDown(self):
16-
pass
17-
1817
def test_session(self):
19-
@self.app.get('/')
18+
app = Microdot()
19+
client = TestClient(app)
20+
21+
@app.get('/')
2022
def index(req):
2123
session = get_session(req)
2224
session2 = get_session(req)
2325
session2['foo'] = 'bar'
2426
self.assertEqual(session['foo'], 'bar')
2527
return str(session.get('name'))
2628

27-
@self.app.get('/with')
29+
@app.get('/with')
2830
@with_session
2931
def session_context_manager(req, session):
3032
return str(session.get('name'))
3133

32-
@self.app.post('/set')
34+
@app.post('/set')
3335
def set_session(req):
3436
update_session(req, {'name': 'joe'})
3537
return 'OK'
3638

37-
@self.app.post('/del')
39+
@app.post('/del')
3840
def del_session(req):
3941
delete_session(req)
4042
return 'OK'
4143

42-
res = self.client.get('/')
44+
res = client.get('/')
45+
self.assertEqual(res.text, 'None')
46+
res = client.get('/with')
47+
self.assertEqual(res.text, 'None')
48+
49+
res = client.post('/set')
50+
self.assertEqual(res.text, 'OK')
51+
52+
res = client.get('/')
53+
self.assertEqual(res.text, 'joe')
54+
res = client.get('/with')
55+
self.assertEqual(res.text, 'joe')
56+
57+
res = client.post('/del')
58+
self.assertEqual(res.text, 'OK')
59+
60+
res = client.get('/')
61+
self.assertEqual(res.text, 'None')
62+
res = client.get('/with')
63+
self.assertEqual(res.text, 'None')
64+
65+
def _run(self, coro):
66+
loop = asyncio.get_event_loop()
67+
return loop.run_until_complete(coro)
68+
69+
def test_session_async(self):
70+
app = MicrodotAsync()
71+
client = TestClientAsync(app)
72+
73+
@app.get('/')
74+
async def index(req):
75+
session = get_session(req)
76+
session2 = get_session(req)
77+
session2['foo'] = 'bar'
78+
self.assertEqual(session['foo'], 'bar')
79+
return str(session.get('name'))
80+
81+
@app.get('/with')
82+
@with_session
83+
async def session_context_manager(req, session):
84+
return str(session.get('name'))
85+
86+
@app.post('/set')
87+
async def set_session(req):
88+
update_session(req, {'name': 'joe'})
89+
return 'OK'
90+
91+
@app.post('/del')
92+
async def del_session(req):
93+
delete_session(req)
94+
return 'OK'
95+
96+
res = self._run(client.get('/'))
4397
self.assertEqual(res.text, 'None')
44-
res = self.client.get('/with')
98+
res = self._run(client.get('/with'))
4599
self.assertEqual(res.text, 'None')
46100

47-
res = self.client.post('/set')
101+
res = self._run(client.post('/set'))
48102
self.assertEqual(res.text, 'OK')
49103

50-
res = self.client.get('/')
104+
res = self._run(client.get('/'))
51105
self.assertEqual(res.text, 'joe')
52-
res = self.client.get('/with')
106+
res = self._run(client.get('/with'))
53107
self.assertEqual(res.text, 'joe')
54108

55-
res = self.client.post('/del')
109+
res = self._run(client.post('/del'))
56110
self.assertEqual(res.text, 'OK')
57111

58-
res = self.client.get('/')
112+
res = self._run(client.get('/'))
59113
self.assertEqual(res.text, 'None')
60-
res = self.client.get('/with')
114+
res = self._run(client.get('/with'))
61115
self.assertEqual(res.text, 'None')
62116

63117
def test_session_no_secret_key(self):
64118
set_session_secret_key(None)
119+
app = Microdot()
120+
client = TestClient(app)
65121

66-
@self.app.get('/')
122+
@app.get('/')
67123
def index(req):
68124
self.assertRaises(ValueError, get_session, req)
69125
self.assertRaises(ValueError, update_session, req, {})
70126
return ''
71127

72-
res = self.client.get('/')
128+
res = client.get('/')
73129
self.assertEqual(res.status_code, 200)
74130

75131
set_session_secret_key('top-secret!')

0 commit comments

Comments
 (0)