B
    cb!              
   @   s   d dl mZmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ dd Zd	d
 Zdd Zedd Zdd Zedededed
dededdededdededddgZdS )    )urlinclude)render)csrf_exempt)HttpResponse)global_service_collection)settingsc             C   s<   t  j}dd | D }d}d}||d|d}t| d|S )Nc             S   s   g | ]}|j d r|qS )Z
BioTimeApp)Zservicename
startswith).0x r   +G:\easytimepro\master/mysite/mobile\urls.py
<listcomp>   s    zapi_service.<locals>.<listcomp>zBioTime App InterfaceZHellozutf-8)catalog_namecatalog_desccharsetserviceszservice_list.html)r   r   valuesr   )requestr   Zapp_servicesr   r   Zcatalog_infor   r   r   api_service   s    r   c             C   s<   ddl m} t |}|s d S |d }||}t| d|S )Nr   )get_json_servicezservice_list.html)mysite.mobile.utilsr   r   services_by_namer   )r   service_namer   r   svcZsvc_infor   r   r   service   s    r   c       )   
      s  dd l }dd l}ddlm} ddlm} ddlm} ddlm	}m
}	 ddlm}
m} yl||}|shd S |
| jdd}||||d}|r|jr| jd	s| jd
r|j }| jdddd}d| jd |f }|j||}t||dS | jdkr|j }| j}t|dd}||\}}|r|r|d|||d |}|  x|jsp|  q\W |
|jd d}|j}|r||_|j |d< |j!|d< n| j"}|#||}t$||rt%d| |& }t|' |d}x$|D ]\}}||f|j(|) < qW |S t*|d j+r@t%d| dd l,}|- } t.| d}!|	|!}"|"/|d||f d x.|d j+0 D ]\}#}$|"/|$d|#|$j1 qtW |"2  |!3  t4|5| j6}t.| d|j7d d krd!|"j8 }n |j7d d"krd!t4|"j8d# }t9d$rd% d&|kr"|d&  S tt: fd'd(d|dS nLyt||dS  t;k
r }% zt%d)|% dd l<}&|&=  W d d }%~%X Y nX d|krx(|d 0 D ]\}'}(|>|(d*  qW W n< t;k
r }% zdd l<}&|&=  tt4|%S d }%~%X Y nX d S )+Nr   )name_to_interface)
Dispatcher)CustomResponse)MultiPartReaderMultiPartWriter)get_charsetparse_environzUTF-8)defaultzdescription/descriptionz/description/ z/descriptionzhttp://%s%sZ	HTTP_HOST)content_typeZPOSTZCONTENT_LENGTH0i N  z
wsgi.inputattachmentsattachments_by_idz"[*] CustomResponse  response_part:Zresponse_attachmentsz![*]has attachments,response_part:wbz%s, charset=%szrpc-partzapplication/octet-stramrb   zmultipart/related; boundary=   z
iso-8859-1readi   zwsgi.file_wrapperc                  s
     S )N)r.   r   )
block_sizeoutputr   r   <lambda>y       z interface_view.<locals>.<lambda>zerror:path)?ossysZmysite.ladon.interfacesr   Zmysite.ladon.server.dispatcherr   Z"mysite.ladon.server.customresponser   Z#mysite.ladon.tools.multiparthandlerr   r    r   r!   r"   environZifacer3   endswithZdescription_content_typereplacer$   r   methodZresponse_content_typeintgetencodeZ
read_chunkZeosZinterface_request_headersZinterface_requestZresponse_encodingr(   r)   ZbodyZdispatch_request
isinstanceprintresponse_headersZresponse_dataZ	_iteratorlowerlenZattachments_by_cidtempfileZmktempopenZadd_attachmentitemsZheadersZdoneclosestrstatst_sizeversion_infoboundaryhasattriter	Exception	traceback	print_excunlink))r   r   	interfacer4   r5   r   r   r   r   r    r!   r"   Zis_validr   Z
dispatcherr&   Zsub_urlZiurlZ	m_contentr6   Zcontent_lengthZ	multipartrJ   ZmphZencapsulated_charsetZrequest_dataZresponse_partr?   ZresponsekvrB   Zresponse_temp_fnameZtemp_bufferZmpwZcidaerN   Za_idZa_infor   )r/   r0   r   interface_view&   s    











rV   c             C   s8   t jrtd| t |}|s$dS |d }t| ||S )z
    :param request: wsgi request
    :param service_name: interface class
    :param interface: soap/jsonwsp
    :return:
    z$[*] service_interface services_name:Nr   )r   DEBUGr>   r   r   rV   )r   r   rQ   r   r   r   r   r   service_interface   s    
rX   c             C   s   ddl m} || S )Nr   )generate_app_report)Zmysite.att.viewsrY   )r   Z	app_labelZ
model_namerY   r   r   r   app_report_view   s    rZ   z5^rpc/app/(?P<app_label>[^/]*)/(?P<model_name>[^/]*)/$)viewz^rpc/(?P<service_name>[^/]*)/$)r[   namez1^rpc/(?P<service_name>[^/]*)/(?P<interface>[^/]*)z^rpc/$z^api/zmysite.mobile.api_rest.urlsZ
mobile_api)	namespaceN)Zdjango.conf.urlsr   r   Zdjango.shortcutsr   Zdjango.views.decorators.csrfr   Zdjango.http.responser   Z!mysite.ladon.ladonizer.collectionr   Zdjango.confr   r   r   rV   rX   rZ   Zurlpatternsr   r   r   r   <module>   s   
h
