Commit 80c85d82 authored by Julien Muchembled's avatar Julien Muchembled

New scripts to download & upload manually from command line

parent ac8463ad
...@@ -42,6 +42,8 @@ setup( ...@@ -42,6 +42,8 @@ setup(
entry_points={ entry_points={
'console_scripts': [ 'console_scripts': [
'generate-signature-key = slapos.signature:run', 'generate-signature-key = slapos.signature:run',
'networkcache-download = slapos.libnetworkcache:download',
'networkcache-upload = slapos.libnetworkcache:upload',
] ]
}, },
zip_safe=True, zip_safe=True,
......
...@@ -12,10 +12,15 @@ ...@@ -12,10 +12,15 @@
# #
############################################################################## ##############################################################################
import argparse
import ConfigParser
import hashlib import hashlib
import httplib import httplib
import json import json
import os import os
import shutil
import sys
import tarfile
import tempfile import tempfile
import traceback import traceback
import urllib2 import urllib2
...@@ -62,6 +67,10 @@ class NetworkcacheClient(object): ...@@ -62,6 +67,10 @@ class NetworkcacheClient(object):
}, signature_certificate_list) }, signature_certificate_list)
def __new_init(self, config, signature_certificate_list=None): def __new_init(self, config, signature_certificate_list=None):
if not hasattr(config, 'get'):
parser = ConfigParser.SafeConfigParser()
parser.readfp(config)
config = dict(parser.items('networkcache'))
self.config = config self.config = config
path = config.get('signature-private-key-file') path = config.get('signature-private-key-file')
if path: if path:
...@@ -278,3 +287,46 @@ class DirectoryNotFound(Exception): ...@@ -278,3 +287,46 @@ class DirectoryNotFound(Exception):
class UploadError(Exception): class UploadError(Exception):
pass pass
def _newArgumentParser():
parser = argparse.ArgumentParser()
parser.add_argument('slapos_config', type=argparse.FileType('r'),
help='SlapOS configuration file.')
return parser
def cmd_upload(*args):
parser = _newArgumentParser()
parser.add_argument('--prefix-key', default='',
help="Key will be concatenation of PREFIX_KEY and md5(URL).")
parser.add_argument('--url', required=True,
help="Upload data pointed to by this argument, unless --file is specified."
" If argument is not a local path, contents is first downloaded"
" in a temporary file.")
parser.add_argument('--file',
help="Upload the contents of this file, overriding --url")
args = parser.parse_args(args or sys.argv[1:])
nc = NetworkcacheClient(args.slapos_config)
f = None
try:
if args.file:
f = open(args.file)
elif os.path.isdir(args.url):
f = nc.archive(args.url)
else:
f = urllib2.urlopen(args.url)
urlmd5 = hashlib.md5(args.url).hexdigest()
nc.upload(f, args.prefix_key + urlmd5, urlmd5=urlmd5,
file_name=os.path.basename(args.url))
finally:
f is None or f.close()
def cmd_download(*args):
parser = _newArgumentParser()
parser.add_argument('--prefix-key', default='',
help="Key will be concatenation of PREFIX_KEY and md5(URL).")
parser.add_argument('--url', required=True,
help="URL of data to download.")
args = parser.parse_args(args or sys.argv[1:])
nc = NetworkcacheClient(args.slapos_config)
key = args.prefix_key + hashlib.md5(args.url).hexdigest()
shutil.copyfileobj(nc.download(nc.select(key).next()['sha512']), sys.stdout)
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