change pithis-sh & client/lib arguments
authorSofia Papagiannaki <papagian@gmail.com>
Mon, 6 Feb 2012 17:12:42 +0000 (19:12 +0200)
committerSofia Papagiannaki <papagian@gmail.com>
Mon, 6 Feb 2012 17:12:42 +0000 (19:12 +0200)
Refs: #1957

pithos/lib/client.py
pithos/lib/util.py
pithos/tools/pithos-sh

index ff14928..bf44322 100644 (file)
 # 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
@@ -66,20 +67,26 @@ class Fault(Exception):
         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
@@ -100,9 +107,16 @@ class Client(object):
     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')
@@ -919,9 +933,8 @@ class Pithos_Client(OOS_Client):
         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 ''
index df650de..7d84205 100644 (file)
@@ -33,8 +33,7 @@
 
 import os
 
-DEFAULT_SERVER = 'plus.pithos.grnet.gr'
-DEFAULT_API = 'v1'
+DEFAULT_URL = 'https://plus.pithos.grnet.gr/v1'
 DEFAULT_USER = 'test'
 DEFAULT_AUTH = '0000'
 
@@ -50,14 +49,8 @@ def get_auth():
     except KeyError:
         return DEFAULT_AUTH
 
-def get_server():
+def get_url():
     try:
-        return os.environ['PITHOS_SERVER']
+        return os.environ['PITHOS_URL']
     except KeyError:
-        return DEFAULT_SERVER
-
-def get_api():
-    try:
-        return os.environ['PITHOS_API']
-    except KeyError:
-        return DEFAULT_API
+        return DEFAULT_URL
index 1047342..364ab3b 100755 (executable)
@@ -40,7 +40,7 @@ from sys import argv, exit, stdin, stdout
 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
@@ -68,16 +68,14 @@ class Command(object):
     
     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',
@@ -92,7 +90,7 @@ class Command(object):
                 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