#!/bin/bash # # Builds python auto-generated protobuf files set -eux # deps version=7.3.0 openapi-generator-cli version || npm install @openapitools/openapi-generator-cli -g # if [ "$(openapi-generator-cli version)" != "$version" ]; then # version-manager set "$version" # fi # generate deps from hatchet repo (cd ../.. && sh hack/oas/generate-server.sh) # generate python rest client dst_dir=./hatchet_sdk/clients/rest mkdir -p $dst_dir tmp_dir=./tmp # generate into tmp folder openapi-generator-cli generate -i ../../bin/oas/openapi.yaml -g python -o ./tmp --skip-validate-spec \ --global-property=apiTests=false \ --global-property=apiDocs=true \ --global-property=modelTests=false \ --global-property=modelDocs=true \ --package-name hatchet_sdk.clients.rest mv $tmp_dir/hatchet_sdk/clients/rest/api_client.py $dst_dir/api_client.py mv $tmp_dir/hatchet_sdk/clients/rest/configuration.py $dst_dir/configuration.py mv $tmp_dir/hatchet_sdk/clients/rest/api_response.py $dst_dir/api_response.py mv $tmp_dir/hatchet_sdk/clients/rest/exceptions.py $dst_dir/exceptions.py mv $tmp_dir/hatchet_sdk/clients/rest/__init__.py $dst_dir/__init__.py mv $tmp_dir/hatchet_sdk/clients/rest/rest.py $dst_dir/rest.py openapi-generator-cli generate -i ../../bin/oas/openapi.yaml -g python -o . --skip-validate-spec \ --global-property=apis,models \ --global-property=apiTests=false \ --global-property=apiDocs=false \ --global-property=modelTests=false \ --global-property=modelDocs=false \ --package-name hatchet_sdk.clients.rest # copy the __init__ files from tmp to the destination since they are not generated for some reason cp $tmp_dir/hatchet_sdk/clients/rest/models/__init__.py $dst_dir/models/__init__.py cp $tmp_dir/hatchet_sdk/clients/rest/api/__init__.py $dst_dir/api/__init__.py # remove tmp folder rm -rf $tmp_dir MIN_GRPCIO_VERSION=$(grep -A 1 'grpcio =' pyproject.toml | grep 'version' | sed -E 's/.*">=([0-9]+\.[0-9]+\.[0-9]+).*/\1/' | sort -V | head -n 1 ) poetry add "grpcio@$MIN_GRPCIO_VERSION" "grpcio-tools@$MIN_GRPCIO_VERSION" proto_paths=( "../../api-contracts/dispatcher dispatcher.proto" "../../api-contracts/events events.proto" "../../api-contracts/workflows workflows.proto" "../../api-contracts v1/shared/condition.proto" "../../api-contracts v1/dispatcher.proto" "../../api-contracts v1/workflows.proto" ) for entry in "${proto_paths[@]}"; do proto_path=$(echo "$entry" | cut -d' ' -f1) proto_file=$(echo "$entry" | cut -d' ' -f2-) echo "Generating Python code for $proto_file with proto_path=$proto_path" poetry run python -m grpc_tools.protoc \ --proto_path="$proto_path" \ --python_out=./hatchet_sdk/contracts \ --pyi_out=./hatchet_sdk/contracts \ --grpc_python_out=./hatchet_sdk/contracts \ "$proto_file" done ## Hack to fix broken import paths with absolute paths if [[ "$OSTYPE" == "darwin"* ]]; then find ./hatchet_sdk/contracts -type f -name '*.py.*' -exec sed -i '' 's/from v1/from hatchet_sdk.contracts.v1/g' {} + else find ./hatchet_sdk/contracts -type f -name '*.py.*' -exec sed -i 's/from v1/from hatchet_sdk.contracts.v1/g' {} + fi git restore pyproject.toml poetry.lock poetry lock poetry install --all-extras set +e # Note: Hack to run the linters without failing so that we can apply the patches ./lint.sh set -e # apply patches to openapi-generator generated code poetry run python apply_patches.py # Rerun the linters and fail if there are any issues ./lint.sh