Commit 921d9325 authored by Marco Mariani's avatar Marco Mariani

use requests package for 'slapos cache lookup'

parent 5ecc02c2
......@@ -45,6 +45,7 @@ setup(name=name,
'zope.interface', # slap library implementes interfaces
] + additional_install_requires,
extra_requires={'docs': ('Sphinx', 'repoze.sphinx.autointerface'),},
......@@ -4,35 +4,43 @@ import ast
import hashlib
import json
import re
import requests
import sys
import urllib2
from slapos.grid import networkcache
from slapos.grid.distribution import patched_linux_distribution
def maybe_md5(s):
def looks_like_md5(s):
Return True if the parameter looks like an hashed value.
Not 100% precise, but we're actually more interested in filtering out URLs and pathnames.
return re.match('[0-9a-f]{32}', s)
def do_lookup(configp, software_url):
cache_dir = configp.get('networkcache', 'download-binary-dir-url')
if maybe_md5(software_url):
if looks_like_md5(software_url):
md5 = software_url
md5 = hashlib.md5(software_url).hexdigest()
response = urllib2.urlopen('%s/%s' % (cache_dir, md5))
except urllib2.HTTPError as e:
if e.code == 404:
req = requests.get('%s/%s' % (cache_dir, md5))
except requests.ConnectionError:
print 'Cannot connect to cache at %s' % cache_dir
if not req.ok:
if req.status_code == 404:
print 'Object not in cache: %s' % software_url
print 'Error during cache lookup: %s (%s)' % (e.code, e.reason)
print 'Error while looking object %s: %s' % (software_url, req.reason)
entries = json.loads(
entries = req.json()
linux_distribution = patched_linux_distribution()
......@@ -10,6 +10,10 @@ import cliff.commandmanager
import slapos.version
# silence messages like 'Starting connection' that are logged with INFO
urllib3_logger = logging.getLogger('requests.packages.urllib3')
class SlapOSCommandManager(cliff.commandmanager.CommandManager):
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment