File: //opt/alt/python37/lib/python3.7/site-packages/paste/util/__pycache__/threadedprint.cpython-37.pyc
B
b�N � @ s� d Z ddlZddlZddlmZ G dd� dej�Zdadadd� Z dd � Z
d
d� Ze aa
G dd
� d
ej�Zdadadd� Zdd � Z
dd� ZdS )a�
threadedprint.py
================
:author: Ian Bicking
:date: 12 Jul 2004
Multi-threaded printing; allows the output produced via print to be
separated according to the thread.
To use this, you must install the catcher, like::
threadedprint.install()
The installation optionally takes one of three parameters:
default
The default destination for print statements (e.g., ``sys.stdout``).
factory
A function that will produce the stream for a thread, given the
thread's name.
paramwriter
Instead of writing to a file-like stream, this function will be
called like ``paramwriter(thread_name, text)`` for every write.
The thread name is the value returned by
``threading.currentThread().getName()``, a string (typically something
like Thread-N).
You can also submit file-like objects for specific threads, which will
override any of these parameters. To do this, call ``register(stream,
[threadName])``. ``threadName`` is optional, and if not provided the
stream will be registered for the current thread.
If no specific stream is registered for a thread, and no default has
been provided, then an error will occur when anything is written to
``sys.stdout`` (or printed).
Note: the stream's ``write`` method will be called in the thread the
text came from, so you should consider thread safety, especially if
multiple threads share the same writer.
Note: if you want access to the original standard out, use
``sys.__stdout__``.
You may also uninstall this, via::
threadedprint.uninstall()
TODO
----
* Something with ``sys.stderr``.
* Some default handlers. Maybe something that hooks into `logging`.
* Possibly cache the results of ``factory`` calls. This would be a
semantic change.
� N)� filemixinc @ st e Zd Zddd�Zejfdd�Zdd� Zd d
� Zdd� Z d
d� Z
dd� Zdd� Zdejfdd�Z
dejfdd�ZdS )�PrintCatcherNFc C s� t tdd� |||g��dks$td��|r>|r8td| ��tj}|rL| j| _n$|rZ| j| _n|rh| j| _n| j | _|| _
|| _|| _i | _
d S )Nc S s | d k S )N� )�xr r �I/opt/alt/python37/lib/python3.7/site-packages/paste/util/threadedprint.py�<lambda>G � z'PrintCatcher.__init__.<locals>.<lambda>� z<You can only provide one of default, factory, or paramwriterz:You cannot pass in both default (%r) and leave_stdout=True)�len�filter�AssertionError�sys�stdout�
_writedefault�_defaultfunc�
_writefactory�_writeparam�_writeerror�_default�_factory�_paramwriter� _catchers)�self�default�factory�paramwriterZleave_stdoutr r r �__init__E s&