@@ -27,15 +27,13 @@ class BaseJsonModel(JsonModel, abc.ABC):
27
27
class Meta :
28
28
global_key_prefix = key_prefix
29
29
30
-
31
30
class Note (EmbeddedJsonModel ):
32
31
# TODO: This was going to be a full-text search example, but
33
32
# we can't index embedded documents for full-text search in
34
33
# the preview release.
35
34
description : str = Field (index = True )
36
35
created_on : datetime .datetime
37
36
38
-
39
37
class Address (EmbeddedJsonModel ):
40
38
address_line_1 : str
41
39
address_line_2 : Optional [str ]
@@ -45,17 +43,14 @@ class Address(EmbeddedJsonModel):
45
43
postal_code : str = Field (index = True )
46
44
note : Optional [Note ]
47
45
48
-
49
46
class Item (EmbeddedJsonModel ):
50
47
price : decimal .Decimal
51
48
name : str = Field (index = True )
52
49
53
-
54
50
class Order (EmbeddedJsonModel ):
55
51
items : List [Item ]
56
52
created_on : datetime .datetime
57
53
58
-
59
54
class Member (BaseJsonModel ):
60
55
first_name : str = Field (index = True )
61
56
last_name : str = Field (index = True )
@@ -72,8 +67,9 @@ class Member(BaseJsonModel):
72
67
73
68
Migrator ().run ()
74
69
75
- return namedtuple ('Models' , ['BaseJsonModel' , 'Note' , 'Address' , 'Item' , 'Order' , 'Member' ])(
76
- BaseJsonModel , Note , Address , Item , Order , Member )
70
+ return namedtuple (
71
+ "Models" , ["BaseJsonModel" , "Note" , "Address" , "Item" , "Order" , "Member" ]
72
+ )(BaseJsonModel , Note , Address , Item , Order , Member )
77
73
78
74
79
75
@pytest .fixture ()
@@ -213,12 +209,14 @@ def test_updates_a_model(members, m):
213
209
214
210
# Or, updating a field in an embedded model:
215
211
member2 .update (address__city = "Happy Valley" )
216
- assert m .Member .find (m .Member .pk == member2 .pk ).first ().address .city == "Happy Valley"
212
+ assert (
213
+ m .Member .find (m .Member .pk == member2 .pk ).first ().address .city == "Happy Valley"
214
+ )
217
215
218
216
219
217
def test_paginate_query (members , m ):
220
218
member1 , member2 , member3 = members
221
- actual = m .Member .find ().sort_by (' age' ).all (batch_size = 1 )
219
+ actual = m .Member .find ().sort_by (" age" ).all (batch_size = 1 )
222
220
assert actual == [member2 , member1 , member3 ]
223
221
224
222
@@ -250,7 +248,11 @@ def test_access_result_by_index_not_cached(members, m):
250
248
251
249
def test_in_query (members , m ):
252
250
member1 , member2 , member3 = members
253
- actual = m .Member .find (m .Member .pk << [member1 .pk , member2 .pk , member3 .pk ]).sort_by ('age' ).all ()
251
+ actual = (
252
+ m .Member .find (m .Member .pk << [member1 .pk , member2 .pk , member3 .pk ])
253
+ .sort_by ("age" )
254
+ .all ()
255
+ )
254
256
assert actual == [member2 , member1 , member3 ]
255
257
256
258
@@ -272,7 +274,7 @@ def test_update_query(members, m):
272
274
def test_exact_match_queries (members , m ):
273
275
member1 , member2 , member3 = members
274
276
275
- actual = m .Member .find (m .Member .last_name == "Brookins" ).sort_by (' age' ).all ()
277
+ actual = m .Member .find (m .Member .last_name == "Brookins" ).sort_by (" age" ).all ()
276
278
assert actual == [member2 , member1 ]
277
279
278
280
actual = m .Member .find (
@@ -286,28 +288,36 @@ def test_exact_match_queries(members, m):
286
288
actual = m .Member .find (m .Member .last_name != "Brookins" ).all ()
287
289
assert actual == [member3 ]
288
290
289
- actual = m .Member .find (
290
- (m .Member .last_name == "Brookins" ) & (m .Member .first_name == "Andrew" )
291
- | (m .Member .first_name == "Kim" )
292
- ).sort_by ('age' ).all ()
291
+ actual = (
292
+ m .Member .find (
293
+ (m .Member .last_name == "Brookins" ) & (m .Member .first_name == "Andrew" )
294
+ | (m .Member .first_name == "Kim" )
295
+ )
296
+ .sort_by ("age" )
297
+ .all ()
298
+ )
293
299
assert actual == [member2 , member1 ]
294
300
295
301
actual = m .Member .find (
296
302
m .Member .first_name == "Kim" , m .Member .last_name == "Brookins"
297
303
).all ()
298
304
assert actual == [member2 ]
299
305
300
- actual = m .Member .find (m .Member .address .city == "Portland" ).sort_by (' age' ).all ()
306
+ actual = m .Member .find (m .Member .address .city == "Portland" ).sort_by (" age" ).all ()
301
307
assert actual == [member2 , member1 , member3 ]
302
308
303
309
304
310
def test_recursive_query_expression_resolution (members , m ):
305
311
member1 , member2 , member3 = members
306
312
307
- actual = m .Member .find (
308
- (m .Member .last_name == "Brookins" )
309
- | (m .Member .age == 100 ) & (m .Member .last_name == "Smith" )
310
- ).sort_by ('age' ).all ()
313
+ actual = (
314
+ m .Member .find (
315
+ (m .Member .last_name == "Brookins" )
316
+ | (m .Member .age == 100 ) & (m .Member .last_name == "Smith" )
317
+ )
318
+ .sort_by ("age" )
319
+ .all ()
320
+ )
311
321
assert actual == [member2 , member1 , member3 ]
312
322
313
323
@@ -338,7 +348,7 @@ def test_full_text_search(members, m):
338
348
member1 .update (bio = "Hates sunsets, likes beaches" )
339
349
member2 .update (bio = "Hates beaches, likes forests" )
340
350
341
- actual = m .Member .find (m .Member .bio % "beaches" ).sort_by (' age' ).all ()
351
+ actual = m .Member .find (m .Member .bio % "beaches" ).sort_by (" age" ).all ()
342
352
assert actual == [member2 , member1 ]
343
353
344
354
actual = m .Member .find (m .Member .bio % "forests" ).all ()
@@ -348,10 +358,14 @@ def test_full_text_search(members, m):
348
358
def test_tag_queries_boolean_logic (members , m ):
349
359
member1 , member2 , member3 = members
350
360
351
- actual = m .Member .find (
352
- (m .Member .first_name == "Andrew" ) & (m .Member .last_name == "Brookins" )
353
- | (m .Member .last_name == "Smith" )
354
- ).sort_by ('age' ).all ()
361
+ actual = (
362
+ m .Member .find (
363
+ (m .Member .first_name == "Andrew" ) & (m .Member .last_name == "Brookins" )
364
+ | (m .Member .last_name == "Smith" )
365
+ )
366
+ .sort_by ("age" )
367
+ .all ()
368
+ )
355
369
assert actual == [member1 , member3 ]
356
370
357
371
@@ -376,8 +390,12 @@ def test_tag_queries_punctuation(address, m):
376
390
)
377
391
member2 .save ()
378
392
379
- assert m .Member .find (m .Member .first_name == "Andrew, the Michael" ).first () == member1
380
- assert m .Member .find (m .Member .last_name == "St. Brookins-on-Pier" ).first () == member1
393
+ assert (
394
+ m .Member .find (m .Member .first_name == "Andrew, the Michael" ).first () == member1
395
+ )
396
+ assert (
397
+ m .Member .find (m .Member .last_name == "St. Brookins-on-Pier" ).first () == member1
398
+ )
381
399
382
400
# Notice that when we index and query multiple values that use the internal
383
401
# TAG separator for single-value exact-match fields, like an indexed string,
@@ -450,7 +468,7 @@ def test_tag_queries_negation(members, m):
450
468
~ (m .Member .first_name == "Andrew" ) & (m .Member .last_name == "Brookins" )
451
469
| (m .Member .last_name == "Smith" )
452
470
)
453
- assert query .sort_by (' age' ).all () == [member2 , member3 ]
471
+ assert query .sort_by (" age" ).all () == [member2 , member3 ]
454
472
455
473
actual = m .Member .find (
456
474
(m .Member .first_name == "Andrew" ) & ~ (m .Member .last_name == "Brookins" )
@@ -476,13 +494,13 @@ def test_numeric_queries(members, m):
476
494
actual = m .Member .find (m .Member .age >= 100 ).all ()
477
495
assert actual == [member3 ]
478
496
479
- actual = m .Member .find (~ (m .Member .age == 100 )).sort_by (' age' ).all ()
497
+ actual = m .Member .find (~ (m .Member .age == 100 )).sort_by (" age" ).all ()
480
498
assert actual == [member2 , member1 ]
481
499
482
- actual = m .Member .find (m .Member .age > 30 , m .Member .age < 40 ).sort_by (' age' ).all ()
500
+ actual = m .Member .find (m .Member .age > 30 , m .Member .age < 40 ).sort_by (" age" ).all ()
483
501
assert actual == [member2 , member1 ]
484
502
485
- actual = m .Member .find (m .Member .age != 34 ).sort_by (' age' ).all ()
503
+ actual = m .Member .find (m .Member .age != 34 ).sort_by (" age" ).all ()
486
504
assert actual == [member1 , member3 ]
487
505
488
506
@@ -521,7 +539,7 @@ class SortableTarotWitch(m.BaseJsonModel):
521
539
522
540
with pytest .raises (RedisModelError ):
523
541
524
- class SortableFullTextSearchAlchemicalWitch (BaseJsonModel ):
542
+ class SortableFullTextSearchAlchemicalWitch (m . BaseJsonModel ):
525
543
# We don't support indexing a list of strings for full-text search
526
544
# queries. Support for this feature is not planned.
527
545
potions : List [str ] = Field (index = True , full_text_search = True )
0 commit comments