-
-
Notifications
You must be signed in to change notification settings - Fork 49
/
changelog.txt
589 lines (589 loc) · 38 KB
/
changelog.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
#----------------------------------- 1.1.1 -----------------------------------
[added] IDENTITY_STRING and IDENTITY_STRING_CI keygens for
[fixed] exception edge case when saving / deleting index-only columns with a
unique constraint and no relevant data.
#----------------------------------- 1.1.0 -----------------------------------
[added] UnsafeColumns(); used for direct access to Redis structures per entity,
which are deleted on entity deletion.
#----------------------------------- 1.0.7 -----------------------------------
[fixed] searching by unique indexonly columns; previously would try to use the
useless "to_redis" on the column type, which returns none.
#----------------------------------- 1.0.6 -----------------------------------
[added] IndexOnly columns can now have unique indexes generated via keygen.
#----------------------------------- 1.0.5 -----------------------------------
Re-release for git tags
#----------------------------------- 1.0.4 -----------------------------------
[added] dockerfiles + docker-compose yamls for testing.
[updated] Python version compatability.
#----------------------------------- 1.0.3 -----------------------------------
[fix] explicitly added support for Python 3.7, 3.8, and 3.9 that were already
being tested in travis, but which we missed. Thanks to github user
https://github.com/Frank5000 for the bug report. Also removed extra-old and
generally unsupported Python 2.6 and 3.3 from the list. If you *need*
support for these, please contact me about a support license.
#----------------------------------- 1.0.2 -----------------------------------
[fix] thanks to bug report by github user https://github.com/Goury, fixed old
bug with rebuilding indexes via scan.
#----------------------------------- 1.0.1 -----------------------------------
[fix] thanks to bug report and instructions from github user
https://github.com/mshalom-meta, I have fixed rom to be compatible with
Redis connections having `decode_responses=True` set.
#----------------------------------- 1.0.0 -----------------------------------
[WARNING] data indexed in this version is NO LONGER COMPATIBLE with data indexed
in versions < 1.0.0, THIS VERSION WILL AUTOMATICALLY CONVERT YOUR INDEXES on
save, and older clients saving may not update indexes properly.
[future change] At some point, we'll stop supporting Python 2.7. I don't know
when that is, but it will be soon-ish.
[changed] data storage for "old" indexed data (so we can delete items) has
changed to reduce the number of big keys.
[changed] If you previously used no-filter model.query.count() without a primary
index, that previously worked. That will now return a lie, in order to be
fast. Sorry.
[added] You can now transfer value from one entity to another, marking success
in a 3rd "transfer" entity in a single Redis round-trip. Added from an
inbound email + self-answered StackOverflow answer. Check the new test for
how one might use that + indexes + json in order to handle the 1) payment,
and 2) item transfer for purchaseable items in a market. Thanks to Roman V
for the question / feature request.
[added] You can now iterate over all entities that do not match a given set of
prefixes or suffixes on a known prefix/suffix column. Thanks to github user
https://github.com/bgervan for the feature request.
[fixed] upstream travis config; Redis 3.2 and 4.0 were removed from Docker repo
[fixed] Thanks to github user https://github.com/cdessez for the bug report and
PR to not pass None to a Lua script. Had to fix upstream Travis CI
[added] Utility function to refresh all indexes, while showing progress.
#---------------------------------- 0.42.6 -----------------------------------
[added] get related model from relationship columns thanks to PR from github
user https://github.com/Aimage ; MyModel.column_name.get_related_model()
#---------------------------------- 0.42.5 -----------------------------------
[fixed] Odd indexing and query edge cases that would make some 3.6 String
(bytes) indexes not usable when Text (unicode) was passed. Reindexing
should fix the issue.
#---------------------------------- 0.42.4 -----------------------------------
[fixed] Thanks to github user https://github.com/stacywsmith for the bug
report and PR for fixing the Redis client compatability edge case due to
the Redis Python client upgrades
[changed] Upgraded machines, so upgraded sphinx, so docs got mangled, huge
changelog for what amounts to a few lines of library code change
#---------------------------------- 0.42.3 -----------------------------------
[fixed] IndexOnly() columns no longer accept the unique parameter (was ignored
in effect, anyway)
[added] IndexOnly() columns now take a keygen2 parameter in lieu of the column
+ keygen argument.
[fixed] Some links in the docs
#---------------------------------- 0.42.2 -----------------------------------
[fixed] Model.query.select().limit() will now honor the passed-in limit. Thanks
to Github user https://github.com/healiseu for the bug report
[fixed] Model.query.select() will now no longer pollute non-null session objects
with partial / broken objects. Thanks to Github user
https://github.com/healiseu for the bug report
#---------------------------------- 0.42.1 -----------------------------------
[fixed] Session object wasn't always initialized correctly. Bug report thanks to
github user https://github.com/cdessez .
#---------------------------------- 0.42.0 -----------------------------------
[changed] Attributes passed on object creation that don't exist will now raise
an exception, unless you explicitly pass _extra_ok=True.
[fixed] a fix from bugs 108/109 where objects wouldn't be added to the session
when they should be, and would when they shouldn't be.
[fixed] potential issue when using select and order_by; could have returned
model entities instead of columns selected.
[fixed] issue with iterators over select queries possibly returning bad data
silently (columns would all be 'False').
[fixed] issue with entities going into the session during arbitrary queries
where they shouldn't have.
[fixed] hopefully got sphinx docs to generate consistent order, so subsequent
commits don't result in rewriting it all for every commit :/
#---------------------------------- 0.41.2 -----------------------------------
[added] Model.update(*args, **kwargs) as a convenience method per requset from
github user https://github.com/61t
[fixed] multi-subclassed models may have raised a duplicate PrimaryKey error
on initialization.
[fixed] small issue with over-writing values on IndexOnly() columns not
raising an exception.
#---------------------------------- 0.41.1 -----------------------------------
[fixed] pythonhosted.org is not going to be hosting docs forever, this moves
the docs to github pages and updates references.
#---------------------------------- 0.41.0 -----------------------------------
[fixed] in some cases, bad column metadata could get left in the foreign key
column metadata in rom internals. Shouldn't have affected anything, except
some extra memory being used unnecessarily.
[added] Model.query.delete(blocksize=100) - for deleting models that match a
query. Requires that the model not have any ManyToOne, OneToMany, or
OneToOne columns or other foreign-key relationships. This should speed up
common deletion/cleanup tasks.
[added] util.session.delete(...) - for deleting a list of arbitrary models in
one round trip to Redis, if possible (if all entites are of one type, and
you haven't done anything strange with per-entity connections). Same no
foreign-key relationships limitation exists here.
[fixed] a few misspellings in the docs (there are probably more).
[added] columns.IndexOnly() - allowing multiple indexes and index types over
columns, without explicitly duplicating the column data. Each column index
can be queried by name using the standard
Model.query.filter(index_only_column=value),
Model.query.startswith(index_only_column=value),
Model.query.endswith(index_only_column=value), and/or
Model.query.near(index_only_column=value) - depending on the type of
index created.
#---------------------------------- 0.40.2 -----------------------------------
[fixed] rom had an issue with some types of binary data not being restored
during query (users may receive UnicodeEncodeError). Thanks to github user
https://github.com/bernardko for the bug report.
#---------------------------------- 0.40.1 -----------------------------------
[fixed] this was the actual fix described for 0.40.0, actually here.
#---------------------------------- 0.40.0 -----------------------------------
[fixed] Python 3.x+ rom had an issue where some unique binary String indexes
(the String column in Python 3.x, Text was fine) the unique index would be
unfilled - depending on the data that was passed to the initial object.
Thanks to Gitub user https://github.com/sreecodeslayer
for the bug report; see issue #113 for details.
#---------------------------------- 0.39.5 -----------------------------------
[fixed] When using Model.query.select(...), you are no longer required to
include all 'required' columns as part of the select when decode=True.
Thanks to github user https://github.com/peter-conalgo for the bug report.
#---------------------------------- 0.39.4 -----------------------------------
[fixed] Fix for bug where patterns could match primary key values in prefix
or suffix indexes. Thanks to github user https://github.com/peter-conalgo
for the bug report.
#---------------------------------- 0.39.3 -----------------------------------
[fixed] Fixes SaferDateTime column.
#---------------------------------- 0.39.2 -----------------------------------
[fixed] Travis CI - Python 2.6 is no longer supported in Travis (even if it is
supported by rom :P)
#---------------------------------- 0.39.1 -----------------------------------
[fixed] Added more tests, removed pk as included by default in select()
#---------------------------------- 0.39.0 -----------------------------------
[added] Model.query.select(...) allows for selecting individual columns from
the model, and will return (by default) a dictionary, but can be prodded
to produce a namedtuple (or anything you want). Thanks to github user
https://github.com/peter-conalgo for the feature request
[added] columns.SaferDateTime() to offer better type checking of values set to
datetime columns (partly the result of the in-Redis representation of the
column data)
#---------------------------------- 0.38.1 -----------------------------------
[fixed] If the first method that was called on the rom.session object was
either .refresh() or .refresh_all(), rom would raise an AttributeError.
Thanks to Github user https://github.com/peter-conalgo for the bug report.
#---------------------------------- 0.38.0 -----------------------------------
[fixed] In some cases, columns with keygens that didn't generate an index
entry would not have its column data saved. Thanks to github user
https://github.com/slorg1 for the bug report and 95% of the solution.
#---------------------------------- 0.37.3 -----------------------------------
[added] test for recursive ManyToOne/OneToMany relationships, information:
https://github.com/josiahcarlson/rom/issues/78#issuecomment-249451280
[added] docs for index types and their semantics, information available in the
documentation for `rom.column`:
https://pythonhosted.org/rom/rom.html#rom.Column
[added] Lock and EntityLock objects to rom.util, for access to locks with the
implementation/semantics I like.
[fixed] Made JSON column serialization deterministic to fix race condition
check. Thanks to Github user https://github.com/bparker98 for the bug
report and recommended fix.
#---------------------------------- 0.37.2 -----------------------------------
[fixed] make sure that index data is valid before writing. Bug report and PR
thanks to Github user https://github.com/LuisUrrutia
#---------------------------------- 0.37.1 -----------------------------------
[fixed] query objects will now lowercase queries against FULL_TEXT indexes, as
the index is case-insensitive already. Thanks to Github user
https://github.com/slorg1
#---------------------------------- 0.37.0 -----------------------------------
[added] geo index and 'near' query option backed by Redis 3.2's GEOADD and
GEORADIUS operations. Feature request thanks to Github user
https://github.com/peter-conalgo
#---------------------------------- 0.36.0 -----------------------------------
[changed] Lua is now requried for rom 0.36.0 and later
[fixed] Lua string.format() is not binary safe, and has been silently
corrupting portions of index values for years. This has been fixed, but
you need to rebuild your indexes. Discovered in February, but delayed
until other changes came through.
[changed] filter speed estimation improved substantially, and queries with
numeric range searches can be hundreds of times faster than before.
[removed] unnecessary recursive calls inside session-based entity saving.
#---------------------------------- 0.35.3 -----------------------------------
[fixed] a unicode decoding issue in some cases when iterating over data that
wasn't filtered. Thanks to Axel for the email report and 1-line fix :)
[added] unittests to cover the two paths that weren't previously covered for
no-filter data traversal.
#---------------------------------- 0.35.2 -----------------------------------
[fixed] fixed the travis-ci build.
#---------------------------------- 0.35.1 -----------------------------------
[added] documentation about expiring models/ttls. This is going to be a docs-
only update.
#---------------------------------- 0.35.0 -----------------------------------
[added] Now supporting Python 3.5
[changed] Removed unnecessary class-level _default attribute on Column objects
(it was alway overridden by the instance __slots__)
[fixed] Thanks to a bug report by Github user https://github.com/Edorka from
4 weeks ago, rom now has proper round-tripping for *all* binary data
stored in String columns. Previously, some data would not decode properly
on reading, forcing users to base-64 encode their data on the way in and
out. This is no longer necessary. :D
[fixed] Also fixed an issue with String columns not working properly with
Python 3.x; bug report thanks to Github user https://github.com/summer1988
[added] tests for binary data
#---------------------------------- 0.34.1 -----------------------------------
[changed] Removed the simplejson import at the top of model.py - it was an
accidental testing change that made it through a previous release
#---------------------------------- 0.34.0 -----------------------------------
[added] For column definitions that previously took a `keygen` argument, you
can isntead pass a `keygen2` argument. This `keygen2` argument will be a
callable that accepts 2 arguments, the name of the key, and the dictionary
representing the data that will be written to Redis when the save has been
completed - warning: modifying this dictionary could lead to unpredictable
and/or unexpected behavior
[changed] If an explicit keygen/keygen2 argument is specified on column
creation, you must pass `index=True`, `prefix=True`, or `suffix=True` to
prevent errors
[changed] Previously if a keygen and any either prefix/suffix were set to True
on column creation, you would get "as a bonus" a numeric index for sorting
data by that column. To re-enable this, you must pass `index=True` (the
extra index was not intended)
[changed] If your keygen function returns a dictionary, that dictionary can be
used for both full-text indexes as well as scored value indexes - None or
empty string values in the dictionary will be used for string keys,
numeric values will be used for numeric indexes
[fixed] Tests for index cleanup would fail under Redis 2.6, even though that
test failure was expected under Redis 2.6 . That specific test is now
skipped, and the warning produced during index cleanup informs the user of
the Redis 2.6 issue. Thanks to Github user https://github.com/thedrow for
the PR that demonstrated this issue
[added] Thanks to Github user https://github.com/thedrow for additional tests
for various Redis versions via Travis-ci
[added] Thanks to Github user https://github.com/jmmills for the PR to provide
the ability to use the environment variable ROM_REDIS_URI to pass
connection configuration information into rom
[fixed] Script execution after "SCRIPT FLUSH" has mostly been fixed, thanks to
Github user https://github.com/thedrow for the initial PR/bug report for
updating to fix new Redis client versions - note that you really should
restart your rom-using daemons after a SCRIPT FLUSH call to Redis.
#---------------------------------- 0.33.0 -----------------------------------
[changed] Cleaned up imports and __all__ that was put off after the refactor
[changed] Entities whose underlying data has changed will raise either the
DataRaceError or EntityDeletedError exception, depending on whether the
underlying data was changed, or the full entity was deleted. To force save
regardless of underlying changes, you can use entity.save(force=True), or
the various session methods that also take the force=True argument. Thanks
to Github user https://github.com/jmmills for the bug report. Note that
these exceptions will only be raised when Lua writes are enabled
[added] Two new keygen functions for string indexes - IDENTITY and
IDENTITY_CI, that allow you to search for exact strings and
case-insensitive exact strings. Initial request for keygen thanks to
Github user https://github.com/peter-conalgo
[changed] The CASE_INSENSITIVE keygen has been renamed to SIMPLE_CI to
match the naming of IDENTITY/IDENTITY_CI. The old name is still available,
but will be deprecated in the future
[added] warning of future deprecation of disabled Lua writes - we're 3 years
into viable Lua support in Redis, and there is no good reason not to
enable it
#---------------------------------- 0.32.2 -----------------------------------
[added] empty base methods for handling commit hooks:
_before_insert(), _after_insert(),
_before_update(), _after_update(),
_before_delete(), _after_delete() - you should override them in your Model
subclass to override their default (do nothing) behavior. Feature request
thanks to Github user https://github.com/peter-conalgo
[added] when you need to query a ManyToOne or OneToOne column for references
that are not None/NULL, you can now use Model.query.filter(col=NOT_NULL)
and get the answer you are looking for. Feature request thanks to Github
user https://github.com/peter-conalgo
[cleaned] the query.py module that I forgot to clean up for 0.32.1
#---------------------------------- 0.32.1 -----------------------------------
[changed] made Model.query.all() (a bare query for all entities) behave like
list(Model.query), thanks to feature request by
https://github.com/peter-conalgo
[changed] made Model.query.first() (a bare query for the 'first' entity)
behave like `for i in Model.query: return i`, thanks to feature request by
https://github.com/peter-conalgo
[changed] made empty queries against the Model faster by using an index on the
the PrimaryKey() column if it is available, or HSCAN + a temporary set
when it is not available and you are using Redis 2.8+
[changed] pulled the Query, Model, and _ModelMetaclass objects out of the
__init__.py file and moved them into their own modules - they were getting
too big
[fixed] added missing OneToOne entry in the __all__ exports in __init__.py
#---------------------------------- 0.32.0 -----------------------------------
[fixed] index cleanup with custom namespaces have been broken since their
introduction in 0.29.4, now fixed.
[added] the ability to get a total count of all entities with a bare
Model.query.count(), thanks to feature request by Github user
https://github.com/peter-conalgo
[added] the ability to iterate over all entities without requiring an explicit
index or filtering with a query with Model.query.iter_results(), thanks to
feature request by Github user https://github.com/peter-conalgo
[added] base iterator on Model.query so if you are happy with the defaults,
you can use `for i in Model.query:` instead of
`for i in Model.query.iter_results():`, thanks to feature request by
https://github.com/peter-conalgo
[fixed] `Model.query.iter_results()` on non-empty queries with a limit clause
set could sometimes return more results than were requested. This is now
fixed.
[fixed/changed] Model.query.count() will now honor limit clauses.
#---------------------------------- 0.31.4 -----------------------------------
[fixed] an issue when attempting to fetch a broken entity. Bug report and
initial patch thanks to github user https://github.com/huangwei1024
[added] QueryError exceptions when trying to use .filter(), .startswith(),
.endswith(), .like(), or .order_by() without the appropriate indexes.
#---------------------------------- 0.31.3 -----------------------------------
[added] a _connection property to all Models to be able to fetch the
connection that would be used to read or write data for the model. Thanks
to https://github.com/jmmills for the feature request
#---------------------------------- 0.31.2 -----------------------------------
[fixed] more bugs with String (bytes) columns in rom for Python 3.x
#---------------------------------- 0.31.1 -----------------------------------
[fixed] bug with String (bytes) columns in rom for Python 3.x
#---------------------------------- 0.31.0 -----------------------------------
[fixed] an issue with the docs not generating 20+ notes and warnings from the
source code
[changed] moved on_delete action from OneToMany to ManyToOne, where it belongs
[added] OneToOne column with on_delete functionality, thanks to github user
https://github.com/jmmills for the feature request
[changed] on_delete reference scanning now based ManyToOne/OneToOne
relationships, ensuring that references are now always handled as part of
on_delete processing
[added] missing 'String' column for Python 3.x, which is really just a bytes
column that shares its name with the 2.x String column
[updated] and clarified documentation relating to column arguments and for
String, Text, ManyToOne, OneToMany, and OneToOne columns
[added] on_delete 'set null' and 'set default' options for ManyToOne and
OneToOne columns
[added] OneToMany columns can be used to reference the reverse of a OneToOne
relationship column
#---------------------------------- 0.30.1 -----------------------------------
[updated] Copyright year, development status, Python version compatability,
and stopped installing the test package as part of installation.
[fixed] Tests for Python 2.6 .
[fixed] Issue with prefix/suffix indexes on string columns using the new
SIMPLE and CASE_INSENSITIVE keygen functions
#---------------------------------- 0.30.0 -----------------------------------
[fixed] a double-delete issue with setting a column/attribute to None when the
column/attribute was already empty/None. Thanks to Github user
https://github.com/hakib for the bug report.
[added] keyword-only argument to .get_by() for explicitly fetching numeric
ranges when both a numeric and unique index are specified on a column.
Thanks to Github user https://github.com/hakib for the use-case where the
ambiguity was discovered.
[added] more documentation for optional arguments passed to .get_by()
[changed] Indexes on String/Text columns will start to warn about a
non-specified keygen function in 0.30.0, and will raise an exception in
0.31.0 and later when one isn't specified. This is to ensure that users
are getting the index on their data that is expected. The existing
full-text indexing keygen for string/text will get aliases of
rom.FULL_TEXT, rom.columns.FULL_TEXT, and rom.util.FULL_TEXT .
[added] rom.SIMPLE and rom.CASE_INSENSITIVE basic order keygens for String and
Text column indexes, as well as similarly named aliases in rom.columns and
rom.util, like rom.FULL_TEXT has.
#---------------------------------- 0.29.5 -----------------------------------
[added] Integer columns can now be unique. Thanks to Github user
https://github.com/egalitarian for the feature request for this obviously
missing feature.
#---------------------------------- 0.29.4 -----------------------------------
[added] the ability to explicitly set the namespace all of your data will live
inside. Feature request and first pass at a patch thanks to github user
https://github.com/cabowabo-de
[fixed] bug #56, allowing to set a ManyToOne() column to None as being the
same as deleting the attribute. Thanks to Github user
https://github.com/hakib for the feature request/bug report.
[fixed] bug #57, in which an exception could be raised when making composite
string queries like:
Model.query.filter(a='this', b=['other', 'thing']).execute()
Thanks to github user https://github.com/liorchen for the bug report.
#---------------------------------- 0.29.3 -----------------------------------
[fixed] index cleanup will now also clean any unique indexes that had not
previously been cleaned out when using Redis 2.8+. Note that data deleted
normally using entity.delete() or cascading deletes from rom 0.29.0 and
later should be fine. The only users that should be affected by this are
those who have directly manipulated keys in Redis.
[added] more testing for index cleanup
[changed] when trying to filter or order by a non-existent column, rom will
now raise an exception referring to the missing column. Rom used to let
these queries silently return an empty result set.
[added] warning when trying to order by a json, string, or text columns where
the user would need to provide a custom keygen
[fixed] rom will no longer encode updated data twice when saving, thanks to
Github user https://github.com/huangwei1024 for the bug report and first
pass at a patch
#---------------------------------- 0.29.2 -----------------------------------
[added] HSCAN-based index cleanup for Model keyspaces with many deleted
entities. Should improve index cleanup performance for users of Redis 2.8+
[added] better testing for index cleanup
[fixed] some documentation
#---------------------------- 0.29.1 (unreleased) ----------------------------
[added] Thanks to https://github.com/pconerly travis-ci integration and
optional tox-based testing has been added
#---------------------------------- 0.29.0 -----------------------------------
[added] Query result iterator: query.iter_result(timeout, pagesize) that
automatically wraps query.cached_result(timeout) for convenient iteration
over all entities in the query. Added at the request of Github user
https://github.com/JamesHutchison .
[added] On delete for OneToMany columns now support 'cascade' for recursively
deleting all referencing entities. All on delete behavior is checked
before deleting (a restrict in an entity after 100 levels of 'cascade'
will prevent all deletions). Requested by
https://github.com/JamesHutchison and closes issue #39.
[added] OneToMany columns can now include a reference to the foreign model's
ManyToOne column name that references *this* OneToMany. Useful for cases
where models have multiple OneToMany or ManyToOne columns referencing the
same models. Closes issue #23.
[fixed] Index clearing with util.clean_old_index()
[changed] Index clearing with util.clean_old_index() will also clean out index
data for entities directly deleted or expired in Redis. Closes issue #40.
#---------------------------------- 0.28.0 -----------------------------------
[added] Composite unique constraints like SQLAlchemy's UniqueConstraint() and
Django's unique_together, spelled and used like Django's unique_together.
See http://pythonhosted.org//rom/rom.html#rom.Model for details.
[fixed] Deleting entities will no longer leave extra index data around
(regardless of whether the entitiy had any indexes defined).
[added] Convenience function for cleaning out old index data from deleted
entities. See and read the help on util.clean_old_index() .
[added] Convenience function util.show_progress() to show the progress of
util.refresh_indices() and util.clean_old_index() . See and read the help
on util.show_progress() for usage.
[fixed] Tests to no longer leave testing data in db 15, and running tests
again should clean out the testing data.
[fixed] Incorrect documentation about the String column type.
#---------------------------------- 0.27.0 -----------------------------------
[changed] Added auto-tagging support for release versions pushed to PyPI.
[added] Foreign key references defined with a OneToMany and ManyToOne
relationship will now have the "one" side of the relationship deletion
optionally restrict. Thanks to https://github.com/pconerly for the initial
request and patch.
[added] Additional warnings and tests for future on_delete behavior choices.
[fixed] Re-save issue for datetime objects, as well as any future re-save
issues (like what happened with json columns in rom 0.15). Thanks to
https://github.com/iamkhush for the bug report and example testcase that
lead to the solution.
#---------------------------------- 0.26.5 -----------------------------------
[added] the ability to selectively choose rom's session caching behavior, see
http://pythonhosted.org//rom/rom.html#using-a-non-caching-session-object
#---------------------------------- 0.26.4 -----------------------------------
[fixed] forgot one reference that should have been fixed in 0.26.3. Everyone
should upgrade from 0.26.3 . Thanks to https://github.com/Alanperd for the
report and test case.
#---------------------------------- 0.26.3 -----------------------------------
[fixed] issue when pattern match queries would sometimes produce more results
than would be correct, bug report, test, and initial fix thanks to
https://github.com/Alanperd
#---------------------------------- 0.26.2 -----------------------------------
[fixed] issue when pattern-match queries wouldn't always return full results,
bug report, test, and initial fix thanks to https://github.com/Alanperd
[fixed] two testing errors in Python 2.6.
[fixed] some test cases that weren't properly namespaced for easy cleanup.
[removed] built documention from rom source distribution (see
http://pythonhosted.org/rom/ instead).
[fixed] base documention about rom including the readme is now a part of the
docs available at http://pythonhosted.org/rom/ , thanks to
https://github.com/pconerly for the report on incomplete docs.
[fixed] added modern requirements thanks to report from
https://github.com/pconerly .
[fixed] documentation on per-model connection objects.
[removed] extraneous and confusing documentation about the `index` and
`columns` submodules.
#---------------------------------- 0.26.1 -----------------------------------
[fixed] issue with deleted entity resurrection, bug report and fix thanks to
Justin Mayfield https://github.com/mayfield
[fixed] issue with deleted entities not being completely cleared out during
delete with Lua writes enabled, bug report and fix also courtesy of Justin
Mayfield https://github.com/mayfield
#---------------------------------- 0.26.0 -----------------------------------
[added] support for Python 3.3 thanks to the six library and porting effort
from Justin Mayfield https://github.com/mayfield, which also includes some
additional tests.
[remove] String column from Python 3.3, use the Text column instead.
[changed] Both String and Text columns can use unique columns.
[fixed] rom's behavior with long ints in some situations.
[fixed] rom's behavior with unicode suffixes in Python 2.x.
[added] tests for unicode text indexes, unique indexes, prefix indexes, and
suffix indexes.
[updated] relevant docs regarding the Text column and unique indexes.
[fixed] improperly labeled 0.25.1 release in this changelog.
#---------------------------------- 0.25.1 -----------------------------------
[fixed] an issue where Lua writing wouldn't properly update unique indexes on
deletion was fixed. Thank you to https://github.com/thedrow for the
report.
[changed] added a link to the full Python docs to the Readme.
#---------------------------------- 0.25.0 -----------------------------------
[changed] version numbers to account for bugfixes vs. feature updates.
[added] columns can now be defined to allow for prefix and/or suffix queries.
Enabling prefix queries also enables arbitrary pattern matching over your
data.
[fixed] in some cases, rom would allow the definition of multiple primary
keys, of which only one would ever be used (inconsistently). This will now
result in an error.
[changed] defaulted to assume Lua is available on Redis, which has been
released for over 15 months at this point. You can disable support via
a call to rom._disable_lua_writes().
[added] the ability to cache and get the key that holds the result of a query,
which can be used for pagination, etc. See: Query.cached_result()
[warning] using rom versions of 0.23 with 0.25.0 when prefix and suffix
indexes are enabled can result in improper results from prefix, suffix,
and/or pattern queries, and can result in orphan data living in prefix or
suffix indexes. Upgrade all of your clients!
[changed] temporary keys for queries are now prefixed with the name of the
model over which queries are being executed on. This should effect
basically zero people, but can allow for query cleanup in the off chance
of a failure during execution.
#----------------------------- 0.23 (unreleased) -----------------------------
[changed] reduced number of round trips for single-filter queries by 1, thanks
to https://github.com/MickeyKim for the report.
#----------------------------------- 0.22 ------------------------------------
[fixed] size estimation for intersection ordering when filtering has now been
fixed, thank you to https://github.com/MickeyKim for the report and the
change (should improve performance).
[fixed] an issue with some types when trying to update attributes has now been
fixed, thank you to https://github.com/denisvolokh for the report.
[changed] improved performance for simple numeric range queries of the form
Model.get_by(attr=value) or Model.get_by(attr=(min, max)) by roughly a
factor of 60x or better in some cases. Thank you to
https://github.com/MickeyKim for the report on poor performance.
#----------------------------------- 0.21 ------------------------------------
[fixed] upload for rom 0.20 was missing new columns.py, now fixed
#----------------------------------- 0.20 ------------------------------------
[changed] Added exception when performing .all(), .execute(), or .count() on
query objects that have had no filters or attribute ordering provided.
This addresses issue #12.
[changed] Moved column definitions to their own module, shouldn't affect any
normal uses of rom.
[added] For users of Redis 2.6 and later, there is a beta Lua-enabled writing
option that allows for multiple unique columns on models. In some cases,
this may improve performance when writing many entities very quickly.
[added] The ability to reload an entity from Redis, optionally discarding any
modifications to the object itself. Check out the documentation for
Model.refresh(), Session.refresh(), and Session.refresh_all()
[added] Tests for the newly changed/added features.
[changed] Tests no longer use flushdb() - all test models/indexes/etc. are
prefixed with RomTest, and we find/delete such keys before and after any
tests are run. Now anyone can reasonably run the test suite.
#----------------------------------- 0.19 ------------------------------------
[fixed] Thanks to a bug report by https://github.com/MickeyKim , was notified
of a bug when using unique indexes, which is now fixed and has a testcase.
#----------------------------------- 0.18 ------------------------------------
[fixed] Thanks to a bug report by https://github.com/MickeyKim , was notified
and received an interim patch for a bug that could cause deleted entities
to be resurrected on session.commit() or session.flush() . This has now
been fixed and a testcase has been added.
#----------------------------------- 0.17 ------------------------------------
[added] LGPL 3 licensing option.
#----------------------------------- 0.16 ------------------------------------
[added] Thanks to a feature request from https://github.com/jrsmith , Boolean
column support is now available.
[added] DateTime, Date, and Time column types because I was already adding
Boolean columns.
#----------------------------------- 0.15 ------------------------------------
[fixed] Thanks to https://github.com/MickeyKim who fixed Json columns so that
they round-trip after multiple saves.
#----------------------------------- 0.14 ------------------------------------
[fixed] Thanks to https://github.com/mayfield the manifest is fixed for the
source installation.
#----------------------------------- 0.13 ------------------------------------
[fixed] updating a model will no longer unindex the model on attributes that
weren't updated. Thanks to https://github.com/mayfield for the bug report,
analysis, and initial pull request that ultimately resulted in the fix.
[fixed] pip requires, versioning, etc., thanks to fixes from
https://github.com/mayfield
[changed] Model.get_by() will now work on any type of indexed columns. Unique
columns work as before, and other columns get pass-through to the
Model.query interface.
[changed] Model.get_by() and Model.query.filter() will both accept single
numbers as the value to match on (you don't need to specify a range if you
are querying by equality).
[changed] all changes will be documented in this changelog.txt file to keep a
list of everything that is going on with the project.