a
    mzf                     @   s^   d Z ddlZg dZG dd dZG dd dZG dd	 d	ZG d
d dZG dd dZdS )z*
Interface to various templating engines.
    N)render_cheetahrender_genshirender_makocachec                   @   s    e Zd ZdZdd Zdd ZdS )r   zRendering interface to Cheetah Templates.

    Example:

        render = render_cheetah('templates')
        render.hello(name="cheetah")
    c                 C   s   ddl m} || _d S )Nr   Template)Cheetah.Templater   path)selfr	   r    r   B/var/www/media/lib/python3.9/site-packages/web/contrib/template.py__init__   s    zrender_cheetah.__init__c                    s2   ddl m  tj| j|d  fdd}|S )Nr   r   .htmlc                     s    | gd}|  S )N)fileZ
searchList)Zrespond)kwtr   r	   r   r   template   s    z,render_cheetah.__getattr__.<locals>.template)r   r   osr	   join)r
   namer   r   r   r   __getattr__   s    zrender_cheetah.__getattr__N__name__
__module____qualname____doc__r   r   r   r   r   r   r   	   s   r   c                   @   s    e Zd ZdZdd Zdd ZdS )r   a"  Rendering interface genshi templates.
    Example:

    for xml/html templates.

        render = render_genshi(['templates/'])
        render.hello(name='genshi')

    For text templates:

        render = render_genshi(['templates/'], type='text')
        render.hello(name='genshi')
    c                 O   s.   ddl m} |dd | _||i || _d S )Nr   )TemplateLoadertype)genshi.templater   pop_type_loader)r
   akwargsr   r   r   r   r   3   s    zrender_genshi.__init__c                    sT   |d }| j dkr(ddlm} |}dn
d }| j | jj||d  fdd}|S )Nr   textr   )TextTemplate)clsc                     s*    j f i | }r|S | S d S N)generaterender)r   streamr   r   r   r   r   H   s    
z+render_genshi.__getattr__.<locals>.template)r!   r   r&   r"   load)r
   r   r	   r&   r'   r   r   r,   r   r   9   s    
zrender_genshi.__getattr__Nr   r   r   r   r   r   $   s   r   c                   @   s    e Zd ZdZdd Zdd ZdS )render_jinjazRendering interface to Jinja2 Templates

    Example:

        render= render_jinja('templates')
        render.hello(name='jinja2')
    c                 O   sR   | dg }| di }ddlm}m} |||i ||d| _| jj| d S )N
extensionsglobalsr   )EnvironmentFileSystemLoader)loaderr/   )r    Zjinja2r1   r2   _lookupr0   update)r
   r#   r$   r/   r0   r1   r2   r   r   r   r   [   s    zrender_jinja.__init__c                 C   s   |d }| j |}|jS Nr   r4   Zget_templater*   r
   r   r	   r   r   r   r   r   f   s    zrender_jinja.__getattr__Nr   r   r   r   r   r.   R   s   r.   c                   @   s    e Zd ZdZdd Zdd ZdS )r   zRendering interface to Mako Templates.

    Example:

        render = render_mako(directories=['templates'])
        render.hello(name="mako")
    c                 O   s    ddl m} ||i || _d S )Nr   )TemplateLookup)Zmako.lookupr9   r4   )r
   r#   r$   r9   r   r   r   r   v   s    zrender_mako.__init__c                 C   s   |d }| j |}|jS r6   r7   r8   r   r   r   r   {   s    zrender_mako.__getattr__Nr   r   r   r   r   r   m   s   r   c                   @   s    e Zd ZdZdd Zdd ZdS )r   zCache for any rendering interface.

    Example:

        render = cache(render_cheetah("templates/"))
        render.hello(name='cache')
    c                 C   s   || _ i | _d S r(   )_render_cache)r
   r*   r   r   r   r      s    zcache.__init__c                 C   s&   || j vrt| j|| j |< | j | S r(   )r;   getattrr:   )r
   r   r   r   r   r      s    
zcache.__getattr__Nr   r   r   r   r   r      s   r   )	r   os.pathr   __all__r   r   r.   r   r   r   r   r   r   <module>   s   .