* [RFC PATCH] bitbake: Rewrite fetch2.decodeurl() to use urlparse.urlsplit() @ 2014-01-10 16:28 Phil Blundell 2014-01-16 14:21 ` Martin Jansa 2014-01-16 14:45 ` Olof Johansson 0 siblings, 2 replies; 5+ messages in thread From: Phil Blundell @ 2014-01-10 16:28 UTC (permalink / raw) To: bitbake-devel This means that it now understands "standard" URI syntax as well as the slightly odd legacy bitbake variant. There are other places in bitbake (e.g. Local.urldata_init) that also need fixing, but this is a start. Signed-off-by: Phil Blundell <pb@pbcl.net> --- lib/bb/fetch2/__init__.py | 60 ++++++++++++++++++++++++++--------------------- 1 file changed, 33 insertions(+), 27 deletions(-) diff --git a/lib/bb/fetch2/__init__.py b/lib/bb/fetch2/__init__.py index 260fb37..4886dae 100644 --- a/lib/bb/fetch2/__init__.py +++ b/lib/bb/fetch2/__init__.py @@ -329,40 +329,46 @@ def decodeurl(url): user, password, parameters). """ - m = re.compile('(?P<type>[^:]*)://((?P<user>.+)@)?(?P<location>[^;]+)(;(?P<parm>.*))?').match(url) - if not m: + if url.startswith("file://"): + # This is an old-style bitbake URL. Fix it up. + url = "file:" + url[7:] + + import urlparse + d = urlparse.urlsplit(url) + if not d.scheme: raise MalformedUrl(url) - type = m.group('type') - location = m.group('location') - if not location: + netloc = d.netloc + path = d.path + + if not path: raise MalformedUrl(url) - user = m.group('user') - parm = m.group('parm') - locidx = location.find('/') - if locidx != -1 and type.lower() != 'file': - host = location[:locidx] - path = location[locidx:] - else: - host = "" - path = location - if user: - m = re.compile('(?P<user>[^:]+)(:?(?P<pswd>.*))').match(user) - if m: - user = m.group('user') - pswd = m.group('pswd') - else: - user = '' - pswd = '' + user = '' + pswd = '' + host = '' + + if netloc: + m = re.compile('((?P<user>[^:@]+)(:(?P<pswd>[^@]+))?@)?(?P<host>.+)').match(netloc) + if not m: + raise MalformedUrl(url) + + user = m.group('user') + pswd = m.group('pswd') + host = m.group('host') p = {} - if parm: - for s in parm.split(';'): - s1, s2 = s.split('=') - p[s1] = s2 + sep = path.find(";") + if sep != -1: + for s in path[sep+1:].split(';'): + try: + s1, s2 = s.split('=') + p[s1] = s2 + except ValueError: + raise MalformedUrl(url) + path = path[:sep] - return type, host, urllib.unquote(path), user, pswd, p + return d.scheme, host, urllib.unquote(path), user, pswd, p def encodeurl(decoded): """Encodes a URL from tokens (scheme, network location, path, -- 1.8.5 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [RFC PATCH] bitbake: Rewrite fetch2.decodeurl() to use urlparse.urlsplit() 2014-01-10 16:28 [RFC PATCH] bitbake: Rewrite fetch2.decodeurl() to use urlparse.urlsplit() Phil Blundell @ 2014-01-16 14:21 ` Martin Jansa 2014-01-16 14:44 ` Martin Jansa 2014-01-16 14:45 ` Olof Johansson 1 sibling, 1 reply; 5+ messages in thread From: Martin Jansa @ 2014-01-16 14:21 UTC (permalink / raw) To: Phil Blundell; +Cc: bitbake-devel [-- Attachment #1: Type: text/plain, Size: 3767 bytes --] On Fri, Jan 10, 2014 at 04:28:43PM +0000, Phil Blundell wrote: > This means that it now understands "standard" URI syntax as well as > the slightly odd legacy bitbake variant. > > There are other places in bitbake (e.g. Local.urldata_init) that also > need fixing, but this is a start. I agree it's good start, I was trying to test this together with http://lists.openembedded.org/pipermail/bitbake-devel/2014-January/004327.html and bitbake-selftest shows failure on different URL, did it pass for you? - ('http', 'www.google.com', '/index.html', None, None, {}) + ('http', 'www.google.com', '/index.html', '', '', {}) + few errors before that like: File "/usr/lib64/python2.7/re.py", line 238, in _compile raise TypeError, "first argument must be string or compiled pattern" TypeError: first argument must be string or compiled pattern > Signed-off-by: Phil Blundell <pb@pbcl.net> > --- > lib/bb/fetch2/__init__.py | 60 ++++++++++++++++++++++++++--------------------- > 1 file changed, 33 insertions(+), 27 deletions(-) > > diff --git a/lib/bb/fetch2/__init__.py b/lib/bb/fetch2/__init__.py > index 260fb37..4886dae 100644 > --- a/lib/bb/fetch2/__init__.py > +++ b/lib/bb/fetch2/__init__.py > @@ -329,40 +329,46 @@ def decodeurl(url): > user, password, parameters). > """ > > - m = re.compile('(?P<type>[^:]*)://((?P<user>.+)@)?(?P<location>[^;]+)(;(?P<parm>.*))?').match(url) > - if not m: > + if url.startswith("file://"): > + # This is an old-style bitbake URL. Fix it up. > + url = "file:" + url[7:] > + > + import urlparse > + d = urlparse.urlsplit(url) > + if not d.scheme: > raise MalformedUrl(url) > > - type = m.group('type') > - location = m.group('location') > - if not location: > + netloc = d.netloc > + path = d.path > + > + if not path: > raise MalformedUrl(url) > - user = m.group('user') > - parm = m.group('parm') > > - locidx = location.find('/') > - if locidx != -1 and type.lower() != 'file': > - host = location[:locidx] > - path = location[locidx:] > - else: > - host = "" > - path = location > - if user: > - m = re.compile('(?P<user>[^:]+)(:?(?P<pswd>.*))').match(user) > - if m: > - user = m.group('user') > - pswd = m.group('pswd') > - else: > - user = '' > - pswd = '' > + user = '' > + pswd = '' > + host = '' > + > + if netloc: > + m = re.compile('((?P<user>[^:@]+)(:(?P<pswd>[^@]+))?@)?(?P<host>.+)').match(netloc) > + if not m: > + raise MalformedUrl(url) > + > + user = m.group('user') > + pswd = m.group('pswd') > + host = m.group('host') > > p = {} > - if parm: > - for s in parm.split(';'): > - s1, s2 = s.split('=') > - p[s1] = s2 > + sep = path.find(";") > + if sep != -1: > + for s in path[sep+1:].split(';'): > + try: > + s1, s2 = s.split('=') > + p[s1] = s2 > + except ValueError: > + raise MalformedUrl(url) > + path = path[:sep] > > - return type, host, urllib.unquote(path), user, pswd, p > + return d.scheme, host, urllib.unquote(path), user, pswd, p > > def encodeurl(decoded): > """Encodes a URL from tokens (scheme, network location, path, > -- > 1.8.5 > > > > _______________________________________________ > bitbake-devel mailing list > bitbake-devel@lists.openembedded.org > http://lists.openembedded.org/mailman/listinfo/bitbake-devel -- Martin 'JaMa' Jansa jabber: Martin.Jansa@gmail.com [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 205 bytes --] ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [RFC PATCH] bitbake: Rewrite fetch2.decodeurl() to use urlparse.urlsplit() 2014-01-16 14:21 ` Martin Jansa @ 2014-01-16 14:44 ` Martin Jansa 0 siblings, 0 replies; 5+ messages in thread From: Martin Jansa @ 2014-01-16 14:44 UTC (permalink / raw) To: Phil Blundell; +Cc: bitbake-devel [-- Attachment #1: Type: text/plain, Size: 5281 bytes --] On Thu, Jan 16, 2014 at 03:21:39PM +0100, Martin Jansa wrote: > On Fri, Jan 10, 2014 at 04:28:43PM +0000, Phil Blundell wrote: > > This means that it now understands "standard" URI syntax as well as > > the slightly odd legacy bitbake variant. > > > > There are other places in bitbake (e.g. Local.urldata_init) that also > > need fixing, but this is a start. > > I agree it's good start, I was trying to test this together with > http://lists.openembedded.org/pipermail/bitbake-devel/2014-January/004327.html > > and bitbake-selftest shows failure on different URL, did it pass for you? > - ('http', 'www.google.com', '/index.html', None, None, {}) > + ('http', 'www.google.com', '/index.html', '', '', {}) > > + few errors before that like: > File "/usr/lib64/python2.7/re.py", line 238, in _compile > raise TypeError, "first argument must be string or compiled pattern" > TypeError: first argument must be string or compiled pattern Returning empty string instead of None for user/pass seems to fix all fetcher tests we currently have (including my with '@') and also the TypeErrors from uri_replace Here is what I did, sending inline as maybe the better way would be to fix uri_replace (and possibly other places) to correctly work with None. diff --git a/lib/bb/fetch2/__init__.py b/lib/bb/fetch2/__init__.py index 1bbe0e7..da69500 100644 --- a/lib/bb/fetch2/__init__.py +++ b/lib/bb/fetch2/__init__.py @@ -344,18 +344,18 @@ def decodeurl(url): if not path: raise MalformedUrl(url) - user = '' - pswd = '' - host = '' + user = d.username or '' + pswd = d.password or '' + host = d.hostname or '' if netloc: m = re.compile('((?P<user>[^:@]+)(:(?P<pswd>[^@]+))?@)?(?P<host>.+)').match(netloc) if not m: raise MalformedUrl(url) - user = m.group('user') - pswd = m.group('pswd') - host = m.group('host') + user = m.group('user') or '' + pswd = m.group('pswd') or '' + host = m.group('host') or '' p = {} sep = path.find(";") > > Signed-off-by: Phil Blundell <pb@pbcl.net> > > --- > > lib/bb/fetch2/__init__.py | 60 ++++++++++++++++++++++++++--------------------- > > 1 file changed, 33 insertions(+), 27 deletions(-) > > > > diff --git a/lib/bb/fetch2/__init__.py b/lib/bb/fetch2/__init__.py > > index 260fb37..4886dae 100644 > > --- a/lib/bb/fetch2/__init__.py > > +++ b/lib/bb/fetch2/__init__.py > > @@ -329,40 +329,46 @@ def decodeurl(url): > > user, password, parameters). > > """ > > > > - m = re.compile('(?P<type>[^:]*)://((?P<user>.+)@)?(?P<location>[^;]+)(;(?P<parm>.*))?').match(url) > > - if not m: > > + if url.startswith("file://"): > > + # This is an old-style bitbake URL. Fix it up. > > + url = "file:" + url[7:] > > + > > + import urlparse > > + d = urlparse.urlsplit(url) > > + if not d.scheme: > > raise MalformedUrl(url) > > > > - type = m.group('type') > > - location = m.group('location') > > - if not location: > > + netloc = d.netloc > > + path = d.path > > + > > + if not path: > > raise MalformedUrl(url) > > - user = m.group('user') > > - parm = m.group('parm') > > > > - locidx = location.find('/') > > - if locidx != -1 and type.lower() != 'file': > > - host = location[:locidx] > > - path = location[locidx:] > > - else: > > - host = "" > > - path = location > > - if user: > > - m = re.compile('(?P<user>[^:]+)(:?(?P<pswd>.*))').match(user) > > - if m: > > - user = m.group('user') > > - pswd = m.group('pswd') > > - else: > > - user = '' > > - pswd = '' > > + user = '' > > + pswd = '' > > + host = '' > > + > > + if netloc: > > + m = re.compile('((?P<user>[^:@]+)(:(?P<pswd>[^@]+))?@)?(?P<host>.+)').match(netloc) > > + if not m: > > + raise MalformedUrl(url) > > + > > + user = m.group('user') > > + pswd = m.group('pswd') > > + host = m.group('host') > > > > p = {} > > - if parm: > > - for s in parm.split(';'): > > - s1, s2 = s.split('=') > > - p[s1] = s2 > > + sep = path.find(";") > > + if sep != -1: > > + for s in path[sep+1:].split(';'): > > + try: > > + s1, s2 = s.split('=') > > + p[s1] = s2 > > + except ValueError: > > + raise MalformedUrl(url) > > + path = path[:sep] > > > > - return type, host, urllib.unquote(path), user, pswd, p > > + return d.scheme, host, urllib.unquote(path), user, pswd, p > > > > def encodeurl(decoded): > > """Encodes a URL from tokens (scheme, network location, path, > > -- > > 1.8.5 > > > > > > > > _______________________________________________ > > bitbake-devel mailing list > > bitbake-devel@lists.openembedded.org > > http://lists.openembedded.org/mailman/listinfo/bitbake-devel > > -- > Martin 'JaMa' Jansa jabber: Martin.Jansa@gmail.com -- Martin 'JaMa' Jansa jabber: Martin.Jansa@gmail.com [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 205 bytes --] ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [RFC PATCH] bitbake: Rewrite fetch2.decodeurl() to use urlparse.urlsplit() 2014-01-10 16:28 [RFC PATCH] bitbake: Rewrite fetch2.decodeurl() to use urlparse.urlsplit() Phil Blundell 2014-01-16 14:21 ` Martin Jansa @ 2014-01-16 14:45 ` Olof Johansson 2014-01-17 12:33 ` Richard Purdie 1 sibling, 1 reply; 5+ messages in thread From: Olof Johansson @ 2014-01-16 14:45 UTC (permalink / raw) To: Phil Blundell; +Cc: bitbake-devel@lists.openembedded.org On 14-01-10 17:28 +0100, Phil Blundell wrote: > This means that it now understands "standard" URI syntax as well as > the slightly odd legacy bitbake variant. > > There are other places in bitbake (e.g. Local.urldata_init) that also > need fixing, but this is a start. I wrote a URI class last year that got integrated to bitbake's fetch2, but the commit that actually made decode/encodeurl a wrapper around it was reverted because I missed adding support for query params (oops :-)). The class itself is still intact though (it's just above decodeurl). I did send fixes for that (adding support for query params), but they haven't been merged. Perhaps I should resend? -- olofjn ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [RFC PATCH] bitbake: Rewrite fetch2.decodeurl() to use urlparse.urlsplit() 2014-01-16 14:45 ` Olof Johansson @ 2014-01-17 12:33 ` Richard Purdie 0 siblings, 0 replies; 5+ messages in thread From: Richard Purdie @ 2014-01-17 12:33 UTC (permalink / raw) To: Olof Johansson; +Cc: bitbake-devel@lists.openembedded.org, Phil Blundell On Thu, 2014-01-16 at 15:45 +0100, Olof Johansson wrote: > On 14-01-10 17:28 +0100, Phil Blundell wrote: > > This means that it now understands "standard" URI syntax as well as > > the slightly odd legacy bitbake variant. > > > > There are other places in bitbake (e.g. Local.urldata_init) that also > > need fixing, but this is a start. > > I wrote a URI class last year that got integrated to bitbake's > fetch2, but the commit that actually made decode/encodeurl a > wrapper around it was reverted because I missed adding support > for query params (oops :-)). The class itself is still intact > though (it's just above decodeurl). > > I did send fixes for that (adding support for query params), but > they haven't been merged. Perhaps I should resend? Please do, they've fallen off the radar... Cheers, Richard ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2014-01-17 12:35 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-01-10 16:28 [RFC PATCH] bitbake: Rewrite fetch2.decodeurl() to use urlparse.urlsplit() Phil Blundell 2014-01-16 14:21 ` Martin Jansa 2014-01-16 14:44 ` Martin Jansa 2014-01-16 14:45 ` Olof Johansson 2014-01-17 12:33 ` Richard Purdie
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.