Codebase list django-redis-sessions / e436cfd
Imported Upstream version 0.6.1 Scott Kitterman 6 years ago
19 changed file(s) with 693 addition(s) and 192 deletion(s). Raw diff Collapse all Expand all
0 ## 0.6.1 (16 September 2017)
1
2 BUG FIXES:
3
4 * Dict Config fixes: ([#48](https://github.com/martinrusev/django-redis-sessions/issues/48))
5
6
7 ## 0.6 (6 September 2017)
8
9
10 IMPROVEMENTS:
11
12 * Dict config: ([#18](https://github.com/martinrusev/django-redis-sessions/issues/18))
13
14
15 ## 0.5.6 (9 June 2016)
16
17
18 IMPROVEMENTS:
19
20 * Redis Sentinel support: ([#29](https://github.com/martinrusev/django-redis-sessions/pull/29))
0 Copyright (c) 2010, Martin Rusev
0 Copyright (c) 2017, Martin Rusev
11 All rights reserved.
22
33 Redistribution and use in source and binary forms, with or without
0 include README.md
0 include README.rst
11 include LICENSE.txt
2 include CHANGELOG.md
3 graft tests
00 Metadata-Version: 1.1
11 Name: django-redis-sessions
2 Version: 0.5.6
2 Version: 0.6.1
33 Summary: Redis Session Backend For Django
44 Home-page: http://github.com/martinrusev/django-redis-sessions
55 Author: Martin Rusev
66 Author-email: martin@amon.cx
77 License: BSD
88 Description: django-redis-sessions
9 =======================
9 =====================
10
1011 Redis database backend for your sessions
1112
13 |Build Status|
1214
13 [![Build Status](https://travis-ci.org/martinrusev/django-redis-sessions.svg?branch=master)](https://travis-ci.org/martinrusev/django-redis-sessions)
14
15 - `Installation`_
16 - `Available Settings`_
17 - `Changelog`_
1518
1619 Installation
1720 ============
1821
19 * Run `pip install django-redis-sessions` or alternatively download the tarball and run `python setup.py install`,
22 - Run ``pip install django-redis-sessions`` or alternatively download
23 the tarball and run ``python setup.py install``,
2024
21 For Django < 1.4 run `pip install django-redis-sessions==0.3`
25 For Django < 1.4 run ``pip install django-redis-sessions==0.3``
2226
23 * Set `redis_sessions.session` as your session engine, like so:
27 - Set ``redis_sessions.session`` as your session engine, like so:
28
29 .. code:: python
30
31 SESSION_ENGINE = 'redis_sessions.session'
32
33 Available Settings
34 ==================
35
36 .. code:: python
37
38 SESSION_REDIS = {
39 'host': 'localhost',
40 'port': 6379,
41 'db': 0,
42 'password': 'password',
43 'prefix': 'session',
44 'socket_timeout': 1
45 }
46
47 If you prefer domain socket connection, you can just add this line
48 instead of HOST and PORT.
49
50 .. code:: python
51
52 SESSION_REDIS = {
53 'unix_domain_socket_path': '/var/run/redis/redis.sock',
54 'db': 0,
55 'password': 'password',
56 'prefix': 'session',
57 'socket_timeout': 1
58 }
59
60 Redis Sentinel
61 ~~~~~~~~~~~~~~
62
63 .. code:: python
64
65 SESSION_REDIS_SENTINEL_LIST = [(host, port), (host, port), (host, port)]
66 SESSION_REDIS_SENTINEL_MASTER_ALIAS = 'sentinel-master'
67
68 Redis Pool (Horizontal partitioning)
69 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
70
71 Splits sessions between Redis instances based on the session key. You
72 can configure the connection type for each Redis instance in the pool
73 (host/port, unix socket, redis url).
2474
2575
26 ```
27 SESSION_ENGINE = 'redis_sessions.session'
28 ```
76 .. code:: python
2977
30 * Optional settings:
31
32 ```
33 SESSION_REDIS_HOST = 'localhost'
34 SESSION_REDIS_PORT = 6379
35 SESSION_REDIS_DB = 0
36 SESSION_REDIS_PASSWORD = 'password'
37 SESSION_REDIS_PREFIX = 'session'
38 SESSION_REDIS_SOCKET_TIMEOUT=1
39
40 # If you prefer domain socket connection,
41 # you can just add this line instead of SESSION_REDIS_HOST and SESSION_REDIS_PORT.
42
43 SESSION_REDIS_UNIX_DOMAIN_SOCKET_PATH = '/var/run/redis/redis.sock'
44
45 # Redis Sentinel
46 SESSION_REDIS_SENTINEL_LIST = [(host, port), (host, port), (host, port)]
47 SESSION_REDIS_SENTINEL_MASTER_ALIAS = 'sentinel-master'
48
49 ```
50
78 SESSION_REDIS = {
79 'prefix': 'session',
80 'socket_timeout': 1
81 'retry_on_timeout': False,
82 'pool': [{
83 'host': 'localhost3',
84 'port': 6379,
85 'db': 0,
86 'password': None,
87 'unix_domain_socket_path': None,
88 'url': None,
89 'weight': 1
90 },
91 {
92 'host': 'localhost2',
93 'port': 6379,
94 'db': 0,
95 'password': None,
96 'unix_domain_socket_path': None,
97 'url': None,
98 'weight': 1
99 },
100 {
101 'host': 'localhost1',
102 'port': 6379,
103 'db': 0,
104 'password': None,
105 'unix_domain_socket_path': None,
106 'url': None,
107 'weight': 1
108 }]
109 }
51110
52111
53112 Tests
54 ============
113 =====
55114
115 .. code:: bash
56116
57 ```
58 $ pip install django nose redis
59 # Make sure you have redis running on localhost:6379
60 $ nosetests
61 ```
117 $ pip install -r dev_requirements.txt
118 # Make sure you have redis running on localhost:6379
119 $ nosetests -v
62120
63 # [Changelog](https://github.com/martinrusev/imbox/blob/master/CHANGELOG.md)
121 `Changelog <https://github.com/martinrusev/django-redis-sessions/blob/master/CHANGELOG.md>`__
122 =============================================================================================
123
124 .. _Installation: #installation
125 .. _Available Settings: #available-settings
126 .. _Changelog: #changelog
127
128 .. |Build Status| image:: https://travis-ci.org/martinrusev/django-redis-sessions.svg?branch=master
129 :target: https://travis-ci.org/martinrusev/django-redis-sessions
64130 Keywords: django,sessions,
65131 Platform: UNKNOWN
66132 Classifier: Programming Language :: Python :: 2
+0
-56
README.md less more
0 django-redis-sessions
1 =======================
2 Redis database backend for your sessions
3
4
5 [![Build Status](https://travis-ci.org/martinrusev/django-redis-sessions.svg?branch=master)](https://travis-ci.org/martinrusev/django-redis-sessions)
6
7
8 Installation
9 ============
10
11 * Run `pip install django-redis-sessions` or alternatively download the tarball and run `python setup.py install`,
12
13 For Django < 1.4 run `pip install django-redis-sessions==0.3`
14
15 * Set `redis_sessions.session` as your session engine, like so:
16
17
18 ```
19 SESSION_ENGINE = 'redis_sessions.session'
20 ```
21
22 * Optional settings:
23
24 ```
25 SESSION_REDIS_HOST = 'localhost'
26 SESSION_REDIS_PORT = 6379
27 SESSION_REDIS_DB = 0
28 SESSION_REDIS_PASSWORD = 'password'
29 SESSION_REDIS_PREFIX = 'session'
30 SESSION_REDIS_SOCKET_TIMEOUT=1
31
32 # If you prefer domain socket connection,
33 # you can just add this line instead of SESSION_REDIS_HOST and SESSION_REDIS_PORT.
34
35 SESSION_REDIS_UNIX_DOMAIN_SOCKET_PATH = '/var/run/redis/redis.sock'
36
37 # Redis Sentinel
38 SESSION_REDIS_SENTINEL_LIST = [(host, port), (host, port), (host, port)]
39 SESSION_REDIS_SENTINEL_MASTER_ALIAS = 'sentinel-master'
40
41 ```
42
43
44
45 Tests
46 ============
47
48
49 ```
50 $ pip install django nose redis
51 # Make sure you have redis running on localhost:6379
52 $ nosetests
53 ```
54
55 # [Changelog](https://github.com/martinrusev/imbox/blob/master/CHANGELOG.md)
0 django-redis-sessions
1 =====================
2
3 Redis database backend for your sessions
4
5 |Build Status|
6
7 - `Installation`_
8 - `Available Settings`_
9 - `Changelog`_
10
11 Installation
12 ============
13
14 - Run ``pip install django-redis-sessions`` or alternatively download
15 the tarball and run ``python setup.py install``,
16
17 For Django < 1.4 run ``pip install django-redis-sessions==0.3``
18
19 - Set ``redis_sessions.session`` as your session engine, like so:
20
21 .. code:: python
22
23 SESSION_ENGINE = 'redis_sessions.session'
24
25 Available Settings
26 ==================
27
28 .. code:: python
29
30 SESSION_REDIS = {
31 'host': 'localhost',
32 'port': 6379,
33 'db': 0,
34 'password': 'password',
35 'prefix': 'session',
36 'socket_timeout': 1
37 }
38
39 If you prefer domain socket connection, you can just add this line
40 instead of HOST and PORT.
41
42 .. code:: python
43
44 SESSION_REDIS = {
45 'unix_domain_socket_path': '/var/run/redis/redis.sock',
46 'db': 0,
47 'password': 'password',
48 'prefix': 'session',
49 'socket_timeout': 1
50 }
51
52 Redis Sentinel
53 ~~~~~~~~~~~~~~
54
55 .. code:: python
56
57 SESSION_REDIS_SENTINEL_LIST = [(host, port), (host, port), (host, port)]
58 SESSION_REDIS_SENTINEL_MASTER_ALIAS = 'sentinel-master'
59
60 Redis Pool (Horizontal partitioning)
61 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
62
63 Splits sessions between Redis instances based on the session key. You
64 can configure the connection type for each Redis instance in the pool
65 (host/port, unix socket, redis url).
66
67
68 .. code:: python
69
70 SESSION_REDIS = {
71 'prefix': 'session',
72 'socket_timeout': 1
73 'retry_on_timeout': False,
74 'pool': [{
75 'host': 'localhost3',
76 'port': 6379,
77 'db': 0,
78 'password': None,
79 'unix_domain_socket_path': None,
80 'url': None,
81 'weight': 1
82 },
83 {
84 'host': 'localhost2',
85 'port': 6379,
86 'db': 0,
87 'password': None,
88 'unix_domain_socket_path': None,
89 'url': None,
90 'weight': 1
91 },
92 {
93 'host': 'localhost1',
94 'port': 6379,
95 'db': 0,
96 'password': None,
97 'unix_domain_socket_path': None,
98 'url': None,
99 'weight': 1
100 }]
101 }
102
103
104 Tests
105 =====
106
107 .. code:: bash
108
109 $ pip install -r dev_requirements.txt
110 # Make sure you have redis running on localhost:6379
111 $ nosetests -v
112
113 `Changelog <https://github.com/martinrusev/django-redis-sessions/blob/master/CHANGELOG.md>`__
114 =============================================================================================
115
116 .. _Installation: #installation
117 .. _Available Settings: #available-settings
118 .. _Changelog: #changelog
119
120 .. |Build Status| image:: https://travis-ci.org/martinrusev/django-redis-sessions.svg?branch=master
121 :target: https://travis-ci.org/martinrusev/django-redis-sessions
00 Metadata-Version: 1.1
11 Name: django-redis-sessions
2 Version: 0.5.6
2 Version: 0.6.1
33 Summary: Redis Session Backend For Django
44 Home-page: http://github.com/martinrusev/django-redis-sessions
55 Author: Martin Rusev
66 Author-email: martin@amon.cx
77 License: BSD
88 Description: django-redis-sessions
9 =======================
9 =====================
10
1011 Redis database backend for your sessions
1112
13 |Build Status|
1214
13 [![Build Status](https://travis-ci.org/martinrusev/django-redis-sessions.svg?branch=master)](https://travis-ci.org/martinrusev/django-redis-sessions)
14
15 - `Installation`_
16 - `Available Settings`_
17 - `Changelog`_
1518
1619 Installation
1720 ============
1821
19 * Run `pip install django-redis-sessions` or alternatively download the tarball and run `python setup.py install`,
22 - Run ``pip install django-redis-sessions`` or alternatively download
23 the tarball and run ``python setup.py install``,
2024
21 For Django < 1.4 run `pip install django-redis-sessions==0.3`
25 For Django < 1.4 run ``pip install django-redis-sessions==0.3``
2226
23 * Set `redis_sessions.session` as your session engine, like so:
27 - Set ``redis_sessions.session`` as your session engine, like so:
28
29 .. code:: python
30
31 SESSION_ENGINE = 'redis_sessions.session'
32
33 Available Settings
34 ==================
35
36 .. code:: python
37
38 SESSION_REDIS = {
39 'host': 'localhost',
40 'port': 6379,
41 'db': 0,
42 'password': 'password',
43 'prefix': 'session',
44 'socket_timeout': 1
45 }
46
47 If you prefer domain socket connection, you can just add this line
48 instead of HOST and PORT.
49
50 .. code:: python
51
52 SESSION_REDIS = {
53 'unix_domain_socket_path': '/var/run/redis/redis.sock',
54 'db': 0,
55 'password': 'password',
56 'prefix': 'session',
57 'socket_timeout': 1
58 }
59
60 Redis Sentinel
61 ~~~~~~~~~~~~~~
62
63 .. code:: python
64
65 SESSION_REDIS_SENTINEL_LIST = [(host, port), (host, port), (host, port)]
66 SESSION_REDIS_SENTINEL_MASTER_ALIAS = 'sentinel-master'
67
68 Redis Pool (Horizontal partitioning)
69 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
70
71 Splits sessions between Redis instances based on the session key. You
72 can configure the connection type for each Redis instance in the pool
73 (host/port, unix socket, redis url).
2474
2575
26 ```
27 SESSION_ENGINE = 'redis_sessions.session'
28 ```
76 .. code:: python
2977
30 * Optional settings:
31
32 ```
33 SESSION_REDIS_HOST = 'localhost'
34 SESSION_REDIS_PORT = 6379
35 SESSION_REDIS_DB = 0
36 SESSION_REDIS_PASSWORD = 'password'
37 SESSION_REDIS_PREFIX = 'session'
38 SESSION_REDIS_SOCKET_TIMEOUT=1
39
40 # If you prefer domain socket connection,
41 # you can just add this line instead of SESSION_REDIS_HOST and SESSION_REDIS_PORT.
42
43 SESSION_REDIS_UNIX_DOMAIN_SOCKET_PATH = '/var/run/redis/redis.sock'
44
45 # Redis Sentinel
46 SESSION_REDIS_SENTINEL_LIST = [(host, port), (host, port), (host, port)]
47 SESSION_REDIS_SENTINEL_MASTER_ALIAS = 'sentinel-master'
48
49 ```
50
78 SESSION_REDIS = {
79 'prefix': 'session',
80 'socket_timeout': 1
81 'retry_on_timeout': False,
82 'pool': [{
83 'host': 'localhost3',
84 'port': 6379,
85 'db': 0,
86 'password': None,
87 'unix_domain_socket_path': None,
88 'url': None,
89 'weight': 1
90 },
91 {
92 'host': 'localhost2',
93 'port': 6379,
94 'db': 0,
95 'password': None,
96 'unix_domain_socket_path': None,
97 'url': None,
98 'weight': 1
99 },
100 {
101 'host': 'localhost1',
102 'port': 6379,
103 'db': 0,
104 'password': None,
105 'unix_domain_socket_path': None,
106 'url': None,
107 'weight': 1
108 }]
109 }
51110
52111
53112 Tests
54 ============
113 =====
55114
115 .. code:: bash
56116
57 ```
58 $ pip install django nose redis
59 # Make sure you have redis running on localhost:6379
60 $ nosetests
61 ```
117 $ pip install -r dev_requirements.txt
118 # Make sure you have redis running on localhost:6379
119 $ nosetests -v
62120
63 # [Changelog](https://github.com/martinrusev/imbox/blob/master/CHANGELOG.md)
121 `Changelog <https://github.com/martinrusev/django-redis-sessions/blob/master/CHANGELOG.md>`__
122 =============================================================================================
123
124 .. _Installation: #installation
125 .. _Available Settings: #available-settings
126 .. _Changelog: #changelog
127
128 .. |Build Status| image:: https://travis-ci.org/martinrusev/django-redis-sessions.svg?branch=master
129 :target: https://travis-ci.org/martinrusev/django-redis-sessions
64130 Keywords: django,sessions,
65131 Platform: UNKNOWN
66132 Classifier: Programming Language :: Python :: 2
0 CHANGELOG.md
01 LICENSE.txt
12 MANIFEST.in
2 README.md
3 README.rst
34 setup.py
45 django_redis_sessions.egg-info/PKG-INFO
56 django_redis_sessions.egg-info/SOURCES.txt
67 django_redis_sessions.egg-info/dependency_links.txt
78 django_redis_sessions.egg-info/not-zip-safe
8 django_redis_sessions.egg-info/pbr.json
99 django_redis_sessions.egg-info/requires.txt
1010 django_redis_sessions.egg-info/top_level.txt
1111 redis_sessions/__init__.py
1212 redis_sessions/session.py
13 redis_sessions/settings.py
13 redis_sessions/settings.py
14 tests/__init__.py
15 tests/__init__.pyc
16 tests/tests.py
17 tests/tests.pyc
18 tests/__pycache__/__init__.cpython-35.pyc
19 tests/__pycache__/tests.cpython-35.pyc
+0
-1
django_redis_sessions.egg-info/pbr.json less more
0 {"is_release": false, "git_version": "7be7b21"}
0 __version__ = '0.5.6'
0 __version__ = '0.6.1'
77 from redis_sessions import settings
88
99
10 # Avoid new redis connection on each request
10 class RedisServer():
11 __redis = {}
1112
12 if settings.SESSION_REDIS_SENTINEL_LIST is not None:
13 from redis.sentinel import Sentinel
13 def __init__(self, session_key):
14 self.session_key = session_key
15 self.connection_key = ''
1416
15 redis_server = Sentinel(
16 settings.SESSION_REDIS_SENTINEL_LIST,
17 socket_timeout=settings.SESSION_REDIS_SOCKET_TIMEOUT,
18 retry_on_timeout=settings.SESSION_REDIS_RETRY_ON_TIMEOUT,
19 db=getattr(settings, 'SESSION_REDIS_DB', 0),
20 password=getattr(settings, 'SESSION_REDIS_PASSWORD', None)
21 ).master_for(settings.SESSION_REDIS_SENTINEL_MASTER_ALIAS)
17 if settings.SESSION_REDIS_SENTINEL_LIST is not None:
18 self.connection_type = 'sentinel'
19 else:
20 if settings.SESSION_REDIS_POOL is not None:
21 server_key, server = self.get_server(session_key, settings.SESSION_REDIS_POOL)
22 self.connection_key = str(server_key)
23 settings.SESSION_REDIS_HOST = getattr(server, 'host', 'localhost')
24 settings.SESSION_REDIS_PORT = getattr(server, 'port', 6379)
25 settings.SESSION_REDIS_DB = getattr(server, 'db', 0)
26 settings.SESSION_REDIS_PASSWORD = getattr(server, 'password', None)
27 settings.SESSION_REDIS_URL = getattr(server, 'url', None)
28 settings.SESSION_REDIS_UNIX_DOMAIN_SOCKET_PATH = getattr(server,'unix_domain_socket_path', None)
2229
23 elif settings.SESSION_REDIS_URL is not None:
30 if settings.SESSION_REDIS_URL is not None:
31 self.connection_type = 'redis_url'
32 elif settings.SESSION_REDIS_HOST is not None:
33 self.connection_type = 'redis_host'
34 elif settings.SESSION_REDIS_UNIX_DOMAIN_SOCKET_PATH is not None:
35 self.connection_type = 'redis_unix_url'
2436
25 redis_server = redis.StrictRedis.from_url(
26 settings.SESSION_REDIS_URL,
27 socket_timeout=settings.SESSION_REDIS_SOCKET_TIMEOUT
28 )
29 elif settings.SESSION_REDIS_UNIX_DOMAIN_SOCKET_PATH is None:
30
31 redis_server = redis.StrictRedis(
32 host=settings.SESSION_REDIS_HOST,
33 port=settings.SESSION_REDIS_PORT,
34 socket_timeout=settings.SESSION_REDIS_SOCKET_TIMEOUT,
35 retry_on_timeout=settings.SESSION_REDIS_RETRY_ON_TIMEOUT,
36 db=settings.SESSION_REDIS_DB,
37 password=settings.SESSION_REDIS_PASSWORD
38 )
39 else:
37 self.connection_key += self.connection_type
4038
41 redis_server = redis.StrictRedis(
42 unix_socket_path=settings.SESSION_REDIS_UNIX_DOMAIN_SOCKET_PATH,
43 socket_timeout=settings.SESSION_REDIS_SOCKET_TIMEOUT,
44 retry_on_timeout=settings.SESSION_REDIS_RETRY_ON_TIMEOUT,
45 db=settings.SESSION_REDIS_DB,
46 password=settings.SESSION_REDIS_PASSWORD,
47 )
39 def get_server(self, key, servers_pool):
40 total_weight = sum([row.get('weight', 1) for row in servers_pool])
41 pos = 0
42 for i in range(3, -1, -1):
43 pos = pos * 2 ** 8 + ord(key[i])
44 pos = pos % total_weight
45
46 pool = iter(servers_pool)
47 server = next(pool)
48 server_key = 0
49 i = 0
50 while i < total_weight:
51 if i <= pos < (i + server.get('weight', 1)):
52 return server_key, server
53 i += server.get('weight', 1)
54 server = next(pool)
55 server_key += 1
56
57 return
58
59 def get(self):
60 if self.connection_key in self.__redis:
61 return self.__redis[self.connection_key]
62
63 if self.connection_type == 'sentinel':
64 from redis.sentinel import Sentinel
65 self.__redis[self.connection_key] = Sentinel(
66 settings.SESSION_REDIS_SENTINEL_LIST,
67 socket_timeout=settings.SESSION_REDIS_SOCKET_TIMEOUT,
68 retry_on_timeout=settings.SESSION_REDIS_RETRY_ON_TIMEOUT,
69 db=getattr(settings, 'db', 0),
70 password=getattr(settings, 'password', None)
71 ).master_for(settings.SESSION_REDIS_SENTINEL_MASTER_ALIAS)
72
73 elif self.connection_type == 'redis_url':
74 self.__redis[self.connection_key] = redis.StrictRedis.from_url(
75 settings.SESSION_REDIS_URL,
76 socket_timeout=settings.SESSION_REDIS_SOCKET_TIMEOUT
77 )
78 elif self.connection_type == 'redis_host':
79 self.__redis[self.connection_key] = redis.StrictRedis(
80 host=settings.SESSION_REDIS_HOST,
81 port=settings.SESSION_REDIS_PORT,
82 socket_timeout=settings.SESSION_REDIS_SOCKET_TIMEOUT,
83 retry_on_timeout=settings.SESSION_REDIS_RETRY_ON_TIMEOUT,
84 db=settings.SESSION_REDIS_DB,
85 password=settings.SESSION_REDIS_PASSWORD
86 )
87 elif self.connection_type == 'redis_unix_url':
88 self.__redis[self.connection_key] = redis.StrictRedis(
89 unix_socket_path=settings.SESSION_REDIS_UNIX_DOMAIN_SOCKET_PATH,
90 socket_timeout=settings.SESSION_REDIS_SOCKET_TIMEOUT,
91 retry_on_timeout=settings.SESSION_REDIS_RETRY_ON_TIMEOUT,
92 db=settings.SESSION_REDIS_DB,
93 password=settings.SESSION_REDIS_PASSWORD,
94 )
95
96 return self.__redis[self.connection_key]
4897
4998
5099 class SessionStore(SessionBase):
53102 """
54103 def __init__(self, session_key=None):
55104 super(SessionStore, self).__init__(session_key)
56
57 self.server = redis_server
105 self.server = RedisServer(session_key).get()
58106
59107 def load(self):
60108 try:
00 from django.conf import settings
11
2 # SESSION_REDIS - Default
3 SESSION_REDIS = getattr(settings, 'SESSION_REDIS', {})
24
3 SESSION_REDIS_HOST = getattr(settings, 'SESSION_REDIS_HOST', 'localhost')
4 SESSION_REDIS_PORT = getattr(settings, 'SESSION_REDIS_PORT', 6379)
5 SESSION_REDIS_SOCKET_TIMEOUT = getattr(settings, 'SESSION_REDIS_SOCKET_TIMEOUT', 0.1)
6 SESSION_REDIS_RETRY_ON_TIMEOUT = getattr(settings, 'SESSION_REDIS_RETRY_ON_TIMEOUT', False)
7 SESSION_REDIS_DB = getattr(settings, 'SESSION_REDIS_DB', 0)
8 SESSION_REDIS_PREFIX = getattr(settings, 'SESSION_REDIS_PREFIX', '')
9 SESSION_REDIS_PASSWORD = getattr(settings, 'SESSION_REDIS_PASSWORD', None)
10 SESSION_REDIS_UNIX_DOMAIN_SOCKET_PATH = getattr(
11 settings, 'SESSION_REDIS_UNIX_DOMAIN_SOCKET_PATH', None
12 )
13 SESSION_REDIS_URL = getattr(settings, 'SESSION_REDIS_URL', None)
5 SESSION_REDIS_HOST = SESSION_REDIS.get('host', 'localhost')
6 SESSION_REDIS_PORT = SESSION_REDIS.get('port', 6379)
7 SESSION_REDIS_SOCKET_TIMEOUT = SESSION_REDIS.get('socket_timeout', 0.1)
8 SESSION_REDIS_RETRY_ON_TIMEOUT = SESSION_REDIS.get('retry_on_timeout', False)
9 SESSION_REDIS_DB = SESSION_REDIS.get('db', 0)
10 SESSION_REDIS_PREFIX = SESSION_REDIS.get('prefix', '')
11 SESSION_REDIS_PASSWORD = SESSION_REDIS.get('password', None)
12 SESSION_REDIS_UNIX_DOMAIN_SOCKET_PATH = SESSION_REDIS.get('unix_domain_socket_path', None)
13 SESSION_REDIS_URL = SESSION_REDIS.get('url', None)
14
15
16 """
17 Should be on the format:
18 [
19 {
20 'host': 'localhost2',
21 'port': 6379,
22 'db': 0,
23 'password': None,
24 'unix_domain_socket_path': None,
25 'url': None,
26 'weight': 1,
27 },
28 {
29 'host': 'localhost1',
30 'port': 6379,
31 'db': 0,
32 'password': None,
33 'unix_domain_socket_path': None,
34 'url': None,
35 'weight': 1,
36 },
37 ]
38 """
39 SESSION_REDIS_POOL = SESSION_REDIS.get('POOL', None)
1440
1541 # should be on the format [(host, port), (host, port), (host, port)]
16 SESSION_REDIS_SENTINEL_LIST = getattr(
17 settings, 'SESSION_REDIS_SENTINEL_LIST', None
18 )
19 SESSION_REDIS_SENTINEL_MASTER_ALIAS = getattr(
20 settings, 'SESSION_REDIS_SENTINEL_MASTER_ALIAS', None
21 )
42 SESSION_REDIS_SENTINEL_LIST = getattr(settings, 'SESSION_REDIS_SENTINEL_LIST', None)
43 SESSION_REDIS_SENTINEL_MASTER_ALIAS = getattr(settings, 'SESSION_REDIS_SENTINEL_MASTER_ALIAS', None)
1111 name='django-redis-sessions',
1212 version=__version__,
1313 description= "Redis Session Backend For Django",
14 long_description=read("README.md"),
14 long_description=read("README.rst"),
1515 keywords='django, sessions,',
1616 author='Martin Rusev',
1717 author_email='martin@amon.cx',
2828 "Framework :: Django",
2929 "Environment :: Web Environment",
3030 ],
31 test_suite='tests'
3132 )
0 from django.conf import settings
1
2
3 settings.configure(
4 SESSION_ENGINE='redis_sessions.session'
5 )
Binary diff not shown
0 import time
1 from random import randint
2
3
4 from nose.tools import eq_, assert_false
5
6 from redis_sessions.session import SessionStore
7 from redis_sessions.session import RedisServer
8 from redis_sessions import settings
9
10
11 ## Dev
12 import redis
13 import timeit
14
15 redis_session = SessionStore()
16
17
18 def test_modify_and_keys():
19 eq_(redis_session.modified, False)
20 redis_session['test'] = 'test_me'
21 eq_(redis_session.modified, True)
22 eq_(redis_session['test'], 'test_me')
23
24
25 def test_session_load_does_not_create_record():
26 session = SessionStore('someunknownkey')
27 session.load()
28
29 eq_(redis_session.exists(redis_session.session_key), False)
30
31
32 def test_save_and_delete():
33 redis_session['key'] = 'value'
34 redis_session.save()
35 eq_(redis_session.exists(redis_session.session_key), True)
36 redis_session.delete(redis_session.session_key)
37 eq_(redis_session.exists(redis_session.session_key), False)
38
39
40 def test_flush():
41 redis_session['key'] = 'another_value'
42 redis_session.save()
43 key = redis_session.session_key
44 redis_session.flush()
45 eq_(redis_session.exists(key), False)
46
47
48 def test_items():
49 redis_session['item1'], redis_session['item2'] = 1, 2
50 redis_session.save()
51 # Python 3.*
52 eq_(set(list(redis_session.items())), set([('item2', 2), ('item1', 1)]))
53
54
55 def test_expiry():
56 redis_session.set_expiry(1)
57 # Test if the expiry age is set correctly
58 eq_(redis_session.get_expiry_age(), 1)
59 redis_session['key'] = 'expiring_value'
60 redis_session.save()
61 key = redis_session.session_key
62 eq_(redis_session.exists(key), True)
63 time.sleep(2)
64 eq_(redis_session.exists(key), False)
65
66
67 def test_save_and_load():
68 redis_session.set_expiry(60)
69 redis_session.setdefault('item_test', 8)
70 redis_session.save()
71 session_data = redis_session.load()
72 eq_(session_data.get('item_test'), 8)
73
74
75 def test_with_redis_url_config():
76 settings.SESSION_REDIS_URL = 'redis://localhost'
77
78 from redis_sessions.session import SessionStore
79
80 redis_session = SessionStore()
81 server = redis_session.server
82
83 host = server.connection_pool.connection_kwargs.get('host')
84 port = server.connection_pool.connection_kwargs.get('port')
85 db = server.connection_pool.connection_kwargs.get('db')
86
87 eq_(host, 'localhost')
88 eq_(port, 6379)
89 eq_(db, 0)
90
91
92 def test_one_connection_is_used():
93 session = SessionStore('session_key_1')
94 session['key1'] = 'value1'
95 session.save()
96
97 redis_server = session.server
98 set_client_name_1 = 'client_name_' + str(randint(1, 1000))
99 redis_server.client_setname(set_client_name_1)
100 client_name_1 = redis_server.client_getname()
101 eq_(set_client_name_1, client_name_1)
102 del session
103
104 session = SessionStore('session_key_2')
105 session['key2'] = 'value2'
106 session.save()
107
108 redis_server = session.server
109 client_name_2 = redis_server.client_getname()
110 eq_(client_name_1, client_name_2)
111
112
113 def test_redis_pool_server_select():
114 servers = [
115 {
116 'HOST': 'localhost2',
117 'PORT': 6379,
118 'DB': 0,
119 'PASSWORD': None,
120 'UNIX_DOMAIN_SOCKET_PATH': None,
121 'WEIGHT': 1,
122 },
123 {
124 'HOST': 'localhost1',
125 'PORT': 6379,
126 'DB': 0,
127 'PASSWORD': None,
128 'UNIX_DOMAIN_SOCKET_PATH': None,
129 'WEIGHT': 1,
130 },
131 ]
132
133 keys1 = [
134 'm8f0os91g40fsq8eul6tejqpp6k22',
135 'kcffsbb5o272et1d5e6ib7gh75pd9',
136 'gqldpha87m8183vl9s8uqobcr2ws3',
137 'ukb9bg2jifrr60fstla67knjv3e32',
138 'k3dranjfna7fv7ijpofs6l6bj2pw1',
139 'an4no833idr9jddr960r8ikai5nh3',
140 '16b9gardpcscrj5q4a4kf3c4u7tq8',
141 'etdefnorfbvfc165c5airu77p2pl9',
142 'mr778ou0sqqme21gjdiu4drtc0bv4',
143 'ctkgd8knu5hukdrdue6im28p90kt7'
144 ]
145
146 keys2 = [
147 'jgpsbmjj6030fdr3aefg37nq47nb8',
148 'prsv0trk66jc100pipm6bb78c3pl2',
149 '84ksqj2vqral7c6ped9hcnq940qq1',
150 'bv2uc3q48rm8ubipjmolgnhul0ou3',
151 '6c8oph72pfsg3db37qsefn3746fg4',
152 'tbc0sjtl2bkp5i9n2j2jiqf4r0bg9',
153 'v0on9rorn71913o3rpqhvkknc1wm5',
154 'lmsv98ns819uo2klk3s1nusqm0mr0',
155 '0foo2bkgvrlk3jt2tjbssrsc47tr3',
156 '05ure0f6r5jjlsgaimsuk4n1k2sx6',
157 ]
158 rs = RedisServer('')
159
160 for key in keys1:
161 server_key, server = rs.get_server(key, servers)
162 eq_(server_key, 1)
163
164 for key in keys2:
165 server_key, server = rs.get_server(key, servers)
166 eq_(server_key, 0)
167
168
169 def test_with_unix_url_config():
170 pass
171
172 # Uncomment this in `redis.conf`:
173 #
174 # unixsocket /tmp/redis.sock
175 # unixsocketperm 755
176
177 #settings.SESSION_REDIS_URL = 'unix:///tmp/redis.sock'
178
179 #from redis_sessions.session import SessionStore
180
181 # redis_session = SessionStore()
182 # server = redis_session.server
183 #
184 # host = server.connection_pool.connection_kwargs.get('host')
185 # port = server.connection_pool.connection_kwargs.get('port')
186 # db = server.connection_pool.connection_kwargs.get('db')
187 #
188 # eq_(host, 'localhost')
189 # eq_(port, 6379)
190 # eq_(db, 0)
191
192 # def test_load():
193 # redis_session.set_expiry(60)
194 # redis_session['item1'], redis_session['item2'] = 1,2
195 # redis_session.save()
196 # session_data = redis_session.server.get(redis_session.session_key)
197 # expiry, data = int(session_data[:15]), session_data[15:]
Binary diff not shown