# interpreted as representing official policies, either expressed
# or implied, of GRNET S.A.
-from httplib import HTTPConnection, HTTP
+from httplib import HTTPConnection, HTTPSConnection, HTTP
from sys import stdin
from xml.dom import minidom
from StringIO import StringIO
from urllib import quote, unquote
+from urlparse import urlparse
import json
import types
self.status = status
class Client(object):
- def __init__(self, host, token, account, api='v1', verbose=False, debug=False):
- """`host` can also include a port, e.g '127.0.0.1:8000'."""
+ def __init__(self, url, token, account, verbose=False, debug=False):
+ """`url` can also include a port, e.g '127.0.0.1:8000'."""
- self.host = host
+ self.url = url
self.account = account
- self.api = api
self.verbose = verbose or debug
self.debug = debug
self.token = token
def _req(self, method, path, body=None, headers={}, format='text', params={}):
- full_path = _prepare_path(path, self.api, format, params)
+ p = urlparse(self.url)
+ if p.scheme == 'http':
+ conn = HTTPConnection(p.netloc)
+ elif p.scheme == 'https':
+ conn = HTTPSConnection(p.netloc)
+ else:
+ raise Exception('Unknown URL scheme')
+
+ full_path = _prepare_path(p.path + path, format, params)
- conn = HTTPConnection(self.host)
kwargs = {}
kwargs['headers'] = _prepare_headers(headers)
kwargs['headers']['X-Auth-Token'] = self.token
def _chunked_transfer(self, path, method='PUT', f=stdin, headers=None,
blocksize=1024, params={}):
"""perfomrs a chunked request"""
- full_path = _prepare_path(path, self.api, params=params)
+ p = urlparse(self.url)
+ if p.scheme == 'http':
+ conn = HTTPConnection(p.netloc)
+ elif p.scheme == 'https':
+ conn = HTTPSConnection(p.netloc)
+ else:
+ raise Exception('Unknown URL scheme')
+
+ full_path = _prepare_path(p.path + path, format, params)
- conn = HTTPConnection(self.host)
conn.putrequest(method, full_path)
conn.putheader('x-auth-token', self.token)
conn.putheader('content-type', 'application/octet-stream')
sharing = '%s=%s' % (action, ','.join(l))
self.update_object(container, object, f=None, x_object_sharing=sharing)
-def _prepare_path(path, api, format='text', params={}):
- slash = '/' if api else ''
- full_path = '%s%s%s?format=%s' % (slash, api, quote(path), format)
+def _prepare_path(path, format='text', params={}):
+ full_path = '%s?format=%s' % (quote(path), format)
for k,v in params.items():
value = quote(str(v)) if v else ''
from datetime import datetime
from pithos.lib.client import Pithos_Client, Fault
-from pithos.lib.util import get_user, get_auth, get_server, get_api
+from pithos.lib.util import get_user, get_auth, get_url
from pithos.lib.transfer import upload, download
import json
def __init__(self, name, argv):
parser = OptionParser('%%prog %s [options] %s' % (name, self.syntax))
- parser.add_option('--host', dest='host', metavar='HOST',
- default=get_server(), help='use server HOST')
+ parser.add_option('--url', dest='url', metavar='HOST',
+ default=get_url(), help='use server URL')
parser.add_option('--user', dest='user', metavar='USERNAME',
default=get_user(),
help='use account USERNAME')
parser.add_option('--token', dest='token', metavar='AUTH',
default=get_auth(),
help='use account AUTH')
- parser.add_option('--api', dest='api', metavar='API',
- default=get_api(), help='use api API')
parser.add_option('-v', action='store_true', dest='verbose',
default=False, help='use verbose output')
parser.add_option('-d', action='store_true', dest='debug',
val = getattr(options, key)
setattr(self, key, val)
- self.client = Pithos_Client(self.host, self.token, self.user, self.api, self.verbose,
+ self.client = Pithos_Client(self.url, self.token, self.user, self.verbose,
self.debug)
self.parser = parser