sqlite-database 0.7.5__tar.gz → 0.7.6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {sqlite_database-0.7.5/sqlite_database.egg-info → sqlite_database-0.7.6}/PKG-INFO +1 -1
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/__init__.py +2 -3
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/models/query_builder.py +42 -14
- {sqlite_database-0.7.5 → sqlite_database-0.7.6/sqlite_database.egg-info}/PKG-INFO +1 -1
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/tests/database/model_api/test_model_api.py +22 -12
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/.editorconfig +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/.github/ISSUE_TEMPLATE/question.md +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/.github/dependabot.yml +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/.github/workflows/pylint.yml +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/.github/workflows/pytest.yml +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/.github/workflows/python-publish.yml +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/.gitignore +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/.readthedocs.yaml +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/.vscode/settings.json +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/Features.md +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/History.md +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/LICENSE +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/README.md +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/SimpleGuide.md +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/TODO.md +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/bin/activate +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/bin/check.bat +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/bin/check.sh +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/bin/include/utility.bash +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/bin/install.bash +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/bin/need-installed/activate +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/bin/need-installed/pre-commit +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/bin/summarize-pylint.py +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/dev-config/black.toml +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/dev-config/pylint.toml +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/dev-config/pytest.ini +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/dev-requirements.txt +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/Makefile +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/ModelAPI.md +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/SimpleGuide.md +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/_.md +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/api_reference.rst +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/conf.py +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/index.rst +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/make.bat +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/modules.rst +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/sqlite_database.column.rst +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/sqlite_database.config.rst +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/sqlite_database.csv.rst +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/sqlite_database.database.rst +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/sqlite_database.errors.rst +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/sqlite_database.functions.rst +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/sqlite_database.locals.rst +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/sqlite_database.model.errors.rst +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/sqlite_database.model.helpers.rst +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/sqlite_database.model.query_builder.rst +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/sqlite_database.model.rst +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/sqlite_database.operators.rst +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/sqlite_database.query_builder.rst +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/sqlite_database.rst +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/sqlite_database.signature.rst +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/sqlite_database.subexp.rst +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/sqlite_database.table.rst +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/sqlite_database.typings.rst +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/sqlite_database.utils.rst +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs-requirements.txt +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/project-init.bash +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/pyproject.toml +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/setup.cfg +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/setup.py +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/_debug.py +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/_utils.py +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/column.py +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/csv.py +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/database.py +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/errors.py +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/functions.py +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/locals.py +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/models/__init__.py +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/models/errors.py +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/models/helpers.py +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/models/mixin.py +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/models/type_checkers.py +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/operators.py +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/query_builder.py +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/signature.py +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/subquery.py +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/table.py +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/typings.py +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/utils.py +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database.egg-info/SOURCES.txt +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database.egg-info/dependency_links.txt +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database.egg-info/requires.txt +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database.egg-info/top_level.txt +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database.egg-info/zip-safe +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/tests/__init__.py +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/tests/database/__init__.py +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/tests/database/model_api/__init__.py +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/tests/database/setup.py +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/tests/database/table_api/__init__.py +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/tests/database/table_api/test_csv.py +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/tests/database/table_api/test_delete.py +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/tests/database/table_api/test_insert.py +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/tests/database/table_api/test_others.py +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/tests/database/table_api/test_select.py +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/tests/database/table_api/test_update.py +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/tests/database/test_custom.py +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/tests/manual_test_performances.py +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/tests/test_internals.py +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/tests/user_benchmark.py +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/tests/user_helpers.py +0 -0
- {sqlite_database-0.7.5 → sqlite_database-0.7.6}/transient/README.md +0 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from .models import BaseModel, model, Foreign, Primary, Unique, hook, validate
|
|
4
4
|
from .database import Database
|
|
5
|
-
from ._utils import
|
|
5
|
+
from ._utils import Row, Null
|
|
6
6
|
from .column import Column, text, integer, blob, real
|
|
7
7
|
from .signature import op
|
|
8
8
|
from .operators import this
|
|
@@ -14,14 +14,13 @@ def test_installed():
|
|
|
14
14
|
return True
|
|
15
15
|
|
|
16
16
|
|
|
17
|
-
__version__ = "0.7.
|
|
17
|
+
__version__ = "0.7.6"
|
|
18
18
|
__all__ = [
|
|
19
19
|
"Database",
|
|
20
20
|
"Table",
|
|
21
21
|
"this",
|
|
22
22
|
"op",
|
|
23
23
|
"Column",
|
|
24
|
-
"null",
|
|
25
24
|
"Null",
|
|
26
25
|
"Row",
|
|
27
26
|
"text",
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
"""Model QueryBuilder"""
|
|
2
2
|
|
|
3
|
+
# pylint: disable=protected-access
|
|
4
|
+
|
|
3
5
|
from __future__ import annotations
|
|
4
6
|
from typing import Any, Generic, Type, TypeVar
|
|
5
7
|
from .errors import NoDataReturnedError
|
|
6
8
|
from ..column import check_one
|
|
7
9
|
from ..functions import Function
|
|
8
|
-
from .. import models
|
|
10
|
+
from .. import models # pylint: disable=unused-import
|
|
9
11
|
|
|
10
12
|
T = TypeVar("T", bound="models.BaseModel")
|
|
11
|
-
count = Function(
|
|
13
|
+
count = Function("COUNT")
|
|
14
|
+
|
|
12
15
|
|
|
13
16
|
class QueryBuilder(Generic[T]):
|
|
14
17
|
# pylint: disable=protected-access
|
|
@@ -27,7 +30,7 @@ class QueryBuilder(Generic[T]):
|
|
|
27
30
|
self._failing = True
|
|
28
31
|
return self
|
|
29
32
|
|
|
30
|
-
def where(self, **kwargs):
|
|
33
|
+
def where(self, **kwargs: Any):
|
|
31
34
|
"""Sets conditioning"""
|
|
32
35
|
self._filters.update(kwargs)
|
|
33
36
|
return self
|
|
@@ -50,26 +53,51 @@ class QueryBuilder(Generic[T]):
|
|
|
50
53
|
def fetch(self) -> list[T]:
|
|
51
54
|
"""Fetch data from table"""
|
|
52
55
|
records = self._model._tbl.select( # pylint: disable=protected-access
|
|
53
|
-
|
|
54
|
-
|
|
56
|
+
self._filters, limit=self._limit, offset=self._offset, order=self._order
|
|
57
|
+
)
|
|
55
58
|
if len(records) == 0 and self._failing:
|
|
56
|
-
raise NoDataReturnedError(
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
]
|
|
59
|
+
raise NoDataReturnedError(
|
|
60
|
+
f"Model {self._model.__name__} has no data for current scope"
|
|
61
|
+
)
|
|
62
|
+
return [self._model(**record) for record in records]
|
|
60
63
|
|
|
61
64
|
def fetch_one(self) -> T | None:
|
|
62
65
|
"""Fetch one data from table"""
|
|
63
66
|
# pylint: disable=protected-access
|
|
64
|
-
record = self._model._tbl.select_one(
|
|
65
|
-
self._filters, order=self._order
|
|
66
|
-
)
|
|
67
|
+
record = self._model._tbl.select_one(self._filters, order=self._order)
|
|
67
68
|
if not record and self._failing:
|
|
68
|
-
raise NoDataReturnedError(
|
|
69
|
+
raise NoDataReturnedError(
|
|
70
|
+
f"Model {self._model.__name__} has no data for current scope"
|
|
71
|
+
)
|
|
69
72
|
if not record:
|
|
70
73
|
return None
|
|
71
74
|
return self._model(**record)
|
|
72
75
|
|
|
76
|
+
def patch(self, **kwargs: Any):
|
|
77
|
+
"""Update a data based on the filter according to passed keyword args"""
|
|
78
|
+
affected_rows = self._model._tbl.update(
|
|
79
|
+
self._filters, kwargs, self._limit, self._order
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
if affected_rows == 0 and self._failing:
|
|
83
|
+
raise NoDataReturnedError(
|
|
84
|
+
f"Model {self._model.__name__} updates no data for current scope"
|
|
85
|
+
)
|
|
86
|
+
return affected_rows
|
|
87
|
+
|
|
88
|
+
def delete(self):
|
|
89
|
+
"""Delete data based on the filter"""
|
|
90
|
+
affected_rows = self._model._tbl.delete(self._filters, self._limit, self._order)
|
|
91
|
+
|
|
92
|
+
if affected_rows == 0 and self._failing:
|
|
93
|
+
raise NoDataReturnedError(
|
|
94
|
+
f"Model {self._model.__name__} delete exactly no rows"
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
return affected_rows
|
|
98
|
+
|
|
73
99
|
def count(self) -> int:
|
|
74
100
|
"""Count how much data is within this operation"""
|
|
75
|
-
return self._model._tbl.select(self._filters, what=count(
|
|
101
|
+
return self._model._tbl.select(self._filters, what=count("*"))
|
|
102
|
+
|
|
103
|
+
update = patch
|
|
@@ -9,6 +9,9 @@ from sqlite_database.models.errors import ValidationError, NoDataReturnedError
|
|
|
9
9
|
|
|
10
10
|
from ..setup import setup_model_api
|
|
11
11
|
|
|
12
|
+
def auto_id():
|
|
13
|
+
return str(uuid4())
|
|
14
|
+
|
|
12
15
|
def test_model_api():
|
|
13
16
|
# pylint: disable=protected-access
|
|
14
17
|
"""Test 1100 Model API"""
|
|
@@ -147,9 +150,6 @@ def test_model_auto_id():
|
|
|
147
150
|
|
|
148
151
|
db = Database(":memory:")
|
|
149
152
|
|
|
150
|
-
def auto_id():
|
|
151
|
-
return str(uuid4())
|
|
152
|
-
|
|
153
153
|
@model(db)
|
|
154
154
|
class Users(BaseModel):
|
|
155
155
|
"""Base User class"""
|
|
@@ -172,9 +172,6 @@ def test_model_hidden():
|
|
|
172
172
|
|
|
173
173
|
db = Database(":memory:")
|
|
174
174
|
|
|
175
|
-
def auto_id():
|
|
176
|
-
return str(uuid4())
|
|
177
|
-
|
|
178
175
|
@model(db)
|
|
179
176
|
class Users(BaseModel):
|
|
180
177
|
"""Base User class"""
|
|
@@ -196,9 +193,6 @@ def test_model_fail():
|
|
|
196
193
|
|
|
197
194
|
db = Database(":memory:")
|
|
198
195
|
|
|
199
|
-
def auto_id():
|
|
200
|
-
return str(uuid4())
|
|
201
|
-
|
|
202
196
|
@model(db)
|
|
203
197
|
class Users(BaseModel):
|
|
204
198
|
"""Base User class"""
|
|
@@ -219,9 +213,6 @@ def test_model_api_runtime_typechecking():
|
|
|
219
213
|
|
|
220
214
|
db = Database(":memory:")
|
|
221
215
|
|
|
222
|
-
def auto_id():
|
|
223
|
-
return str(uuid4())
|
|
224
|
-
|
|
225
216
|
@model(db, True)
|
|
226
217
|
class Users(BaseModel):
|
|
227
218
|
"""Base User class"""
|
|
@@ -237,3 +228,22 @@ def test_model_api_runtime_typechecking():
|
|
|
237
228
|
Users.create(id=0, username=0, password=0)
|
|
238
229
|
|
|
239
230
|
assert Users.first() is None, "How?"
|
|
231
|
+
|
|
232
|
+
def test_model_api_query_builder_update():
|
|
233
|
+
"""Test Model API Querybuilder update()"""
|
|
234
|
+
|
|
235
|
+
db = Database(":memory:")
|
|
236
|
+
|
|
237
|
+
Users, _ = setup_model_api(db)
|
|
238
|
+
admin = Users.create(id=auto_id(), username="admin", is_active=True)
|
|
239
|
+
assert Users.where(id=admin.id).throw().patch(username="system") == 1, "Changes should be 1"
|
|
240
|
+
|
|
241
|
+
def test_model_api_query_builder_delete():
|
|
242
|
+
"""Test Model API QueryBuilder delete()"""
|
|
243
|
+
|
|
244
|
+
db = Database(":memory:")
|
|
245
|
+
|
|
246
|
+
Users, _ = setup_model_api(db)
|
|
247
|
+
admin = Users.create(id=auto_id(), username='admin', is_active=True)
|
|
248
|
+
|
|
249
|
+
assert Users.where(id=admin.id).throw().delete() == 1, "Changes should be 1"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/sqlite_database.model.query_builder.rst
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|