Fix v1 compatibility layer and update docs#276
Merged
Conversation
…1` to fix compatibility layer Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com>
…t `>=2.0,<3.0` for v1 compat layer Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com>
…r improved organization Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com>
…sion constraints for libraries including `anyio`, `sanic`, `pydantic`, and others Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com>
…ed `v1` modules for consistency Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com>
…iles for consistency Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com>
…y layer Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com>
…, format protocol, and v2 API changes Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com>
Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com>
… Python 3.14+ Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com>
Member
Author
|
@PlugaruT FYI |
Klaudioz
pushed a commit
that referenced
this pull request
Mar 24, 2026
* chore: V2 migrate to uv (#239) * Migrate project to rye and ruff for v2 Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * Just run ruff Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * Add the core package stub Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * Move cloudevents to v1 Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * Add extra rye configs. update locks to be OS-aware Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * Migrate from rye to uv Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * Use python 3.12 by default for linting Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * Do not mention rye in docs Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Use stricter mypy rules. exclude v1 Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * Run isort, flake8 Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * fix isort Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * Run ruff with isort Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * Move mypy config to pyproject Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * Exclude samples as well Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * Exclude samples as well Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * Fix mypy pre-commit setup Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> --------- Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * fix: remove last mentions of py38 (#244) Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * feat: base `CloudEvent` class as per v1 specs, including attribute validation (#242) * feat: base `CloudEvent` class as per v1 specs, including attribute validation Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * chore: add typings and docstrings Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * chore: Add support for custom extension names and validate them Signed-off-by: Tudor <plugaru.tudor@protonmail.com> * chore: Add copyright and fix missing type info Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * chore: Add getters for attributes and test happy path Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * fix: typing Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * chore: Split validation logic into smaller methods Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * chore: Add method to extract extension by name Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * chore: configure ruff to sort imports also Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * chore: Returns all the errors at ones instead of raising early. Improve tests Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * fix missing type info Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * chore: Improve exceptions handling. Have exceptions grouped by attribute name and typed exceptions Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * chore: Skip type checing for getters of required attributes We can't use TypedDict here becuase it does not allow for arbitrary keys which we need in order to support custom extension attributes. Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * fix: missing type Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * chore: Improve exceptions and introduce a new one for invalid values Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * fix: str representation for validation error Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix: Fix missing type definitions Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * small fix Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * remove cast of defaultdict to dict Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> --------- Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> Signed-off-by: Tudor <plugaru.tudor@protonmail.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * feat: implementation for JSON format. (#245) * feat: draft implementation for JSON format. Only CloudEvent serialization included. Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * Implement read method Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * small fix to read method Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * wrap up JSON format completely and make it compliant with the spec Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * add type annotations Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * chore(docs): move docstrings from implementation to protocol class Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * chore(docs): document Format protocol Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> --------- Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * chore: drop support for PY3.19 and run tests for 3.13 and 3.14 (#252) * chore: drop support for PY3.9 since it reached EOL Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * chore: run tests for 3.13 and 3.14 Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * chore: update docs Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * chore: update actions to latest version Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> --------- Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * feat: implement http bindings (#251) * chore: fix uv lock warnings Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * feat: implement http bindings Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * chore: fix mypy in tests Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * chore: more mypy fixes Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * chore: another try Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * chore: switch from using `Dict` to `dict` for type hints Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * chore: switch type hints to use `|` rather than `Union` Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * refactor: simplify header normalization in from_http function Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * refactor: streamline header normalization in from_binary function Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * refactor: remove redundant comment in from_binary function Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> --------- Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * feat(v2): full implementation for kafka bindings (#253) * feat: full implementation of kafka bindings Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * chore: no need to re-export functions from core module. let users explicitly import Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> --------- Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * feat(v2): Full AMQP spec implementation (#254) * feat(v2): full AMQP 1.0 implementation Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * feat(v2): Support both `_` and `:` when reading AMQP messages Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * chore: define type alias for EventFactory and use it everywhere Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> --------- Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * chore: provide simplified interface to read/write CE for both binary and structured even formats (#255) * chore: provide simplified interface to read/write CE for both binary and structured even formats Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * fix typing Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> --------- Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * chore: v2 upgrade tooling (#257) * refactor(config): update dependencies and dev tools versions Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * refactor(workflows): update GitHub Actions and OS versions in workflows Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * docs(releasing): simplify and update releasing guidelines Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * docs(github): enhance pull request template with detailed guidelines and checklist Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * feat(pypi): add support for `v2` branch in release workflow and streamline build/publish process using `uv` (#259) Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * fix(workflow): update PyPI release commands for clarity and efficiency Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * chore: simplified interface to read/write CE using AMQP bindings. (#262) Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * feat(v2): add support for spec version 0.3 (#261) * feat: add support for spec version 0.3 Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * chore: make ruff fail on unused imports Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * chore: Move spec version constants to spec module Moves SPECVERSION_V1_0 and SPECVERSION_V0_3 from the core __init__.py to a new cloudevents.core.spec module. Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> --------- Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * chore: add migration.md file (#263) Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> * chore: add default values for `id`, `time` and `specversion` (#264) * chore: add default values for `id`, `time` and `specversion` Signed-off-by: PlugaruT <plugaru.tudor@protonmail.com> * Update MIGRATION.md Signed-off-by: PlugaruT <plugaru.tudor@protonmail.com> * chore: update docstrings Signed-off-by: PlugaruT <plugaru.tudor@protonmail.com> --------- Signed-off-by: PlugaruT <plugaru.tudor@protonmail.com> * fix(http): use spec-compliant percent-encoding for HTTP header values (#268) Per CloudEvents HTTP binding spec (section 3.1.3.2), only these should be percent-encoded: space (U+0020), double-quote (U+0022), percent (U+0025), and characters outside printable ASCII (U+0021-U+007E). Signed-off-by: PlugaruT <plugaru.tudor@protonmail.com> * fix(kafka): fix header encoding and partitionkey handling in binary mode (#269) * fix(kafka): headers don't need encoding as per kafka binding spec Signed-off-by: PlugaruT <plugaru.tudor@protonmail.com> * fix(kafka): partitionkey shall still be passed in kafka headers in binary mode. Signed-off-by: PlugaruT <plugaru.tudor@protonmail.com> --------- Signed-off-by: PlugaruT <plugaru.tudor@protonmail.com> * fix: correct isinstance check to include bytearray in kafka conversion (#267) The isinstance check in to_structured had a duplicate `bytes` entry instead of `bytearray`, meaning bytearray data would not be correctly base64-encoded in the structured kafka message. Signed-off-by: Artem Muterko <artem@sopho.tech> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * chore(cloudevents): bump version to 2.0.0-alpha2 Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * chore(CHANGELOG): add missing PR link Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * Update samples (#272) * refactor(samples): update to `cloudevents` 2.0.0a1 and modernize usage - Migrated to `cloudevents` 2.0.0a1 including updated imports and APIs. - Replaced deprecated `from_http`, `to_binary`, and `to_structured` with the new `from_http_event`, `to_binary_event`, and `to_structured_event`. - Added required `id` and `specversion` attributes to Cloudevents examples. - Updated README and client script for consistency and improved usability. Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * refactor(samples): migrate to `cloudevents` 2.0.0a1 and enhance examples - Updated server, client, and test code to use the updated `cloudevents` 2.0.0a1 API with `from_http_event`, `to_binary_event`, and `to_structured_event`. - Included required `id` and `specversion` attributes in Cloudevent examples. - Synchronized README and scripts for better clarity and usability. - Pinned `cloudevents==2.0.0a1` in `requirements.txt`. Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * chore(samples): bump `cloudevents` to 2.0.0a2 in requirements Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * chore(cloudevents): bump version to 2.0.0-alpha3 Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * chore(samples): update `cloudevents` to 2.0.0a3 in requirements Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> --------- Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * chore(CHANGELOG): update for CloudEvents v2 readiness (PR #273) Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> chore(cloudevents): bump version to 2.0.0-alpha4 Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> chore(tox): remove tox configuration file Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * Ensure spec compatibility - fix 2 edge cases (#275) * fix(event): validate attributes for null or empty values Ensure required attributes ('id', 'source', and 'type') are neither null nor empty across v03 and v1 event versions. Includes stricter validation and new test cases. Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * fix(event): remove max length restriction for extension attributes Remove the 20-character maximum length restriction for extension attribute names in both v03 and v1 event versions. Update validation error messages and add tests to ensure compatibility with longer attribute names. Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * chore(cloudevents): bump version to 2.0.0-alpha5 Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * chore(CHANGELOG): update for 2.0.0-alpha5 with PR #275 Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> --------- Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * Fix v1 compatibility layer and update docs (#276) * fix: standardize import paths from `cloudevents_v1` to `cloudevents.v1` to fix compatibility layer Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * chore(dependencies): add `deprecation` package with version constraint `>=2.0,<3.0` for v1 compat layer Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * chore(tests): relocate v1 test files to `test_v1_compat` directory for improved organization Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * chore(dependencies): update `uv.lock` to add new dependencies and version constraints for libraries including `anyio`, `sanic`, `pydantic`, and others Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * chore(dependencies): reorganize `deprecation` imports across deprecated `v1` modules for consistency Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * chore(tests): standardize import formatting across `test_v1_compat` files for consistency Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * docs(migration): add guidance for using `cloudevents.v1` compatibility layer Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * docs(migration): update `MIGRATION.md` with clarified import mappings, format protocol, and v2 API changes Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * chore(tests): add missing `pytest` import in `test_base_events` Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * chore(tests): add `pytest_ignore_collect` to skip `pydantic` tests on Python 3.14+ Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> --------- Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * Update tooling (#278) * chore(pre-commit): bump ruff-pre-commit to v0.15.7 Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * chore(pyproject): include MIGRATION.md in build targets Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * chore(dependencies): bump dev dependencies (ruff, isort, pytest-cov, types-python-dateutil) Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * chore(workflows): bump GitHub Actions dependencies Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * chore(dependencies): bump cloudevents to 2.0.0-alpha6 Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * chore(CHANGELOG): add entries for v2.0.0-alpha6 changes and fixes Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> --------- Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * Prepare v2 (#279) * chore(pre-commit): update mypy exclude to ignore test_v1_compat Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * chore(cloudevents): release stable v2.0.0 Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> * chore(workflow): remove deprecated branch 'v2' from PyPI release triggers Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> --------- Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> --------- Signed-off-by: Yurii Serhiichuk <savik.ne@gmail.com> Signed-off-by: Tudor Plugaru <plugaru.tudor@protonmail.com> Signed-off-by: Tudor <plugaru.tudor@protonmail.com> Signed-off-by: PlugaruT <plugaru.tudor@protonmail.com> Signed-off-by: Artem Muterko <artem@sopho.tech> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Tudor Plugaru <plugaru.tudor@protonmail.com> Co-authored-by: Archy <6429715+archy-rock3t-cloud@users.noreply.github.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Changes
testsfolder for v1 compatibility as well.One line description for the changelog
Fixed v1 compatibility layer