sqlite-database 0.7.10__tar.gz → 0.7.11__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.10/sqlite_database.egg-info → sqlite_database-0.7.11}/PKG-INFO +1 -1
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/sqlite_database/__init__.py +1 -1
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/sqlite_database/_utils.py +6 -3
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/sqlite_database/query_builder.py +22 -5
- {sqlite_database-0.7.10 → sqlite_database-0.7.11/sqlite_database.egg-info}/PKG-INFO +1 -1
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/.editorconfig +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/.github/ISSUE_TEMPLATE/question.md +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/.github/dependabot.yml +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/.github/workflows/pylint.yml +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/.github/workflows/pytest.yml +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/.github/workflows/python-publish.yml +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/.gitignore +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/.readthedocs.yaml +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/.vscode/settings.json +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/History.md +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/LICENSE +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/README.md +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/TODO.md +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/bin/activate +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/bin/check.bat +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/bin/check.sh +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/bin/include/utility.bash +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/bin/install.bash +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/bin/need-installed/activate +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/bin/need-installed/pre-commit +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/bin/summarize-pylint.py +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/dev-config/black.toml +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/dev-config/pylint.toml +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/dev-config/pytest.ini +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/dev-requirements.txt +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs/DatabaseModes.md +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs/Makefile +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs/ModelAPI.md +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs/SimpleGuide.md +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs/_.md +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs/api_reference.rst +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs/conf.py +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs/index.rst +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs/make.bat +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs/modules.rst +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs/sqlite_database.column.rst +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs/sqlite_database.config.rst +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs/sqlite_database.csv.rst +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs/sqlite_database.database.rst +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs/sqlite_database.errors.rst +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs/sqlite_database.functions.rst +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs/sqlite_database.locals.rst +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs/sqlite_database.model.errors.rst +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs/sqlite_database.model.helpers.rst +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs/sqlite_database.model.query_builder.rst +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs/sqlite_database.model.rst +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs/sqlite_database.models.errors.rst +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs/sqlite_database.models.helpers.rst +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs/sqlite_database.models.mixin.rst +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs/sqlite_database.models.query_builder.rst +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs/sqlite_database.models.rst +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs/sqlite_database.models.type_checkers.rst +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs/sqlite_database.operators.rst +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs/sqlite_database.query_builder.rst +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs/sqlite_database.rst +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs/sqlite_database.signature.rst +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs/sqlite_database.subexp.rst +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs/sqlite_database.subquery.rst +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs/sqlite_database.table.rst +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs/sqlite_database.typings.rst +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs/sqlite_database.utils.rst +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs/sqlite_database.workers.connection.rst +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs/sqlite_database.workers.database.rst +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs/sqlite_database.workers.rst +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs-requirements.txt +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/project-init.bash +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/pyproject.toml +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/setup.cfg +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/setup.py +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/sqlite_database/_debug.py +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/sqlite_database/column.py +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/sqlite_database/csv.py +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/sqlite_database/database.py +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/sqlite_database/errors.py +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/sqlite_database/functions.py +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/sqlite_database/locals.py +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/sqlite_database/models/__init__.py +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/sqlite_database/models/errors.py +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/sqlite_database/models/helpers.py +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/sqlite_database/models/mixin.py +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/sqlite_database/models/query_builder.py +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/sqlite_database/models/type_checkers.py +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/sqlite_database/operators.py +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/sqlite_database/signature.py +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/sqlite_database/subquery.py +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/sqlite_database/table.py +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/sqlite_database/typings.py +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/sqlite_database/utils.py +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/sqlite_database/workers/__init__.py +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/sqlite_database/workers/connection.py +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/sqlite_database/workers/database.py +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/sqlite_database.egg-info/SOURCES.txt +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/sqlite_database.egg-info/dependency_links.txt +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/sqlite_database.egg-info/requires.txt +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/sqlite_database.egg-info/top_level.txt +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/sqlite_database.egg-info/zip-safe +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/tests/__init__.py +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/tests/database/__init__.py +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/tests/database/model_api/__init__.py +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/tests/database/model_api/test_model_api.py +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/tests/database/setup.py +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/tests/database/table_api/__init__.py +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/tests/database/table_api/test_csv.py +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/tests/database/table_api/test_delete.py +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/tests/database/table_api/test_insert.py +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/tests/database/table_api/test_others.py +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/tests/database/table_api/test_select.py +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/tests/database/table_api/test_update.py +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/tests/database/test_custom.py +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/tests/manual_test_performances.py +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/tests/test_internals.py +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/tests/user_benchmark.py +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/tests/user_helpers.py +0 -0
- {sqlite_database-0.7.10 → sqlite_database-0.7.11}/transient/README.md +0 -0
|
@@ -108,22 +108,25 @@ def matches(pattern: Pattern, value: str):
|
|
|
108
108
|
return True
|
|
109
109
|
|
|
110
110
|
|
|
111
|
-
def check_one(data: str):
|
|
111
|
+
def check_one(data: str, bypass_list: tuple[str, ...] | None = None):
|
|
112
112
|
"""check one to check if a string contains illegal character OR
|
|
113
113
|
if it is a reserved SQL keyword"""
|
|
114
114
|
if matches(_re_valid, data) is True:
|
|
115
115
|
exc = SecurityError("Cannot parse unsafe data.")
|
|
116
116
|
exc.add_note(f"Target: {data}")
|
|
117
117
|
raise exc
|
|
118
|
+
bp = bypass_list or []
|
|
118
119
|
if data.upper() in _SQLITE_KEYWORDS:
|
|
120
|
+
if data in bp:
|
|
121
|
+
return data
|
|
119
122
|
raise SecurityError(f'"{data}" is a reserved SQL keyword and cannot be used.')
|
|
120
123
|
return data
|
|
121
124
|
|
|
122
125
|
|
|
123
|
-
def check_iter(data: Iterable[str]):
|
|
126
|
+
def check_iter(data: Iterable[str], bypass_list: tuple[str, ...] | None = None):
|
|
124
127
|
"""An iterable checks as it's check_one"""
|
|
125
128
|
for val in data:
|
|
126
|
-
|
|
129
|
+
check_one(val, bypass_list)
|
|
127
130
|
|
|
128
131
|
|
|
129
132
|
class WithCursor(Cursor):
|
|
@@ -95,6 +95,12 @@ class QueryParams:
|
|
|
95
95
|
order: Optional[CacheOrders] = None
|
|
96
96
|
data: Optional[CacheData] = None
|
|
97
97
|
|
|
98
|
+
def __post_init__(self):
|
|
99
|
+
if not all(
|
|
100
|
+
(isinstance(getattr(self, item), int) for item in ("limit", "offset"))
|
|
101
|
+
):
|
|
102
|
+
raise TypeError("Expected limit/offset to be integer")
|
|
103
|
+
|
|
98
104
|
def __hash__(self):
|
|
99
105
|
"""Custom hash function to ensure compatibility with lru_cache."""
|
|
100
106
|
return hash(
|
|
@@ -230,7 +236,8 @@ def extract_signature( # pylint: disable=too-many-locals
|
|
|
230
236
|
|
|
231
237
|
val = (
|
|
232
238
|
Signature(
|
|
233
|
-
":"
|
|
239
|
+
":"
|
|
240
|
+
+ NAMING_FORMAT.format(
|
|
234
241
|
key=key,
|
|
235
242
|
suffix=suffix,
|
|
236
243
|
call_id=call_id,
|
|
@@ -498,7 +505,8 @@ def extract_subquery(subquery: SubQuery, depth: int = 1):
|
|
|
498
505
|
subquery.where,
|
|
499
506
|
subquery.cols,
|
|
500
507
|
subquery.limit,
|
|
501
|
-
|
|
508
|
+
0, # type: ignore
|
|
509
|
+
subquery.orders # type: ignore
|
|
502
510
|
),
|
|
503
511
|
depth=depth,
|
|
504
512
|
)
|
|
@@ -543,9 +551,16 @@ def _setup_limit_patch(table_name: str, condition: str, limit):
|
|
|
543
551
|
def _parse_orders(order: CacheOrders):
|
|
544
552
|
if isinstance(order, tuple) and not isinstance(order[0], tuple):
|
|
545
553
|
ord_, order_by = order
|
|
554
|
+
# print('here')
|
|
555
|
+
check_iter(order, ("asc", "desc")) # type: ignore
|
|
546
556
|
return f"{ord_} {order_by}"
|
|
547
557
|
if isinstance(order, tuple) and isinstance(order[0], tuple):
|
|
548
|
-
|
|
558
|
+
|
|
559
|
+
return ", ".join(
|
|
560
|
+
f"{ord_} {order_by}"
|
|
561
|
+
for ord_, order_by in order
|
|
562
|
+
if check_iter((ord_, order_by), ("asc", "desc"))
|
|
563
|
+
)
|
|
549
564
|
raise TypeError("What?", type(order))
|
|
550
565
|
|
|
551
566
|
|
|
@@ -571,12 +586,14 @@ def _build_select(query_params: QueryParams, depth: int = 0):
|
|
|
571
586
|
)
|
|
572
587
|
check_one(query_params.table_name)
|
|
573
588
|
cond, data = extract_signature(query_params.condition, depth=depth)
|
|
574
|
-
check_iter(query_params.only or ()) # type: ignore
|
|
575
589
|
only_ = "*"
|
|
576
590
|
if query_params.only and isinstance(query_params.only, ParsedFn):
|
|
577
591
|
only_, _ = query_params.only.parse_sql()
|
|
592
|
+
check_iter(
|
|
593
|
+
(query_params.only.name, *(a for a in query_params.only.values if a != "*"))
|
|
594
|
+
)
|
|
578
595
|
elif isinstance(query_params.only, tuple):
|
|
579
|
-
only_ = f"{', '.join(column_name for column_name in query_params.only)}"
|
|
596
|
+
only_ = f"{', '.join(column_name for column_name in query_params.only if check_one(column_name))}"
|
|
580
597
|
elif query_params.only != "*" and isinstance(query_params.only, str):
|
|
581
598
|
only_ = check_one(query_params.only) # type: ignore
|
|
582
599
|
|
|
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.10 → sqlite_database-0.7.11}/docs/sqlite_database.model.query_builder.rst
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs/sqlite_database.models.query_builder.rst
RENAMED
|
File without changes
|
|
File without changes
|
{sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs/sqlite_database.models.type_checkers.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
|
{sqlite_database-0.7.10 → sqlite_database-0.7.11}/docs/sqlite_database.workers.connection.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
|
{sqlite_database-0.7.10 → sqlite_database-0.7.11}/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
|
{sqlite_database-0.7.10 → sqlite_database-0.7.11}/tests/database/model_api/test_model_api.py
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
|