Revision 9471fece tools/lib/client.py
b/tools/lib/client.py | ||
---|---|---|
34 | 34 |
from httplib import HTTPConnection, HTTP |
35 | 35 |
from sys import stdin |
36 | 36 |
from xml.dom import minidom |
37 |
from StringIO import StringIO |
|
37 | 38 |
|
38 | 39 |
import json |
39 | 40 |
import types |
... | ... | |
72 | 73 |
self.token = token |
73 | 74 |
|
74 | 75 |
def _req(self, method, path, body=None, headers={}, format='text', params={}): |
75 |
full_path = '/%s%s?format=%s' % (self.api, path, format) |
|
76 |
slash = '/' if self.api else '' |
|
77 |
full_path = '%s%s%s?format=%s' % (slash, self.api, path, format) |
|
76 | 78 |
|
77 | 79 |
for k,v in params.items(): |
78 | 80 |
if v: |
... | ... | |
204 | 206 |
return self._req('POST', path, body, headers=headers, format=format, |
205 | 207 |
params=params) |
206 | 208 |
|
207 |
def put(self, path, body=None, format='text', headers=None): |
|
208 |
return self._req('PUT', path, body, headers=headers, format=format) |
|
209 |
def put(self, path, body=None, format='text', headers=None, params={}): |
|
210 |
return self._req('PUT', path, body, headers=headers, format=format, |
|
211 |
params=params) |
|
209 | 212 |
|
210 | 213 |
def _list(self, path, format='text', params={}, **headers): |
211 | 214 |
status, headers, data = self.get(path, format=format, headers=headers, |
... | ... | |
399 | 402 |
def retrieve_object_hashmap(self, container, object, params={}, |
400 | 403 |
account=None, **headers): |
401 | 404 |
"""returns the hashmap representing object's data""" |
402 |
args = locals() |
|
405 |
args = locals().copy()
|
|
403 | 406 |
for elem in ['self', 'container', 'object']: |
404 | 407 |
args.pop(elem) |
405 | 408 |
data = self.retrieve_object(container, object, format='json', **args) |
... | ... | |
415 | 418 |
**h) |
416 | 419 |
|
417 | 420 |
def create_object(self, container, object, f=stdin, format='text', meta={}, |
418 |
etag=None, content_type=None, content_encoding=None, |
|
421 |
params={}, etag=None, content_type=None, content_encoding=None,
|
|
419 | 422 |
content_disposition=None, account=None, **headers): |
420 | 423 |
"""creates a zero-length object""" |
421 | 424 |
account = account or self.account |
... | ... | |
433 | 436 |
for k,v in meta.items(): |
434 | 437 |
headers['x-object-meta-%s' %k.strip()] = v.strip() |
435 | 438 |
data = f.read() if f else None |
436 |
return self.put(path, data, format, headers=headers) |
|
439 |
return self.put(path, data, format, headers=headers, params=params)
|
|
437 | 440 |
|
438 | 441 |
def create_zero_length_object(self, container, object, meta={}, etag=None, |
439 | 442 |
content_type=None, content_encoding=None, |
440 | 443 |
content_disposition=None, account=None, |
441 | 444 |
**headers): |
442 | 445 |
account = account or self.account |
443 |
args = locals() |
|
446 |
args = locals().copy()
|
|
444 | 447 |
for elem in ['self', 'container', 'headers', 'account']: |
445 | 448 |
args.pop(elem) |
446 | 449 |
args.update(headers) |
... | ... | |
681 | 684 |
params = {'until':until, 'meta':meta} |
682 | 685 |
if shared: |
683 | 686 |
params['shared'] = None |
684 |
args = locals() |
|
687 |
args = locals().copy()
|
|
685 | 688 |
for elem in ['self', 'container', 'params', 'until', 'meta']: |
686 | 689 |
args.pop(elem) |
687 | 690 |
return OOS_Client.list_objects(self, container, params=params, **args) |
... | ... | |
728 | 731 |
l = [elem for elem in l if eval(elem)] |
729 | 732 |
for elem in l: |
730 | 733 |
headers.update({elem:eval(elem)}) |
734 |
if format != 'text': |
|
735 |
params['hashmap'] = None |
|
731 | 736 |
return OOS_Client.retrieve_object(self, container, object, |
732 | 737 |
account=account, format=format, |
733 | 738 |
params=params, **headers) |
... | ... | |
739 | 744 |
account=None): |
740 | 745 |
"""returns a specific object version""" |
741 | 746 |
account = account or self.account |
742 |
args = locals() |
|
747 |
args = locals().copy()
|
|
743 | 748 |
l = ['self', 'container', 'object'] |
744 | 749 |
for elem in l: |
745 | 750 |
args.pop(elem) |
... | ... | |
752 | 757 |
if_unmodified_since=None, account=None): |
753 | 758 |
"""returns the object version list""" |
754 | 759 |
account = account or self.account |
755 |
args = locals() |
|
760 |
args = locals().copy()
|
|
756 | 761 |
l = ['self', 'container', 'object'] |
757 | 762 |
for elem in l: |
758 | 763 |
args.pop(elem) |
... | ... | |
768 | 773 |
x_object_public=None, account=None): |
769 | 774 |
"""createas a zero length object""" |
770 | 775 |
account = account or self.account |
771 |
args = locals() |
|
776 |
args = locals().copy()
|
|
772 | 777 |
for elem in ['self', 'container', 'object']: |
773 | 778 |
args.pop(elem) |
774 | 779 |
return OOS_Client.create_zero_length_object(self, container, object, |
775 | 780 |
**args) |
776 | 781 |
|
777 |
def create_object(self, container, object, f=stdin, |
|
778 |
meta={}, etag=None, content_type=None, |
|
782 |
def create_object(self, container, object, f=stdin, format='text',
|
|
783 |
meta={}, params={}, etag=None, content_type=None,
|
|
779 | 784 |
content_encoding=None, content_disposition=None, |
780 | 785 |
x_object_manifest=None, x_object_sharing=None, |
781 | 786 |
x_object_public=None, account=None): |
782 | 787 |
"""creates an object""" |
783 | 788 |
account = account or self.account |
784 |
args = locals() |
|
789 |
args = locals().copy()
|
|
785 | 790 |
for elem in ['self', 'container', 'object']: |
786 | 791 |
args.pop(elem) |
787 | 792 |
return OOS_Client.create_object(self, container, object, **args) |
... | ... | |
810 | 815 |
return self._chunked_transfer(path, 'PUT', f, headers=headers, |
811 | 816 |
blocksize=blocksize) |
812 | 817 |
|
813 |
def create_object_by_hashmap(container, object, f=stdin, format='json',
|
|
818 |
def create_object_by_hashmap(self, container, object, hashmap={},
|
|
814 | 819 |
meta={}, etag=None, content_encoding=None, |
815 | 820 |
content_disposition=None, content_type=None, |
816 | 821 |
x_object_sharing=None, x_object_manifest=None, |
817 | 822 |
x_object_public = None, account=None): |
818 | 823 |
"""creates an object by uploading hashes representing data instead of data""" |
819 | 824 |
account = account or self.account |
820 |
args = locals() |
|
821 |
for elem in ['self', 'container', 'object']: |
|
825 |
args = locals().copy()
|
|
826 |
for elem in ['self', 'container', 'object', 'hashmap']:
|
|
822 | 827 |
args.pop(elem) |
823 | 828 |
|
824 |
data = f.read() if f else None |
|
825 |
if data and format == 'json': |
|
826 |
try: |
|
827 |
data = eval(data) |
|
828 |
data = json.dumps(data) |
|
829 |
except SyntaxError: |
|
830 |
raise Fault('Invalid formatting') |
|
829 |
try: |
|
830 |
data = json.dumps(hashmap) |
|
831 |
except SyntaxError: |
|
832 |
raise Fault('Invalid formatting') |
|
833 |
args['params'] = {'hashmap':None} |
|
834 |
args['format'] = 'json' |
|
831 | 835 |
|
832 |
#TODO check with xml |
|
833 |
return self.create_object(container, object, **args) |
|
836 |
return self.create_object(container, object, f=StringIO(data), **args) |
|
834 | 837 |
|
835 | 838 |
def create_manifestation(self, container, object, manifest, account=None): |
836 | 839 |
"""creates a manifestation""" |
... | ... | |
848 | 851 |
x_source_object=None, account=None): |
849 | 852 |
"""updates an object""" |
850 | 853 |
account = account or self.account |
851 |
args = locals() |
|
854 |
args = locals().copy()
|
|
852 | 855 |
for elem in ['self', 'container', 'object', 'replace']: |
853 | 856 |
args.pop(elem) |
854 | 857 |
if not replace: |
... | ... | |
863 | 866 |
x_object_public=None, account=None): |
864 | 867 |
"""updates an object (incremental upload)""" |
865 | 868 |
account = account or self.account |
866 |
args = locals() |
|
869 |
args = locals().copy()
|
|
867 | 870 |
for elem in ['self', 'container', 'object', 'replace']: |
868 | 871 |
args.pop(elem) |
869 | 872 |
if not replace: |
... | ... | |
877 | 880 |
x_object_sharing=None, x_object_public=None, account=None): |
878 | 881 |
"""updates an object""" |
879 | 882 |
account = account or self.account |
880 |
args = locals() |
|
883 |
args = locals().copy()
|
|
881 | 884 |
for elem in ['self', 'container', 'object', 'source']: |
882 | 885 |
args.pop(elem) |
883 | 886 |
|
Also available in: Unified diff