U
    Zf                     @   s   d dl mZmZmZmZ dZer4d dlZd dlmZ d dl	Z	e	
edZd dlmZ d dlmZmZmZmZmZmZ d dlmZ ejd	d
Zejddd ejddedd ejdeddd ejdeddd dZG dd deZdS )    )absolute_importdivisionprint_functionunicode_literalsFN)ApiNamespaceargparse)CodeBackend)check_route_name_conflictfmt_error_typefmt_funcfmt_objfmt_typefmt_url)Voidzjs-client-backend)progfilenamez[The name to give the single Javascript file that is created and contains all of the routes.)helpz-cz--class-namezThe name of the class the generated functions will be attached to. The name will be added to each function documentation, which makes it available for tools like JSDoc.)typer   z--wrap-response-in z&Wraps the response in a response class)r   defaultr   z--wrap-error-inz!Wraps the error in an error classz<// Auto-generated by Stone, do not modify.
var routes = {};
c                   @   s4   e Zd ZdZeZdZdZdd Zdd Z	dd	 Z
dS )
JavascriptClientBackendzBGenerates a single Javascript file with all of the routes defined.NTc              	   C   st   |  | jj\ | t |j D ].}|| _t| |j	D ]}| 
|j|| q<q$|   | d W 5 Q R X d S )Nzexport { routes };)Zoutput_to_relative_pathargsr   Zemit_raw_header
namespacesvaluescur_namespacer	   Zroutes_generate_routeroute_schemaemit)selfapi	namespaceroute r#   </tmp/pip-unpacked-wheel-vqb3mfeu/stone/backends/js_client.pygenerateG   s    

z JavascriptClientBackend.generatec           	   	   C   s  t |jd |j |j}|   | d |jrJ| j| |j| jdd | jj	rh| d
| jj	| |jrx| d d }| jjrd| jjt|jf }n
t|j}|jjtkr| dt|j  | d	|t|j| jjf  | d
 |jjtkr| d|  n| d|  | jdd t|j|j|j}|jrg }|jD ]}|t|j|j  qL|jjtkr| d
|d| n| d
|d| n,|jjtkr| d|  n| d|  W 5 Q R X | d d S )N_z/**z * )prefixz * @function {}#{}z * @deprecatedz%s<%s>z* * @arg {%s} arg - The request parameters.z * @returns {Promise.<%s, %s>}z */zroutes.%s = function (arg) {zroutes.%s = function () {   )Zdentz#return this.request('{}', arg, {});z, z$return this.request('{}', null, {});zreturn this.request("%s", arg);z return this.request("%s", null);z};)r   nameversionr   docZemit_wrapped_textZprocess_doc_docfr   
class_nameformat
deprecatedZwrap_response_inr   Zresult_data_typeZarg_data_type	__class__r   r
   Zerror_data_typeZwrap_error_inindentr   fieldsappendr   attrsjoin)	r   r   r!   r"   Zfunction_namereturn_typeurlZadditional_argsfieldr#   r#   r$   r   U   sr    




  z'JavascriptClientBackend._generate_routec                 C   sZ   |dkrVd|kr*| dd\}}t|}nd}t| jj||}|t| jjd d S |S )z
        Callback used as the handler argument to process_docs(). This converts
        Stone doc references to JSDoc-friendly annotations.
        r"   :   N)splitintr   r   r)   len)r   tagvalr*   r7   r#   r#   r$   r,      s    
zJavascriptClientBackend._docf)__name__
__module____qualname____doc___cmdline_parserZcmdline_parserr   Zpreserve_aliasesr%   r   r,   r#   r#   r#   r$   r   =   s   6r   )
__future__r   r   r   r   Z_MYPYtypingZstone.irr   	importlibimport_modulestrr   Zstone.backendr   Zstone.backends.js_helpersr	   r
   r   r   r   r   r   ArgumentParserrD   add_argumentr   r   r#   r#   r#   r$   <module>   sD    