o
    Ղi                     @   s6  d Z ddlZddlmZmZ ddlmZ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
lmZmZ eddgdZG dd de
ZG dd de
Zejdee deefdefddZejdeddeefdedefddZeddddeefdeded ed!edef
d"d#ZdS )$u   数据源管理 API    N)ListOptional)	APIRouterDependsHTTPException)	BaseModel)func)Session)
celery_app)get_db)
DataSourceTaxDocumentz/sourcessources)prefixtagsc                   @   s   e Zd ZU eed< eed< eed< eed< eed< ee ed< eed< eed< ee ed	< g Ze	e
 ed
< dZeed< G dd dZdS )SourceResponseidcodenamesource_typeregion_levelregion_codehas_categories	is_activelast_crawled_at
categoriesr   	doc_countc                   @   s   e Zd ZdZdS )zSourceResponse.ConfigTN)__name__
__module____qualname__from_attributes r!   r!   @/lsinfo/ai/hellotax_ai/data_center/backend/app/api/v1/sources.pyConfig   s    r#   N)r   r   r   int__annotations__strr   boolr   r   dictr   r#   r!   r!   r!   r"   r      s   
 r   c                   @   s   e Zd ZU eed< eed< eed< eed< dZee ed< eed< dZee ed< d	Z	e
ed
< dZee ed< dZeed< dZeed< dZeed< dS )SourceCreater   r   r   r   Nr   adapter_classadapter_configFr   crawl_scheduleg      ?request_delay_ming      @request_delay_max   max_retries)r   r   r   r&   r%   r   r   r+   r(   r   r'   r,   r-   floatr.   r0   r$   r!   r!   r!   r"   r)   #   s   
 r)   /)response_modeldbc                    sd  |  ttjdk }g }|D ]}g }|jr|jdkr:|  tt	j
t	j|j
k p1d}dd|dg}n|jdkr||  t	jtt	j
t	j|j
kt	j }dd	 |D }dd
|ddddd|ddddd|dddg}n{|jdkrddlm} | dd |  tj
tjdtjdk D }	|  t	jtt	j
t	j|	t	j }dd	 |D   fdd D }n*ddlm} | |  t	jtt	j
t	j|j
kt	j }fdd|D }|  tt	j
t	j|j
k pd}
|t|j
|j|j|j|j|j|j|j|jr(|j nd ||
d q|S )NTshenzhenr   local_policyu   地方政策法规库r   r   countgdtaxc                 S      i | ]\}}||qS r!   r!   ).0dtcntr!   r!   r"   
<dictcomp>D       z list_sources.<locals>.<dictcomp>u   地方政策法规	normativeu   规范性文件interpretationu   政策解读chinatax)CategoryProcessorc                 S   s   g | ]\}|qS r!   r!   )r;   sidr!   r!   r"   
<listcomp>M   s    z list_sources.<locals>.<listcomp>z	chinatax%c                 S   r:   r!   r!   r;   cat_idr=   r!   r!   r"   r>   U   r?   c                    s>   g | ]}|d  t ddv r|d  |d  |d  ddqS )r      	   r   r   r7   )rangeget)r;   cat)
cat_countsr!   r"   rE   V   s
    c                    s&   g | ]\}}|r|  ||d qS )r7   )get_category_namerF   )cpr!   r"   rE   a   s
    )r   r   r   r   r   r   r   r   r   r   r   )queryr   filterr   allr   r   r   r8   r   r   	source_idscalardoc_typegroup_byrK   2app.services.tax_data_processor.category_processorrC   likecategory_idin_get_all_categoriesappendr   r   r   r   r   r   	isoformat)r4   r   resultsr   r8   rowstype_countsrC   chinatax_source_idsr   r!   )rM   rO   r"   list_sources2   s   










*
	rc      )r3   status_codedatac                 C   s   | ttj| jk rtdddtdi |  }|| |  |	| t
|j|j|j|j|j|j|j|jd g d
S )Ni  u   数据源 code 已存在detail)
r   r   r   r   r   r   r   r   r   r   r!   )rP   r   rQ   r   firstr   
model_dumpaddcommitrefreshr   r   r   r   r   r   r   r   )rf   r4   sourcer!   r!   r"   create_sourcer   s   

ro   z/{source_id}/triggerfullrS   mode
start_pageend_pagec                 C   sd   | ttj| k }|stdddtt }t	j
d|| |dg||dd || |||dS )	Ni  u   数据源不存在rg   z-app.tasks.processor_tasks.process_source_taskF)rr   rs   )argskwargs)task_idrS   rq   rr   rs   )rP   r   rQ   r   ri   r   r&   uuiduuid4r
   	send_task)rS   rq   rr   rs   r4   rn   rv   r!   r!   r"   trigger_source   s   
rz   ) __doc__rw   typingr   r   fastapir   r   r   pydanticr   
sqlalchemyr   sqlalchemy.ormr	   app.celery_appr
   app.databaser   app.models.tax_datar   r   routerr   r)   rK   rc   postro   r$   r&   rz   r!   r!   r!   r"   <module>   sB    ?