
Currently the entire ISO is grabbed, which times out. Use httplib to connect to the server and just get the head of the http object. Signed-off-by: Christy Perez <christy@linux.vnet.ibm.com> --- src/kimchi/utils.py | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/kimchi/utils.py b/src/kimchi/utils.py index 9ed8802..efd3ba9 100644 --- a/src/kimchi/utils.py +++ b/src/kimchi/utils.py @@ -28,9 +28,10 @@ import traceback import urllib2 import xml.etree.ElementTree as ET +from httplib import HTTPConnection, HTTPException from multiprocessing import Process, Queue from threading import Timer - +from urlparse import urlparse from cherrypy.lib.reprconf import Parser from kimchi.asynctask import AsyncTask @@ -138,14 +139,31 @@ def import_module(module_name): return __import__(module_name, globals(), locals(), ['']) +def url_to_fqdn(path): + parse_result = urlparse(path) + return parse_result.netloc + + def check_url_path(path): try: - code = urllib2.urlopen(path).getcode() + code = '' + server_name = url_to_fqdn(path) + url_parts = path.split('://') # [0] = prefix, [1] = rest of URL + if len(url_parts) > 1 and server_name == url_parts[1] : + # Just a server, as with a repo. + code = urllib2.urlopen(path).getcode() + else: + # socket.gaierror could be raised, + # which is a child class of IOError + conn = HTTPConnection(server_name, timeout=15) + # Don't try to get the whole file: + conn.request('HEAD', path) + code = conn.getresponse().status + conn.close() if code != 200: return False - except (urllib2.URLError, ValueError): + except (urllib2.URLError, HTTPException, IOError, ValueError): return False - return True -- 1.9.3