pjdev-sqlmodel 3.4.2a3__tar.gz → 3.5.0a1__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pjdev-sqlmodel
3
- Version: 3.4.2a3
3
+ Version: 3.5.0a1
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
@@ -1,4 +1,4 @@
1
1
  # SPDX-FileCopyrightText: 2024-present Chris O'Neill <chris@purplejay.io>
2
2
  #
3
3
  # SPDX-License-Identifier: MIT
4
- __version__ = "3.4.2a3"
4
+ __version__ = "3.5.0a1"
@@ -42,6 +42,12 @@ def configure_single_context(settings: SqlModelSettings, tables: List[Type[Model
42
42
  __ctx.engine = initialize_engine(settings, tables)
43
43
 
44
44
 
45
+ def get_engine() -> Engine:
46
+ if __ctx.engine is None:
47
+ raise ValueError("No engine has been initialized")
48
+ return __ctx.engine
49
+
50
+
45
51
  @contextmanager
46
52
  def session_context() -> SQLModelSession:
47
53
  with SQLModelSession(__ctx.engine) as session:
@@ -7,7 +7,8 @@ from pydantic import ValidationError, BaseModel
7
7
  import pandas as pd
8
8
  from openpyxl.reader.excel import load_workbook
9
9
  from loguru import logger
10
-
10
+ from sqlalchemy import Engine
11
+ from pjdev_sqlmodel import service
11
12
  from pjdev_sqlmodel.db_models import ModelBase
12
13
  from pjdev_sqlmodel.service import session_context
13
14
 
@@ -123,13 +124,72 @@ def __convert_to_models(
123
124
  return data
124
125
 
125
126
 
126
- def __read_csv(file, cols) -> pd.DataFrame:
127
- return pd.read_csv(file, engine="pyarrow", usecols=cols, na_filter=False)
127
+ def load_raw_csv_data(
128
+ filename: Path,
129
+ table_name: str,
130
+ data_type_map: Optional[Dict[str, Type]] = None,
131
+ engine: Optional[Engine] = None,
132
+ ) -> None:
133
+ df = __read_csv(filename, data_type_map=data_type_map)
134
+
135
+ if df is None:
136
+ return
137
+
138
+ engine = service.get_engine() if engine is None else engine
139
+ df.to_sql(
140
+ table_name,
141
+ con=engine,
142
+ if_exists="replace",
143
+ index_label="row_id",
144
+ dtype=data_type_map,
145
+ )
146
+
147
+
148
+ def load_raw_excel_data(
149
+ filename: Path,
150
+ table_name: str,
151
+ header_ndx: int = 0,
152
+ data_type_map: Optional[Dict[str, Type]] = None,
153
+ engine: Optional[Engine] = None,
154
+ ) -> None:
155
+ df = __read_excel(filename, header_ndx=header_ndx, data_type_map=data_type_map)
156
+
157
+ if df is None:
158
+ return
159
+
160
+ engine = service.get_engine() if engine is None else engine
161
+ df.to_sql(
162
+ table_name,
163
+ con=engine,
164
+ if_exists="replace",
165
+ index_label="row_id",
166
+ dtype=data_type_map,
167
+ )
168
+
169
+
170
+ def __read_csv(
171
+ file: Path | str,
172
+ cols: Optional[List[str]] = None,
173
+ data_type_map: Optional[Dict[str, Type]] = None,
174
+ ) -> pd.DataFrame:
175
+ return pd.read_csv(
176
+ file, engine="pyarrow", usecols=cols, na_filter=False, dtype=data_type_map
177
+ )
128
178
 
129
179
 
130
- def __read_excel(file, cols, header_ndx) -> pd.DataFrame:
180
+ def __read_excel(
181
+ file: Path | str,
182
+ cols: Optional[List[str]] = None,
183
+ header_ndx: int = 0,
184
+ data_type_map: Optional[Dict[str, Type]] = None,
185
+ ) -> pd.DataFrame:
131
186
  return pd.read_excel(
132
- io=file, usecols=cols, na_filter=False, header=header_ndx, engine="calamine"
187
+ io=file,
188
+ usecols=cols,
189
+ na_filter=False,
190
+ header=header_ndx,
191
+ engine="calamine",
192
+ dtype=data_type_map,
133
193
  )
134
194
 
135
195