From 8e93e58a44bf0a5f677ca716601ffce38145bca5 Mon Sep 17 00:00:00 2001 From: kenxu95 Date: Wed, 5 Apr 2023 15:07:50 -0700 Subject: [PATCH] Release 0.2.9 (#1170) Co-authored-by: Vikram Sreekanti Co-authored-by: Ubuntu Co-authored-by: Wei Chen --- CHANGELOG.md | 27 ++++++++++++++++-- .../workflows/succeed_parameters.py | 4 +-- sdk/setup.py | 2 +- src/dockerfiles/Makefile | 2 +- src/dockerfiles/connectors/athena.dockerfile | 2 +- .../connectors/bigquery.dockerfile | 2 +- src/dockerfiles/connectors/mysql.dockerfile | 2 +- .../connectors/postgres.dockerfile | 2 +- src/dockerfiles/connectors/s3.dockerfile | 2 +- .../connectors/snowflake.dockerfile | 2 +- .../connectors/sqlserver.dockerfile | 2 +- .../function/function310.dockerfile | 2 +- .../function/function37.dockerfile | 2 +- .../function/function38.dockerfile | 2 +- .../function/function39.dockerfile | 2 +- src/dockerfiles/gpu/py310_env.yml | 2 +- src/dockerfiles/gpu/py37_env.yml | 2 +- src/dockerfiles/gpu/py38_env.yml | 2 +- src/dockerfiles/gpu/py39_env.yml | 2 +- .../lambda/function/requirements-37.txt | 2 +- .../lambda/function/requirements.txt | 2 +- src/dockerfiles/lambda/requirements.txt | 2 +- src/golang/lib/constants.go | 2 +- src/python/bin/aqueduct | 2 +- src/python/requirements.txt | 2 +- src/python/setup.py | 2 +- src/ui/app/package.json | 4 +-- src/ui/common/package-lock.json | 4 +-- src/ui/common/package.json | 2 +- .../operators/WithOperatorHeader.tsx | 25 +++++++++++------ .../src/components/workflows/nodes/Node.tsx | 28 +++++++++---------- .../components/workflows/workflowHeader.tsx | 4 +-- 32 files changed, 87 insertions(+), 59 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 87a6bacdf..cc77ec0a9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,32 @@ # Changelog -## 0.2.8 -Released on March 29, 2023. +## 0.2.9 +Released on April 5, 2023. ### Key Features +* [Beta] Aqueduct now has support for loading dataframe and image data from + the local filesystem as parameters. See `client.create_param()` for details. + +### Enhancements +* Improves the artifact storage management process. The integrations page now + shows which system is being used for artifact storage, and if a migration + between artifact stores fails, the error will be surfaced on the + integration details page until the user triggers a new artifact migration. +* Adds metadata to read and write operators' sidesheets. Both sidesheets now + show which system is being used for the IO operation, and the save operator + now shows to what location and (if relevant) in what format the data is + being saved. + +### Bugfixes +* Fixes typos in MongoDB connection dialog. +* Fixes bug where workflow status at the top of the workflow details page would + not update in sync with other parts of the page. +* Fixes a bug where stopping the Aqueduct server immediately after starting it + could potentially trigger and then kill a workflow run that would then + stay in a pending state permanently. + +## 0.2.8 +Released on March 29, 2023. ### Enhancements * Extends Aqueduct's parameter support to allow parameters to be `None` *if* diff --git a/manual_qa_tests/workflows/succeed_parameters.py b/manual_qa_tests/workflows/succeed_parameters.py index a6b2df473..2a21febe9 100644 --- a/manual_qa_tests/workflows/succeed_parameters.py +++ b/manual_qa_tests/workflows/succeed_parameters.py @@ -23,11 +23,11 @@ def empty_str_check(df, empty_str): def deploy(client, integration_name): integration = client.integration(integration_name) - client.create_param("table", default="hotel_reviews") + table_param = client.create_param("table", default="hotel_reviews") bound = client.create_param("bound", default=10) empty_str = client.create_param("empty_str", default="") - reviews = integration.sql("SELECT * FROM {{ table }}") + reviews = integration.sql("SELECT * FROM $1", parameters=[table_param]) check(reviews, bound) empty_str_check(reviews, empty_str) flow = client.publish_flow( diff --git a/sdk/setup.py b/sdk/setup.py index c1cea8e75..b49141c30 100644 --- a/sdk/setup.py +++ b/sdk/setup.py @@ -18,7 +18,7 @@ setuptools.setup( name="aqueduct-sdk", - version="0.2.8", + version="0.2.9", author="Aqueduct, Inc.", author_email="hello@aqueducthq.com", description="Python SDK for the Aqueduct prediction infrastructure", diff --git a/src/dockerfiles/Makefile b/src/dockerfiles/Makefile index d0d157d86..bb966b101 100644 --- a/src/dockerfiles/Makefile +++ b/src/dockerfiles/Makefile @@ -1,5 +1,5 @@ .DEFAULT_GOAL = all -VERSION = 0.2.8 +VERSION = 0.2.9 # By default, turn off the Makefile practice of printing each command before # you run it. diff --git a/src/dockerfiles/connectors/athena.dockerfile b/src/dockerfiles/connectors/athena.dockerfile index f65e32cf1..41c78935f 100644 --- a/src/dockerfiles/connectors/athena.dockerfile +++ b/src/dockerfiles/connectors/athena.dockerfile @@ -1,4 +1,4 @@ -FROM aqueducthq/base_connector:0.2.8 +FROM aqueducthq/base_connector:0.2.9 MAINTAINER Aqueduct version: 0.1 diff --git a/src/dockerfiles/connectors/bigquery.dockerfile b/src/dockerfiles/connectors/bigquery.dockerfile index fb494be8e..1cc44cf5a 100644 --- a/src/dockerfiles/connectors/bigquery.dockerfile +++ b/src/dockerfiles/connectors/bigquery.dockerfile @@ -1,4 +1,4 @@ -FROM aqueducthq/base_connector:0.2.8 +FROM aqueducthq/base_connector:0.2.9 MAINTAINER Aqueduct version: 0.1 diff --git a/src/dockerfiles/connectors/mysql.dockerfile b/src/dockerfiles/connectors/mysql.dockerfile index 4c366cb15..b78a910e3 100644 --- a/src/dockerfiles/connectors/mysql.dockerfile +++ b/src/dockerfiles/connectors/mysql.dockerfile @@ -1,4 +1,4 @@ -FROM aqueducthq/base_connector:0.2.8 +FROM aqueducthq/base_connector:0.2.9 MAINTAINER Aqueduct version: 0.1 diff --git a/src/dockerfiles/connectors/postgres.dockerfile b/src/dockerfiles/connectors/postgres.dockerfile index a4eab8b86..927d4e806 100644 --- a/src/dockerfiles/connectors/postgres.dockerfile +++ b/src/dockerfiles/connectors/postgres.dockerfile @@ -1,4 +1,4 @@ -FROM aqueducthq/base_connector:0.2.8 +FROM aqueducthq/base_connector:0.2.9 MAINTAINER Aqueduct version: 0.1 diff --git a/src/dockerfiles/connectors/s3.dockerfile b/src/dockerfiles/connectors/s3.dockerfile index 89f16b613..a905d780d 100644 --- a/src/dockerfiles/connectors/s3.dockerfile +++ b/src/dockerfiles/connectors/s3.dockerfile @@ -1,4 +1,4 @@ -FROM aqueducthq/base_connector:0.2.8 +FROM aqueducthq/base_connector:0.2.9 MAINTAINER Aqueduct version: 0.1 diff --git a/src/dockerfiles/connectors/snowflake.dockerfile b/src/dockerfiles/connectors/snowflake.dockerfile index bd6a1a3dc..13e4a505e 100644 --- a/src/dockerfiles/connectors/snowflake.dockerfile +++ b/src/dockerfiles/connectors/snowflake.dockerfile @@ -1,4 +1,4 @@ -FROM aqueducthq/base_connector:0.2.8 +FROM aqueducthq/base_connector:0.2.9 MAINTAINER Aqueduct version: 0.1 diff --git a/src/dockerfiles/connectors/sqlserver.dockerfile b/src/dockerfiles/connectors/sqlserver.dockerfile index 5b62a76d1..1c782bb00 100644 --- a/src/dockerfiles/connectors/sqlserver.dockerfile +++ b/src/dockerfiles/connectors/sqlserver.dockerfile @@ -1,4 +1,4 @@ -FROM aqueducthq/base_connector:0.2.8 +FROM aqueducthq/base_connector:0.2.9 MAINTAINER Aqueduct version: 0.1 diff --git a/src/dockerfiles/function/function310.dockerfile b/src/dockerfiles/function/function310.dockerfile index 9e84269db..222f8e685 100644 --- a/src/dockerfiles/function/function310.dockerfile +++ b/src/dockerfiles/function/function310.dockerfile @@ -16,7 +16,7 @@ pyarrow==7.0.0 \ boto3==1.18.0 \ pydantic==1.9.0 \ scikit_learn==1.0.2 \ -aqueduct-ml==0.2.8 +aqueduct-ml==0.2.9 ENV PYTHONUNBUFFERED 1 diff --git a/src/dockerfiles/function/function37.dockerfile b/src/dockerfiles/function/function37.dockerfile index 36ec54b30..abe8cf0a5 100644 --- a/src/dockerfiles/function/function37.dockerfile +++ b/src/dockerfiles/function/function37.dockerfile @@ -16,7 +16,7 @@ boto3==1.18.0 \ pydantic==1.9.0 \ scikit_learn==1.0.2 \ typing_extensions==4.3.0 \ -aqueduct-ml==0.2.8 +aqueduct-ml==0.2.9 ENV PYTHONUNBUFFERED 1 diff --git a/src/dockerfiles/function/function38.dockerfile b/src/dockerfiles/function/function38.dockerfile index 2fba2bdeb..7b04cab74 100644 --- a/src/dockerfiles/function/function38.dockerfile +++ b/src/dockerfiles/function/function38.dockerfile @@ -16,7 +16,7 @@ pyarrow==7.0.0 \ boto3==1.18.0 \ pydantic==1.9.0 \ scikit_learn==1.0.2 \ -aqueduct-ml==0.2.8 +aqueduct-ml==0.2.9 ENV PYTHONUNBUFFERED 1 diff --git a/src/dockerfiles/function/function39.dockerfile b/src/dockerfiles/function/function39.dockerfile index 5af8efc85..987c538b9 100644 --- a/src/dockerfiles/function/function39.dockerfile +++ b/src/dockerfiles/function/function39.dockerfile @@ -16,7 +16,7 @@ pyarrow==7.0.0 \ boto3==1.18.0 \ pydantic==1.9.0 \ scikit_learn==1.0.2 \ -aqueduct-ml==0.2.8 +aqueduct-ml==0.2.9 ENV PYTHONUNBUFFERED 1 diff --git a/src/dockerfiles/gpu/py310_env.yml b/src/dockerfiles/gpu/py310_env.yml index 7897fe5c2..2e30c4820 100644 --- a/src/dockerfiles/gpu/py310_env.yml +++ b/src/dockerfiles/gpu/py310_env.yml @@ -14,4 +14,4 @@ dependencies: - pip: - scikit_learn==1.0.2 - typing_extensions==4.3.0 - - aqueduct-ml==0.2.8 + - aqueduct-ml==0.2.9 diff --git a/src/dockerfiles/gpu/py37_env.yml b/src/dockerfiles/gpu/py37_env.yml index c344c0bdc..5b0ddbd82 100644 --- a/src/dockerfiles/gpu/py37_env.yml +++ b/src/dockerfiles/gpu/py37_env.yml @@ -14,4 +14,4 @@ dependencies: - pip: - scikit_learn==1.0.2 - typing_extensions==4.3.0 - - aqueduct-ml==0.2.8 + - aqueduct-ml==0.2.9 diff --git a/src/dockerfiles/gpu/py38_env.yml b/src/dockerfiles/gpu/py38_env.yml index bf7ce8ce9..65593db35 100644 --- a/src/dockerfiles/gpu/py38_env.yml +++ b/src/dockerfiles/gpu/py38_env.yml @@ -14,4 +14,4 @@ dependencies: - pip: - scikit_learn==1.0.2 - typing_extensions==4.3.0 - - aqueduct-ml==0.2.8 \ No newline at end of file + - aqueduct-ml==0.2.9 \ No newline at end of file diff --git a/src/dockerfiles/gpu/py39_env.yml b/src/dockerfiles/gpu/py39_env.yml index ca787c625..6d898c5de 100644 --- a/src/dockerfiles/gpu/py39_env.yml +++ b/src/dockerfiles/gpu/py39_env.yml @@ -14,4 +14,4 @@ dependencies: - pip: - scikit_learn==1.0.2 - typing_extensions==4.3.0 - - aqueduct-ml==0.2.8 \ No newline at end of file + - aqueduct-ml==0.2.9 \ No newline at end of file diff --git a/src/dockerfiles/lambda/function/requirements-37.txt b/src/dockerfiles/lambda/function/requirements-37.txt index 5987125f6..eeb737e39 100644 --- a/src/dockerfiles/lambda/function/requirements-37.txt +++ b/src/dockerfiles/lambda/function/requirements-37.txt @@ -7,4 +7,4 @@ boto3==1.18.0 pydantic==1.9.0 scikit_learn==1.0.2 typing_extensions==4.3.0 -aqueduct-ml==0.2.8 \ No newline at end of file +aqueduct-ml==0.2.9 \ No newline at end of file diff --git a/src/dockerfiles/lambda/function/requirements.txt b/src/dockerfiles/lambda/function/requirements.txt index 3cfff70be..705471ba1 100644 --- a/src/dockerfiles/lambda/function/requirements.txt +++ b/src/dockerfiles/lambda/function/requirements.txt @@ -6,4 +6,4 @@ pyarrow==7.0.0 boto3==1.18.0 pydantic==1.9.0 scikit_learn==1.0.2 -aqueduct-ml==0.2.8 \ No newline at end of file +aqueduct-ml==0.2.9 \ No newline at end of file diff --git a/src/dockerfiles/lambda/requirements.txt b/src/dockerfiles/lambda/requirements.txt index 456758be1..b88f00f58 100644 --- a/src/dockerfiles/lambda/requirements.txt +++ b/src/dockerfiles/lambda/requirements.txt @@ -6,4 +6,4 @@ pydantic==1.9.0 pyyaml SQLAlchemy==1.4.30 typing_extensions==4.3.0 -aqueduct-ml==0.2.8 \ No newline at end of file +aqueduct-ml==0.2.9 \ No newline at end of file diff --git a/src/golang/lib/constants.go b/src/golang/lib/constants.go index 858bf720f..2cd33b9bf 100644 --- a/src/golang/lib/constants.go +++ b/src/golang/lib/constants.go @@ -1,3 +1,3 @@ package lib -const ServerVersionNumber = "0.2.8" +const ServerVersionNumber = "0.2.9" diff --git a/src/python/bin/aqueduct b/src/python/bin/aqueduct index 2842f6bcc..97b3e005e 100755 --- a/src/python/bin/aqueduct +++ b/src/python/bin/aqueduct @@ -37,7 +37,7 @@ base_directory = os.path.join(os.environ["HOME"], ".aqueduct") server_directory = os.path.join(os.environ["HOME"], ".aqueduct", "server") ui_directory = os.path.join(os.environ["HOME"], ".aqueduct", "ui") -package_version = "0.2.8" +package_version = "0.2.9" aws_credentials_path = os.path.join(os.environ["HOME"], ".aws", "credentials") default_server_port = 8080 diff --git a/src/python/requirements.txt b/src/python/requirements.txt index 057a772d4..ec09ddd21 100644 --- a/src/python/requirements.txt +++ b/src/python/requirements.txt @@ -11,4 +11,4 @@ typing_extensions>=4.3.0,<=4.4.0 Pillow<=9.4.0 packaging<=23.0 pymongo<=4.3.3 -aqueduct-sdk==0.2.8 +aqueduct-sdk==0.2.9 diff --git a/src/python/setup.py b/src/python/setup.py index 87851c6b4..271071db0 100644 --- a/src/python/setup.py +++ b/src/python/setup.py @@ -10,7 +10,7 @@ setup( name="aqueduct-ml", - version="0.2.8", + version="0.2.9", install_requires=install_requires, scripts=["bin/aqueduct"], packages=find_packages(), diff --git a/src/ui/app/package.json b/src/ui/app/package.json index 5e365cbee..97806c5e6 100644 --- a/src/ui/app/package.json +++ b/src/ui/app/package.json @@ -1,7 +1,7 @@ { "name": "@aqueducthq/ui", "author": "Aqueduct, Inc. ", - "version": "0.2.8", + "version": "0.2.9", "scripts": { "start": "parcel --no-cache index.html", "build": "parcel build --public-url /dist --dist-dir dist/default index.html", @@ -9,7 +9,7 @@ "lint:fix": "eslint '*/**/*.{js,ts,tsx}' --format table --fix" }, "dependencies": { - "@aqueducthq/common": "0.2.8", + "@aqueducthq/common": "0.2.9", "@emotion/react": "^11.10.5", "@emotion/styled": "^11.10.5", "@fortawesome/fontawesome-svg-core": "^6.2.1", diff --git a/src/ui/common/package-lock.json b/src/ui/common/package-lock.json index ea69eb1ad..94096f828 100644 --- a/src/ui/common/package-lock.json +++ b/src/ui/common/package-lock.json @@ -1,12 +1,12 @@ { "name": "@aqueducthq/common", - "version": "0.2.8", + "version": "0.2.9", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@aqueducthq/common", - "version": "0.2.8", + "version": "0.2.9", "hasInstallScript": true, "devDependencies": { "@babel/core": "^7.20.12", diff --git a/src/ui/common/package.json b/src/ui/common/package.json index d802864a5..7406fc1be 100644 --- a/src/ui/common/package.json +++ b/src/ui/common/package.json @@ -1,7 +1,7 @@ { "name": "@aqueducthq/common", "author": "Aqueduct ", - "version": "0.2.8", + "version": "0.2.9", "main": "dist/index.js", "types": "dist/index.d.ts", "alias": { diff --git a/src/ui/common/src/components/operators/WithOperatorHeader.tsx b/src/ui/common/src/components/operators/WithOperatorHeader.tsx index 765a66ffe..3089fe517 100644 --- a/src/ui/common/src/components/operators/WithOperatorHeader.tsx +++ b/src/ui/common/src/components/operators/WithOperatorHeader.tsx @@ -99,6 +99,9 @@ const WithOperatorHeader: React.FC = ({ const integrationId = operator?.spec?.load?.integration_id || operator?.spec?.extract?.integration_id; + const integrationName = integrationId + ? integrationsState?.integrations[integrationId]?.name + : undefined; return ( @@ -118,17 +121,21 @@ const WithOperatorHeader: React.FC = ({ {checkLevelDisplay} - + {integrationName && ( + + )} - - - + {operator?.spec?.load?.parameters && ( + + + + )} {operator?.spec?.load && } diff --git a/src/ui/common/src/components/workflows/nodes/Node.tsx b/src/ui/common/src/components/workflows/nodes/Node.tsx index 0a7b25181..c81e5fa75 100644 --- a/src/ui/common/src/components/workflows/nodes/Node.tsx +++ b/src/ui/common/src/components/workflows/nodes/Node.tsx @@ -254,24 +254,22 @@ export const Node: React.FC = ({ data, isConnectable }) => { {headerIcon} - - - {data.label} - - + + {data.label} + {headerEndIcon && ( <> - + = ({ workflowDag }) => { let selectedWorkflowStatus = ExecutionStatus.Unknown; if (workflowHistory.status.loading === LoadingStatusEnum.Succeeded) { selectedWorkflowStatus = - workflowHistory.history.versions[selectedResultIdx].exec_state.status; + workflowHistory.history.versions[selectedResultIdx]?.exec_state.status; } const name = workflowDag.metadata?.name ?? ''; @@ -123,7 +123,7 @@ const WorkflowHeader: React.FC = ({ workflowDag }) => { function rehypeWrapText() { return function wrapTextTransform(tree) { visitParents(tree, 'text', (node, ancestors) => { - if (ancestors.at(-1).tagName !== 'custom-typography') { + if (ancestors[ancestors.length - 1]?.tagName !== 'custom-typography') { node.type = 'element'; node.tagName = 'custom-typography'; node.children = [{ type: 'text', value: node.value }];