vistir.misc module


Escape strings for use in Popen() and run().

This is a passthrough method for instantiating a Script object which can be used to escape commands to output as a single string.


Flatten an arbitrarily nested iterable.

Parameters:elem (Iterable) – An iterable to flatten
>>> nested_iterable = (
        1234, (3456, 4398345, (234234)), (
            2396, (
                23895750, 9283798, 29384, (
                    289375983275, 293759, 2347, (
                        2098, 7987, 27599
>>> list(vistir.misc.unnest(nested_iterable))
[1234, 3456, 4398345, 234234, 2396, 23895750, 9283798, 29384, 289375983275, 293759,
 2347, 2098, 7987, 27599]

Deduplicate an iterable object like iter(set(iterable)) but order- preserved., env=None, return_object=False, block=True, cwd=None, verbose=False, nospin=False, spinner_name=None, combine_stderr=True, display_limit=200, write_to_stdout=True)[source]

Use subprocess.Popen to get the output of a command and decode it.

  • cmd (list) – A list representing the command you want to run.
  • env (dict) – Additional environment settings to pass through to the subprocess.
  • return_object (bool) – When True, returns the whole subprocess instance
  • block (bool) – When False, returns a potentially still-running subprocess.Popen instance
  • cwd (str) – Current working directory contect to use for spawning the subprocess.
  • verbose (bool) – Whether to print stdout in real time when non-blocking.
  • nospin (bool) – Whether to disable the cli spinner.
  • spinner_name (str) – The name of the spinner to use if enabled, defaults to bouncingBar
  • combine_stderr (bool) – Optionally merge stdout and stderr in the subprocess, false if nonblocking.
  • dispay_limit (int) – The max width of output lines to display when using a spinner.
  • write_to_stdout (bool) – Whether to write to stdout when using a spinner, defaults to True.

A 2-tuple of (output, error) or a subprocess.Popen object.


Merging standard out and standarad error in a nonblocking subprocess can cause errors in some cases and may not be ideal. Consider disabling this functionality.


Load the sys.path from the given python executable’s environment as json.

Parameters:python (str) – Path to a valid python executable
Returns:A python representation of the sys.path value of the given python executable.
Return type:list
>>> load_path("/home/user/.virtualenvs/requirementslib-5MhGuG3C/bin/python")
['', '/home/user/.virtualenvs/requirementslib-5MhGuG3C/lib/',
vistir.misc.partialclass(cls, *args, **kwargs)[source]

Returns a partially instantiated class.

Returns:A partial class instance
Return type:cls
>>> source = partialclass(Source, url="")
>>> source
<class '__main__.Source'>
>>> source(name="pypi")
>>> source.__dict__
    '__module__': '__main__',
    '__dict__': <attribute '__dict__' of 'Source' objects>,
    '__weakref__': <attribute '__weakref__' of 'Source' objects>,
    '__doc__': None,
    '__init__': functools.partialmethod(
        <function Source.__init__ at 0x7f23af429bf8>, , url=''
>>> new_source = source(name="pypi")
>>> new_source
<__main__.Source object at 0x7f23af189b38>
>>> new_source.__dict__
{'url': '', 'verify_ssl': True, 'name': 'pypi'}
vistir.misc.to_text(string, encoding='utf-8', errors=None)[source]

Force a value to a text-type.

  • string (str or bytes unicode) – Some input that can be converted to a unicode representation.
  • encoding – The encoding to use for conversions, defaults to “utf-8”
  • encoding – str, optional

The unicode representation of the string

Return type:


vistir.misc.to_bytes(string, encoding='utf-8', errors=None)[source]

Force a value to bytes.

  • string (str or bytes unicode or a memoryview subclass) – Some input that can be converted to a bytes.
  • encoding – The encoding to use for conversions, defaults to “utf-8”
  • encoding – str, optional

Corresponding byte representation (for use in filesystem operations)

Return type:


vistir.misc.chunked(n, iterable)[source]

Split an iterable into lists of length n.

  • n (int) – Number of unique groups
  • iterable (iter) – An iterable to split up


vistir.misc.take(n, iterable)[source]

Take n elements from the supplied iterable without consuming it.

  • n (int) – Number of unique groups
  • iterable (iter) – An iterable to split up


vistir.misc.divide(n, iterable)[source]

split an iterable into n groups, per https://more-

  • n (int) – Number of unique groups
  • iterable (iter) – An iterable to split up

a list of new iterables derived from the original iterable

Return type:



Determine the proper output encoding for terminal rendering.

vistir.misc.decode_for_output(output, target_stream=None, translation_map=None)[source]

Given a string, decode it for output to a terminal.

  • output (str) – A string to print to a terminal
  • target_stream – A stream to write to, we will encode to target this stream if possible.
  • translation_map (dict) – A mapping of unicode character ordinals to replacement strings.

A re-encoded string using the preferred encoding

Return type:



Given an encoding name, get the canonical name from a codec lookup.

Parameters:name (str) – The name of the codec to lookup
Returns:The canonical version of the codec name
Return type:str
vistir.misc.get_wrapped_stream(stream, encoding=None, errors='replace')[source]

Given a stream, wrap it in a StreamWrapper instance and return the wrapped stream.

  • stream – A stream instance to wrap
  • encoding (str) – The encoding to use for the stream
  • errors (str) – The error handler to use, default “replace”

A new, wrapped stream

Return type:


class vistir.misc.StreamWrapper(stream, encoding, errors, line_buffering=True, **kwargs)[source]

Bases: _io.TextIOWrapper

This wrapper class will wrap a provided stream and supply an interface for compatibility.


Return whether this is an ‘interactive’ stream.

Return False if it can’t be determined.


Write string to stream. Returns the number of characters written (which is always equal to the length of the string).