File: //kunden/lib/python3/dist-packages/breezy/__pycache__/pyutils.cpython-39.pyc
a
�*�^� � @ s0 d Z ddlmZ ddlZddd�Zd dd�ZdS )
z%General Python convenience functions.� )�absolute_importNc C s^ |r>|� d�}|dd� }t| i i |�}|D ]}t||�}q,nt| t� t� g � tj| }|S )a Get the Python object named by a given module and member name.
This is usually much more convenient than dealing with ``__import__``
directly::
>>> doc = get_named_object('breezy.pyutils', 'get_named_object.__doc__')
>>> doc.splitlines()[0]
'Get the Python object named by a given module and member name.'
:param module_name: a module name, as would be found in sys.modules if
the module is already imported. It may contain dots. e.g. 'sys' or
'os.path'.
:param member_name: (optional) a name of an attribute in that module to
return. It may contain dots. e.g. 'MyClass.some_method'. If not
given, the named module will be returned instead.
:raises: ImportError or AttributeError.
�.N� )�split�
__import__�getattr�globals�locals�sys�modules)�module_name�member_nameZ
attr_chain� from_list�obj�attr� r �0/usr/lib/python3/dist-packages/breezy/pyutils.py�get_named_object s
r c C s| |dur>|� dd�}t|�dkr*| d|fS | |d |d fS n:| � dd�}t|�dkrftd| f ��n|d d|d fS dS )a
Determine the 'parent' of a given dotted module name and (optional)
member name.
The idea is that ``getattr(parent_obj, final_attr)`` will equal
get_named_object(module_name, member_name).
:return: (module_name, member_name, final_attr) tuple.
Nr r r z(No parent object for top-level module %r)�rsplit�len�AssertionError)r r
Z
split_namer r r �calc_parent_name? s
�r )N)N)�__doc__Z
__future__r r
r r r r r r �<module> s
'