[ 
https://issues.apache.org/jira/browse/PROTON-995?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15012026#comment-15012026
 ] 

Alan Conway commented on PROTON-995:
------------------------------------

This works for me on the current proton trunk. What version are you using? 
Here's the test I used to verify, all the data from the URL is parsed 
correctly, escapes in the password are substituted and the default port value 
5671 is the expected default value for an amqps:// URL.

    def test_proton_995(self):
        u = 
Url("amqps://a_name:1w6MN0yeUqLUwDdWHk%2FxIR2Z6aIrhslm69lYtHA0r5E%3D@a_namespace.servicebus.windows.net/a_topic/Subscriptions/a_subscription")
        self.assertEqual('amqps', u.scheme)
        self.assertEqual('a_name', u.username)
        self.assertEqual('1w6MN0yeUqLUwDdWHk/xIR2Z6aIrhslm69lYtHA0r5E=', 
u.password) # escapes are substituted
        self.assertEqual('a_namespace.servicebus.windows.net', u.host)
        self.assertEqual(5671, u.port) # Default for amqps://
        self.assertEqual('a_topic/Subscriptions/a_subscription', u.path)


> 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
>
> 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)

Reply via email to