Skip to content

Commit

Permalink
Merge pull request #205 from Microweb/master
Browse files Browse the repository at this point in the history
Add key_factory attr for redis_storage
  • Loading branch information
jettify authored Sep 13, 2017
2 parents de6528f + f766413 commit 8b16509
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 5 deletions.
6 changes: 4 additions & 2 deletions aiohttp_session/redis_storage.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,14 @@ class RedisStorage(AbstractStorage):
def __init__(self, redis_pool, *, cookie_name="AIOHTTP_SESSION",
domain=None, max_age=None, path='/',
secure=None, httponly=True,
encoder=json.dumps, decoder=json.loads):
encoder=json.dumps, decoder=json.loads,
key_factory=lambda: uuid.uuid4().hex):
super().__init__(cookie_name=cookie_name, domain=domain,
max_age=max_age, path=path, secure=secure,
httponly=httponly)
self._encoder = encoder
self._decoder = decoder
self._key_factory = key_factory
self._redis = redis_pool

@asyncio.coroutine
Expand All @@ -42,7 +44,7 @@ def load_session(self, request):
def save_session(self, request, response, session):
key = session.identity
if key is None:
key = uuid.uuid4().hex
key = self._key_factory()
self.save_cookie(response, key,
max_age=session.max_age)
else:
Expand Down
30 changes: 27 additions & 3 deletions tests/test_redis_storage.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import uuid
import aioredis
import time

import pytest

from aiohttp import web
Expand Down Expand Up @@ -31,9 +30,10 @@ def start():
loop.run_until_complete(pool.clear())


def create_app(loop, handler, redis, max_age=None):
def create_app(loop, handler, redis, max_age=None,
key_factory=lambda: uuid.uuid4().hex):
middleware = session_middleware(
RedisStorage(redis, max_age=max_age))
RedisStorage(redis, max_age=max_age, key_factory=key_factory))
app = web.Application(middlewares=[middleware], loop=loop)
app.router.add_route('GET', '/', handler)
return app
Expand Down Expand Up @@ -262,3 +262,27 @@ def handler(request):
{'AIOHTTP_SESSION': 'invalid_key'})
resp = yield from client.get('/')
assert resp.status == 200


@asyncio.coroutine
def test_create_storate_with_custom_key_factory(test_client, redis):

@asyncio.coroutine
def handler(request):
session = yield from get_session(request)
session['key'] = 'value'
assert session.new
return web.Response(body=b'OK')

def key_factory():
return 'test-key'

client = yield from test_client(create_app, handler, redis, 8, key_factory)
resp = yield from client.get('/')
assert resp.status == 200

assert resp.cookies['AIOHTTP_SESSION'].value == 'test-key'

value = yield from load_cookie(client, redis)
assert 'key' in value['session']
assert value['session']['key'] == 'value'

0 comments on commit 8b16509

Please sign in to comment.