Skip to content

Commit 4efd4fc

Browse files
author
user
committed
allow Model and Index property __prefix__ = None value
1 parent ee527f8 commit 4efd4fc

11 files changed

Lines changed: 176 additions & 41 deletions

File tree

CHANGELOG.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
# Changelog
22

3-
>> Note: Make sure to edit `version` on `__init__.py`
3+
4+
## 1.2.6
5+
6+
- allow Model and Index property `__prefix__ = None` value
47

58

69
## 1.2.5

RSO/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = "1.2.5"
1+
__version__ = "1.2.6"

RSO/aioredis/index.py

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,14 @@ class HashIndex(BaseIndex):
2121

2222
@classmethod
2323
def _to_redis_key(cls):
24-
return f'{cls.__prefix__}::{cls.__model__.__model_name__}::'\
25-
f'{cls.__index_name__}::{cls.__key__}'
24+
model_prefix = cls.__model__.__model_name__
25+
if cls.__prefix__ is not None:
26+
redis_key = f'{cls.__prefix__}::'
27+
else:
28+
redis_key = ''
29+
redis_key = f'{redis_key}{model_prefix}::' \
30+
f'{cls.__index_name__}::{cls.__key__}'
31+
return redis_key
2632

2733
@property
2834
def redis_key(self):
@@ -65,9 +71,13 @@ class ListIndex(BaseIndex):
6571
@classmethod
6672
def _to_redis_key(cls, value):
6773
model_prefix = cls.__model__.__model_name__
68-
first_part = f'{cls.__prefix__}::{model_prefix}::'\
69-
f'{cls.__index_name__}::{cls.__key__}'
70-
return f'{first_part}:{value}'
74+
if cls.__prefix__ is not None:
75+
redis_key = f'{cls.__prefix__}::'
76+
else:
77+
redis_key = ''
78+
redis_key = f'{redis_key}{model_prefix}::' \
79+
f'{cls.__index_name__}::{cls.__key__}:{value}'
80+
return redis_key
7181

7282
@property
7383
def redis_key(self):
@@ -139,9 +149,13 @@ class SetIndex(BaseIndex):
139149
@classmethod
140150
def _to_redis_key(cls, value):
141151
model_prefix = cls.__model__.__model_name__
142-
first_part = f'{cls.__prefix__}::{model_prefix}::'\
143-
f'{cls.__index_name__}::{cls.__key__}'
144-
return f'{first_part}:{value}'
152+
if cls.__prefix__ is not None:
153+
redis_key = f'{cls.__prefix__}::'
154+
else:
155+
redis_key = ''
156+
redis_key = f'{redis_key}{model_prefix}::' \
157+
f'{cls.__index_name__}::{cls.__key__}:{value}'
158+
return redis_key
145159

146160
@property
147161
def redis_key(self):

RSO/base.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111

1212
class BaseIndex:
1313
# prefix for redis key
14-
__prefix__: str = REDIS_MODEL_PREFIX
15-
__index_name__: str = 'index_base'
14+
__prefix__: str
15+
__index_name__: str = 'index'
1616
# Model class that using this index
1717
__model__: T
1818
__key__: str
@@ -32,12 +32,12 @@ def create_from_model_class(cls, model_instance: Type["BaseModel"]):
3232

3333
class BaseModel:
3434
# prefix for redis key
35-
__prefix__: str = REDIS_MODEL_PREFIX
35+
__prefix__: str
3636
# infix for redis key and model name
3737
__model_name__: str
3838
# Object property name that are to be redis key suffix
3939
__key__: str
40-
__indexes__: List[BaseIndex] = []
40+
__indexes__: List[BaseIndex]
4141

4242
@classmethod
4343
def get_fields(cls) -> List[str]:
@@ -68,6 +68,8 @@ def __post_init__(self):
6868
def _to_redis_key(cls, value):
6969
if isinstance(value, UUID):
7070
value = str(value)
71+
if cls.__prefix__ is None:
72+
return f'{cls.__model_name__}:{value}'
7173
return f'{cls.__prefix__}::{cls.__model_name__}:{value}'
7274

7375
@property

RSO/index.py

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,14 @@
1010
class HashIndex(BaseIndex):
1111
@classmethod
1212
def _to_redis_key(cls) -> str:
13-
return f'{cls.__prefix__}::{cls.__model__.__model_name__}::'\
14-
f'{cls.__index_name__}::{cls.__key__}'
13+
model_prefix = cls.__model__.__model_name__
14+
if cls.__prefix__ is not None:
15+
redis_key = f'{cls.__prefix__}::'
16+
else:
17+
redis_key = ''
18+
redis_key = f'{redis_key}{model_prefix}::' \
19+
f'{cls.__index_name__}::{cls.__key__}'
20+
return redis_key
1521

1622
@property
1723
def redis_key(self) -> str:
@@ -44,9 +50,13 @@ class ListIndex(BaseIndex):
4450
@classmethod
4551
def _to_redis_key(cls, value) -> str:
4652
model_prefix = cls.__model__.__model_name__
47-
first_part = f'{cls.__prefix__}::{model_prefix}::'\
48-
f'{cls.__index_name__}::{cls.__key__}'
49-
return f'{first_part}:{value}'
53+
if cls.__prefix__ is not None:
54+
redis_key = f'{cls.__prefix__}::'
55+
else:
56+
redis_key = ''
57+
redis_key = f'{redis_key}{model_prefix}::' \
58+
f'{cls.__index_name__}::{cls.__key__}:{value}'
59+
return redis_key
5060

5161
@property
5262
def redis_key(self) -> str:
@@ -114,9 +124,13 @@ class SetIndex(BaseIndex):
114124
@classmethod
115125
def _to_redis_key(cls, value: Any) -> str:
116126
model_prefix = cls.__model__.__model_name__
117-
first_part = f'{cls.__prefix__}::{model_prefix}::'\
118-
f'{cls.__index_name__}::{cls.__key__}'
119-
return f'{first_part}:{value}'
127+
if cls.__prefix__ is not None:
128+
redis_key = f'{cls.__prefix__}::'
129+
else:
130+
redis_key = ''
131+
redis_key = f'{redis_key}{model_prefix}::' \
132+
f'{cls.__index_name__}::{cls.__key__}:{value}'
133+
return redis_key
120134

121135
@property
122136
def redis_key(self) -> str:

RSO/txredisapi/index.py

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,14 @@
1111
class HashIndex(BaseIndex):
1212
@classmethod
1313
def _to_redis_key(cls) -> str:
14-
return f'{cls.__prefix__}::{cls.__model__.__model_name__}::'\
15-
f'{cls.__index_name__}::{cls.__key__}'
14+
model_prefix = cls.__model__.__model_name__
15+
if cls.__prefix__ is not None:
16+
redis_key = f'{cls.__prefix__}::'
17+
else:
18+
redis_key = ''
19+
redis_key = f'{redis_key}{model_prefix}::' \
20+
f'{cls.__index_name__}::{cls.__key__}'
21+
return redis_key
1622

1723
@property
1824
def redis_key(self) -> str:
@@ -60,9 +66,13 @@ class ListIndex(BaseIndex):
6066
@classmethod
6167
def _to_redis_key(cls, value):
6268
model_prefix = cls.__model__.__model_name__
63-
first_part = f'{cls.__prefix__}::{model_prefix}::'\
64-
f'{cls.__index_name__}::{cls.__key__}'
65-
return f'{first_part}:{value}'
69+
if cls.__prefix__ is not None:
70+
redis_key = f'{cls.__prefix__}::'
71+
else:
72+
redis_key = ''
73+
redis_key = f'{redis_key}{model_prefix}::' \
74+
f'{cls.__index_name__}::{cls.__key__}:{value}'
75+
return redis_key
6676

6777
@property
6878
def redis_key(self):
@@ -152,9 +162,14 @@ class SetIndex(BaseIndex):
152162

153163
@classmethod
154164
def _to_redis_key(cls, value):
155-
first_part = f'{cls.__prefix__}::{cls.__model__.__model_name__}::'\
156-
f'{cls.__index_name__}::{cls.__key__}'
157-
return f'{first_part}:{value}'
165+
model_prefix = cls.__model__.__model_name__
166+
if cls.__prefix__ is not None:
167+
redis_key = f'{cls.__prefix__}::'
168+
else:
169+
redis_key = ''
170+
redis_key = f'{redis_key}{model_prefix}::' \
171+
f'{cls.__index_name__}::{cls.__key__}:{value}'
172+
return redis_key
158173

159174
@property
160175
def redis_key(self):
@@ -167,7 +182,7 @@ def save_index(self, redis: Union[BaseRedisProtocol, ConnectionHandler]):
167182
redis.sadd(self.redis_key, self._model_key_value)
168183
returnValue(None)
169184
else:
170-
yield redis.sadd(self.redis_key, self._model_key_value)
185+
yield redis.sadd(self.redis_key, members=self._model_key_value)
171186

172187
@classmethod
173188
@inlineCallbacks
@@ -196,4 +211,4 @@ def search_models(
196211

197212
@inlineCallbacks
198213
def remove_from_index(self, redis: Union[BaseRedisProtocol, ConnectionHandler]):
199-
yield redis.srem(self.redis_key, self._model_key_value)
214+
yield redis.srem(self.redis_key, members=self._model_key_value)

tests/conftest.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ def tx_redis():
4848

4949
@inlineCallbacks
5050
def cb(conn):
51-
yield conn.ping()
5251
yield conn.flushdb()
5352
return conn
5453
d.addCallback(cb)

tests/models/redispy.py

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,23 @@ def to_redis(self):
5050
def search_by_queue(cls, redis: Redis, queue_id: int):
5151
return ListIndexQueue.search_models(redis, queue_id, cls)
5252

53-
@classmethod
54-
def search_by_list_by_rpushlpop(
55-
cls, redis: Redis, queue_id: int
56-
):
57-
return ListIndexQueue.x
53+
54+
class NoPrefixSingleIndexUsername(BaseIndexUsername, HashIndex):
55+
__prefix__ = None
56+
57+
58+
class NoPrefixSingleIndexEmail(BaseIndexEmail, HashIndex):
59+
__prefix__ = None
60+
61+
62+
class NoPrefixSetIndexGroupID(BaseIndexGroupID, SetIndex):
63+
__prefix__ = None
64+
65+
66+
class NoPrefixListIndexQueue(BaseIndexQueue, ListIndex):
67+
__prefix__ = None
68+
69+
70+
@dataclass
71+
class NoPrefixUserModel(Model, BaseUserModel):
72+
__prefix__ = None

tests/models/txredisapi.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,4 +64,3 @@ class ExtendedUserModel(UserModel):
6464
@defer.inlineCallbacks
6565
def save(self, redis: Union[BaseRedisProtocol, ConnectionHandler]):
6666
yield super(ExtendedUserModel, self).extended_save(redis)
67-

tests/test_index.py

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,39 @@
11
from datetime import date
22

3+
from tests.models.const import REDIS_MODEL_PREFIX
34
from .models.redispy import (
45
UserModel,
56
SingleIndexEmail,
67
SingleIndexUsername,
78
SetIndexGroupID,
8-
ListIndexQueue
9+
ListIndexQueue,
10+
NoPrefixUserModel,
11+
NoPrefixSingleIndexUsername,
12+
NoPrefixSetIndexGroupID,
13+
NoPrefixListIndexQueue,
914
)
1015

1116

1217
BIRTH_DATE = date.fromisoformat('1999-09-09')
1318

1419

1520
class TestHashIndex:
21+
def test_redis_key(self):
22+
# With prefix
23+
user = UserModel(
24+
user_id=1, username='username', email='test@email'
25+
)
26+
index = SingleIndexUsername.create_from_model_class(user)
27+
assert index.redis_key.startswith(REDIS_MODEL_PREFIX)
28+
29+
# Without prefix
30+
user = NoPrefixUserModel(
31+
user_id=1, username='username', email='test@email'
32+
)
33+
index = NoPrefixSingleIndexUsername.create_from_model_class(user)
34+
assert not index.redis_key.startswith(REDIS_MODEL_PREFIX)
35+
36+
1637
def test_search_model(self, sync_redis):
1738
user = UserModel(
1839
user_id=1, username='username', email='test@email'
@@ -59,6 +80,22 @@ def test_after_delete(self, sync_redis):
5980

6081

6182
class TestListIndex:
83+
def test_redis_key(self):
84+
# With prefix
85+
user = UserModel(
86+
user_id=1, username='username', email='test@email'
87+
)
88+
index = ListIndexQueue.create_from_model_class(user)
89+
assert index.redis_key.startswith(REDIS_MODEL_PREFIX)
90+
91+
# Without prefix
92+
user = NoPrefixUserModel(
93+
user_id=1, username='username', email='test@email'
94+
)
95+
index = NoPrefixListIndexQueue.create_from_model_class(user)
96+
assert not index.redis_key.startswith(REDIS_MODEL_PREFIX)
97+
98+
6299
def test_success(self, sync_redis):
63100
user = UserModel(
64101
user_id=1,
@@ -150,6 +187,22 @@ def test_after_delete(self, sync_redis):
150187

151188

152189
class TestSetIndex:
190+
191+
def test_redis_key(self):
192+
# With prefix
193+
user = UserModel(
194+
user_id=1, username='username', email='test@email'
195+
)
196+
index = SetIndexGroupID.create_from_model_class(user)
197+
assert index.redis_key.startswith(REDIS_MODEL_PREFIX)
198+
199+
# Without prefix
200+
user = NoPrefixUserModel(
201+
user_id=1, username='username', email='test@email'
202+
)
203+
index = NoPrefixSetIndexGroupID.create_from_model_class(user)
204+
assert not index.redis_key.startswith(REDIS_MODEL_PREFIX)
205+
153206
def test_search_model(self, sync_redis):
154207
user = UserModel(
155208
user_id=1, username='username', group_id=10,

0 commit comments

Comments
 (0)