Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Fixed marshallers looking at headers for specversion
Signed-off-by: Curtis Mason <[email protected]>
  • Loading branch information
Curtis Mason committed Jul 16, 2020
commit 74050541e1665a4b23df2c9d76f5656a40f5c4c9
4 changes: 4 additions & 0 deletions cloudevents/sdk/http_events.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,13 +80,17 @@ def from_http(
# content-type = application/cloudevents+json.
if converter.can_read(content_type, headers=headers):
if isinstance(converter, binary.BinaryHTTPCloudEventConverter):
print("WHAT HAPPENED")
specversion = headers.get("ce-specversion", None)
break
elif isinstance(
converter, structured.JSONHTTPCloudEventConverter
):
raw_ce = json.loads(data)


specversion = raw_ce.get("specversion", None)
print('REACHED', raw_ce, specversion)
# Breaking because while structured may or may not return
# true on can_read, binary will always return true. Without
# a break specversion for structured events will always be
Expand Down
2 changes: 1 addition & 1 deletion cloudevents/sdk/marshaller.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ def FromRequest(
content_type = headers.get("content-type", None)

for cnvrtr in self.http_converters:
if cnvrtr.can_read(content_type) and cnvrtr.event_supported(event):
if cnvrtr.can_read(content_type, headers=headers) and cnvrtr.event_supported(event):
return cnvrtr.read(event, headers, body, data_unmarshaller)

raise exceptions.UnsupportedEventConverter(
Expand Down
25 changes: 25 additions & 0 deletions cloudevents/tests/test_http_events.py
Original file line number Diff line number Diff line change
Expand Up @@ -324,3 +324,28 @@ def test_valid_structured_events(specversion):
assert event["source"] == f"source{i}.com.test"
assert event["specversion"] == specversion
assert event.data["payload"] == f"payload-{i}"


@pytest.mark.parametrize("specversion", ["1.0", "0.3"])
def test_structured_no_content_type(specversion):
# Test creating multiple cloud events
events_queue = []
headers = {}
num_cloudevents = 30
data = {
"id": "id",
"source": "source.com.test",
"type": "cloudevent.test.type",
"specversion": specversion,
"data": test_data,
}
event = CloudEvent.from_http(
json.dumps(data),
{},
)

assert event["id"] == "id"
assert event["source"] == "source.com.test"
assert event["specversion"] == specversion
for key, val in test_data.items():
assert event.data[key] == val