pjdev-sqlmodel 4.3.1__tar.gz → 4.3.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.
- {pjdev_sqlmodel-4.3.1 → pjdev_sqlmodel-4.3.3}/PKG-INFO +1 -1
- {pjdev_sqlmodel-4.3.1 → pjdev_sqlmodel-4.3.3}/src/pjdev_sqlmodel/__about__.py +1 -1
- {pjdev_sqlmodel-4.3.1 → pjdev_sqlmodel-4.3.3}/src/pjdev_sqlmodel/utilities.py +43 -33
- {pjdev_sqlmodel-4.3.1 → pjdev_sqlmodel-4.3.3}/.gitignore +0 -0
- {pjdev_sqlmodel-4.3.1 → pjdev_sqlmodel-4.3.3}/LICENSE.txt +0 -0
- {pjdev_sqlmodel-4.3.1 → pjdev_sqlmodel-4.3.3}/README.md +0 -0
- {pjdev_sqlmodel-4.3.1 → pjdev_sqlmodel-4.3.3}/pyproject.toml +0 -0
- {pjdev_sqlmodel-4.3.1 → pjdev_sqlmodel-4.3.3}/src/pjdev_sqlmodel/__init__.py +0 -0
- {pjdev_sqlmodel-4.3.1 → pjdev_sqlmodel-4.3.3}/src/pjdev_sqlmodel/models/__init__.py +0 -0
- {pjdev_sqlmodel-4.3.1 → pjdev_sqlmodel-4.3.3}/src/pjdev_sqlmodel/models/db_models.py +0 -0
- {pjdev_sqlmodel-4.3.1 → pjdev_sqlmodel-4.3.3}/src/pjdev_sqlmodel/models/settings_models.py +0 -0
- {pjdev_sqlmodel-4.3.1 → pjdev_sqlmodel-4.3.3}/src/pjdev_sqlmodel/settings_service.py +0 -0
- {pjdev_sqlmodel-4.3.1 → pjdev_sqlmodel-4.3.3}/src/pjdev_sqlmodel/sqlmodel_service.py +0 -0
- {pjdev_sqlmodel-4.3.1 → pjdev_sqlmodel-4.3.3}/tests/__init__.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pjdev-sqlmodel
|
|
3
|
-
Version: 4.3.
|
|
3
|
+
Version: 4.3.3
|
|
4
4
|
Project-URL: Documentation, https://gitlab.purplejay.net/keystone/python
|
|
5
5
|
Project-URL: Issues, https://gitlab.purplejay.net/keystone/python/issues
|
|
6
6
|
Project-URL: Source, https://gitlab.purplejay.net/keystone/python
|
|
@@ -3,6 +3,10 @@ import warnings
|
|
|
3
3
|
from pathlib import Path
|
|
4
4
|
from typing import Type, TypeVar, List, Optional, Tuple, Dict
|
|
5
5
|
|
|
6
|
+
from openpyxl.styles import Font, Alignment
|
|
7
|
+
from openpyxl.utils import get_column_letter
|
|
8
|
+
from openpyxl.utils.dataframe import dataframe_to_rows
|
|
9
|
+
from openpyxl.workbook import Workbook
|
|
6
10
|
from pydantic import ValidationError, BaseModel
|
|
7
11
|
import pandas as pd
|
|
8
12
|
from openpyxl.reader.excel import load_workbook
|
|
@@ -21,7 +25,8 @@ def get_files_in_directory(directory: Path, file_name='*', force_presence=False)
|
|
|
21
25
|
f for f in directory.glob(f"**/{file_name}.csv")
|
|
22
26
|
]
|
|
23
27
|
if force_presence and len(file_obj) == 0:
|
|
24
|
-
logger.error(
|
|
28
|
+
logger.error(
|
|
29
|
+
f'Failed to find files matching the {directory}/{file_name} pattern and presence is required. Exiting...')
|
|
25
30
|
exit(1)
|
|
26
31
|
return file_obj
|
|
27
32
|
|
|
@@ -59,7 +64,7 @@ def load_csv_data(model_type: Type[T], data_files: List[Path]) -> None:
|
|
|
59
64
|
f
|
|
60
65
|
for f in data_files
|
|
61
66
|
if f.name.endswith(".csv")
|
|
62
|
-
|
|
67
|
+
and len(set(cols).difference(set(get_csv_columns(f)))) == 0
|
|
63
68
|
]
|
|
64
69
|
|
|
65
70
|
data: List[model_type] = []
|
|
@@ -74,10 +79,11 @@ def load_csv_data(model_type: Type[T], data_files: List[Path]) -> None:
|
|
|
74
79
|
|
|
75
80
|
|
|
76
81
|
def load_excel_data(
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
82
|
+
model_type: Type[T],
|
|
83
|
+
data_files: List[Path],
|
|
84
|
+
header_ndx: int = 0,
|
|
85
|
+
sheet_name: str | int = 0,
|
|
86
|
+
col_range: Optional[str] = None,
|
|
81
87
|
) -> None:
|
|
82
88
|
fields = model_type.model_fields.keys()
|
|
83
89
|
cols = [
|
|
@@ -92,10 +98,10 @@ def load_excel_data(
|
|
|
92
98
|
f
|
|
93
99
|
for f in data_files
|
|
94
100
|
if f.name.endswith(".xlsx")
|
|
95
|
-
|
|
101
|
+
and len(
|
|
96
102
|
set(cols).difference(set(get_excel_columns(f, header_ndx + 1, col_range)))
|
|
97
103
|
)
|
|
98
|
-
|
|
104
|
+
== 0
|
|
99
105
|
]
|
|
100
106
|
|
|
101
107
|
data: List[model_type] = []
|
|
@@ -106,7 +112,7 @@ def load_excel_data(
|
|
|
106
112
|
)
|
|
107
113
|
|
|
108
114
|
for file in filtered_files:
|
|
109
|
-
df = __read_excel(file, cols, header_ndx)
|
|
115
|
+
df = __read_excel(file=file, cols=cols, header_ndx=header_ndx, sheet_name=sheet_name)
|
|
110
116
|
data.extend(__convert_to_models(file.name, df, model_type))
|
|
111
117
|
|
|
112
118
|
with session_context() as session:
|
|
@@ -116,7 +122,7 @@ def load_excel_data(
|
|
|
116
122
|
|
|
117
123
|
|
|
118
124
|
def __convert_to_models(
|
|
119
|
-
|
|
125
|
+
filename: str, df: pd.DataFrame, model_type: Type[T]
|
|
120
126
|
) -> List[T]:
|
|
121
127
|
data: List[model_type] = []
|
|
122
128
|
try:
|
|
@@ -130,10 +136,10 @@ def __convert_to_models(
|
|
|
130
136
|
|
|
131
137
|
|
|
132
138
|
def load_raw_csv_data(
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
139
|
+
filename: Path,
|
|
140
|
+
table_name: str,
|
|
141
|
+
data_type_map: Optional[Dict[str, Type]] = None,
|
|
142
|
+
engine: Optional[Engine] = None,
|
|
137
143
|
) -> None:
|
|
138
144
|
df = __read_csv(filename, data_type_map=data_type_map)
|
|
139
145
|
|
|
@@ -151,13 +157,14 @@ def load_raw_csv_data(
|
|
|
151
157
|
|
|
152
158
|
|
|
153
159
|
def load_raw_excel_data(
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
160
|
+
filename: Path,
|
|
161
|
+
table_name: str,
|
|
162
|
+
header_ndx: int = 0,
|
|
163
|
+
sheet_name: str | int = 0,
|
|
164
|
+
data_type_map: Optional[Dict[str, Type]] = None,
|
|
165
|
+
engine: Optional[Engine] = None,
|
|
159
166
|
) -> None:
|
|
160
|
-
df = __read_excel(filename, header_ndx=header_ndx, data_type_map=data_type_map)
|
|
167
|
+
df = __read_excel(filename, header_ndx=header_ndx, data_type_map=data_type_map, sheet_name=sheet_name)
|
|
161
168
|
|
|
162
169
|
if df is None:
|
|
163
170
|
return
|
|
@@ -202,7 +209,8 @@ def convert_table_to_csv(InputTable: type[BaseModel], file: Path):
|
|
|
202
209
|
df.to_csv(file, index=False)
|
|
203
210
|
|
|
204
211
|
|
|
205
|
-
def export_to_sheet(InputTable: type[BaseModel], wb: Workbook, sheet_name: str, table_name: str = None,
|
|
212
|
+
def export_to_sheet(InputTable: type[BaseModel], wb: Workbook, sheet_name: str, table_name: str = None,
|
|
213
|
+
hide_sheet=False):
|
|
206
214
|
df = convert_table_to_df(InputTable)
|
|
207
215
|
ws = wb.create_sheet(title=sheet_name)
|
|
208
216
|
if hide_sheet:
|
|
@@ -242,9 +250,9 @@ def export_to_sheet(InputTable: type[BaseModel], wb: Workbook, sheet_name: str,
|
|
|
242
250
|
|
|
243
251
|
|
|
244
252
|
def __read_csv(
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
253
|
+
file: Path | str,
|
|
254
|
+
cols: Optional[List[str]] = None,
|
|
255
|
+
data_type_map: Optional[Dict[str, Type]] = None,
|
|
248
256
|
) -> pd.DataFrame:
|
|
249
257
|
return pd.read_csv(
|
|
250
258
|
file, engine="pyarrow", usecols=cols, na_filter=False, dtype=data_type_map
|
|
@@ -252,14 +260,16 @@ def __read_csv(
|
|
|
252
260
|
|
|
253
261
|
|
|
254
262
|
def __read_excel(
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
263
|
+
file: Path | str,
|
|
264
|
+
sheet_name: str | int = 0,
|
|
265
|
+
cols: Optional[List[str]] = None,
|
|
266
|
+
header_ndx: int = 0,
|
|
267
|
+
data_type_map: Optional[Dict[str, Type]] = None,
|
|
259
268
|
) -> pd.DataFrame:
|
|
260
269
|
return pd.read_excel(
|
|
261
270
|
io=file,
|
|
262
271
|
usecols=cols,
|
|
272
|
+
sheet_name=sheet_name,
|
|
263
273
|
na_filter=False,
|
|
264
274
|
header=header_ndx,
|
|
265
275
|
engine="calamine",
|
|
@@ -268,10 +278,10 @@ def __read_excel(
|
|
|
268
278
|
|
|
269
279
|
|
|
270
280
|
def convert_to_csv(
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
281
|
+
data: List[BaseModel],
|
|
282
|
+
col_mapping_tuple: Tuple[List[str], Dict[str, str], List[str]],
|
|
283
|
+
filename: Path,
|
|
284
|
+
index=False,
|
|
275
285
|
) -> None:
|
|
276
286
|
include_set, col_mapping, cols = col_mapping_tuple
|
|
277
287
|
dict_data = [
|
|
@@ -282,4 +292,4 @@ def convert_to_csv(
|
|
|
282
292
|
df = pd.DataFrame(dict_data)
|
|
283
293
|
|
|
284
294
|
# Export DataFrame to CSV
|
|
285
|
-
df.to_csv(filename, index=index, columns=cols)
|
|
295
|
+
df.to_csv(filename, index=index, columns=cols)
|
|
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
|