[Toaster] [RFC PATCH v2] toaster: support authentication required proxy connection
Bian Naimeng
biannm at cn.fujitsu.com
Thu Aug 27 19:18:05 PDT 2015
At authentication required proxy environment, such as setting $http_proxy to
'http://user:password@ip:port', the following error will be caught.
EE: Using proxy http://user:password@ip:port
EE: could not connect to 'url', skipping update: 'error message'
It means toaster can not fetche layer, recipe and machine information from remote repository
at authentication required proxy environment.
What this patch tries to fix is that make toaster support authentication required proxy connection.
I have did some tests after applying this patch.
1. Proxy with authentication
# export http_proxy="http://user:password@ip:port"
# bitbake/bin/toaster
Result: OK
2. Proxy without authentication
# export http_proxy="http://ip:port"
# bitbake/bin/toaster
Result: OK
3. Directly
# bitbake/bin/toaster
Result: Unknow, Not yet tested
Signed-off-by: Bian Naimeng <biannm at cn.fujitsu.com>
---
lib/toaster/orm/models.py | 36 +++++++-----------------------------
1 file changed, 7 insertions(+), 29 deletions(-)
diff --git a/lib/toaster/orm/models.py b/lib/toaster/orm/models.py
index 92fcaa7..ffd435b 100644
--- a/lib/toaster/orm/models.py
+++ b/lib/toaster/orm/models.py
@@ -817,42 +817,20 @@ class LayerIndexLayerSource(LayerSource):
assert self.apiurl is not None
from django.db import transaction, connection
- import httplib, urlparse, json
+ import urllib2, urlparse, json
import os
proxy_settings = os.environ.get("http_proxy", None)
def _get_json_response(apiurl = self.apiurl):
- conn = None
_parsedurl = urlparse.urlparse(apiurl)
path = _parsedurl.path
- query = _parsedurl.query
- def parse_url(url):
- parsedurl = urlparse.urlparse(url)
- try:
- (host, port) = parsedurl.netloc.split(":")
- except ValueError:
- host = parsedurl.netloc
- port = None
-
- if port is None:
- port = 80
- else:
- port = int(port)
- return (host, port)
- if proxy_settings is None:
- host, port = parse_url(apiurl)
- conn = httplib.HTTPConnection(host, port)
- conn.request("GET", path + "?" + query)
- else:
- host, port = parse_url(proxy_settings)
- conn = httplib.HTTPConnection(host, port)
- conn.request("GET", apiurl)
-
- r = conn.getresponse()
- if r.status != 200:
- raise Exception("Failed to read " + path + ": %d %s" % (r.status, r.reason))
- return json.loads(r.read())
+ try:
+ res = urllib2.urlopen(apiurl);
+ except urllib2.URLError,e:
+ raise Exception("Failed to read " + path + ": %d %s" % (e.code, e.reason))
+
+ return json.loads(res.read())
# verify we can get the basic api
try:
--
1.9.1
More information about the toaster
mailing list