diff options
author | Olof Johansson <olof.johansson@axis.com> | 2014-01-20 12:03:22 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2014-03-24 17:54:46 +0000 |
commit | aca2d14e9350fde58aaaa95cdeff5b051c1d38d3 (patch) | |
tree | 503fbfed656119128b0632b59fdbfc66fb7095d9 /bitbake | |
parent | 64fdd3abbbe9ab99c3bc5083d4172ea7bc17bae3 (diff) | |
download | ast2050-yocto-poky-aca2d14e9350fde58aaaa95cdeff5b051c1d38d3.zip ast2050-yocto-poky-aca2d14e9350fde58aaaa95cdeff5b051c1d38d3.tar.gz |
bitbake: fetch2.URI: add support for query parameters
This change introduces the .query property of the URI class. It is a
read/write dict of the parameters supplied in the query string of the
URI. E.g.:
http://example.com/?foo=bar => .query = {'foo': 'bar'}
(Bitbake rev: 1cb2b3c458c8c5521591d2c8f2e0058143fc77bb)
Signed-off-by: Olof Johansson <olof.johansson@axis.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake')
-rw-r--r-- | bitbake/lib/bb/fetch2/__init__.py | 38 | ||||
-rw-r--r-- | bitbake/lib/bb/tests/fetch.py | 30 |
2 files changed, 53 insertions, 15 deletions
diff --git a/bitbake/lib/bb/fetch2/__init__.py b/bitbake/lib/bb/fetch2/__init__.py index 5c6180b..d9d193a 100644 --- a/bitbake/lib/bb/fetch2/__init__.py +++ b/bitbake/lib/bb/fetch2/__init__.py @@ -162,6 +162,7 @@ class URI(object): * path_quoted (read/write) A URI quoted version of path * params (dict) (read/write) + * query (dict) (read/write) * relative (bool) (read only) True if this is a "relative URI", (e.g. file:foo.diff) @@ -201,6 +202,7 @@ class URI(object): self.port = None self._path = '' self.params = {} + self.query = {} self.relative = False if not uri: @@ -253,36 +255,42 @@ class URI(object): self.path = urllib.unquote(path) if param_str: - self.params = self._param_dict(param_str) + self.params = self._param_str_split(param_str, ";") + if urlp.query: + self.query = self._param_str_split(urlp.query, "&") def __str__(self): userinfo = self.userinfo if userinfo: userinfo += '@' - return "%s:%s%s%s%s%s" % ( + return "%s:%s%s%s%s%s%s" % ( self.scheme, '' if self.relative else '//', userinfo, self.hostport, self.path_quoted, - self._param_str) + self._query_str(), + self._param_str()) - @property def _param_str(self): - ret = '' - for key, val in self.params.items(): - ret += ";%s=%s" % (key, val) + return ( + ''.join([';', self._param_str_join(self.params, ";")]) + if self.params else '') + + def _query_str(self): + return ( + ''.join(['?', self._param_str_join(self.query, "&")]) + if self.query else '') + + def _param_str_split(self, string, elmdelim, kvdelim="="): + ret = {} + for k, v in [x.split(kvdelim, 1) for x in string.split(elmdelim)]: + ret[k] = v return ret - def _param_dict(self, param_str): - parm = {} - - for keyval in param_str.split(";"): - key, val = keyval.split("=", 1) - parm[key] = val - - return parm + def _param_str_join(self, dict_, elmdelim, kvdelim="="): + return elmdelim.join([kvdelim.join([k, v]) for k, v in dict_.items()]) @property def hostport(self): diff --git a/bitbake/lib/bb/tests/fetch.py b/bitbake/lib/bb/tests/fetch.py index f93a636..15fe0ab 100644 --- a/bitbake/lib/bb/tests/fetch.py +++ b/bitbake/lib/bb/tests/fetch.py @@ -39,6 +39,7 @@ class URITest(unittest.TestCase): 'username': '', 'password': '', 'params': {}, + 'query': {}, 'relative': False }, "http://www.google.com/index.html;param1=value1" : { @@ -54,6 +55,23 @@ class URITest(unittest.TestCase): 'params': { 'param1': 'value1' }, + 'query': {}, + 'relative': False + }, + "http://www.example.org/index.html?param1=value1" : { + 'uri': 'http://www.example.org/index.html?param1=value1', + 'scheme': 'http', + 'hostname': 'www.example.org', + 'port': None, + 'hostport': 'www.example.org', + 'path': '/index.html', + 'userinfo': '', + 'username': '', + 'password': '', + 'params': {}, + 'query': { + 'param1': 'value1' + }, 'relative': False }, "http://www.example.com:8080/index.html" : { @@ -67,6 +85,7 @@ class URITest(unittest.TestCase): 'username': '', 'password': '', 'params': {}, + 'query': {}, 'relative': False }, "cvs://anoncvs@cvs.handhelds.org/cvs;module=familiar/dist/ipkg" : { @@ -82,6 +101,7 @@ class URITest(unittest.TestCase): 'params': { 'module': 'familiar/dist/ipkg' }, + 'query': {}, 'relative': False }, "cvs://anoncvs:anonymous@cvs.handhelds.org/cvs;tag=V0-99-81;module=familiar/dist/ipkg": { @@ -98,6 +118,7 @@ class URITest(unittest.TestCase): 'tag': 'V0-99-81', 'module': 'familiar/dist/ipkg' }, + 'query': {}, 'relative': False }, "file://example.diff": { # NOTE: Not RFC compliant! @@ -111,6 +132,7 @@ class URITest(unittest.TestCase): 'username': '', 'password': '', 'params': {}, + 'query': {}, 'relative': True }, "file:example.diff": { # NOTE: RFC compliant version of the former @@ -125,6 +147,7 @@ class URITest(unittest.TestCase): 'username': '', 'password': '', 'params': {}, + 'query': {}, 'relative': True }, "file:///tmp/example.diff": { @@ -139,6 +162,7 @@ class URITest(unittest.TestCase): 'username': '', 'password': '', 'params': {}, + 'query': {}, 'relative': False }, "git:///path/example.git": { @@ -153,6 +177,7 @@ class URITest(unittest.TestCase): 'username': '', 'password': '', 'params': {}, + 'query': {}, 'relative': False }, "git:path/example.git": { @@ -167,6 +192,7 @@ class URITest(unittest.TestCase): 'username': '', 'password': '', 'params': {}, + 'query': {}, 'relative': True }, "git://example.net/path/example.git": { @@ -181,6 +207,7 @@ class URITest(unittest.TestCase): 'username': '', 'password': '', 'params': {}, + 'query': {}, 'relative': False } } @@ -243,6 +270,9 @@ class URITest(unittest.TestCase): uri.params = test['params'] self.assertEqual(uri.params, test['params']) + uri.query = test['query'] + self.assertEqual(uri.query, test['query']) + self.assertEqual(str(uri), test['uri']) uri.params = {} |