Commit d65d838e authored by Stavros Sachtouris's avatar Stavros Sachtouris
Browse files

Merge branch 'hotfix-0.11.4'

parents 6e6d364e 455b406a
CHANGELOG for hotfix 0.11.4
Unicode pithos filenames bug fix
Zero file syncing bug fix
CHANGELOG for hotfix 0.11.3
Fix bug with image meta set
......
......@@ -92,14 +92,14 @@ class _command_init(object):
self.cloud = cloud or getattr(self, 'cloud', None)
def write(self, s):
self._out.write(u'%s' % s)
self._out.write('%s' % s)
self._out.flush()
def writeln(self, s=''):
self.write(u'%s\n' % s)
self.write('%s\n' % s)
def error(self, s=''):
self._err.write(u'%s\n' % s)
self._err.write('%s\n' % s)
self._err.flush()
def print_list(self, *args, **kwargs):
......
......@@ -152,9 +152,9 @@ def print_dict(
k = ('%s' % k).strip()
if k in exclude:
continue
print_str = u' ' * indent
print_str += u'%s.' % (i + 1) if with_enumeration else u''
print_str += u'%s:' % k
print_str = ' ' * indent
print_str += '%s.' % (i + 1) if with_enumeration else ''
print_str += '%s:' % k
if isinstance(v, dict):
out.write(print_str + '\n')
print_dict(
......@@ -166,7 +166,7 @@ def print_dict(
v, exclude, indent + INDENT_TAB,
recursive_enumeration, recursive_enumeration, out)
else:
out.write(u'%s %s\n' % (print_str, v))
out.write('%s %s\n' % (print_str, v))
out.flush()
......@@ -199,13 +199,13 @@ def print_list(
assert indent >= 0, 'print_list indent must be >= 0'
for i, item in enumerate(l):
print_str = u' ' * indent
print_str += u'%s.' % (i + 1) if with_enumeration else u''
print_str = ' ' * indent
print_str += '%s.' % (i + 1) if with_enumeration else ''
if isinstance(item, dict):
if with_enumeration:
out.write(print_str + '\n')
elif i and i < len(l):
out.write(u'\n')
out.write('\n')
print_dict(
item, exclude,
indent + (INDENT_TAB if with_enumeration else 0),
......@@ -214,7 +214,7 @@ def print_list(
if with_enumeration:
out.write(print_str + '\n')
elif i and i < len(l):
out.write(u'\n')
out.write('\n')
print_list(
item, exclude, indent + INDENT_TAB,
recursive_enumeration, recursive_enumeration, out)
......@@ -222,7 +222,7 @@ def print_list(
item = ('%s' % item).strip()
if item in exclude:
continue
out.write(u'%s%s\n' % (print_str, item))
out.write('%s%s\n' % (print_str, item))
out.flush()
out.flush()
......@@ -247,24 +247,24 @@ def print_items(
return
if not (isinstance(items, dict) or isinstance(items, list) or isinstance(
items, tuple)):
out.write(u'%s\n' % items)
out.write('%s\n' % items)
out.flush()
return
for i, item in enumerate(items):
if with_enumeration:
out.write(u'%s. ' % (i + 1))
out.write('%s. ' % (i + 1))
if isinstance(item, dict):
item = dict(item)
title = sorted(set(title).intersection(item))
pick = item.get if with_redundancy else item.pop
header = u' '.join(u'%s' % pick(key) for key in title)
header = ' '.join('%s' % pick(key) for key in title)
out.write((unicode(bold(header) if header else '') + '\n'))
print_dict(item, indent=INDENT_TAB, out=out)
elif isinstance(item, list) or isinstance(item, tuple):
print_list(item, indent=INDENT_TAB, out=out)
else:
out.write(u' %s\n' % item)
out.write(' %s\n' % item)
out.flush()
out.flush()
......@@ -389,7 +389,7 @@ def ask_user(msg, true_resp=('y', ), out=stdout, user_in=stdin):
"""
yep = ', '.join(true_resp)
nope = '<not %s>' % yep if 'n' in true_resp or 'N' in true_resp else 'N'
out.write(u'%s [%s/%s]: ' % (msg, yep, nope))
out.write('%s [%s/%s]: ' % (msg, yep, nope))
out.flush()
user_response = user_in.readline()
return user_response[0].lower() in [s.lower() for s in true_resp]
......
......@@ -66,9 +66,11 @@ def _range_up(start, end, max_value, a_range):
:returns: (str) a range string cut-off for the start-end range
an empty response means this window is out of range
"""
assert start >= 0, '_range_up was called with start < 0'
assert end >= start, '_range_up was called with end < start'
assert end <= max_value, '_range_up was called with max_value < end'
assert start >= 0, '_range_up called w. start(%s) < 0' % start
assert end >= start, '_range_up called w. end(%s) < start(%s)' % (
end, start)
assert end <= max_value, '_range_up called w. max_value(%s) < end(%s)' % (
max_value, end)
if not a_range:
return '%s-%s' % (start, end)
selected = []
......@@ -727,19 +729,21 @@ class PithosClient(PithosRestClient):
self._cb_next(len(blockids) - len(unsaved))
if unsaved:
key = unsaved[0]
self._watch_thread_limit(flying.values())
self._thread2file(
flying, blockid_dict, local_file, offset,
**restargs)
end = total_size - 1 if (
key + blocksize > total_size) else key + blocksize - 1
data_range = _range_up(key, end, total_size, filerange)
if not data_range:
self._cb_next()
continue
restargs['async_headers'] = {'Range': 'bytes=%s' % data_range}
flying[key] = self._get_block_async(obj, **restargs)
blockid_dict[key] = unsaved
if key:
self._watch_thread_limit(flying.values())
self._thread2file(
flying, blockid_dict, local_file, offset,
**restargs)
end = total_size - 1 if (
key + blocksize > total_size) else key + blocksize - 1
data_range = _range_up(key, end, total_size, filerange)
if not data_range:
self._cb_next()
continue
restargs[
'async_headers'] = {'Range': 'bytes=%s' % data_range}
flying[key] = self._get_block_async(obj, **restargs)
blockid_dict[key] = unsaved
for thread in flying.values():
thread.join()
......
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