tacker.common.utils module

Utilities and helper functions.

class tacker.common.utils.CooperativeReader(fd)

Bases: object

An eventlet thread friendly class for reading in image data.

When accessing data either through the iterator or the read method we perform a sleep to allow a co-operative yield. When there is more than one image being uploaded/downloaded this prevents eventlet thread starvation, ie allows all threads to be scheduled periodically rather than having the same thread be continuously active.

read(length=None)

Return the requested amount of bytes.

Fetching the next chunk of the underlying iterator when needed. This is replaced with cooperative_read in __init__ if the underlying fd already supports read().

class tacker.common.utils.LimitingReader(data, limit, exception_class=<class 'tacker.common.exceptions.CSARFileSizeLimitExceeded'>)

Bases: object

Limit Reader to read data past to configured allowed amount.

Reader designed to fail when reading image data past the configured allowable amount.

read(i)
class tacker.common.utils.MemoryUnit

Bases: object

UNIT_SIZE_DEFAULT = 'B'
UNIT_SIZE_DICT = {'B': 1, 'GB': 1000000000, 'GiB': 1073741824, 'KiB': 1024, 'MB': 1000000, 'MiB': 1048576, 'TB': 1000000000000, 'TiB': 1099511627776, 'kB': 1000}
static convert_unit_size_to_num(size, unit=None)

Convert given size to a number representing given unit.

If unit is None, convert to a number representing UNIT_SIZE_DEFAULT :param size: unit size e.g. 1 TB :param unit: unit to be converted to e.g GB :return: converted number e.g. 1000 for 1 TB size and unit GB

static validate_unit(unit)
tacker.common.utils.change_memory_unit(mem, to)

Change the memory value(mem) based on the unit(‘to’) specified.

If the unit is not specified in ‘mem’, by default, it is considered as “MB”. And this method returns only integer.

tacker.common.utils.chunkiter(fp, chunk_size=65536)

Convert iterator to a file-like object.

Return an iterator to a file-like obj which yields fixed size chunks

Parameters:
  • fp – a file-like object

  • chunk_size – maximum size of chunk

tacker.common.utils.chunkreadable(iter, chunk_size=65536)

Wrap a readable iterator.

Wrap a readable iterator with a reader yielding chunks of a preferred size, otherwise leave iterator unchanged.

Parameters:
  • iter – an iter which may also be readable

  • chunk_size – maximum size of chunk

tacker.common.utils.convert_camelcase_to_snakecase(request_data)

Converts dict keys or list of dict keys from camelCase to snake_case.

Returns a dict with keys or list with dict keys, in snake_case. This method takes care only keys in a dict or dicts in a list. For simple list with string items, the elements which are actual values are ignored during conversion. And property value is not converted when key is additionalParams.

Parameters:

request_data – dict with keys or list with items, in camelCase.

tacker.common.utils.convert_snakecase_to_camelcase(request_data)

Converts dict keys or list of dict keys from snake_case to camelCase.

Returns a dict with keys or list with dict key, in camelCase. This method takes care only keys in a dict or dicts in a list. For simple list with string items, the elements which are actual values are ignored during conversion. Also, Snake case is a notation method that uses underscores to connect words. For that reason, if the initial word of the key in dict starts with ‘_’, this function ignore to convert the key. And property value is not converted when key is additional_params.

Parameters:

request_data – dict with keys or list with items, in snake_case.

Example:

Before:

[
    {"vnf_lcm_op_occ_id" : "uuid"},
    {
        "_links" : {
            "vnf_lcm_op_occ": {"href": "resource_link"}
        }
    }
]

After:

[
    {"vnfLcmOpOccId": "uuid"},
    {
        "_links": {
            "vnfLcmOpOcc": {"href": "resource_link"}
        }
    }
]
tacker.common.utils.convert_string_to_snakecase(name)

Converts a string from camelCase to snake_case.

tacker.common.utils.cooperative_iter(iter)

Prevent eventlet thread starvation during iteration

Return an iterator which schedules after each iteration. This can prevent eventlet thread starvation.

Parameters:

iter – an iterator to wrap

tacker.common.utils.cooperative_read(fd)

Prevent eventlet thread starvationafter each read operation.

Wrap a file descriptor’s read with a partial function which schedules after each read. This can prevent eventlet thread starvation.

Parameters:

fd – a file descriptor to wrap

tacker.common.utils.deep_update(orig_dict, new_dict)
tacker.common.utils.deepgetattr(obj, attr)

Recurses through an attribute chain to get the ultimate value.

tacker.common.utils.dict2tuple(d)
tacker.common.utils.expects_func_args(*args)
tacker.common.utils.find_config_file(options, config_file)

Return the first config file found.

We search for the paste config file in the following order: * If –config-file option is used, use that * Search for the configuration files via common cfg directories :retval Full path to config file, or None if no config file found

tacker.common.utils.flatten_dict(data, prefix='')
tacker.common.utils.generate_resource_name(resource, prefix='tmpl')
tacker.common.utils.get_auth_url_v3(auth_url)
tacker.common.utils.get_hostname()
tacker.common.utils.is_url(url)
tacker.common.utils.is_valid_ipv4(address)

Verify that address represents a valid IPv4 address.

tacker.common.utils.is_valid_url(url)
tacker.common.utils.is_valid_vlan_tag(vlan)
tacker.common.utils.load_class_by_alias_or_classname(namespace, name)

Load class using stevedore alias or the class name.

Load class using the stevedore driver manager :param namespace: namespace where the alias is defined :param name: alias or class name of the class to be loaded :returns: class if calls can be loaded :raises ImportError: if class cannot be loaded

tacker.common.utils.log_opt_values(log)
tacker.common.utils.none_from_string(orig_str)
tacker.common.utils.str_to_bool(value)

Convert string to Bool

tacker.common.utils.str_to_bytes(value)

Convert string to bytes

tacker.common.utils.str_to_num(value)

Convert a string representation of a number into a numeric type.

tacker.common.utils.subprocess_popen(args, stdin=None, stdout=None, stderr=None, shell=False, env=None)