Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
88 commits
Select commit Hold shift + click to select a range
b922fc7
Merge branch 'tg-829' of gitlab.com:dkinternal/testgen/dataops-testge…
rboni-dk Nov 25, 2024
e08e964
feat(flavors): Adding support to Databricks
rboni-dk Nov 25, 2024
c0e7acd
feat(flavors): Adding support to Databricks
rboni-dk Nov 27, 2024
fafbbbb
feat(flavors): Adding support to Databricks
rboni-dk Dec 2, 2024
b455229
feat(flavors): Adding support to Databricks
rboni-dk Dec 17, 2024
7a4738b
Merge branch 'enterprise' of gitlab.com:dkinternal/testgen/dataops-te…
rboni-dk Dec 17, 2024
8718386
feat(flavors): Adding support to Databricks
rboni-dk Jan 6, 2025
3f370a8
feat(flavors): Adding support to Databricks
rboni-dk Jan 8, 2025
e22cf51
feat(flavors): Adding support to Databricks
rboni-dk Jan 28, 2025
912aeea
feat(flavors): Adding support to Databricks
rboni-dk Jan 29, 2025
81e2954
feat(flavors): Adding support to Databricks
rboni-dk Jan 30, 2025
8ba5f36
feat(flavors): Adding support to Databricks
rboni-dk Feb 5, 2025
828dc08
Merge branch 'enterprise' of gitlab.com:dkinternal/testgen/dataops-te…
rboni-dk Feb 6, 2025
e17e055
Merge branch 'enterprise' of gitlab.com:dkinternal/testgen/dataops-te…
rboni-dk Feb 19, 2025
ad088fc
Merge branch 'enterprise' of gitlab.com:dkinternal/testgen/dataops-te…
rboni-dk Feb 19, 2025
0fb8106
feat(flavors): Adding support to Databricks
rboni-dk Feb 21, 2025
f0ba930
Merge branch 'enterprise' of gitlab.com:dkinternal/testgen/dataops-te…
rboni-dk Feb 27, 2025
8c5f5f1
feat(flavors): Adding support to Databricks
rboni-dk Mar 3, 2025
5a91cd1
Merge branch 'enterprise' of gitlab.com:dkinternal/testgen/dataops-te…
rboni-dk Mar 3, 2025
bcf55d2
feat(flavors): Adding support to Databricks
rboni-dk Mar 3, 2025
f6b0b94
feat(flavors): Adding support to Databricks
rboni-dk Mar 4, 2025
4c5fd9a
Merge branch 'enterprise' of gitlab.com:dkinternal/testgen/dataops-te…
rboni-dk Mar 5, 2025
c8b29f0
feat(flavors): Code review feedback
rboni-dk Mar 5, 2025
d8f65fc
Merge branch 'enterprise' of gitlab.com:dkinternal/testgen/dataops-te…
rboni-dk Mar 6, 2025
a175b3c
Merge branch 'enterprise' of gitlab.com:dkinternal/testgen/dataops-te…
rboni-dk Mar 7, 2025
7b4346f
Merge branch 'tg-231' into 'enterprise'
Mar 7, 2025
e438a43
fix: Aiding the Databricks connector dependecies compilation
rboni-dk Mar 10, 2025
9023626
Merge branch 'fix-image-building' into 'enterprise'
Mar 10, 2025
ab03840
fix: Re-building the base image to include the Databricks connector
rboni-dk Mar 12, 2025
504f162
misc(db): function decorator to manage database sessions
luis-dk Feb 27, 2025
8455400
feat(scoring): keep history of score results for each score definition
luis-dk Feb 28, 2025
0d53ef8
fix(scoring): add missing filter to scoring view
luis-dk Feb 28, 2025
0d68ee9
misc(scoring): add views and table for score recalc
luis-dk Mar 10, 2025
0a26d6e
misc(scoring): implement score recalculation
luis-dk Mar 10, 2025
66ac23a
misc(ui): add line chart component
luis-dk Mar 10, 2025
20072a4
feat(scoring): display score card history as line charts
luis-dk Mar 10, 2025
6d68465
fix(scoring): issues and inconsistencies storing history
luis-dk Mar 12, 2025
ee4a655
Merge branch 'score-history' into 'enterprise'
Mar 12, 2025
fbdfb74
fix(data-catalog): shows tags inherited from table group
aarthy-dk Feb 22, 2025
dd5d58f
feat(data-catalog): add autocomplete for tags
aarthy-dk Feb 22, 2025
e506fa7
feat(data-catalog): add tree filters
aarthy-dk Feb 22, 2025
c913595
feat(data-catalog): add data preview dialog
aarthy-dk Feb 25, 2025
1f03c7f
feat(data-catalog): add multi-edit mode
aarthy-dk Feb 25, 2025
4ea4aa8
fix(data-catalog): add new http-path to data preview query
aarthy-dk Mar 11, 2025
b5ca94a
fix(data-catalog): filters broken after saving tags
aarthy-dk Mar 12, 2025
1bd1aea
Merge branch 'aarthy/data-catalog' into 'enterprise'
Mar 13, 2025
1fb2f4e
Merge branch 'enterprise' of gitlab.com:dkinternal/testgen/dataops-te…
rboni-dk Mar 13, 2025
82ae353
Merge branch 'update-base-image' into 'enterprise'
Mar 13, 2025
d26a111
feat: update user roles
FernandezAstor Mar 12, 2025
8f80b5c
refactor: consolidate user session service, remove auth service
aarthy-dk Mar 18, 2025
db60ef6
fix(roles): apply permissions to empty state actions
aarthy-dk Mar 18, 2025
6516a9c
fix(roles): apply permissions to canceling runs
aarthy-dk Mar 18, 2025
0334101
feat(roles): apply permissions to results disposition
aarthy-dk Mar 18, 2025
f5ae33c
fix(roles): apply missing permissions to connections, table groups & …
aarthy-dk Mar 18, 2025
0b763c9
feat(roles): apply permissions to data catalog
aarthy-dk Mar 18, 2025
0e24a16
fix(scores): bugs in saving to db
aarthy-dk Mar 18, 2025
412d547
fix(data catalog): bugs in tree
aarthy-dk Mar 18, 2025
d589ae4
fix: bugs in routing
aarthy-dk Mar 18, 2025
0692361
Merge branch 'astor/TG-872' into 'enterprise'
Mar 18, 2025
498778f
feat(telemetry): Sending event when user logs in
rboni-dk Mar 13, 2025
3cda6c5
fix: libarrow was missing
rboni-dk Mar 18, 2025
e594fee
Merge branch 'fix-pyarrow' into 'enterprise'
Mar 18, 2025
b892972
refactor: imports in test results
aarthy-dk Mar 18, 2025
5e218aa
fix(nav): bug in query params resetting
aarthy-dk Mar 18, 2025
bf85763
fix: Upgrade PyArrow at the base image
rboni-dk Mar 19, 2025
dd351e5
Merge branch 'fix-imports' into 'enterprise'
Mar 19, 2025
a4254f1
Merge branch 'enterprise' of gitlab.com:dkinternal/testgen/dataops-te…
rboni-dk Mar 19, 2025
b1ced41
Merge branch 'enterprise' of gitlab.com:dkinternal/testgen/dataops-te…
rboni-dk Mar 19, 2025
c5ab903
Merge branch 'upgrade-pyarrow' into 'enterprise'
Mar 19, 2025
ca1da51
Merge branch 'enterprise' of gitlab.com:dkinternal/testgen/dataops-te…
rboni-dk Mar 19, 2025
b79b7ba
fix(connections): hide Test Connection button for non-admins
aarthy-dk Mar 20, 2025
8d288d2
refactor(project-settings): improve edit form
aarthy-dk Mar 20, 2025
888424d
refactor(sidebar): improve layout, add App Logs button
aarthy-dk Mar 20, 2025
437b0fd
fix: minor display improvements
aarthy-dk Mar 20, 2025
ee2d850
refactor: cleanup dead code
aarthy-dk Mar 20, 2025
216ace3
Merge branch 'project-settings' into 'enterprise'
Mar 20, 2025
019bfe6
fix: project in query param not sticking on refresh
aarthy-dk Mar 20, 2025
8841a4f
Merge branch 'qa-fix' into 'enterprise'
Mar 21, 2025
c9ec254
fix: Databricks QA issues
rboni-dk Mar 21, 2025
acc469f
Merge branch 'fix-databricks-qa' into 'enterprise'
Mar 21, 2025
68675c5
Merge branch 'enterprise' of gitlab.com:dkinternal/testgen/dataops-te…
rboni-dk Mar 21, 2025
33ccea8
misc(scoring): prepopulate history for existing scorecards
luis-dk Mar 21, 2025
fa4faa2
Merge branch 'add-telemetry' into 'enterprise'
aarthy-dk Mar 21, 2025
419104d
Merge branch 'prepopulate-score-history' into 'enterprise'
aarthy-dk Mar 21, 2025
19ea203
fix(scores): use the last 50 history items
luis-dk Mar 24, 2025
96e0bb7
Merge branch 'fix-truncated-trend' into 'enterprise'
Mar 24, 2025
b19e6d5
Merge branch 'main' into 'enterprise'
aarthy-dk Mar 25, 2025
31e7763
release: 3.1.2 -> 3.7.1
aarthy-dk Mar 25, 2025
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
50 changes: 0 additions & 50 deletions deploy/install_arrow.sh

This file was deleted.

32 changes: 0 additions & 32 deletions deploy/install_linuxodbc.sh

This file was deleted.

80 changes: 22 additions & 58 deletions deploy/testgen-base.dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,77 +6,41 @@ ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONFAULTHANDLER=1
ENV ACCEPT_EULA=Y

RUN apk update && apk add --no-cache \
RUN apk update && apk upgrade && apk add --no-cache \
# Tools needed for building the python wheels
gcc \
g++ \
bash \
libffi-dev \
openssl-dev \
cargo \
musl-dev \
postgresql-dev \
make \
cmake \
rust \
linux-headers \
libc-dev \
libgcc \
libstdc++ \
ca-certificates \
zlib-dev \
bzip2-dev \
xz-dev \
lz4-dev \
zstd-dev \
snappy-dev \
brotli-dev \
build-base \
autoconf \
boost-dev \
flex \
libxml2-dev \
libxslt-dev \
libjpeg-turbo-dev \
ninja \
git \
curl \
unixodbc-dev \
gpg \
openssl=3.3.2-r1 \
musl-dev \
gfortran \
openblas-dev

RUN mkdir /dk
linux-headers=6.6-r0 \
# Additional libraries needed and their dev counterparts. We add both so that we can remove
# the *-dev later, keeping the libraries
openblas=0.3.28-r0 \
openblas-dev=0.3.28-r0 \
unixodbc=2.3.12-r0 \
unixodbc-dev=2.3.12-r0

COPY --chmod=775 ./deploy/install_linuxodbc.sh /tmp/dk/install_linuxodbc.sh
RUN /tmp/dk/install_linuxodbc.sh

COPY --chmod=775 ./deploy/install_arrow.sh /tmp/dk/install_arrow.sh
RUN /tmp/dk/install_arrow.sh
RUN apk add --no-cache \
--repository https://dl-cdn.alpinelinux.org/alpine/v3.21/community \
--repository https://dl-cdn.alpinelinux.org/alpine/v3.21/main \
libarrow=18.1.0-r0 \
apache-arrow-dev=18.1.0-r0

# Install TestGen's main project empty pyproject.toml to install (and cache) the dependencies first
COPY ./pyproject.toml /tmp/dk/pyproject.toml
RUN mkdir /dk
RUN python3 -m pip install --prefix=/dk /tmp/dk

RUN apk del \
gcc \
g++ \
bash \
libffi-dev \
openssl-dev \
cargo \
musl-dev \
postgresql-dev \
make \
cmake \
rust \
musl-dev \
gfortran \
linux-headers \
libc-dev \
build-base \
autoconf \
boost-dev \
flex \
ninja \
curl \
openblas-dev \
unixodbc-dev \
gpg \
ca-certificates \
git
apache-arrow-dev
30 changes: 11 additions & 19 deletions deploy/testgen.dockerfile
Original file line number Diff line number Diff line change
@@ -1,38 +1,30 @@
ARG TESTGEN_BASE_LABEL=v1
ARG TESTGEN_BASE_LABEL=v3

FROM datakitchen/dataops-testgen-base:${TESTGEN_BASE_LABEL} AS build-image

# Now install everything
COPY . /tmp/dk/
RUN python3 -m pip install --prefix=/dk /tmp/dk

FROM python:3.12.7-alpine3.20 AS release-image
FROM datakitchen/dataops-testgen-base:${TESTGEN_BASE_LABEL} AS release-image

# Args have to be set in current build stage: https://github.com/moby/moby/issues/37345
ARG TESTGEN_VERSION
ARG TESTGEN_DOCKER_HUB_REPO

RUN addgroup -S testgen && adduser -S testgen -G testgen
# Now install everything
COPY . /tmp/dk/
RUN python3 -m pip install --prefix=/dk /tmp/dk
RUN rm -Rf /tmp/dk

COPY --from=build-image --chown=testgen:testgen /dk/ /dk
COPY --from=build-image /usr/local/lib/ /usr/local/lib
COPY --from=build-image /usr/lib/ /usr/lib
COPY --from=build-image /opt/microsoft/ /opt/microsoft
COPY --from=build-image /etc/odbcinst.ini /etc/odbcinst.ini
RUN addgroup -S testgen && adduser -S testgen -G testgen

# The OpenSSL upgrade is not carried from the build image, so we have to upgrade it again
#RUN apk add --no-cache openssl=3.3.2-r1
# Streamlit has to be able to write to these dirs
RUN mkdir /var/lib/testgen
RUN chown -R testgen:testgen /var/lib/testgen /dk/lib/python3.12/site-packages/streamlit/static

ENV PYTHONPATH=/dk/lib/python3.12/site-packages
ENV PATH="$PATH:/dk/bin:/opt/mssql-tools/bin/"
ENV PATH=$PATH:/dk/bin

ENV TESTGEN_VERSION=${TESTGEN_VERSION}
ENV TG_RELEASE_CHECK=docker
ENV TESTGEN_DOCKER_HUB_REPO=${TESTGEN_DOCKER_HUB_REPO}
ENV STREAMLIT_SERVER_MAX_UPLOAD_SIZE=200

RUN mkdir /var/lib/testgen && chown testgen:testgen /var/lib/testgen

USER testgen

WORKDIR /dk
Expand Down
13 changes: 8 additions & 5 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ build-backend = "setuptools.build_meta"

[project]
name = "dataops-testgen"
version = "3.1.2"
version = "3.7.1"
description = "DataKitchen's Data Quality DataOps TestGen"
authors = [
{ "name" = "DataKitchen, Inc.", "email" = "info@datakitchen.io" },
Expand All @@ -31,6 +31,7 @@ dependencies = [
"PyYAML==6.0.1",
"click==8.1.3",
"sqlalchemy==1.4.46",
"databricks-sql-connector==2.9.3",
"snowflake-sqlalchemy==1.6.1",
"pyodbc==5.0.0",
"psycopg2-binary==2.9.9",
Expand All @@ -56,17 +57,19 @@ dependencies = [
"xlsxwriter==3.2.0",
"psutil==5.9.8",
"concurrent_log_handler==0.9.25",
"cryptography==43.0.1",
"cryptography==44.0.1",
"validators==0.33.0",
"reportlab==4.2.2",
"pydantic==1.10.11",
"pydantic==1.10.13",
"streamlit-pydantic==0.6.0",

# Pinned to match the manually compiled libs or for security
"pyarrow==18.0.0",
"snowflake-connector-python==3.12.3",
"pyarrow==18.1.0",
"snowflake-connector-python==3.13.1",
"matplotlib==3.9.2",
"scipy==1.14.1",
"tornado==6.4.2",
"jinja2==3.1.6",
]

[project.optional-dependencies]
Expand Down
14 changes: 8 additions & 6 deletions testgen/commands/queries/execute_cat_tests_query.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,9 @@ def __init__(self, strProjectCode, strTestSuiteId, strTestSuite, strSQLFlavor, m
def _get_rollup_scores_sql(self) -> CRollupScoresSQL:
if not self._rollup_scores_sql:
self._rollup_scores_sql = CRollupScoresSQL(self.test_run_id, self.table_groups_id)

return self._rollup_scores_sql

def _ReplaceParms(self, strInputString):
strInputString = strInputString.replace("{MAX_QUERY_CHARS}", str(self.max_query_chars))
strInputString = strInputString.replace("{TEST_RUN_ID}", self.test_run_id)
Expand All @@ -51,6 +51,7 @@ def _ReplaceParms(self, strInputString):
strInputString = strInputString.replace("{TABLE_GROUPS_ID}", self.table_groups_id)

strInputString = strInputString.replace("{SQL_FLAVOR}", self.flavor)
strInputString = strInputString.replace("{ID_SEPARATOR}", "`" if self.flavor == "databricks" else '"')
strInputString = strInputString.replace("{CONCAT_OPERATOR}", self.concat_operator)

strInputString = strInputString.replace("{SCHEMA_NAME}", self.target_schema)
Expand All @@ -71,8 +72,9 @@ def _ReplaceParms(self, strInputString):

strInputString = replace_templated_functions(strInputString, self.flavor)

# Adding escape character where ':' is referenced
strInputString = strInputString.replace(":", "\\:")
if self.flavor != "databricks":
# Adding escape character where ':' is referenced
strInputString = strInputString.replace(":", "\\:")

return strInputString

Expand Down Expand Up @@ -110,12 +112,12 @@ def PushTestRunStatusUpdateSQL(self):
def FinalizeTestSuiteUpdateSQL(self):
strQ = self._ReplaceParms(read_template_sql_file("ex_update_test_suite.sql", "execution"))
return strQ

def CalcPrevalenceTestResultsSQL(self):
return self._ReplaceParms(read_template_sql_file("ex_calc_prevalence_test_results.sql", "execution"))

def TestScoringRollupRunSQL(self):
return self._get_rollup_scores_sql().GetRollupScoresTestRunQuery()

def TestScoringRollupTableGroupSQL(self):
return self._get_rollup_scores_sql().GetRollupScoresTestTableGroupQuery()
7 changes: 4 additions & 3 deletions testgen/commands/queries/execute_tests_query.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ def _ReplaceParms(self, strInputString: str):
strInputString = strInputString.replace("{EXCEPTION_MESSAGE}", self.exception_message)
strInputString = strInputString.replace("{START_TIME}", self.today)
strInputString = strInputString.replace("{PROCESS_ID}", str(self.process_id))
strInputString = strInputString.replace("{VARCHAR_TYPE}", "STRING" if self.flavor == "databricks" else "VARCHAR")
strInputString = strInputString.replace(
"{NOW}", date_service.get_now_as_string_with_offset(self.minutes_offset)
)
Expand Down Expand Up @@ -88,9 +89,9 @@ def _ReplaceParms(self, strInputString: str):
if parm == "subset_condition":
strInputString = strInputString.replace("{SUBSET_DISPLAY}", value.replace("'", "''") if value else "")


# Adding escape character where ':' is referenced
strInputString = strInputString.replace(":", "\\:")
if self.flavor != "databricks":
# Adding escape character where ':' is referenced
strInputString = strInputString.replace(":", "\\:")

return strInputString

Expand Down
7 changes: 6 additions & 1 deletion testgen/commands/run_execute_cat_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
RunActionQueryList,
RunThreadedRetrievalQueryList,
WriteListToDB,
date_service,
)

LOG = logging.getLogger("testgen")
Expand Down Expand Up @@ -67,7 +68,11 @@ def FinalizeTestRun(clsCATExecute: CCATExecutionSQL):
clsCATExecute.TestScoringRollupRunSQL(),
clsCATExecute.TestScoringRollupTableGroupSQL()]
RunActionQueryList(("DKTG"), lstQueries)
run_refresh_score_cards_results(project_code=clsCATExecute.project_code)
run_refresh_score_cards_results(
project_code=clsCATExecute.project_code,
add_history_entry=True,
refresh_date=date_service.parse_now(clsCATExecute.run_date),
)


def run_cat_test_queries(
Expand Down
1 change: 1 addition & 0 deletions testgen/commands/run_execute_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,7 @@ def run_execution_steps(project_code: str, test_suite: str, minutes_offset: int=
test_exec_params["connect_by_key"],
test_exec_params["private_key"],
test_exec_params["private_key_passphrase"],
test_exec_params["http_path"],
"PROJECT",
)

Expand Down
1 change: 1 addition & 0 deletions testgen/commands/run_generate_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ def run_test_gen_queries(strTableGroupsID, strTestSuite, strGenerationSet=None):
dctParms["connect_by_key"],
dctParms["private_key"],
dctParms["private_key_passphrase"],
dctParms["http_path"],
"PROJECT",
)

Expand Down
2 changes: 2 additions & 0 deletions testgen/commands/run_launch_db_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from testgen.common.credentials import get_tg_db, get_tg_schema
from testgen.common.database.database_service import get_queries_for_command
from testgen.common.encrypt import EncryptText, encrypt_ui_password
from testgen.common.models import with_database_session
from testgen.common.models.scores import ScoreDefinition
from testgen.common.read_file import get_template_files

Expand Down Expand Up @@ -68,6 +69,7 @@ def _get_params_mapping() -> dict:
}


@with_database_session
def run_launch_db_config(delete_db: bool) -> None:
params_mapping = _get_params_mapping()

Expand Down
Loading
Loading