diff --git a/.github/workflows/build-golang-macos.yaml b/.github/workflows/build-golang-macos.yaml index 840e89d..86ad73b 100644 --- a/.github/workflows/build-golang-macos.yaml +++ b/.github/workflows/build-golang-macos.yaml @@ -47,4 +47,4 @@ jobs: # - uses: ./.github/workflows/platform-integration-test.yaml # with: - # wheel: dist/otdf_python-0.2.7-py3-none-any.whl + # wheel: dist/otdf_python-0.2.8-py3-none-any.whl diff --git a/.github/workflows/build-golang-ubuntu.yaml b/.github/workflows/build-golang-ubuntu.yaml index e1d844c..2a004cd 100644 --- a/.github/workflows/build-golang-ubuntu.yaml +++ b/.github/workflows/build-golang-ubuntu.yaml @@ -43,12 +43,12 @@ jobs: - uses: actions/cache/restore@v4 with: - path: dist/otdf_python-0.2.7-py3-none-any.whl + path: dist/otdf_python-0.2.8-py3-none-any.whl key: ${{ runner.os }}${{ matrix.python3_version }}-data-${{ github.sha }} - uses: actions/cache/save@v4 with: - path: dist/otdf_python-0.2.7-py3-none-any.whl + path: dist/otdf_python-0.2.8-py3-none-any.whl key: ${{ runner.os }}${{ matrix.python3_version }}-data-${{ github.sha }} restore-keys: | ${{ runner.os }}${{ matrix.python3_version }}-data- @@ -61,5 +61,5 @@ jobs: needs: build uses: ./.github/workflows/platform-integration-test.yaml with: - wheel: dist/otdf_python-0.2.7-py3-none-any.whl + wheel: dist/otdf_python-0.2.8-py3-none-any.whl python_version: ${{ matrix.python3_version }} diff --git a/.github/workflows/platform-integration-test.yaml b/.github/workflows/platform-integration-test.yaml index ec58f2f..a042053 100644 --- a/.github/workflows/platform-integration-test.yaml +++ b/.github/workflows/platform-integration-test.yaml @@ -29,7 +29,7 @@ jobs: - uses: actions/cache/restore@v4 with: - path: dist/otdf_python-0.2.7-py3-none-any.whl + path: dist/otdf_python-0.2.8-py3-none-any.whl key: ${{ runner.os }}${{ inputs.python_version }}-data-${{ github.sha }} - name: Prove that the input file is available diff --git a/README.md b/README.md index 7974091..a4eb971 100644 --- a/README.md +++ b/README.md @@ -27,10 +27,10 @@ Install from the [Python Package Index (PyPI)](https://pypi.org): pip install otdf_python # Install a pinned version -pip install otdf-python==0.2.7 +pip install otdf-python==0.2.8 # Install a pinned version, from test.pypi.org -pip install -i https://test.pypi.org/simple/ otdf-python==0.2.7 +pip install -i https://test.pypi.org/simple/ otdf-python==0.2.8 ``` ## Usage diff --git a/build-scripts/ci-build.sh b/build-scripts/ci-build.sh index cc54576..8158e11 100755 --- a/build-scripts/ci-build.sh +++ b/build-scripts/ci-build.sh @@ -72,4 +72,4 @@ echo "✨✨✨ Build wheel" poetry run python3 setup.py bdist_wheel echo "✨✨✨ Install wheel" -pip install dist/otdf_python-0.2.7-py3-none-any.whl +pip install dist/otdf_python-0.2.8-py3-none-any.whl diff --git a/build-scripts/make_and_validate_script.sh b/build-scripts/make_and_validate_script.sh index 06369d8..b49c8f1 100755 --- a/build-scripts/make_and_validate_script.sh +++ b/build-scripts/make_and_validate_script.sh @@ -47,7 +47,7 @@ python3 -m pip install --upgrade setuptools wheel python3 setup.py bdist_wheel # Prove that the wheel can be installed -pip install dist/otdf_python-0.2.7-py3-none-any.whl +pip install dist/otdf_python-0.2.8-py3-none-any.whl if [[ "$SKIP_TESTS" == "-s" || "$SKIP_TESTS" == "--skip-tests" ]]; then echo "Build is complete, skipping tests." diff --git a/build-scripts/uv_make_and_validate_script.sh b/build-scripts/uv_make_and_validate_script.sh index 52f48c3..2d2a374 100755 --- a/build-scripts/uv_make_and_validate_script.sh +++ b/build-scripts/uv_make_and_validate_script.sh @@ -70,7 +70,7 @@ loud_print "Installing wheel" uv venv .venv-wheel --python 3.12 "$PY_TYPE" source "${BUILD_ROOT}/.venv-wheel/bin/activate" pip install pybindgen -pip install dist/otdf_python-0.2.7-py3-none-any.whl +pip install dist/otdf_python-0.2.8-py3-none-any.whl if [[ "$SKIP_TESTS" == "-s" || "$SKIP_TESTS" == "--skip-tests" ]]; then echo "Build is complete, skipping tests." diff --git a/main.go b/main.go index 3c89308..c847dea 100644 --- a/main.go +++ b/main.go @@ -21,6 +21,7 @@ import ( "errors" "fmt" "io" + "log" "os" "path" "path/filepath" @@ -374,6 +375,7 @@ func EncryptFilesInDirNPE(dirPath string, config OpentdfConfig, dataAttributes [ if err != nil { return nil, err } + errChan := make(chan error, len(files)) var outputPaths []string var mu sync.Mutex @@ -386,14 +388,14 @@ func EncryptFilesInDirNPE(dirPath string, config OpentdfConfig, dataAttributes [ defer wg.Done() sdkClient, err := newSdkClient(config, authScopes) if err != nil { - fmt.Printf("failed to create SDK client: %v\n", err) + errChan <- fmt.Errorf("failed to create SDK client: %v", err) return } inputFilePath := path.Join(dirPath, file.Name()) outputFilePath := inputFilePath + ".tdf" got, err := encryptFileWithClient(inputFilePath, outputFilePath, sdkClient, config, dataAttributes) if err != nil { - fmt.Printf("failed to encrypt file %s: %v\n", inputFilePath, err) + errChan <- fmt.Errorf("failed to encrypt file %s: %v", inputFilePath, err) return } mu.Lock() @@ -404,7 +406,18 @@ func EncryptFilesInDirNPE(dirPath string, config OpentdfConfig, dataAttributes [ } wg.Wait() + close(errChan) + + var errors []error + for err := range errChan { + errors = append(errors, err) + } + logOutputPaths(outputPaths, errors) + + if len(errors) > 0 { + return outputPaths, fmt.Errorf("encountered errors during encryption: %v", errors) + } return outputPaths, nil } @@ -439,6 +452,8 @@ func EncryptFilesWithExtensionsNPE(dirPath string, extensions []string, config O outputPaths = append(outputPaths, got) } + logOutputPaths(outputPaths, errors) + if len(errors) > 0 { return outputPaths, fmt.Errorf("encountered errors during encryption: %v", errors) } @@ -637,8 +652,15 @@ func DecryptFilesInDirNPE(dirPath string, config OpentdfConfig) ([]string, error outputPaths = append(outputPaths, path) } - if len(errChan) > 0 { - return nil, <-errChan + var errors []error + for err := range errChan { + errors = append(errors, err) + } + + logOutputPaths(outputPaths, errors) + + if len(errors) > 0 { + return nil, fmt.Errorf("encountered errors during decryption: %v", errors) } return outputPaths, nil @@ -701,6 +723,8 @@ func DecryptFilesWithExtensionsNPE(dirPath string, extensions []string, config O } } + logOutputPaths(outputPaths, errors) + if len(errors) > 0 { return outputPaths, fmt.Errorf("encountered errors during decryption: %v", errors) } @@ -818,3 +842,16 @@ func findFiles(dir string, extensions []string) ([]string, error) { return files, nil } + +func logOutputPaths(outputPaths []string, errors []error) { + if len(errors) > 0 { + log.Println("Errors occurred during processing:") + for _, err := range errors { + log.Printf("\t%s\n", err) + } + } + log.Println("Output Paths:") + for _, path := range outputPaths { + log.Printf("\t%s\n", path) + } +} diff --git a/pyproject.toml b/pyproject.toml index 9f5b784..676d80f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "otdf-python" # Should match 'setup.py' version number (used for gopy/pybindgen) -version = "0.2.7" +version = "0.2.8" description = "Unofficial OpenTDF SDK for Python." authors = [ {name="b-long", email="b-long@users.noreply.github.com"} @@ -19,7 +19,7 @@ pybindgen = "^0.22.1" [tool.poetry] package-mode = false -version = "0.2.7" +version = "0.2.8" [tool.poetry.dependencies] python = ">=3.11,<3.14" diff --git a/setup.py b/setup.py index 334e729..95dc039 100644 --- a/setup.py +++ b/setup.py @@ -24,7 +24,7 @@ url="https://github.com/b-long/opentdf-python-sdk", package_data={"otdf_python": ["*.so"]}, # Should match 'pyproject.toml' version number - version="0.2.7", + version="0.2.8", author_email="b-long@users.noreply.github.com", include_package_data=True, ) diff --git a/setup_ci.py b/setup_ci.py index 7171999..5bb75af 100644 --- a/setup_ci.py +++ b/setup_ci.py @@ -81,7 +81,7 @@ def build_extension(self, ext: Extension): setuptools.setup( name="otdf_python", - version="0.2.7", + version="0.2.8", author="b-long", description="Unofficial OpenTDF SDK for Python.", long_description_content_type="text/markdown", diff --git a/uv.lock b/uv.lock index 8b0cbf0..138c19b 100644 --- a/uv.lock +++ b/uv.lock @@ -3,5 +3,5 @@ requires-python = ">=3.11" [[package]] name = "otdf-python" -version = "0.2.7" +version = "0.2.8" source = { editable = "." }