o
    li                     @   s`   d dl mZ d dlmZmZmZ d dlmZmZ d dl	Z	d dl
Z
d dl mZ dd Zdd ZdS )	    )request)jwt_requiredget_jwt_identitycurrent_user)successerrorNc                 C   s   |  t dr d  } t|pdS    r- dkr-\}}t| dkr.t|tr.t||S  	 t| t r>td td| iS t| S )N r   u   操作失败   u   返回的不是对象message)strr   len
isinstanceintprintr   )datamsgcoder   r   /var/www/my_crm/app/routes.pysmart_response	   s   (

r   c                    sX   t d t dt| jd  ddi i fdd| jdd	d
gd fdd}d S )Nu   注册路由zJSON_AS_ASCII=JSON_AS_ASCIIorg_type)z app.modules.hr.org_type_servicesorg_type_servicesc              
      s   |  d| }| vrrzt | }t||}|  |< W  | S  ty< } ztd|  d|  W Y d}~dS d}~w tyX } ztd| d|  W Y d}~dS d}~w tyq } ztd|  W Y d}~dS d}~ww  | S )u'   动态导入模块并获取服务实例.u   导入模块失败: u
   , 错误: Nu   模块中找不到类: u   创建服务实例失败: )	importlibimport_modulegetattrImportErrorr   AttributeError	Exception)module_name
class_name	cache_keymoduleservice_classe)_module_cacher   r   get_service_instance!   s*   

z1register_all_routes.<locals>.get_service_instancez/<path:path>POSTGET)methodsc              
      s  |  dd}t|dk rtdS |d }|d }td|   td|  td|  |vrHt }td	| d
d| dfS | \}}||  du ratd	| ddfS t |s fddt	 D }td| dd| dfS t
 |}z|tjtj}	t|	W S  ty }
 z%td| dt|
  ddl}|  tdt|
 dfW  Y d}
~
S d}
~
ww )u   
        处理所有路由请求
        path参数会捕获完整的URI路径
        例如: /org_type/index -> path = 'org_type/index'
        /r	   )u4   网址格式错误，请使用: /服务名/方法名  r      u   请求路径: u   服务名: u   方法名: u   服务 u    不存在，可用服务: z, r+   Nu    初始化失败i  c                    s(   g | ]}| d stt |r|qS )_)
startswithcallabler   ).0mservicer   r   
<listcomp>b   s
    
zBregister_all_routes.<locals>.handle_all_routes.<locals>.<listcomp>u   方法 u    不存在，可用方法: u   调用方法 u    时出错: u   服务器内部错误: )stripsplitr   r   r   listkeysjoinhasattrdirr   r   formargsr   r   	traceback	print_exc)pathpartsservice_keymethod_nameavailable_servicesr   r    available_methodsmethodresultr$   r>   )SERVICE_MODULESr&   r2   r   handle_all_routes;   s:   	



"z.register_all_routes.<locals>.handle_all_routes)r   r   configroute)apprI   r   )rH   r%   r&   r   register_all_routes   s   rM   )flaskr   flask_jwt_extendedr   r   r   app.utils.responser   r   r   sysr   rM   r   r   r   r   <module>   s    