pjdev-sqlmodel 4.1.0__tar.gz → 4.1.0a2__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,11 +1,12 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: pjdev-sqlmodel
3
- Version: 4.1.0
3
+ Version: 4.1.0a2
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
7
7
  Author-email: Purple Jay LLC <apps+keystone-python-221-issue-@purplejay.io>
8
- License: MIT
8
+ License-Expression: MIT
9
+ License-File: LICENSE.txt
9
10
  Classifier: Development Status :: 4 - Beta
10
11
  Classifier: Programming Language :: Python
11
12
  Classifier: Programming Language :: Python :: 3.12
@@ -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__ = "4.1.0"
4
+ __version__ = "4.1.0a2"
@@ -8,6 +8,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 sqlmodel import select
11
12
 
12
13
  from pjdev_sqlmodel import session_context, sqlmodel_service
13
14
  from pjdev_sqlmodel.models import ModelBase
@@ -15,10 +16,14 @@ from pjdev_sqlmodel.models import ModelBase
15
16
  T = TypeVar("T", bound=ModelBase)
16
17
 
17
18
 
18
- def get_files_in_directory(directory: Path) -> List[Path]:
19
- return [f for f in directory.glob("**/*.xlsx") if not f.name.startswith("~$")] + [
20
- f for f in directory.glob("**/*.csv")
19
+ def get_files_in_directory(directory: Path, file_name='*', force_presence=False) -> List[Path]:
20
+ file_obj = [f for f in directory.glob(f"**/{file_name}.xlsx") if not f.name.startswith("~$")] + [
21
+ f for f in directory.glob(f"**/{file_name}.csv")
21
22
  ]
23
+ if force_presence and len(file_obj) == 0:
24
+ logger.error(f'Failed to find files matching the {directory}/{file_name} pattern and presence is required. Exiting...')
25
+ exit(1)
26
+ return file_obj
22
27
 
23
28
 
24
29
  def get_csv_columns(file_path):
@@ -167,6 +172,36 @@ def load_raw_excel_data(
167
172
  )
168
173
 
169
174
 
175
+ def convert_table_to_df(InputTable: type[BaseModel]):
176
+ with session_context() as session:
177
+ statement = select(InputTable)
178
+ results = session.exec(statement).all()
179
+
180
+ headers = []
181
+ field_names = []
182
+ for name, annotation in InputTable.__annotations__.items():
183
+ field = InputTable.__fields__[name]
184
+ alias = field.alias if field.alias else name
185
+ headers.append(alias)
186
+ field_names.append(name)
187
+
188
+ data = []
189
+ for res in results:
190
+ new_obj = {}
191
+ for i in range(len(headers)):
192
+ header = headers[i]
193
+ field_name = field_names[i]
194
+ new_obj[header] = getattr(res, field_name)
195
+ data.append(new_obj)
196
+ df = pd.DataFrame(data)
197
+ return df
198
+
199
+
200
+ def convert_table_to_csv(InputTable: type[BaseModel], file: Path):
201
+ df = convert_table_to_df(InputTable)
202
+ df.to_csv(file, index=False)
203
+
204
+
170
205
  def __read_csv(
171
206
  file: Path | str,
172
207
  cols: Optional[List[str]] = None,
@@ -208,4 +243,4 @@ def convert_to_csv(
208
243
  df = pd.DataFrame(dict_data)
209
244
 
210
245
  # Export DataFrame to CSV
211
- df.to_csv(filename, index=index, columns=cols)
246
+ df.to_csv(filename, index=index, columns=cols)