dataclassdb 0.1.2__tar.gz → 0.1.3__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.
- {dataclassdb-0.1.2/src/dataclassdb.egg-info → dataclassdb-0.1.3}/PKG-INFO +1 -1
- {dataclassdb-0.1.2 → dataclassdb-0.1.3}/pyproject.toml +1 -1
- {dataclassdb-0.1.2 → dataclassdb-0.1.3}/src/dataclassdb/builders/query_builder.py +15 -1
- {dataclassdb-0.1.2 → dataclassdb-0.1.3/src/dataclassdb.egg-info}/PKG-INFO +1 -1
- {dataclassdb-0.1.2 → dataclassdb-0.1.3}/src/dataclassdb.egg-info/SOURCES.txt +1 -0
- dataclassdb-0.1.3/tests/test_current_cols.py +59 -0
- {dataclassdb-0.1.2 → dataclassdb-0.1.3}/LICENSE +0 -0
- {dataclassdb-0.1.2 → dataclassdb-0.1.3}/README.md +0 -0
- {dataclassdb-0.1.2 → dataclassdb-0.1.3}/setup.cfg +0 -0
- {dataclassdb-0.1.2 → dataclassdb-0.1.3}/src/dataclassdb/__init__.py +0 -0
- {dataclassdb-0.1.2 → dataclassdb-0.1.3}/src/dataclassdb/builders/function_builder.py +0 -0
- {dataclassdb-0.1.2 → dataclassdb-0.1.3}/src/dataclassdb/builders/list_utils.py +0 -0
- {dataclassdb-0.1.2 → dataclassdb-0.1.3}/src/dataclassdb/builders/statement_builder.py +0 -0
- {dataclassdb-0.1.2 → dataclassdb-0.1.3}/src/dataclassdb/builders/string_builder.py +0 -0
- {dataclassdb-0.1.2 → dataclassdb-0.1.3}/src/dataclassdb/constants.py +0 -0
- {dataclassdb-0.1.2 → dataclassdb-0.1.3}/src/dataclassdb/dataclass_db.py +0 -0
- {dataclassdb-0.1.2 → dataclassdb-0.1.3}/src/dataclassdb/dataclass_field_codec.py +0 -0
- {dataclassdb-0.1.2 → dataclassdb-0.1.3}/src/dataclassdb/dataclass_sqlite_field.py +0 -0
- {dataclassdb-0.1.2 → dataclassdb-0.1.3}/src/dataclassdb/dataclass_sqlite_table.py +0 -0
- {dataclassdb-0.1.2 → dataclassdb-0.1.3}/src/dataclassdb/dataclass_types.py +0 -0
- {dataclassdb-0.1.2 → dataclassdb-0.1.3}/src/dataclassdb/db_engine.py +0 -0
- {dataclassdb-0.1.2 → dataclassdb-0.1.3}/src/dataclassdb/utils.py +0 -0
- {dataclassdb-0.1.2 → dataclassdb-0.1.3}/src/dataclassdb.egg-info/dependency_links.txt +0 -0
- {dataclassdb-0.1.2 → dataclassdb-0.1.3}/src/dataclassdb.egg-info/requires.txt +0 -0
- {dataclassdb-0.1.2 → dataclassdb-0.1.3}/src/dataclassdb.egg-info/top_level.txt +0 -0
- {dataclassdb-0.1.2 → dataclassdb-0.1.3}/tests/test_annotation_parsing.py +0 -0
- {dataclassdb-0.1.2 → dataclassdb-0.1.3}/tests/test_builders.py +0 -0
- {dataclassdb-0.1.2 → dataclassdb-0.1.3}/tests/test_custom_codec.py +0 -0
- {dataclassdb-0.1.2 → dataclassdb-0.1.3}/tests/test_dataclass_db.py +0 -0
- {dataclassdb-0.1.2 → dataclassdb-0.1.3}/tests/test_dataclass_field_codec.py +0 -0
- {dataclassdb-0.1.2 → dataclassdb-0.1.3}/tests/test_dataclass_sqlite_codec.py +0 -0
- {dataclassdb-0.1.2 → dataclassdb-0.1.3}/tests/test_date_codec.py +0 -0
- {dataclassdb-0.1.2 → dataclassdb-0.1.3}/tests/test_db_engine.py +0 -0
- {dataclassdb-0.1.2 → dataclassdb-0.1.3}/tests/test_list_utils.py +0 -0
- {dataclassdb-0.1.2 → dataclassdb-0.1.3}/tests/test_no_primary.py +0 -0
- {dataclassdb-0.1.2 → dataclassdb-0.1.3}/tests/test_query_builder.py +0 -0
- {dataclassdb-0.1.2 → dataclassdb-0.1.3}/tests/test_string_builder.py +0 -0
- {dataclassdb-0.1.2 → dataclassdb-0.1.3}/tests/test_utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dataclassdb
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.3
|
|
4
4
|
Summary: This module provides a lightweight sqlite3 ORM using normal dataclass.
|
|
5
5
|
Author-email: "@stuarts-art" <stuartsartemail@gmail.com>
|
|
6
6
|
Maintainer-email: "@stuarts-art" <stuartsartemail@gmail.com>
|
|
@@ -107,7 +107,21 @@ class QueryBuilder(DbEngine, StatementBuilder, FunctionBuilder):
|
|
|
107
107
|
if not row:
|
|
108
108
|
return []
|
|
109
109
|
|
|
110
|
-
|
|
110
|
+
cols_str: str = row[0].split("(", 1)[-1].rsplit(")", 1)[0]
|
|
111
|
+
cols = []
|
|
112
|
+
l_count = 0
|
|
113
|
+
last = 0
|
|
114
|
+
for i in range(len(cols_str)):
|
|
115
|
+
c = cols_str[i]
|
|
116
|
+
if c == "(":
|
|
117
|
+
l_count += 1
|
|
118
|
+
elif c == ")":
|
|
119
|
+
l_count -= 1
|
|
120
|
+
elif c == "," and l_count == 0:
|
|
121
|
+
cols.append(cols_str[last:i])
|
|
122
|
+
last = i + 1
|
|
123
|
+
if last < len(cols_str):
|
|
124
|
+
cols.append(cols_str[last:])
|
|
111
125
|
cols = [col.replace("\n", "").strip() for col in cols]
|
|
112
126
|
return cols
|
|
113
127
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dataclassdb
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.3
|
|
4
4
|
Summary: This module provides a lightweight sqlite3 ORM using normal dataclass.
|
|
5
5
|
Author-email: "@stuarts-art" <stuartsartemail@gmail.com>
|
|
6
6
|
Maintainer-email: "@stuarts-art" <stuartsartemail@gmail.com>
|
|
@@ -22,6 +22,7 @@ src/dataclassdb/builders/statement_builder.py
|
|
|
22
22
|
src/dataclassdb/builders/string_builder.py
|
|
23
23
|
tests/test_annotation_parsing.py
|
|
24
24
|
tests/test_builders.py
|
|
25
|
+
tests/test_current_cols.py
|
|
25
26
|
tests/test_custom_codec.py
|
|
26
27
|
tests/test_dataclass_db.py
|
|
27
28
|
tests/test_dataclass_field_codec.py
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
from typing import Annotated
|
|
2
|
+
|
|
3
|
+
import pytest
|
|
4
|
+
from dataclasses import dataclass
|
|
5
|
+
|
|
6
|
+
from dataclassdb.dataclass_db import DataclassDb
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@dataclass
|
|
11
|
+
class No_Constraints:
|
|
12
|
+
id: int
|
|
13
|
+
name: str
|
|
14
|
+
|
|
15
|
+
@dataclass
|
|
16
|
+
class Multiple_Unique:
|
|
17
|
+
id: int
|
|
18
|
+
first_name: Annotated[str, "UNIQUE"]
|
|
19
|
+
last_name: Annotated[str, "UNIQUE"]
|
|
20
|
+
|
|
21
|
+
@dataclass
|
|
22
|
+
class Multiple_Primary:
|
|
23
|
+
id: Annotated[int, "PRIMARY KEY"]
|
|
24
|
+
region: Annotated[str, "PRIMARY KEY"]
|
|
25
|
+
name: str
|
|
26
|
+
# first_name: Annotated[str, "UNIQUE"]
|
|
27
|
+
# last_name: Annotated[str, "UNIQUE"]
|
|
28
|
+
|
|
29
|
+
@dataclass
|
|
30
|
+
class Multiple_Primary_and_Unique:
|
|
31
|
+
id: Annotated[int, "PRIMARY KEY"]
|
|
32
|
+
region: Annotated[str, "PRIMARY KEY"]
|
|
33
|
+
first_name: Annotated[str, "UNIQUE"]
|
|
34
|
+
last_name: Annotated[str, "UNIQUE"]
|
|
35
|
+
|
|
36
|
+
@pytest.mark.parametrize(
|
|
37
|
+
"data_class, field_count",
|
|
38
|
+
[
|
|
39
|
+
(No_Constraints, 2),
|
|
40
|
+
(Multiple_Unique, 4),
|
|
41
|
+
(Multiple_Primary, 4),
|
|
42
|
+
(Multiple_Primary_and_Unique, 6),
|
|
43
|
+
],
|
|
44
|
+
)
|
|
45
|
+
def test_no_constraints(data_class, field_count, db_mem_connection):
|
|
46
|
+
with DataclassDb(data_class, db_mem_connection) as db:
|
|
47
|
+
assert len(db.get_curr_cols(db.data_class)) == field_count
|
|
48
|
+
assert len(db.dataclass_sql_cols()) == field_count
|
|
49
|
+
|
|
50
|
+
assert db.get_curr_cols(db.data_class) == db.dataclass_sql_cols()
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
|
|
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
|