Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions testgen/common/database/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
from collections.abc import Iterable
from io import StringIO


class FilteredStringIO(StringIO):
def __init__(self, filtered: Iterable[str], *args, **kwargs):
self._replacements = str.maketrans(dict.fromkeys(filtered or [], ""))
super().__init__(*args, **kwargs)

def write(self, to_write: str):
return super().write(to_write.translate(self._replacements))
8 changes: 3 additions & 5 deletions testgen/common/database/database_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import queue as qu
import threading
from contextlib import suppress
from io import StringIO
from urllib.parse import quote_plus

from sqlalchemy import create_engine, text
Expand All @@ -20,6 +19,7 @@
get_tg_schema,
get_tg_username,
)
from testgen.common.database import FilteredStringIO
from testgen.common.encrypt import DecryptText
from testgen.common.read_file import get_template_files

Expand Down Expand Up @@ -582,15 +582,14 @@ def RetrieveSingleResultValue(strCredentialSet, strRunSQL):
def WriteListToDB(strCredentialSet, lstData, lstColumns, strDBTable):
LOG.info("CurrentDB Operation: WriteListToDB. Creds: %s", strCredentialSet)
LOG.debug("(Processing ingestion query: %s records)", lstData)
# List should have same column names as destination table, though not all columns in table are required

# List should have same column names as destination table, though not all columns in table are required
# Use COPY for DKTG database, otherwise executemany()

con = _InitDBConnection(strCredentialSet, "Y")
cur = con.cursor()
if strCredentialSet == "DKTG":
# Write List to CSV in memory
sio = StringIO()
sio = FilteredStringIO(["\x00"])
writer = csv.writer(sio, quoting=csv.QUOTE_MINIMAL)
writer.writerows(lstData)
sio.seek(0)
Expand All @@ -602,7 +601,6 @@ def WriteListToDB(strCredentialSet, lstData, lstColumns, strDBTable):

cur.copy_expert(strCopySQL, sio)
con.commit()

else:
# Get list of column names and column names formatted as parms
strColumnNames = ", ".join(lstColumns)
Expand Down
2 changes: 2 additions & 0 deletions testgen/ui/views/connections/page.py
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,8 @@ def show_connection_form(self, selected_connection: dict, _mode: str, project_co
"private_key": None,
})

data.setdefault("http_path", "")

try:
FlavorForm(**data)
except ValidationError as error:
Expand Down