On 08/12/2014 08:02 PM, Aline Manera wrote:
On 08/12/2014 02:38 PM, Christy Perez wrote:
> 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(a)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] :
You can use urlparse(path) here too and check the existence of a path
Thanks.
I'd just copied that from somewhere else, so I'll update that to
do the same if it works in that situation as well -- and send a v5.
parse_result = urlparse(path)
server_name = parse_result.netloc
urlpath = parse_result.path
if not urlpath:
...
else:
...
As you need to update it, I think we can also remove url_to_fqdn()
function as it is not used in other place
> + # 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
>
>