Commit Graph

384 Commits

Author SHA1 Message Date
8d3a9c86e7 check for fields overwriting with email validator 2024-04-29 11:25:33 +02:00
ae8bc85efe fix saving related with pk only model (#1297) 2024-04-29 10:54:38 +02:00
5f4354d445 port #989 to new branch due to lack of perms to fix conflicts (#1276) 2024-03-24 00:41:32 +01:00
52d992d8c7 Fix for prefetch related (#1275)
* fix prefetch related merging same relations refering to the same children models

* change to List for p3.8

* adapt refactored prefetch query from abandoned composite_key branch and make sure new test passes

* remove unused code, add missing test for prefetch related with self reference models
2024-03-24 00:00:51 +01:00
500625f0ec WIP - Pydantic v2 support (#1238)
* WIP

* WIP - make test_model_definition tests pass

* WIP - make test_model_methods pass

* WIP - make whole test suit at least run - failing 49/443 tests

* WIP fix part of the getting pydantic tests as types of fields are now kept in core schema and not on fieldsinfo

* WIP fix validation in update by creating individual fields validators, failing 36/443

* WIP fix __pydantic_extra__ in intializing model, fix test related to pydantic config checks, failing 32/442

* WIP - fix enum schema in model_json_schema, failing 31/442

* WIP - fix copying through model, fix setting pydantic fields on through, fix default config and inheriting from it, failing 26/442

* WIP fix tests checking pydantic schema, fix excluding parent fields, failing 21/442

* WIP some missed files

* WIP - fix validators inheritance and fix validators in generated pydantic, failing 17/442

* WIP - fix through models setting - only on reverse side of relation, but always on reverse side, failing 15/442

* WIP - fix through models setting - only on reverse side of relation, but always on reverse side, failing 15/442

* WIP - working on proper populating __dict__ for relations for new schema dumping, some work on openapi docs, failing 13/442

* WIP - remove property fields as pydantic has now computed_field on its own, failing 9/442

* WIP - fixes in docs, failing 8/442

* WIP - fix tests for largebinary schema, wrapped bytes fields fail in pydantic, will be fixed in pydantic-core, remaining is circural schema for related models, failing 6/442

* WIP - fix to pk only models in schemas

* Getting test suites to pass (#1249)

* wip, fixing tests

* iteration, fixing some more tests

* iteration, fixing some more tests

* adhere to comments

* adhere to comments

* remove unnecessary dict call, re-add getattribute for testing

* todo for reverse relationship

* adhere to comments, remove prints

* solve circular refs

* all tests pass 🎉

* remove 3.7 from tests

* add lint and type check jobs

* reforat with ruff, fix jobs

* rename jobs

* fix imports

* fix evaluate in py3.8

* partially fix coverage

* fix coverage, add more tests

* fix test ids

* fix test ids

* fix lint, fix docs, make docs fully working scripts, add test docs job

* fix pyproject

* pin py ver in test docs

* change dir in test docs

* fix pydantic warning hack

* rm poetry call in test_docs

* switch to pathlib in test docs

* remove coverage req test docs

* fix type check tests, fix part of types

* fix/skip next part of types

* fix next part of types

* fix next part of types

* fix coverage

* fix coverage

* fix type (bit dirty 🤷)

* fix some code smells

* change pre-commit

* tweak workflows

* remove no root from tests

* switch to full python path by passing sys.executable

* some small refactor in new base model, one sample test, change makefile

* small refactors to reduce complexity of methods

* temp add tests for prs against pydantic_v2

* remove all references to __fields__

* remove all references to construct, deprecate the method and update model_construct to be in line with pydantic

* deprecate dict and add model_dump, todo switch to model_dict in calls

* fix tests

* change to union

* change to union

* change to model_dump and model_dump_json from dict and json deprecated methods, deprecate them in ormar too

* finish switching dict() -> model_dump()

* finish switching json() -> model_dump_json()

* remove fully pydantic_only

* switch to extra for payment card, change missed json calls

* fix coverage - no more warnings internal

* fix coverage - no more warnings internal - part 2

* split model_construct into own and pydantic parts

* split determine pydantic field type

* change to new field validators

* fix benchmarks, add codspeed instead of pytest-benchmark, add action and gh workflow

* restore pytest-benchmark

* remove codspeed

* pin pydantic version, restore codspeed

* change on push to pydantic_v2 to trigger first one

* Use lifespan function instead of event (#1259)

* check return types

* fix imports order, set warnings=False on json that passes the dict, fix unnecessary loop in one of the test

* remove references to model's meta as it's now ormar config, rename related methods too

* filter out pydantic serializer warnings

* remove choices leftovers

* remove leftovers after property_fields, keep only enough to exclude them in initialization

* add migration guide

* fix meta references

* downgrade databases for now

* Change line numbers in documentation (#1265)

* proofread and fix the docs, part 1

* proofread and fix the docs for models

* proofread and fix the docs for fields

* proofread and fix the docs for relations

* proofread and fix rest of the docs, add release notes for 0.20

* create tables in new docs src

* cleanup old deps, uncomment docs publish on tag

* fix import reorder

---------

Co-authored-by: TouwaStar <30479449+TouwaStar@users.noreply.github.com>
Co-authored-by: Goran Mekić <meka@tilda.center>
2024-03-23 19:28:28 +01:00
242114ee91 fix: Table names and columns not being quoted properly (#789) (#1174)
* Split _on_clause() from_clause parameter into separate table and column strings

* Fix quoting for left side and order action, add test

* Improve join quoting, add more quoting tests
2023-08-30 17:48:32 +02:00
b1ab0de4d4 Bump supported fastapi versions (#1110)
* Bump supported fastapi version to <=0.97, change all fastapi tests from starlette client to httpx.AsyncClient

* Add lifecycle manager to fastapi tests

* Fix coverage

* Add python 3.11 to test suite, bump version
2023-06-18 18:52:06 +02:00
7c18fa55e7 Add benchmarking test suite and greatly improve performance in a few cases (#948)
* Add benchmarking test suite

* Improve amortized time of model relation loads with a large number of rows

* Improve performance of loading models with many related models

* Improve performance of loading models with many related models to O(N)ish

* Fix bug where N model creation with shared related model would build in N^2 time

* Lower blocking time for queryset results

* Add docstrings and streamline hash code

Co-authored-by: haydeec1 <Eric.Haydel@jhuapl.edu>
2022-12-10 17:12:11 +01:00
dda5e24e94 Prepare 0.12.0 release (#892) 2022-10-21 19:53:00 +02:00
513fd32cc8 Fix property_fields not being inherited. Fix for #774. (#891)
* Fix property_fields not being inherited. Fix for #774.

* Fix coverage

* Fix coverage by removing set attribute update - during inheriting the current property fields are not set yet.
2022-10-21 16:18:37 +02:00
f1c0ee336b Fix wrongly excluding relations if they were not in proper order and one of them were excluded. Fix for #779 (#890) 2022-10-21 14:38:16 +02:00
4fa0205598 Allow upserting rows with existing_pk even if they do not exist. (#889)
* Allow for __force_save__ in Model.upsert() method to save the models despite they already have a pk set. On integrity Error proceed to update the model, so in worst case two db calls will be made.

* Fix coverage

* Change implementation to checking if the row exists as postgres leaves hanging invalid transaction on integrity error. On force_save always check if row exists and then save/update (so always two queries).
2022-10-21 13:32:36 +02:00
2c1768bb61 excludee null fields in _construct_relations (#870)
* excludee null fields in _construct_relations

* add missing test to check empty relation in construct

Co-authored-by: collerek <collerek@gmail.com>
2022-10-11 16:55:08 +02:00
3661967a27 Bump dependencies (#874)
* fix pytest-asynio bump to 0.19

* bump mypy

* fix coverage of async fixtures
2022-10-11 16:29:41 +02:00
fd0f40afd0 support(bulk-create): add raise_error flag when bulk-create empty models (#853)
* add raise_error flag when bulk-create empty models

* if not raise_error, return

* fix ut cov

* raise exception when it's empty
2022-09-28 12:54:49 +02:00
e923513681 Fix Limit 0 QuerySet Empty List (#767)
* fix: debug condition check not none limit count

* test: write a test for check zero limit empty list

* fix: debug assert check empty list with is keyword
2022-07-29 17:23:10 +02:00
54305c25d1 mypy m2m iterator fix (#655)
* feat: add type hint for items in iterators for m2m relations

* chore: make flake8 happy
- rename some variables
- reorder some imports

* switch to typing.List

Co-authored-by: Benjamin Mollier <benjamin.mollier@meetap.de>
Co-authored-by: collerek <collerek@gmail.com>
2022-07-22 15:24:24 +02:00
991d4a2a2c Referential Actions Enum Class (#735)
* feat: add action enum class to referential actions

* feat: write validation func for action name string

* test: write test for validation referential action

* fix: backend database running for action test

* fix: set the string type of value enum class

* fix: debuging return statement type for validation

* fix: return non empty for empty action

* refactor: change in line return if statement

* fix: add iterate method in read document md

* fix: update foreign key docstring types

* docs: write documention of refernal actions

* docs: complete referential actions descriptions

* refactor: rename and reposition referential action

* refactor: change validate referential action func

* test: add assert check for really deleted rows

* fix: debug error problem in renamed enum class

* fix: apply black formatted codes

* docs: update the document for referential actions

* docs: added note for server default argument

Co-authored-by: collerek <collerek@gmail.com>
2022-07-22 15:05:37 +02:00
b6e057c303 CheckColumns Constraint (#730)
* feat: add check columns class

* feat: write document of check columns part

* test: write a test for check columns constraints

* fix: debuging test exception raise mysql

* fix: set pragma no cover to ignore cov

* fix: ignore pytest raise in python 3.x not 10

* feat: set constraint name for check columns

* refactor: support index and check overwrites

* fix: debuging check constraint arguments

* fix: debug coverage all code tests

* fix: pass the map of type constraint to counter

* refactor: edit check name replace sapce underline

* refactor: write new function copy constraints

* test: write test for invalid constraint type

* fix: debug text cluase replaced names

* fix: set pragma no cover for result returned

* refactor: no coverage for main if statement

* perf: change get constraint copy func code

* fix: fix bug in mypy typing check
2022-07-14 10:05:30 +02:00
06c3bdb5eb Iterators QuerySet Method (#688)
* feat: add iterator function with sample docstring

* feat: implement the iterator queryset method

* feat: completed the docstring of iterator method

* test: write test function to check iterator result

* refactor: use iterate method instead fetch_all

* fix: debuging syntax error in kwargs of iterator

* feat: write a base sample doc for iterator method

* refactor: add ouput comment iterator docs example

* refactor: check change pk yield ormar model

* test: write new test to coverage iterator queryset

* fix: debuging new user model class 3 number

* fix: iterate on user3 model class

* fix: debug id field in user3 model by main user

* fix: remove prefetch_related for iterator method

* fix: debug mypy test for type annotation

* fix: added type annotation for rows variable

* simplify row checks as processing is expensive, raise exception on prefetch_related with iterator

* fix coverage

* fix mypy, bump mypy in pre-commit to newest version

* refactor: update document and test uuid pk type

* feat: write docs of iterate in quesrysetproxy

* feat: write iterate method querysetproxy tests

* fix: debuging new test written uuid pk

* refactor: seperate iterate test modules

* refactor: change description and handle empty set

* feat: added iterate method in readme files

* fix: set pragma: no cover for raised test

Co-authored-by: collerek <collerek@gmail.com>
2022-07-04 12:41:28 +02:00
6af92aa893 Fix enum schema (#715)
* fix schema with enum fields - issue #699

* fix drivers dependencies - make them optional

* fix command

* provide extras

* add bolean field to related model

* add test with select related and boolean

* new test case based on issue

* fix bool issue in postgres limit queries - issue #704

* fix coverage

* bump version and add release info
2022-06-26 19:36:13 +02:00
6e2a2ad129 Queryset mixins (#629)
* add enum field

* add decorator for asyncio

* fix enum typing, additional tests, add docs

* add more tests

* query-mixin

* use dict to replace ordereddict

Co-authored-by: collerek <collerek@gmail.com>
2022-05-07 14:02:30 +02:00
11bf6d30c4 Fix #320 add __cache__ property into PydanticMixin (#625)
* add __cache__ property into PydanticMixin

* add new test for exclude fields on relations

* fix the return type from __cache__  property

* run pre-commit lints/checks

Co-authored-by: collerek <collerek@gmail.com>
2022-05-07 13:45:42 +02:00
ebf7c6e06f add enum field (#626)
* add enum field

* add decorator for asyncio

* fix enum typing, additional tests, add docs

* add more tests

Co-authored-by: collerek <collerek@gmail.com>
2022-04-27 12:01:00 +02:00
90f78e2fa7 Draft 0.11.0 (#594)
* fix for #584

* fix for #580

* fix typing

* connect to db in test

* refactor test

* remove async mark

* connect client

* fix mypy

* fix mypy

* update deps

* check py3.10?

* remove py3.6, bump version
2022-03-28 18:47:35 +02:00
8376b6635e Merge pull request #557 from MojixCoder/master
Update get_or_create method
2022-03-28 13:04:55 +02:00
a7e78bbf8c Fix collerek/ormar#588 Bug in queryset count() method 2022-03-09 17:51:34 -05:00
f26fafe04c fix json nullable column 2022-02-25 10:46:33 +01:00
cd6d9c85af Lint code base using black 2022-02-06 19:20:27 +03:30
4431a643d5 Update get_or_create method and its tests 2022-02-06 19:14:17 +03:30
2517572a14 Reformat project 2022-02-01 10:33:29 +03:30
fc32001fe7 Update get_or_create method 2022-02-01 09:44:07 +03:30
0e167dc89f use existing encode_json to avoid code duplication, rename queryset customization param and move it to Meta, move docs to models from inheritance 2022-01-26 17:59:00 +01:00
6297846819 orjson test and doc 2022-01-21 10:03:00 +08:00
6299ea4383 can custom query_cls 2022-01-18 16:41:22 +08:00
9ce61d2269 fix type hint 2022-01-18 15:55:18 +08:00
51606a6321 fix 2022-01-18 15:54:21 +08:00
bf6ee9ce35 add encoding 2022-01-18 15:52:10 +08:00
02df4300dd fix json to bytes when bulk-create 2022-01-18 15:45:15 +08:00
5677bda054 fix json fields in bulk operations 2022-01-14 18:27:49 +01:00
7f517c9bdb Merge branch 'master' of https://github.com/collerek/ormar into check_timezones_filters 2022-01-14 17:54:20 +01:00
bf3b36194b bump databases, remove skip on sqlite test 2022-01-14 16:54:26 +01:00
bca6b6eef0 add bulk_post_update: signals 2022-01-14 18:26:11 +08:00
5b7d2d23cb add tests 2022-01-14 15:49:26 +08:00
5bf3c1a709 fix ut coverage 2022-01-10 09:56:48 +08:00
646a901af5 clean unused code 2022-01-06 19:35:13 +01:00
c8586e5b8e rc for skip of literal binds 2022-01-06 18:22:07 +01:00
aab46de800 remove date dumping to isoformat, add pydantic 1.9 support 2022-01-03 18:23:22 +01:00
f245e91740 #455 fix improper quoting of on clause 2021-12-16 18:19:55 +01:00
1b9a59b49d #453 make first and get respect user ordering if set on main model 2021-12-16 17:24:23 +01:00