[
https://issues.apache.org/jira/browse/PROTON-995?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15179986#comment-15179986
]
Alan Conway commented on PROTON-995:
------------------------------------
Hi Javier.
Your URL is invalid. The character '/' is reserved, to use it in a password or
any non-reserved use use the hex quoted form "%2F". This didn't used to work
properly but since this bug fix it does, as follows:
{code}
>>> u = proton.Url('amqps://name:pass%[email protected]/queue-name')
>>> print u, "password=",u.password
amqps://name:pass%[email protected]:amqps/queue-name password= pass/word
{code}
Note that %2F is used to construct the URL and in the printed form, but the
u.password attribute returns the un-quoted "pass/word"
> Url fails to parse URL
> ----------------------
>
> Key: PROTON-995
> URL: https://issues.apache.org/jira/browse/PROTON-995
> Project: Qpid Proton
> Issue Type: Bug
> Components: python-binding
> Affects Versions: 0.10
> Environment: Linux, Python 3.4.3
> Reporter: Javier Ruere
> Assignee: Alan Conway
> Fix For: 0.12.0
>
>
> proton.Url apparently parses an URL correctly but then it fails as if it was
> parsed incorrectly.
> It appears to fail to handle the escaped characters in the password and using
> a default port.
> {quote}
> >>> import proton
> >>> from proton.reactor import Container
> >>> url =
> >>> 'amqps://a_name:1w6MN0yeUqLUwDdWHk%2FxIR2Z6aIrhslm69lYtHA0r5E%3D@a_namespace.servicebus.windows.net/a_topic/Subscriptions/a_subscription'
> >>> purl=proton.Url(url)
> >>> purl
> Url('amqps://a_name:1w6MN0yeUqLUwDdWHk/xIR2Z6aIrhslm69lYtHA0r5E=@a_namespace.servicebus.windows.net:amqps/a_topic/Subscriptions/a_subscription')
> >>> container = Container()
> >>> receiver = container.create_receiver(purl)
> Traceback (most recent call last):
> File
> "/home/javier/tmp/virtualenvs/ss-update/lib/python3.4/site-packages/proton/__init__.py",
> line 3940, in _port_int
> return int(value)
> ValueError: invalid literal for int() with base 10: '1w6MN0yeUqLUwDdWHk'
> During handling of the above exception, another exception occurred:
> Traceback (most recent call last):
> File
> "/home/javier/tmp/virtualenvs/ss-update/lib/python3.4/site-packages/proton/__init__.py",
> line 3943, in _port_int
> return socket.getservbyname(value)
> OSError: service/proto not found
> During handling of the above exception, another exception occurred:
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> File
> "/home/javier/tmp/virtualenvs/ss-update/lib/python3.4/site-packages/proton/reactor.py",
> line 738, in create_receiver
> session = self._get_session(context)
> File
> "/home/javier/tmp/virtualenvs/ss-update/lib/python3.4/site-packages/proton/reactor.py",
> line 660, in _get_session
> return self._get_session(self.connect(url=context))
> File
> "/home/javier/tmp/virtualenvs/ss-update/lib/python3.4/site-packages/proton/reactor.py",
> line 637, in connect
> if url: connector.address = Urls([url])
> File
> "/home/javier/tmp/virtualenvs/ss-update/lib/python3.4/site-packages/proton/reactor.py",
> line 577, in __init__
> self.values = [Url(v) for v in values]
> File
> "/home/javier/tmp/virtualenvs/ss-update/lib/python3.4/site-packages/proton/reactor.py",
> line 577, in <listcomp>
> self.values = [Url(v) for v in values]
> File
> "/home/javier/tmp/virtualenvs/ss-update/lib/python3.4/site-packages/proton/__init__.py",
> line 3967, in __init__
> if defaults: self.defaults()
> File
> "/home/javier/tmp/virtualenvs/ss-update/lib/python3.4/site-packages/proton/__init__.py",
> line 4010, in defaults
> self.port = self.port or self.Port(self.scheme)
> File
> "/home/javier/tmp/virtualenvs/ss-update/lib/python3.4/site-packages/proton/__init__.py",
> line 3984, in _get_port
> return portstr and Url.Port(portstr)
> File
> "/home/javier/tmp/virtualenvs/ss-update/lib/python3.4/site-packages/proton/__init__.py",
> line 3928, in __new__
> port = super(Url.Port, cls).__new__(cls, cls._port_int(value))
> File
> "/home/javier/tmp/virtualenvs/ss-update/lib/python3.4/site-packages/proton/__init__.py",
> line 3949, in _port_int
> raise ValueError("Not a valid port number or service name: '%s'" % value)
> ValueError: Not a valid port number or service name: '1w6MN0yeUqLUwDdWHk'
> >>>
> >>> purl.port
> 5671
> >>> purl.password
> '1w6MN0yeUqLUwDdWHk/xIR2Z6aIrhslm69lYtHA0r5E='
> >>> purl.host
> 'a_namespace.servicebus.windows.net'
> {quote}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)