76 lines
2.2 KiB
Python
76 lines
2.2 KiB
Python
# Copyright (c) 2010-2012 OpenStack, LLC.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
# implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
"""Miscellaneous utility functions for use with Swift."""
|
|
|
|
TRUE_VALUES = set(('true', '1', 'yes', 'on', 't', 'y'))
|
|
|
|
|
|
def config_true_value(value):
|
|
"""
|
|
Returns True if the value is either True or a string in TRUE_VALUES.
|
|
Returns False otherwise.
|
|
This function come from swift.common.utils.config_true_value()
|
|
"""
|
|
return value is True or \
|
|
(isinstance(value, basestring) and value.lower() in TRUE_VALUES)
|
|
|
|
|
|
def prt_bytes(bytes, human_flag):
|
|
"""
|
|
convert a number > 1024 to printable format, either in 4 char -h format as
|
|
with ls -lh or return as 12 char right justified string
|
|
"""
|
|
|
|
if human_flag:
|
|
suffix = ''
|
|
mods = list('KMGTPEZY')
|
|
temp = float(bytes)
|
|
if temp > 0:
|
|
while (temp > 1023):
|
|
try:
|
|
suffix = mods.pop(0)
|
|
except IndexError:
|
|
break
|
|
temp /= 1024.0
|
|
if suffix != '':
|
|
if temp >= 10:
|
|
bytes = '%3d%s' % (temp, suffix)
|
|
else:
|
|
bytes = '%.1f%s' % (temp, suffix)
|
|
if suffix == '': # must be < 1024
|
|
bytes = '%4s' % bytes
|
|
else:
|
|
bytes = '%12s' % bytes
|
|
|
|
return(bytes)
|
|
|
|
|
|
class LengthWrapper(object):
|
|
|
|
def __init__(self, readable, length):
|
|
self._length = self._remaining = length
|
|
self._readable = readable
|
|
|
|
def __len__(self):
|
|
return self._length
|
|
|
|
def read(self, *args, **kwargs):
|
|
if self._remaining <= 0:
|
|
return ''
|
|
chunk = self._readable.read(
|
|
*args, **kwargs)[:self._remaining]
|
|
self._remaining -= len(chunk)
|
|
return chunk
|