Commit graph

135 commits

Author SHA1 Message Date
Hasan Ramezani
0b5475e3d5 Add pyupgrade to pre-commit configurations 2022-08-17 23:08:31 +02:00
Hasan Ramezani
b354d90c20 Drop support for Django < 3.2 2022-08-17 23:08:29 +02:00
Tim Gates
2dab8afded docs: Fix a few typos
There are small typos in:
- docs/managers.rst
- model_utils/managers.py
- tests/test_models/test_timestamped_model.py

Fixes:
- Should read `subclasses` rather than `subclasess`.
- Should read `queryset` rather than `querset`.
- Should read `permissible` rather than `permissable`.
- Should read `modified` rather than `modifed`.
- Should read `heterogeneous` rather than `heterogenous`.

Signed-off-by: Tim Gates <tim.gates@iress.com>
2022-08-17 22:37:49 +02:00
Adam Johnson
262ac384ac explicit timezones 2022-04-04 12:04:38 +01:00
Adam Johnson
8edd7c00fc Switch from freezegun to time-machine.
It’s [more accurate](https://adamj.eu/tech/2020/06/03/introducing-time-machine/) and [faster](https://adamj.eu/tech/2021/02/19/freezegun-versus-time-machine/).
2022-04-04 11:53:18 +01:00
John Vandenberg
70963149d4 tests.settings: Update backend path 2021-12-26 13:49:49 +08:00
John Vandenberg
e6833a2d52 Allow running tests using sqlite 2021-12-26 12:31:12 +08:00
Hasan Ramezani
e418711f32 Add USE_TZ setting. 2021-12-08 12:33:23 +01:00
Ghassan Maslamani
b65a2ee41d set deafult DB_host as localhost 2021-10-10 23:27:56 +06:00
Matthieu Rigal
6d4112e8ce
Fix performance regression: avoid pickling the whole instance when deepcopying fields on Django 3.1+ (#500)
* test: Add failing test for #gh-498

* fix: Fix performance regression on FileTracker for FileField on Django 3.1+
2021-10-09 21:30:12 +06:00
Sergey Tikhonov
79a7793dc5
#491 Context manager for resetting fields (#494)
* Add tracker context manager and decorator

* Handle auto-field warning in tests

* Use tracker context in monkey-patched methods

* Test delaying set_saved_fields call with context manager

* Docs for tracker context

* Describe FieldsContext context manager in changes

* Fix unused import

* #494 add breaking changes note on 4.1.1 release for #404

* #494 fix typo

* #494 add docstring for FieldsContext

* #494 move breaking changes from 4.1.1 to 4.1.0

* #494 fix typo and add some more docstrings
2021-10-08 15:09:20 +06:00
Nafees Anwar
9deb39dc46 Added deconstruct 2021-04-30 21:40:39 +05:00
Nafees Anwar
a56d07cd68 Added urlsafe token field 2021-04-30 21:40:39 +05:00
Hasan Ramezani
22cbfb6aeb
Rewrite test with subTest and remove parameterized from requirements-test. 2020-12-05 20:24:07 +01:00
Hasan Ramezani
f9fae60551
Remove duplicate test. 2020-12-05 20:13:04 +01:00
Hasan Ramezani
2269f810c8 Fix TypeError in save when model inherits from both TimeStampModel and StatusModel. (Fixes GH-465) 2020-12-02 00:07:22 +01:00
David Smith
79ff8ea6be
Used isort to sort imports (#460) 2020-11-29 20:58:00 +00:00
Jannis Leidel
415742ccdf
Fix typo. 2020-11-29 14:54:45 +01:00
Jannis Leidel
5b3672b980
Run Postgres 10 during testing. 2020-11-29 14:51:26 +01:00
Hasan Ramezani
4ec3ecdade Fix flake8 errors. 2020-11-29 13:36:33 +01:00
Hasan Ramezani
92ff6b927f Remove codes related to old versions of Django. 2020-11-28 21:46:25 +01:00
Hasan Ramezani
79cbc96055 Replace ugettext_lazy with gettext_lazy in test models to satisfy Django deprecation warning. 2020-11-28 19:26:34 +01:00
Arseniy Panfilov
b302580283 use empty set instead of a dict for an 'empty set' test case 2020-10-15 15:51:33 +06:00
Arseniy Panfilov
fdd3af34d9 failing tests with different types of arguments for 'updated_fields' 2020-10-15 15:51:33 +06:00
H. Buğra Aydın
2ad67e77b1
Add status_changed field to upload_fields parameter during save if status field is present (#441)
* implementation/tests

* naming problem
2020-09-17 20:34:57 +06:00
Craig Anderson
b7a160936f Add available_objects soft deletable model manager. Emit deprecation warning when using objects soft deletable manager. 2020-08-25 16:40:09 +06:00
Craig Anderson
eb00f65c81 Change assert calls to avoid deprecation warnings. 2020-08-12 16:33:07 +06:00
Skia
33e46ebd53 managers: avoid querying too much tables when not needed
When calling `select_related()` with an empty list of arguments [1], Django will
try to prefetch some data by doing some first level joints with the related
classes.
This can lead to obvious negative performance impact, but this also breaks some
workarounds for having inheritance for foreign keys [2], as those solutions rely
on lazy evaluation of the related object.

[1]: a4e6030904/django/db/models/query.py (L1051)
     Only passing an explicit `None` to `select_related` will disable the magic.
[2]: https://github.com/jazzband/django-model-utils/issues/11

As examples, here are the generated SQL requests in
InheritanceManagerRelatedTests.test_get_method_with_select_subclasses_check_for_useless_join:

  * without this fix, without adding `.select_related(None)`
```sql
SELECT
    "tests_inheritancemanagertestparent"."id",
    "tests_inheritancemanagertestparent"."non_related_field_using_descriptor",
    "tests_inheritancemanagertestparent"."related_id",
    "tests_inheritancemanagertestparent"."normal_field",
    "tests_inheritancemanagertestparent"."related_self_id",
    "tests_inheritancemanagertestchild4"."other_onetoone_id",
    "tests_inheritancemanagertestchild4"."parent_ptr_id", T3."id",
    T3."non_related_field_using_descriptor", T3."related_id", T3."normal_field",
    T3."related_self_id"
FROM
    "tests_inheritancemanagertestchild4"
INNER JOIN
    "tests_inheritancemanagertestparent" ON
    ("tests_inheritancemanagertestchild4"."parent_ptr_id" = "tests_inheritancemanagertestparent"."id")
INNER JOIN
    "tests_inheritancemanagertestparent" T3 ON
    ("tests_inheritancemanagertestchild4"."other_onetoone_id" = T3."id")
WHERE
    "tests_inheritancemanagertestchild4"."parent_ptr_id" = 191
```

  * with either the fix, or by adding `.select_related(None)` after `.select_subclasses()`
```sql
SELECT
    "tests_inheritancemanagertestparent"."id",
    "tests_inheritancemanagertestparent"."non_related_field_using_descriptor",
    "tests_inheritancemanagertestparent"."related_id",
    "tests_inheritancemanagertestparent"."normal_field",
    "tests_inheritancemanagertestparent"."related_self_id",
    "tests_inheritancemanagertestchild4"."other_onetoone_id",
    "tests_inheritancemanagertestchild4"."parent_ptr_id"
FROM
    "tests_inheritancemanagertestchild4"
INNER JOIN
    "tests_inheritancemanagertestparent" ON
    ("tests_inheritancemanagertestchild4"."parent_ptr_id" = "tests_inheritancemanagertestparent"."id")
WHERE
    "tests_inheritancemanagertestchild4"."parent_ptr_id" = 191

```
2020-07-08 16:59:05 +06:00
H. Buğra Aydın
3e32ae257b Overriding TimeStampedModel's save() method (#412)
* Overriding TimeStampedModel's save() method

to update modified field automatically when update_fields argument is used but modified was not given as a parameter.

* fixed a small error in logic

* added tests for new functionality
2020-01-23 13:19:06 +06:00
Sergey Tikhonov
1386c379b7 FieldTracker should patch save_base instead of save (#404)
* add test for reproducing FieldTracker update_fields issue

FieldTracker does not see update_fields changed in tracked model.save() method

* Patch Model.save_base instead of save

This change allows proper capturing update_fields kwarg if is is changed in overridden save() method.

* Add some details about FieldTracker implementation

* Mention FieldTracker behavior change
2019-12-15 22:43:58 +06:00
Sergey Tikhonov
d756a4a8ce patch Model.refresh_from_db in FieldTracker (#403)
* patch Model.refresh_from_db in FieldTracker

* add info about refresh_from_db patching to CHANGES.rst
2019-12-15 20:28:15 +06:00
Misha K
5aa40c66be Add django 3.0 to the test matrix and drop six (#395)
*  - add django 3.0 to the test matrix
 - drop six

* add entry in CHANGES

* remove context kwarg

* fix test with DeferredAttribute

* rename StringyDescriptor's name to attname

* Fix flake8

* Drop support for Django 1.11 because the API are not compatibles anymore with Django 3.0

* Try to fix tests.

* Define model for the field mock.

* Simplifies the code.

* Properly mock the field.

* Typo

* Use the new API field name.

* Call it attname

* Grab the field instance from the model.

* Use postgres in travis tests.

* Django 2.0.1 minimum is needed.

* Update Changelog to tell about breaking Django 1.11.

* Update changelog to tell about Django 3.0 support.

* @natim review.
2019-12-09 19:37:16 +06:00
Adam Dobrawy
ffa1a85dc7 Modernize Python syntax, add Python 3.8 (#398)
* Modernize Python syntax, add Python 3.8

* Update Python version & dist in TravisCI

* Add postgresql as addon

* Switch to psycopg2-binary

* Drop django.utils.six
2019-11-14 22:50:04 +06:00
Hasan Ramezani
aa94194dbc Drop Python 2 support. (#394) 2019-09-30 14:08:52 +06:00
Rémy HUBSCHER
e6c7b567d1
Remove unsupported django version hacks. 2019-08-21 11:02:23 +02:00
Asif Saif Uddin
d901b233d3
Merge pull request #387 from jazzband/instance-of
Add ability to filter an InheritanceQuerySet by model.
2019-08-20 23:45:02 +06:00
Rémy HUBSCHER
d51368cdc3
Merge pull request #381 from Atorich/fix_tests
Fix tests
2019-08-20 15:42:45 +02:00
Eugene
7d9ebc1b49
Skip AbstractModelTrackerTests
https://github.com/jazzband/django-model-utils/pull/381
2019-08-20 19:00:25 +07:00
Rémy HUBSCHER
1878537f25
Merge branch 'master' into bugfix/issue_109 2019-08-20 13:46:07 +02:00
Rémy HUBSCHER
976c17024e
Merge branch 'master' into instance-of 2019-08-20 12:50:09 +02:00
Asif Saif Uddin
d3534d656d
Merge pull request #384 from Asday/subset
Added `Choices().subset()`.
2019-08-20 05:02:47 +06:00
asday
d9aa34e498 Fixed spacing.
Extraneous whitespace, too many blank lines, and too few blank
lines.
2019-08-19 22:38:05 +01:00
asday
b7483fa538 Removed an unused import. 2019-08-19 22:37:01 +01:00
asday
383740e8ab Added Choices().subset(). 2019-08-19 22:33:08 +01:00
Eugene Kuznetsov
23148f481c fix test case 2019-08-05 18:45:48 +07:00
Eugene Kuznetsov
a3bada7e54 fix test case 2019-08-05 18:44:46 +07:00
Emin Bugra Saral
5d6f8f4e9f Disable signals on save feature 2019-05-20 19:35:05 +02:00
Asif Saif Uddin
25dde41418
Merge pull request #360 from marfyl/master
Add UUIDModel and UUIDField
2019-05-16 05:45:53 +06:00
Jack Cushman
f2e97e4141 Move patch_save to finalize_class so it works on models with save() methods 2019-04-25 17:50:08 -04:00
Nick Sandford
d557c42533 Catch deferred attribute exception (#367) 2019-03-29 12:46:40 +06:00
JMP
fc523d5433 Add tdd to increase coverage 2019-03-20 21:51:31 +01:00
Skia
1b9b5ac2c1 managers: honor OneToOneField.parent_link=False (#363) 2019-03-12 23:29:02 +06:00
JMP
89fd5fff82 Catch exception in test 2019-02-26 19:19:32 +01:00
JMP
8d9a00b89b Fix pep8 error 2019-02-26 18:16:01 +01:00
JMP
c23c622d17 UUIDModel tests 2019-02-26 17:36:35 +01:00
JMP
58e57d5535 UUIDField tests 2019-02-26 17:36:23 +01:00
JMP
5ff0867bf9 UUIDModels for testing purposes 2019-02-26 17:35:50 +01:00
Sergey Tikhonov
6b88c888d3 fix model.save patched in FieldTracker (#353)
* fix model.save patched in FieldTracker

* add test for save call with args

* update changes
2018-12-10 21:35:26 +06:00
Daniel Andrlik
25743141bc Ensure TimeStampedModel modified equals created on initial creation. (#319)
*  Ensure TimeStampedModel modified equals created on initial creation.

Add logic to AutoLastModifiedField which checks to see if the associated created field of the correct cField class type is also present. If the instance has not yet been saved (missing a pk), then set the value to modified to be equal to created.

Fixes #247

📚 Update changes and authors list related to changes.

* 🚑 Set TimeStampedModel modified to be equal to created during first save.

If instance does not yet have a pk, before defaulting the last modified to the current time, iterate over the the fields of the model, and instead use whatever value is found in the first occurance of the AutoCreatedField.

Fixes #247

* Move changelog up to unreleased section.
2018-12-08 12:23:04 +06:00
Éric Araujo
764b7ea78d Add support for reverse iteration of Choices (#314) 2018-12-08 11:47:54 +06:00
Sebastian Illing
326bd7bc02 Fix missing subclasses and annotated in cloned InheritanceQueryset (#335)
Bug only occurs in django > 2
2018-12-08 11:26:36 +06:00
Jonathan Sundqvist
2cb773372d Add a JoinManager that helps with performance (#351)
* Add the join manager + tests

* Documentation for join manager

* Use order_by for consistent tests

* Use postgres instead sqlite for tests for better reliability

* Fix coverage

* Drop django 1.8
2018-11-25 20:18:23 +06:00
tumb1er
ba83be0b43 fix #330 patch MyModel.save instead of MyModel().save 2018-11-20 18:32:09 +03:00
Lucas Wiman
9189d60996 Fix remaining non-E501 line length changes.
The E402 module level import appears to be an error of some kind in flake8?
2018-07-02 13:01:49 -07:00
Lucas Wiman
0859508a64 Fix E123 closing bracket does not match indentation of opening bracket's line 2018-07-02 12:57:14 -07:00
Lucas Wiman
600ddc8dc5 Fix F401: imported but unused. 2018-07-02 12:16:41 -07:00
Lucas Wiman
679aed41a2 Remove unused __unicode__ method (dead code). 2018-07-02 11:52:05 -07:00
Lucas Wiman
954624cb22 Fix F841: local variable is assigned but never used. 2018-07-02 11:50:56 -07:00
Lucas Wiman
f845dcb24c Fix E231: missing whitespace after ",". 2018-07-02 11:49:16 -07:00
Lucas Wiman
654e13235e Fix E303 too many blank lines. 2018-07-02 11:47:19 -07:00
Lucas Wiman
7d6b45f0c1 Increase coverage: verify that accessing the descriptor from the class yields the descriptor object. 2018-06-28 17:04:57 -07:00
Lucas Wiman
cde1d706af Cover a branch in has_changed. 2018-06-28 14:08:03 -07:00
Lucas Wiman
15f9393bb2 Handle API change in DeferredAttribute descriptor in django-trunk.
This should maintain compatibility with the next version of django.
2018-06-28 13:16:33 -07:00
Lucas Wiman
5d410e9ccc Fix test failures from merge. 2018-06-28 11:29:44 -07:00
Lucas Wiman
98a1366608 Merge branch 'defer-has-changed' into django-1.11-compatibility 2018-06-21 12:52:33 -07:00
Lucas Wiman
90ed7fc905 Improve coverage. 2018-06-21 12:41:42 -07:00
Lucas Wiman
80b099f129 Do not override custom descriptors when present.
This commit adds a collection of wrapper classes for tracking fields
while still using custom descriptors that may be present. This fixes
a bug where deferring a model field with a custom descriptor meant
that the descriptor was overridden in all subsequent queries.
2018-06-21 12:41:42 -07:00
Lucas Wiman
be52bc9290 Add failing test for deferred attributes. 2018-06-21 12:41:42 -07:00
Lucas Wiman
0fc0b44c95 Remove version checks for django<1.8.
Support for older versions of django was dropped in 3.0.0.
2018-06-21 12:41:42 -07:00
Hanley Hansen
18dfb6b2cf
Merge pull request #279 from hanleyhansen/inheritance-iterable
Update InheritanceIterable to inherit from ModelIterable instead of BaseIterable
2018-05-02 14:14:22 -04:00
Jack Cushman
d34043fd25 Avoid fetching deferred fields in has_changed 2018-02-10 10:53:36 -05:00
Tony Narlock
28bd4567a7 switch to py.test + pytest-cov 2017-12-11 08:11:55 -06:00
Hanley
0a809df4da make InheritanceIterable inherit from ModelIterable instead of BaseIterable 2017-06-23 09:51:32 -04:00
Carl Meyer
198dcb612e Update github links for jazzband transfer. 2017-04-15 08:47:31 -07:00
Bruno Alla
10ebc16271 Exclude tests from distribution
fixes #258
2017-02-15 23:00:10 +00:00