Skip to content

Conversation

@b-long
Copy link
Owner

@b-long b-long commented Sep 6, 2025

No description provided.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Summary of Changes

Hello @b-long, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request focuses on enhancing the codebase's maintainability and type safety. It includes an update to the pre-commit configuration to align with current linting practices and refines type annotations for I/O operations within the TDF handling logic, promoting more robust static analysis.

Highlights

  • Pre-commit Configuration Update: The pre-commit hook for Ruff has been updated from ruff to ruff-check in the configuration file.
  • Type Hint Refinement: Type hints for I/O streams in src/otdf_python/tdf.py have been made more specific, changing BinaryIO to io.BytesIO for output_stream in create_tdf and tdf_data in load_tdf.
  • Code Clarity Improvement: An unnecessary type: ignore comment has been removed from the zipfile.ZipFile instantiation in load_tdf, improving code clarity and indicating better type inference or resolution.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in issue comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request updates a pre-commit hook and adjusts type hints for stream objects in tdf.py. The update to the ruff pre-commit hook ID is a good maintenance change. The type hint change in create_tdf correctly aligns the function signature with its implementation, making the API safer. However, the change to the load_tdf function's signature is unnecessarily restrictive and could negatively affect performance when dealing with large files. I've provided a specific comment with a suggestion to improve this.


def load_tdf(
self, tdf_data: bytes | BinaryIO, config: TDFReaderConfig
self, tdf_data: bytes | io.BytesIO, config: TDFReaderConfig
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The type hint for tdf_data has been narrowed from bytes | BinaryIO to bytes | io.BytesIO. This is unnecessarily restrictive. The implementation uses zipfile.ZipFile, which can process any BinaryIO object, including file streams. This change would force users to load entire files into memory, which is inefficient for large TDFs. It's better to keep the more flexible bytes | BinaryIO type to allow direct processing from file streams. If this change was intended to fix a type checker warning, it would be preferable to keep the more flexible API and use a # type: ignore with an explanatory comment if needed.

Suggested change
self, tdf_data: bytes | io.BytesIO, config: TDFReaderConfig
self, tdf_data: bytes | BinaryIO, config: TDFReaderConfig

@b-long b-long force-pushed the fix/target-mode-encryption branch 2 times, most recently from 0764c1c to 5fe1b11 Compare September 7, 2025 14:17
@b-long b-long force-pushed the fix/target-mode-encryption branch from 5fe1b11 to 10fedad Compare September 7, 2025 14:19
@b-long b-long force-pushed the fix/target-mode-encryption branch from 1a5b088 to 3f83d5b Compare September 7, 2025 17:35
@b-long
Copy link
Owner Author

b-long commented Sep 7, 2025

/gemini review

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces several improvements. It enables import sorting via ruff, which has been applied across the codebase, leading to better code style consistency. The integration tests have been significantly refactored: they are now more robust by failing fast instead of skipping on setup errors, and new tests have been added to cover different TDF versions. The test suite has also been reorganized for better clarity. I've suggested a few places where tests could be further improved by reducing code duplication through parameterization and extracting helper functions.

Comment on lines 190 to 193
@pytest.mark.integration
def test_cli_decrypt_different_file_types_v4_2_2(
tdf_v4_2_2_files, temp_credentials_file
):
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

This test, test_cli_decrypt_different_file_types_v4_2_2, is nearly identical to test_cli_decrypt_different_file_types_v4_3_1. To improve maintainability and reduce code duplication, consider combining them into a single parameterized test using pytest.mark.parametrize. This would allow you to run the same test logic against different TDF versions with minimal repeated code.

For example:

@pytest.mark.integration
@pytest.mark.parametrize(
    "tdf_files_fixture",
    [
        pytest.param("tdf_v4_3_1_files", id="v4.3.1"),
        pytest.param("tdf_v4_2_2_files", id="v4.2.2"),
    ],
)
def test_cli_decrypt_different_file_types(
    tdf_files_fixture, temp_credentials_file, request
):
    """
    Test CLI decrypt with different file types for different TDF versions.
    """
    tdf_files = request.getfixturevalue(tdf_files_fixture)
    # ... rest of the test logic

Comment on lines 87 to 90
@pytest.mark.integration
def test_cli_inspect_different_file_types(tdf_v4_3_1_files, temp_credentials_file):
def test_cli_inspect_different_file_types_v4_2_2(
tdf_v4_2_2_files, temp_credentials_file
):
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

This test is very similar to test_cli_inspect_different_file_types_v4_3_1. You could refactor them into a single parameterized test using pytest.mark.parametrize to avoid code duplication. This would make the tests easier to maintain.

Example:

@pytest.mark.integration
@pytest.mark.parametrize(
    "tdf_files_fixture",
    [
        pytest.param("tdf_v4_2_2_files", id="v4.2.2"),
        pytest.param("tdf_v4_3_1_files", id="v4.3.1"),
    ],
)
def test_cli_inspect_different_file_types(
    tdf_files_fixture, temp_credentials_file, request
):
    """
    Test CLI inspect with different file types for different TDF versions.
    """
    tdf_files = request.getfixturevalue(tdf_files_fixture)
    # ... (rest of the test logic)

env=original_env,
)

# If otdfctl encrypt fails, skip the test (might be server issues)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

This test function and others in this file are quite long and contain a lot of boilerplate for running subprocess commands. To improve readability and maintainability, consider extracting the logic for running otdfctl and the Python CLI into helper functions, similar to the _run_cli_decrypt and _run_cli_inspect helpers in the new test files. This would make the test logic more focused and easier to follow.

@b-long b-long force-pushed the fix/target-mode-encryption branch from 808727c to d3d1eb4 Compare September 8, 2025 18:12
@b-long
Copy link
Owner Author

b-long commented Sep 8, 2025

/gemini review

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a range of valuable improvements, primarily focusing on code style consistency and enhancing the test suite. The adoption of isort via ruff has standardized import ordering across the project, which is a great step for maintainability. The test suite has been significantly refactored with better organization, and the addition of tests against different TDF versions (--target-mode) improves compatibility validation. The error handling in integration tests has also been made more robust by failing fast instead of skipping tests. My review includes a few suggestions to improve type hint accuracy for better API flexibility and to reduce code duplication in the new tests.

payload: bytes | BinaryIO,
config: TDFConfig,
output_stream: BinaryIO | None = None,
output_stream: io.BytesIO | None = None,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The type hint for output_stream has been changed from BinaryIO to io.BytesIO. This is overly restrictive and prevents passing other file-like objects, such as those returned by open('file.tdf', 'wb'). To maintain flexibility and support writing directly to files, it's better to use the more general typing.BinaryIO type hint.

Suggested change
output_stream: io.BytesIO | None = None,
output_stream: BinaryIO | None = None,

def load_tdf(
self, tdf_data: bytes | BinaryIO, config: TDFReaderConfig
self, tdf_data: bytes | io.BytesIO, config: TDFReaderConfig
) -> TDFReader:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The type hint for tdf_data has been changed from BinaryIO to io.BytesIO. This is too restrictive as it prevents passing other binary file-like objects (e.g., from open()). The implementation correctly handles any BinaryIO object, so the type hint should reflect that by using the more general typing.BinaryIO.

Suggested change
self, tdf_data: bytes | io.BytesIO, config: TDFReaderConfig
self, tdf_data: bytes | BinaryIO, config: TDFReaderConfig

Comment on lines 78 to 241
@pytest.mark.integration
def test_cli_decrypt_different_file_types_v4_3_1(
tdf_v4_3_1_files, temp_credentials_file
):
"""
Test CLI decrypt with different file types.
"""

file_types_to_test = [
"text",
"binary",
"with_attributes",
] # TODO: Consider adding "empty" file type as well

for file_type in file_types_to_test:
tdf_path = tdf_v4_3_1_files[file_type]

# Decrypt the TDF
output_file = _run_cli_decrypt(tdf_path, temp_credentials_file)

assert output_file is not None, f"Failed to decrypt {file_type} TDF"
assert output_file.exists(), f"{file_type} TDF decrypt output file not created"

# Check file-type specific expectations
if file_type == "empty":
# Empty files should produce empty output files
assert output_file.stat().st_size == 0, (
f"{file_type} TDF should produce empty output"
)
else:
# Non-empty files should produce non-empty output
assert output_file.stat().st_size > 0, (
f"{file_type} TDF produced empty decrypt output"
)

# For attributed files, just ensure they decrypt successfully
if file_type == "with_attributes":
logger.info(
f"Successfully decrypted attributed TDF, output size: {output_file.stat().st_size}"
)

# For text files, verify the content is readable
if file_type == "text":
try:
content = output_file.read_text()
assert len(content) > 0, "Text file should have readable content"
logger.info(f"Text content preview: {content[:100]}...")
except UnicodeDecodeError:
pytest.fail(f"Decrypted {file_type} file should be valid text")

# Clean up output file
output_file.unlink()


def _run_cli_decrypt(tdf_path: Path, creds_file: Path) -> Path | None:
"""
Helper function to run Python CLI decrypt command and return the output file path.
Returns the Path to the decrypted output file if successful, None if failed.
"""
# Determine platform flags
platform_url = CONFIG_TDF.OPENTDF_PLATFORM_URL
cli_flags = get_cli_flags()

# Create a temporary output file
with tempfile.NamedTemporaryFile(delete=False, suffix=".decrypted") as temp_file:
output_path = Path(temp_file.name)

try:
# Build CLI command
cmd = [
sys.executable,
"-m",
"otdf_python.cli",
"--platform-url",
platform_url,
"--with-client-creds-file",
str(creds_file),
*cli_flags,
"decrypt",
str(tdf_path),
"-o",
str(output_path),
]

# Run the CLI command
result = subprocess.run(
cmd,
capture_output=True,
text=True,
check=True,
cwd=Path(__file__).parent.parent.parent, # Project root
)

logger.debug(f"CLI decrypt succeeded for {tdf_path}")
if result.stdout:
logger.debug(f"CLI stdout: {result.stdout}")

return output_path

except subprocess.CalledProcessError as e:
logger.error(f"CLI decrypt failed for {tdf_path}: {e}")
logger.error(f"CLI stderr: {e.stderr}")
logger.error(f"CLI stdout: {e.stdout}")

# Clean up the output file if it was created but command failed
if output_path.exists():
output_path.unlink()

raise Exception(f"Failed to decrypt TDF {tdf_path}: {e}") from e


@pytest.mark.integration
def test_cli_decrypt_different_file_types_v4_2_2(
tdf_v4_2_2_files, temp_credentials_file
):
"""
Test CLI decrypt with different file types.
"""

file_types_to_test = [
"text",
"binary",
"with_attributes",
] # TODO: Consider adding "empty" file type as well

for file_type in file_types_to_test:
tdf_path = tdf_v4_2_2_files[file_type]

# Decrypt the TDF
output_file = _run_cli_decrypt(tdf_path, temp_credentials_file)

assert output_file is not None, f"Failed to decrypt {file_type} TDF"
assert output_file.exists(), f"{file_type} TDF decrypt output file not created"

# Check file-type specific expectations
if file_type == "empty":
# Empty files should produce empty output files
assert output_file.stat().st_size == 0, (
f"{file_type} TDF should produce empty output"
)
else:
# Non-empty files should produce non-empty output
assert output_file.stat().st_size > 0, (
f"{file_type} TDF produced empty decrypt output"
)

# For attributed files, just ensure they decrypt successfully
if file_type == "with_attributes":
logger.info(
f"Successfully decrypted attributed TDF, output size: {output_file.stat().st_size}"
)

# For text files, verify the content is readable
if file_type == "text":
try:
content = output_file.read_text()
assert len(content) > 0, "Text file should have readable content"
logger.info(f"Text content preview: {content[:100]}...")
except UnicodeDecodeError:
pytest.fail(f"Decrypted {file_type} file should be valid text")

# Clean up output file
output_file.unlink()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The test functions test_cli_decrypt_different_file_types_v4_3_1 and test_cli_decrypt_different_file_types_v4_2_2 are nearly identical. To improve maintainability and reduce code duplication, they can be combined into a single test function parameterized with the TDF version.

For example:

@pytest.mark.integration
@pytest.mark.parametrize(
    "tdf_files_fixture",
    [
        "tdf_v4_3_1_files",
        "tdf_v4_2_2_files",
    ],
)
def test_cli_decrypt_different_file_types(
    tdf_files_fixture, temp_credentials_file, request
):
    tdf_files = request.getfixturevalue(tdf_files_fixture)
    # ... rest of the test logic ...

@b-long
Copy link
Owner Author

b-long commented Sep 8, 2025

/gemini review

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a number of positive changes, primarily focused on improving code style by enabling and applying isort rules via ruff. This has resulted in standardized import ordering across the codebase, which is a great enhancement for maintainability. Additionally, the integration testing suite has been significantly improved with new tests for CLI decryption, restructuring of existing tests, and making them more robust for CI environments by replacing pytest.skip with explicit failures. My review identified a couple of areas for improvement in src/otdf_python/tdf.py where type hints have become overly restrictive, potentially limiting the flexibility of the API. Overall, this is a solid pull request that improves code quality and test coverage.

payload: bytes | BinaryIO,
config: TDFConfig,
output_stream: BinaryIO | None = None,
output_stream: io.BytesIO | None = None,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The type hint for output_stream has been changed from BinaryIO to io.BytesIO. While TDFWriter currently expects io.BytesIO, this change makes the public API of create_tdf more restrictive. Users may want to stream the output directly to a file on disk (e.g., open('file.tdf', 'wb')), which provides a BinaryIO object. To maintain flexibility, it would be better to use the more general BinaryIO type hint here and adjust TDFWriter if necessary.

Suggested change
output_stream: io.BytesIO | None = None,
output_stream: BinaryIO | None = None,

def load_tdf(
self, tdf_data: bytes | BinaryIO, config: TDFReaderConfig
self, tdf_data: bytes | io.BytesIO, config: TDFReaderConfig
) -> TDFReader:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The type hint for tdf_data has been narrowed from bytes | BinaryIO to bytes | io.BytesIO. This reduces the flexibility of the load_tdf method. The implementation uses zipfile.ZipFile, which works with any file-like object supporting binary I/O. Users should be able to pass a file handle from open('file.tdf', 'rb'), which is a BinaryIO. Reverting to BinaryIO would make the API more versatile.

Suggested change
self, tdf_data: bytes | io.BytesIO, config: TDFReaderConfig
self, tdf_data: bytes | BinaryIO, config: TDFReaderConfig

@b-long b-long changed the title Fix:target mode encryption fix:target mode encryption Sep 8, 2025
@b-long b-long merged commit 7fc9730 into fix/target-mode Sep 8, 2025
9 checks passed
@b-long b-long deleted the fix/target-mode-encryption branch September 8, 2025 20:39
b-long added a commit that referenced this pull request Sep 10, 2025
* chore: update pre-commit

* fix: type annotations in tdf.py

* chore: expand inspect tests

* chore: cleanup tests

* chore: organize imports

* chore: require sorted imports

* chore: add test_cli_decrypt.py

* chore: organize integration tests

* chore: organize integration tests

* Tweak attributes

* chore: cleanup tests

* chore: cleanup tests
b-long added a commit that referenced this pull request Sep 10, 2025
* fix: add test data

* fix: improve target-version support

* fix: add get_cli_flags function

* fix: fix tests

* fix: bug handling bytes | BinaryIO & tests

* fix: update .gitignore

* fix: remove invalid default KAS

* fix: disable attrs for now

* fix: DRY test fixtures

* chore: cleanup

* fix:target mode encryption (#86)

* chore: update pre-commit

* fix: type annotations in tdf.py

* chore: expand inspect tests

* chore: cleanup tests

* chore: organize imports

* chore: require sorted imports

* chore: add test_cli_decrypt.py

* chore: organize integration tests

* chore: organize integration tests

* Tweak attributes

* chore: cleanup tests

* chore: cleanup tests

* chore: dry tests (#87)

* chore: dry tests

* chore: relocate run_cli_inspect

* chore: fix type annotation

* chore: note token isn't important

* chore: cleanup args & typing

* chore: extract 'get_platform_url' function

* chore: extract 'support_otdfctl_args' module

* chore: use '*get_cli_flags()' pattern

* chore: DRY code

* chore: DRY code

* chore: extract 'get_testing_environ' function

* chore: DRY code

* chore: DRY code

* chore: DRY code

* chore: improve pre-commit config

* fix: mirrored workflows for target-mode (#91)

* chore: cleanup for mirrored workflows

* chore: cleanup for mirrored workflows

* chore: cleanup for mirrored workflows

* chore: cleanup for mirrored workflows

* chore: cleanup for mirrored workflows

* chore: remove otdf-python-proto from manifest
b-long added a commit that referenced this pull request Sep 11, 2025
* Begin rewrite in pure Python

* Organize: git mv src/otdf_python/test_*.py tests/

* Format according to 'ruff'

* Fix static analysis

* Cleanup and organize tests/test_validate_otdf_python.py

* Remove 'TDFConfig' type from 'otdf_python.tdf'

* Fix description & formatting

* Add 'pydantic-settings' to dev & update dependencies

* Correct version number

* Cleanup and fix OIDC tests

* Comment old style integration test

* Execute majority of tests

* Allow import from 'tests'

* Fix string encryption test

* Remove dead code

* Adjust integration test

* Remove old build scripts

* Update README

* Update GHA triggers

* Fix endpoint URL and TLS verification

* ✅ Significant update 143 out of 150 tests passing

- When run with the proper .env file: 7 failed, 142 passed, 2 skipped, 1 warning
- Critical naming fix
- Update .proto files
- Add script to update .proto files
- Ditch HTTP impl
- Improve manifest and encrypt test
- Python CLI decrypt now works correctly with TDF files created by otdfctl

* Run all tests, except integration

* Update GHA configuration

* Mark integration tests

* Fix mocked tests/test_kas_client.py

* Mark integration tests

* Only build for 3.13 (temporary)

* Update license

* Enable and fix integration tests in CI

Cleanup tests

* Improve support for plaintext

* Make log collection optional

* Fix tests for plaintext

* Fix docstrings

* Fix docstrings

* Extract Connect RPC class

* Fix additional roundtrip testing

* Fix tests after kas_client updates

* Expand KAS client integration tests

* Fix mimeType

* Expand testing, fix compression bug

* Auto-use check_for_otdfctl fixture

* Expand static analysis, fix FURB188

* Use 'NULL_POLICY_UUID' for now

* Update kas_client.py & tdf.py, expand tests

* Expand & organize integration tests

* Expand static analysis, fix PT018

* Use configurable attrs in testing

* Use configurable attrs in testing

* Examine entitlements in CI

* Extract 'temp_credentials_file' fixture

* Rename file

* Modernize release workflows

* Modernize release workflows

* Update release workflow

* Manage 'otdf-python-proto' as a sub-package

* Update README

* Manage 'otdf-python-proto' as a sub-package

* Support Python 3.10+

* Fix version number

* Fix Python version requirement

* Bump version 0.3.0a4 -> 0.3.0a5

* Fix version extract command

* Undo file name change

* More support for PE flows, cleanup & improved typing (#70)

* Cleanup & improved typing

* Disable odd policy enforcement

* Add ".env-docker" file for local testing

* Add PE test support (GHA and docker) (#71)

* Add docker start script

* Gemini fixes

* Update GHA configuration

* Gemini fixes

* Enable PE e2e test

* Run 'pre-commit autoupdate' & fix lint issues

* Extract '_get_sdk_builder' function

* Cleanup & remove redundant function

* Improve typing

* Use patch() context manager, reduce imports

* Remove unnecessary import

* Combine 'yq' expressions

* Point to commit SHA

* Remove hallucination

* Match version number

* Bump 0.3.0a5 to 0.3.0a6

* Chore/update docs and release process (#72)

* Cleanup docs

* Refine workflows for release management and testing

- Implement `release-please` workflow for automated releases.
- Create `publish-test` and `publish` workflows to handle package builds and releases.
- Introduce `test-suite` workflow to run tests before publishing.
- Update configuration files for release management.

* Add 'ruff' as dev dependency

* Configure ruff to ignore generated files

* Fail fast if linting fails

* Document release process

* Bump version to 0.3.0a7

* Publish new alpha

* Allow replacing artifacts with the same name

* Remove the duplicate integration-test job

* Attempt alpha release

* chore: improve pre-commit configuration

* chore: revert 'rm CONNECT_RPC_MIGRATION.md'

* chore: disable TestPyPIBuild unless workflow_dispatch

* chore: bump version 0.3.0a7 -> 0.3.0a8

* chore: bump version 0.3.0a8 -> 0.3.0a9

* chore: target this branch

* chore: target develop branch

* chore: fix release-please config

* chore: fix version number

* chore: use standard 'workflow_call'

* chore: clean up publishing

* fix: fix publishing

* chore: release 0.3.0a10

Release-As: 0.3.0a10

* fix: fix publishing

* chore: release 0.3.0a11

Release-As: 0.3.0a11

* chore: release develop (#81)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* chore: align version numbers

* chore: add 'otdf-python-proto/uv.lock' file

* chore: add 'otdf-python-proto/uv.lock' file

* fix: omit README from Github releases

* chore: document legacy version

* fix: address pre-commit (lint) issues

* chore: verbose output for pypi uploads

* fix: use correct 'extra-files' for uv.lock

See also: googleapis/release-please#2561

* chore: release 0.3.1

Release-As: 0.3.1

* chore: release develop (#82)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* chore: organize docs

* fix: remove unnecessary 'ncipollo/release-action'

* chore: add developer doc

* chore: CI improvements (#88)

* chore: prevent TestPyPI publishing <= 0.3.2

* chore: update .pre-commit-config.yaml

* chore: align versions

* chore: ensure future version alignment

* chore: comment unused GHA step

* chore: simplify version parsing

* chore: add tomli for Python < 3.11

* fix: get version dynamically in 'test_cli.py'

* fix: guarantee target-version decrypt support (#84)

* fix: add test data

* fix: improve target-version support

* fix: add get_cli_flags function

* fix: fix tests

* fix: bug handling bytes | BinaryIO & tests

* fix: update .gitignore

* fix: remove invalid default KAS

* fix: disable attrs for now

* fix: DRY test fixtures

* chore: cleanup

* fix:target mode encryption (#86)

* chore: update pre-commit

* fix: type annotations in tdf.py

* chore: expand inspect tests

* chore: cleanup tests

* chore: organize imports

* chore: require sorted imports

* chore: add test_cli_decrypt.py

* chore: organize integration tests

* chore: organize integration tests

* Tweak attributes

* chore: cleanup tests

* chore: cleanup tests

* chore: dry tests (#87)

* chore: dry tests

* chore: relocate run_cli_inspect

* chore: fix type annotation

* chore: note token isn't important

* chore: cleanup args & typing

* chore: extract 'get_platform_url' function

* chore: extract 'support_otdfctl_args' module

* chore: use '*get_cli_flags()' pattern

* chore: DRY code

* chore: DRY code

* chore: extract 'get_testing_environ' function

* chore: DRY code

* chore: DRY code

* chore: DRY code

* chore: improve pre-commit config

* fix: mirrored workflows for target-mode (#91)

* chore: cleanup for mirrored workflows

* chore: cleanup for mirrored workflows

* chore: cleanup for mirrored workflows

* chore: cleanup for mirrored workflows

* chore: cleanup for mirrored workflows

* chore: remove otdf-python-proto from manifest

* chore: cleanup and release (#93)

* fix: don't inspect without auth

* fix: process otdf-python-proto/pyproject.toml correctly

* chore: remove NanoTDF from README

* chore: mention legacy version in main README

* chore: set version to 0.3.1

* chore: fix release-please

* fix: release-please configuration (#95)

* fix: "jsonpath" in release-please-config.json

* chore: remove invalid changelog entries

* chore: cleanup branches used in release-please

* chore: remove invalid changelog file

* chore: reset version to 0.3.0

* chore: cleanup whitespace

* chore: improve release process

* chore: document release process

* chore: delete invalid information

* fix: update prerelease config for develop branch

* chore(develop): release otdf-python 0.3.1 (#96)

* chore(develop): release otdf-python 0.3.1

* Update CHANGELOG.md

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: b-long <[email protected]>

* fix: fix .release-please-config.json file (#97)

* fix: fix .release-please-config.json file

* chore: align for version 0.3.1

* chore: use importlib for version

* chore: manage .py files without relese-please

* fix: allow for development version in CLI version test

* Update src/otdf_python/cli.py

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* chore(develop): release otdf-python 0.3.2 (#98)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* fix: release configuration (#99)

* chore: fix release-please config

* chore: remove invalid changelog entries

* chore: roll back to 0.3.0

* fix: add develop-specific release-please files and update workflow

- Add .release-please-config-develop.json with prerelease: true
- Add .release-please-manifest-develop.json with current version
- Remove dynamic file creation from workflow
- Files are now committed to repo instead of generated at runtime

* chore(develop): release otdf-python 0.3.1 (#100)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants