fix __eq__ operator raises attribute error on non-cloudevent values (#172)
* fix: non-cloudevents values must not equal to cloudevents values (#171) Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com> * test: refactor move fixtures to beginning Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com> * test: cloudevent equality bug regression (#171) Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com> * style: remove redundent else Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com> * test: remove redundent test Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com> * test: refactor non_cloudevent_value into a parameterization Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com> * docs: update changelog Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com> * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * docs: fix bad merge Signed-off-by: Alexander Tkachev <sasha64sasha@gmail.com> * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
parent
f39b964209
commit
ad111ae89a
|
@ -10,6 +10,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
- Added `.get` accessor for even properties ([#165])
|
- Added `.get` accessor for even properties ([#165])
|
||||||
- Added type information for all event member functions ([#173])
|
- Added type information for all event member functions ([#173])
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Fixed event `__eq__` operator raising `AttributeError` on non-CloudEvent values ([#172])
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
- Code quality and styling tooling is unified and configs compatibility is ensured ([#167])
|
- Code quality and styling tooling is unified and configs compatibility is ensured ([#167])
|
||||||
- CI configurations updated and added macOS and Windows tests ([#169])
|
- CI configurations updated and added macOS and Windows tests ([#169])
|
||||||
|
@ -18,6 +21,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
### Removed
|
### Removed
|
||||||
- `docs` folder and related unused tooling ([#168])
|
- `docs` folder and related unused tooling ([#168])
|
||||||
|
|
||||||
|
|
||||||
## [1.3.0] — 2022-09-07
|
## [1.3.0] — 2022-09-07
|
||||||
### Added
|
### Added
|
||||||
- Python 3.9 support ([#144])
|
- Python 3.9 support ([#144])
|
||||||
|
@ -156,4 +160,5 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
[#168]: https://github.com/cloudevents/sdk-python/pull/168
|
[#168]: https://github.com/cloudevents/sdk-python/pull/168
|
||||||
[#169]: https://github.com/cloudevents/sdk-python/pull/169
|
[#169]: https://github.com/cloudevents/sdk-python/pull/169
|
||||||
[#170]: https://github.com/cloudevents/sdk-python/pull/170
|
[#170]: https://github.com/cloudevents/sdk-python/pull/170
|
||||||
|
[#172]: https://github.com/cloudevents/sdk-python/pull/172
|
||||||
[#173]: https://github.com/cloudevents/sdk-python/pull/173
|
[#173]: https://github.com/cloudevents/sdk-python/pull/173
|
||||||
|
|
|
@ -68,7 +68,9 @@ class CloudEvent:
|
||||||
)
|
)
|
||||||
|
|
||||||
def __eq__(self, other: typing.Any) -> bool:
|
def __eq__(self, other: typing.Any) -> bool:
|
||||||
return self.data == other.data and self._attributes == other._attributes
|
if isinstance(other, CloudEvent):
|
||||||
|
return self.data == other.data and self._attributes == other._attributes
|
||||||
|
return False
|
||||||
|
|
||||||
# Data access is handled via `.data` member
|
# Data access is handled via `.data` member
|
||||||
# Attribute access is managed via Mapping type
|
# Attribute access is managed via Mapping type
|
||||||
|
|
|
@ -47,6 +47,18 @@ def your_dummy_data():
|
||||||
return '{"name":"paul"}'
|
return '{"name":"paul"}'
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture()
|
||||||
|
def dummy_event(dummy_attributes, my_dummy_data):
|
||||||
|
return CloudEvent(attributes=dummy_attributes, data=my_dummy_data)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture()
|
||||||
|
def non_exiting_attribute_name(dummy_event):
|
||||||
|
result = "nonexisting"
|
||||||
|
assert result not in dummy_event
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
def test_http_cloudevent_equality(dummy_attributes, my_dummy_data, your_dummy_data):
|
def test_http_cloudevent_equality(dummy_attributes, my_dummy_data, your_dummy_data):
|
||||||
data = my_dummy_data
|
data = my_dummy_data
|
||||||
event1 = CloudEvent(dummy_attributes, data)
|
event1 = CloudEvent(dummy_attributes, data)
|
||||||
|
@ -71,6 +83,21 @@ def test_http_cloudevent_equality(dummy_attributes, my_dummy_data, your_dummy_da
|
||||||
assert event1 != event2 and event3 != event1
|
assert event1 != event2 and event3 != event1
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
"non_cloudevent_value",
|
||||||
|
(
|
||||||
|
1,
|
||||||
|
None,
|
||||||
|
object(),
|
||||||
|
"Hello World",
|
||||||
|
),
|
||||||
|
)
|
||||||
|
def test_http_cloudevent_must_not_equal_to_non_cloudevent_value(
|
||||||
|
dummy_event, non_cloudevent_value
|
||||||
|
):
|
||||||
|
assert not dummy_event == non_cloudevent_value
|
||||||
|
|
||||||
|
|
||||||
def test_http_cloudevent_mutates_equality(
|
def test_http_cloudevent_mutates_equality(
|
||||||
dummy_attributes, my_dummy_data, your_dummy_data
|
dummy_attributes, my_dummy_data, your_dummy_data
|
||||||
):
|
):
|
||||||
|
@ -145,18 +172,6 @@ def test_none_json_or_string():
|
||||||
assert _json_or_string(None) is None
|
assert _json_or_string(None) is None
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture()
|
|
||||||
def dummy_event(dummy_attributes, my_dummy_data):
|
|
||||||
return CloudEvent(attributes=dummy_attributes, data=my_dummy_data)
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture()
|
|
||||||
def non_exiting_attribute_name(dummy_event):
|
|
||||||
result = "nonexisting"
|
|
||||||
assert result not in dummy_event
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
def test_get_operation_on_non_existing_attribute_must_not_raise_exception(
|
def test_get_operation_on_non_existing_attribute_must_not_raise_exception(
|
||||||
dummy_event, non_exiting_attribute_name
|
dummy_event, non_exiting_attribute_name
|
||||||
):
|
):
|
||||||
|
|
Loading…
Reference in New Issue