HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //home/arjun/projects/env/lib/python3.10/site-packages/lxml/__pycache__/builder.cpython-310.pyc
o

we��@s�dZddlmZddlmZejZddlm	Z	ze
Wney&eZ
Ynwze
Wney6eZ
YnwGdd�de�Ze�ZdS)z9
The ``E`` Element factory for generating XML documents.
�)�absolute_importN��partialc@s.eZdZdZ		d	dd�Zdd�Zdd�ZdS)
�ElementMakeracElement generator factory.

    Unlike the ordinary Element factory, the E factory allows you to pass in
    more than just a tag and some optional attributes; you can also pass in
    text and other elements.  The text is added as either text or tail
    attributes, and elements are inserted at the right spot.  Some small
    examples::

        >>> from lxml import etree as ET
        >>> from lxml.builder import E

        >>> ET.tostring(E("tag"))
        '<tag/>'
        >>> ET.tostring(E("tag", "text"))
        '<tag>text</tag>'
        >>> ET.tostring(E("tag", "text", key="value"))
        '<tag key="value">text</tag>'
        >>> ET.tostring(E("tag", E("subtag", "text"), "tail"))
        '<tag><subtag>text</subtag>tail</tag>'

    For simple tags, the factory also allows you to write ``E.tag(...)`` instead
    of ``E('tag', ...)``::

        >>> ET.tostring(E.tag())
        '<tag/>'
        >>> ET.tostring(E.tag("text"))
        '<tag>text</tag>'
        >>> ET.tostring(E.tag(E.subtag("text"), "tail"))
        '<tag><subtag>text</subtag>tail</tag>'

    Here's a somewhat larger example; this shows how to generate HTML
    documents, using a mix of prepared factory functions for inline elements,
    nested ``E.tag`` calls, and embedded XHTML fragments::

        # some common inline elements
        A = E.a
        I = E.i
        B = E.b

        def CLASS(v):
            # helper function, 'class' is a reserved word
            return {'class': v}

        page = (
            E.html(
                E.head(
                    E.title("This is a sample document")
                ),
                E.body(
                    E.h1("Hello!", CLASS("title")),
                    E.p("This is a paragraph with ", B("bold"), " text in it!"),
                    E.p("This is another paragraph, with a ",
                        A("link", href="http://www.python.org"), "."),
                    E.p("Here are some reserved characters: <spam&egg>."),
                    ET.XML("<p>And finally, here is an embedded XHTML fragment.</p>"),
                )
            )
        )

        print ET.tostring(page)

    Here's a prettyprinted version of the output from the above script::

        <html>
          <head>
            <title>This is a sample document</title>
          </head>
          <body>
            <h1 class="title">Hello!</h1>
            <p>This is a paragraph with <b>bold</b> text in it!</p>
            <p>This is another paragraph, with <a href="http://www.python.org">link</a>.</p>
            <p>Here are some reserved characters: &lt;spam&amp;egg&gt;.</p>
            <p>And finally, here is an embedded XHTML fragment.</p>
          </body>
        </html>

    For namespace support, you can pass a namespace map (``nsmap``)
    and/or a specific target ``namespace`` to the ElementMaker class::

        >>> E = ElementMaker(namespace="http://my.ns/")
        >>> print(ET.tostring( E.test ))
        <test xmlns="http://my.ns/"/>

        >>> E = ElementMaker(namespace="http://my.ns/", nsmap={'p':'http://my.ns/'})
        >>> print(ET.tostring( E.test ))
        <p:test xmlns:p="http://my.ns/"/>
    Ncs�|dur
d|dnd|_|rt|�nd|_|dus t|�s J�|dur&|ntj|_�r0t��ni�dd�}dd�}t�vrB|�t<t�vrJ|�t<tj	�vrT|�tj	<�fdd�}t�vrb|�t<�|_
dS)	N�{�}cSsFz|d}Wnty|jpd||_YdSw|jpd||_dS)N����)�
IndexError�text�tail)�elem�item�
last_child�r�E/home/arjun/projects/env/lib/python3.10/site-packages/lxml/builder.py�add_text�s�z'ElementMaker.__init__.<locals>.add_textcSs|jr
td|j��||_dS)Nz<Can't add a CDATA section. Element already has some text: %r)r�
ValueError)r
�cdatarrr�	add_cdata�s
z(ElementMaker.__init__.<locals>.add_cdatacsF|j}|��D]\}}t|t�r|||<q�t|�d|�||<qdS�N)�attrib�items�
isinstance�
basestring�type)r
rr�k�v��typemaprr�add_dict�s

�z'ElementMaker.__init__.<locals>.add_dict)�
_namespace�dict�_nsmap�callable�ET�Element�_makeelement�str�unicode�CDATA�_typemap)�selfr�	namespace�nsmap�makeelementrrr rrr�__init__�s"


zElementMaker.__init__c
Os
|j}t|t�st|t�r|j}n|jdur!|ddkr!|j|}|j||jd�}|r2|t||�|D]N}t	|�r=|�}|�
t|��}|durqt�
|�rS|�|�q4t|�jD]
}|�
|�}|durenqXtdt|�j|f��|||�}	|	r�|�
t|	��||	�q4|S)Nrr)r.zbad argument type: %s(%r))r+rr(�_QNamerr!r'r#r"r$�getrr%�	iselement�append�__mro__�	TypeError�__name__)
r,�tag�childrenrrr
r�t�basetyperrrr�__call__�s:



��
�zElementMaker.__call__cCs
t||�Srr)r,r8rrr�__getattr__�s
zElementMaker.__getattr__)NNNN)r7�
__module__�__qualname__�__doc__r0r<r=rrrrr<sX
�,#r)r@�
__future__r�
lxml.etree�etreer%�QNamer1�	functoolsrr�	NameErrorr(r)�objectr�Errrr�<module>s$%��
.