B
    EDb7                 @   s   d dl mZmZmZmZmZ d dlmZ d dlm	Z	m
Z
mZ d dlZd dlZd dlZG dd deZG dd deZG d	d
 d
eZG dd deZeG dd deZdS )    )BaseInterfaceServiceDescriptorBaseRequestHandlerBaseResponseHandlerBaseFaultHandler)expose)type_to_jsontypepytype_supportPORTABLE_STRINGNc               @   s    e Zd ZeZdZdZdd ZdS )JSONWSPServiceDescriptorz1.1zapplication/jsonc             C   s   |j }|j}dd }	||d| ji i d}
|
d }x|D ]}t|tkr6i }|||d < xf|d D ]Z\}}}t|tkr|	|d g}n|	|}| jd	krt|}||d
< |||< q`|||< q`W q6W |
d }x*|D ] }i }d}||jd}||| < x| D ]}tt	g
t|d
 r2|	|d
 d g}n|	|d
 }|||d d||d < d|krv|d ||d  d< ng ||d  d< d|kr|d ||d  d< |d7 }qW tt	g
t|jr|	|jd g}n
|	|j}||jd|d< qW tjd dkrt|
S tj|
|dS )Nc             S   s   | t jkrt j|  S | jS d S )N)r   javascript_type_map__name__)typ r   8G:\easytimepro\master/mysite/ladon\interfaces\jsonwsp.pymap_type   s    

z3JSONWSPServiceDescriptor.generate.<locals>.map_typezjsonwsp/description)servicenameZurltypeversiontypesmethodsr   nameZ
attributesr   z1.0r   r      )Zparams	doc_linesoptional)r   Z	def_orderr   docr   default)r   r   Zret_info   )encoding)	type_dict
type_orderr   r   dictlistZ_method_docr   argstuplecountZ_rtypeZ
_rtype_docsysversion_infojsondumps)selfr   ZservicenumberZtypemanagerZ
methodlistZservice_urlr   r   r    r   Zdescr   r   Z	desc_typekvpropsZdesc_type_valZ
attr_propsr   mZdesc_mparamsorderZdesc_methodargZdesc_param_typeZ
desc_rtyper   r   r   generate   sd    






z!JSONWSPServiceDescriptor.generateN)r   
__module____qualname__r   r   r   _content_typer1   r   r   r   r   r      s   r   c               @   s   e Zd Zdd ZdS )JSONWSPRequestHandlerc             C   s,   dd }dd }t jt|||||d}|S )Nc             S   s   t | S )N)r
   )xr   r   r   parse_number^   s    z9JSONWSPRequestHandler.parse_request.<locals>.parse_numberc             S   s   | dkrt dS t | S )NZnullNone)r
   )r6   r   r   r   parse_constant`   s    z;JSONWSPRequestHandler.parse_request.<locals>.parse_constant)Z	parse_intZparse_floatr9   )r(   loadsr
   )r*   Z	json_bodysinfor   r7   r9   Zreq_dictr   r   r   parse_request]   s    z#JSONWSPRequestHandler.parse_requestN)r   r2   r3   r<   r   r   r   r   r5   [   s   r5   c               @   s    e Zd ZdZdZdZdd ZdS )JSONWSPResponseHandlerzapplication/jsonFz1.0c             C   s8   d|d< | j |d< |d |d< |d= tj|dd|S )Nzjsonwsp/responser   r   method
methodnameF)ensure_ascii)r   r(   r)   encode)r*   Zres_dictr;   r   r   r   r   build_responses   s
    
z%JSONWSPResponseHandler.build_responseN)r   r2   r3   r4   _stringify_res_dictr   rB   r   r   r   r   r=   m   s   r=   c               @   s    e Zd ZdZdZdZdd ZdS )JSONWSPFaultHandlerztext/xmlFz1.0c             C   sj   |j r|j }nt }|ddd}d| j|j|j||j|j	dd}|rV||d< t
j|dd|S )	Nz

zjsonwsp/fault)codestringdetailfilenamelineno)r   r   Zfault
reflectionF)r@   )rH   	traceback
format_excreplacesplitr   Z	faultcodeZfaultstringmodrJ   r(   r)   rA   )r*   Zservice_excr;   r?   r   rK   rH   Z
fault_dictr   r   r   build_fault_response   s    z(JSONWSPFaultHandler.build_fault_responseN)r   r2   r3   r4   rC   r   rQ   r   r   r   r   rD   z   s   rD   c               @   sD   e Zd Zdd Zedd Zedd Zedd Zed	d
 ZdS )JSONWSPInterfacec             K   s,   t tttd}|| tj| |f| d S )N)Zservice_descriptorZrequest_handlerZresponse_handlerZfault_handler)r   r5   r=   rD   updater   __init__)r*   r;   kwZdef_kwr   r   r   rT      s    
zJSONWSPInterface.__init__c               C   s   dS )NZjsonwspr   r   r   r   r   _interface_name   s    z JSONWSPInterface._interface_namec             C   s   t | dkS )Nr   )r	   r%   )r   r   r   r   _accept_basetype   s    z!JSONWSPInterface._accept_basetypec               C   s   dS )NTr   r   r   r   r   _accept_list   s    zJSONWSPInterface._accept_listc               C   s   dS )NFr   r   r   r   r   _accept_dict   s    zJSONWSPInterface._accept_dictN)	r   r2   r3   rT   staticmethodrV   rW   rX   rY   r   r   r   r   rR      s
   	rR   )Zmysite.ladon.interfaces.baser   r   r   r   r   Zmysite.ladon.interfacesr   Zmysite.ladon.compatr   r	   r
   r(   r&   rL   r   r5   r=   rD   rR   r   r   r   r   <module>   s   S