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.
Files changed (109) hide show
  1. {sqlite_database-0.7.5/sqlite_database.egg-info → sqlite_database-0.7.6}/PKG-INFO +1 -1
  2. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/__init__.py +2 -3
  3. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/models/query_builder.py +42 -14
  4. {sqlite_database-0.7.5 → sqlite_database-0.7.6/sqlite_database.egg-info}/PKG-INFO +1 -1
  5. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/tests/database/model_api/test_model_api.py +22 -12
  6. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/.editorconfig +0 -0
  7. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  8. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  9. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/.github/ISSUE_TEMPLATE/question.md +0 -0
  10. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/.github/dependabot.yml +0 -0
  11. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/.github/workflows/pylint.yml +0 -0
  12. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/.github/workflows/pytest.yml +0 -0
  13. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/.github/workflows/python-publish.yml +0 -0
  14. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/.gitignore +0 -0
  15. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/.readthedocs.yaml +0 -0
  16. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/.vscode/settings.json +0 -0
  17. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/Features.md +0 -0
  18. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/History.md +0 -0
  19. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/LICENSE +0 -0
  20. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/README.md +0 -0
  21. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/SimpleGuide.md +0 -0
  22. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/TODO.md +0 -0
  23. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/bin/activate +0 -0
  24. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/bin/check.bat +0 -0
  25. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/bin/check.sh +0 -0
  26. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/bin/include/utility.bash +0 -0
  27. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/bin/install.bash +0 -0
  28. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/bin/need-installed/activate +0 -0
  29. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/bin/need-installed/pre-commit +0 -0
  30. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/bin/summarize-pylint.py +0 -0
  31. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/dev-config/black.toml +0 -0
  32. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/dev-config/pylint.toml +0 -0
  33. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/dev-config/pytest.ini +0 -0
  34. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/dev-requirements.txt +0 -0
  35. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/Makefile +0 -0
  36. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/ModelAPI.md +0 -0
  37. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/SimpleGuide.md +0 -0
  38. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/_.md +0 -0
  39. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/api_reference.rst +0 -0
  40. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/conf.py +0 -0
  41. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/index.rst +0 -0
  42. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/make.bat +0 -0
  43. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/modules.rst +0 -0
  44. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/sqlite_database.column.rst +0 -0
  45. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/sqlite_database.config.rst +0 -0
  46. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/sqlite_database.csv.rst +0 -0
  47. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/sqlite_database.database.rst +0 -0
  48. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/sqlite_database.errors.rst +0 -0
  49. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/sqlite_database.functions.rst +0 -0
  50. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/sqlite_database.locals.rst +0 -0
  51. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/sqlite_database.model.errors.rst +0 -0
  52. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/sqlite_database.model.helpers.rst +0 -0
  53. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/sqlite_database.model.query_builder.rst +0 -0
  54. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/sqlite_database.model.rst +0 -0
  55. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/sqlite_database.operators.rst +0 -0
  56. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/sqlite_database.query_builder.rst +0 -0
  57. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/sqlite_database.rst +0 -0
  58. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/sqlite_database.signature.rst +0 -0
  59. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/sqlite_database.subexp.rst +0 -0
  60. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/sqlite_database.table.rst +0 -0
  61. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/sqlite_database.typings.rst +0 -0
  62. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs/sqlite_database.utils.rst +0 -0
  63. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/docs-requirements.txt +0 -0
  64. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/project-init.bash +0 -0
  65. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/pyproject.toml +0 -0
  66. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/setup.cfg +0 -0
  67. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/setup.py +0 -0
  68. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/_debug.py +0 -0
  69. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/_utils.py +0 -0
  70. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/column.py +0 -0
  71. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/csv.py +0 -0
  72. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/database.py +0 -0
  73. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/errors.py +0 -0
  74. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/functions.py +0 -0
  75. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/locals.py +0 -0
  76. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/models/__init__.py +0 -0
  77. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/models/errors.py +0 -0
  78. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/models/helpers.py +0 -0
  79. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/models/mixin.py +0 -0
  80. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/models/type_checkers.py +0 -0
  81. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/operators.py +0 -0
  82. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/query_builder.py +0 -0
  83. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/signature.py +0 -0
  84. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/subquery.py +0 -0
  85. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/table.py +0 -0
  86. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/typings.py +0 -0
  87. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database/utils.py +0 -0
  88. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database.egg-info/SOURCES.txt +0 -0
  89. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database.egg-info/dependency_links.txt +0 -0
  90. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database.egg-info/requires.txt +0 -0
  91. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database.egg-info/top_level.txt +0 -0
  92. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/sqlite_database.egg-info/zip-safe +0 -0
  93. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/tests/__init__.py +0 -0
  94. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/tests/database/__init__.py +0 -0
  95. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/tests/database/model_api/__init__.py +0 -0
  96. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/tests/database/setup.py +0 -0
  97. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/tests/database/table_api/__init__.py +0 -0
  98. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/tests/database/table_api/test_csv.py +0 -0
  99. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/tests/database/table_api/test_delete.py +0 -0
  100. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/tests/database/table_api/test_insert.py +0 -0
  101. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/tests/database/table_api/test_others.py +0 -0
  102. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/tests/database/table_api/test_select.py +0 -0
  103. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/tests/database/table_api/test_update.py +0 -0
  104. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/tests/database/test_custom.py +0 -0
  105. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/tests/manual_test_performances.py +0 -0
  106. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/tests/test_internals.py +0 -0
  107. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/tests/user_benchmark.py +0 -0
  108. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/tests/user_helpers.py +0 -0
  109. {sqlite_database-0.7.5 → sqlite_database-0.7.6}/transient/README.md +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sqlite_database
3
- Version: 0.7.5
3
+ Version: 0.7.6
4
4
  Summary: A weird wrapper for SQLite Connection
5
5
  Home-page: https://github.com/RimuEirnarn/sqlite_database
6
6
  Author: RimuEirnarn
@@ -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 null, Row, Null
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.5"
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 # pylint: disable=unused-import
10
+ from .. import models # pylint: disable=unused-import
9
11
 
10
12
  T = TypeVar("T", bound="models.BaseModel")
11
- count = Function('COUNT')
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
- self._filters, limit=self._limit, offset=self._offset, order=self._order
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(f"Model {self._model.__name__} has no data for current scope")
57
- return [
58
- self._model(**record) for record in records
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(f"Model {self._model.__name__} has no data for current scope")
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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sqlite_database
3
- Version: 0.7.5
3
+ Version: 0.7.6
4
4
  Summary: A weird wrapper for SQLite Connection
5
5
  Home-page: https://github.com/RimuEirnarn/sqlite_database
6
6
  Author: RimuEirnarn
@@ -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