Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

blank encoding in properties generates LookupError #125

Open
gabysbrain opened this issue Jun 5, 2023 · 2 comments
Open

blank encoding in properties generates LookupError #125

gabysbrain opened this issue Jun 5, 2023 · 2 comments

Comments

@gabysbrain
Copy link

gabysbrain commented Jun 5, 2023

Setting the content_encoding property to an empty string will generate an exception when a message is encoded.

When sending a message with the following properties (for example)

{content_encoding: '', content_type: '', correlation_id: '', headers: {compression: False, x-delay: 60000}, message_id: '4d042d03fff943cda0a60e9b10175b7d', timestamp: datetime.datetime(2023, 6, 5, 9, 36, 19, 158600)}

Will generate an exception:

LookupError: unknown encoding: 
  File "amqpstorm/message.py", line 181, in publish
    return self._channel.basic.publish(body=self._body,
  File "amqpstorm/basic.py", line 193, in publish
    body = self._handle_utf8_payload(body, properties)
  File "amqpstorm/basic.py", line 354, in _handle_utf8_payload
    body = bytes(body, encoding=encoding)

I think the problem is that an empty string is not a valid encoding and the check for a valid content_encoding is only if the key is missing from properties.

if 'content_encoding' not in properties:
properties['content_encoding'] = 'utf-8'
encoding = properties['content_encoding']
if compatibility.is_unicode(body):
body = body.encode(encoding)
elif compatibility.PYTHON3 and isinstance(body, str):
body = bytes(body, encoding=encoding)
return body

@jhogg
Copy link
Collaborator

jhogg commented Jun 5, 2023 via email

@gabysbrain
Copy link
Author

Ok, Yeah, I understand it would be complicated to check all encodings before. I just wasn't sure if a blank encoding was meant to be the same as None or actually identify something.

Anyway, I think it would help to have the extension wrapped a few levels up the stack with a more clear message. The reason is that right now you get an exception from the bytes method so you need to go into the amqpstorm source to understand what's happening. It would be easier to have an exception that just says that you passed an invalid content_encoding.

What do you think?

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

No branches or pull requests

2 participants