pjdev-sqlmodel 4.1.0a3__tar.gz → 4.2.1__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.4
2
2
  Name: pjdev-sqlmodel
3
- Version: 4.1.0a3
3
+ Version: 4.2.1
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__ = "4.1.0a3"
4
+ __version__ = "4.2.1"
@@ -54,5 +54,9 @@ class SqliteSettings(SqlModelSettings):
54
54
 
55
55
 
56
56
  class PostgresSettings(SqlModelSettings):
57
+ username: str
58
+ password: str
59
+ port: int = 5432
60
+
57
61
  def get_connection_string(self) -> str:
58
- return f"postgresql+psycopg:///{self.host}.{self.db_name}"
62
+ return f"postgresql+psycopg://{self.username}:{self.password}@{self.host}:{self.port}/{self.db_name}"
@@ -8,7 +8,6 @@ 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
12
11
 
13
12
  from pjdev_sqlmodel import session_context, sqlmodel_service
14
13
  from pjdev_sqlmodel.models import ModelBase
@@ -16,14 +15,10 @@ from pjdev_sqlmodel.models import ModelBase
16
15
  T = TypeVar("T", bound=ModelBase)
17
16
 
18
17
 
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")
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")
22
21
  ]
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
27
22
 
28
23
 
29
24
  def get_csv_columns(file_path):
@@ -172,75 +167,6 @@ def load_raw_excel_data(
172
167
  )
173
168
 
174
169
 
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
-
205
- def export_to_sheet(InputTable: type[BaseModel], wb: Workbook, sheet_name: str, table_name: str = None, hide_sheet=False):
206
- df = convert_table_to_df(InputTable)
207
- ws = wb.create_sheet(title=sheet_name)
208
- if hide_sheet:
209
- ws.sheet_state = 'hidden'
210
-
211
- if table_name:
212
- ws.merge_cells(start_row=1, start_column=1, end_row=1, end_column=len(df.columns))
213
- cell = ws.cell(row=1, column=1)
214
- cell.value = table_name
215
- cell.font = Font(bold=True)
216
- cell.alignment = Alignment(horizontal="center")
217
- start_row = 2
218
- ws.row_dimensions[1].height = 40.5
219
- ws.row_dimensions[2].height = 30.75
220
- else:
221
- start_row = 1
222
- ws.row_dimensions[1].height = 30.75
223
-
224
- for r_idx, row in enumerate(dataframe_to_rows(df, index=False, header=True), start=start_row):
225
- for c_idx, value in enumerate(row, start=1):
226
- cell = ws.cell(row=r_idx, column=c_idx, value=value)
227
- if r_idx == start_row:
228
- cell.font = Font(bold=True)
229
- cell.alignment = Alignment(horizontal="center")
230
-
231
- for col_idx in range(1, len(df.columns) + 1):
232
- column_letter = get_column_letter(col_idx)
233
- max_length = 0
234
- for cell in ws[column_letter]:
235
- try:
236
- if cell.value:
237
- max_length = max(max_length, len(str(cell.value)))
238
- except:
239
- pass
240
- adjusted_width = (max_length + 2)
241
- ws.column_dimensions[column_letter].width = adjusted_width
242
-
243
-
244
170
  def __read_csv(
245
171
  file: Path | str,
246
172
  cols: Optional[List[str]] = None,
@@ -282,4 +208,4 @@ def convert_to_csv(
282
208
  df = pd.DataFrame(dict_data)
283
209
 
284
210
  # Export DataFrame to CSV
285
- df.to_csv(filename, index=index, columns=cols)
211
+ df.to_csv(filename, index=index, columns=cols)