
    Пjo                         d dl mZ d dlmZmZ d dlmZmZmZm	Z	 d dl
mZ d dlmZ d dlZd dlZ ee      j"                  Z e eedz              Z eej*                  	      Zej/                  d
      d        ZdefdZdddddddededededef
dZdFdedededededefdZej9                  de      dFdedededededefd       Zej9                  de      dFdedededededefd       Zej9                  de      ded efd!       Z ej9                  d"      d#        Z!ej9                  d$e      	 	 	 	 	 	 	 dGdeded%ed&ed'ed(ed)ed*efd+       Z"ejG                  d,      d-        Z$ej9                  d.      d/        Z%ejG                  d0      d efd1       Z&ej9                  d2e      	 	 	 	 	 	 	 dGdeded3ed4ed5ed6ed7ed8efd9       Z'ej9                  d:e      ded;efd<       Z(ejG                  d=       e	d       e	d       e	d       e	d       e	d       e	d       e	d      fd;ed3ed4ed>ed?ed@edAedBefdC       Z)ej9                  dDe      defdE       Z*y)H    )Path)unquote_plus	urlencode)FastAPIRequestHTTPExceptionForm)HTMLResponse)Jinja2TemplatesN	templates)	directory)titlestartupc                  ,    t        j                          y N)dbinit_db     app.py
on_startupr      s    JJLr   limitc                     | xs dj                         j                         }|dv rt        j                  dfS 	 t	        |      }|dvrd}|t        |      fS # t
        $ r d}Y  w xY w)N50>   allalleallesr   2   )r   d   )striplowerr   MAX_RESULTSint
ValueErrorstr)r   rawvalues      r   _parse_limitr(      sw    =D


!
'
'
)C
&&~~u$$C I#e*	  s   A A&%A& scorer   yes)qtagsortr   exclude_customer_projectsr,   r-   r.   r/   c                 h    i }| r| |d<   |r||d<   |r||d<   |r||d<   |r||d<   dt        |      z   S )Nr,   r-   r.   r   r/   z/?)r   )r,   r-   r.   r   r/   paramss         r   _build_search_urlr2   #   sU    Fs
uvw .G*+)F###r   requestc                    g }t        |xs d      j                         }t        |xs d      j                         }|xs dj                         j                         }t        |      \  }}||g ddg d||dd|ddd}	|xs dj                         j                         dv}
|r,t	        j
                  |||||
      \  }}	||	d	<   ||	d
<   ||	d<   t        j                  | dt        j                  t        j                  t	        j                         t	        j                         t	        j                         |||	j                  d|      ||	|	j                  d	|      |	j                  d|      t        |
rdd      S dd      S )Nr)   r*   r   F)query
active_tagexpanded_termstotal_countshown_countper_term_countshas_morer   limit_paramtotal_matchesreturned_countr.   narrow_countbroad_countr+   >   0nofalse)r-   r   r.   r/   r.   r6   r<   z
index.htmlactive_tag_labelrB   )	app_titleapp_taglinesource_count
item_countlast_importr5   
tag_filtertag_filter_labelresultssearch_infor.   r<   build_search_urlr/   )r   r    r!   r(   r   search_videosr   TemplateResponseconfig	APP_TITLEAPP_TAGLINEcount_sourcescount_itemsget_last_import_statsgetr2   )r3   r,   r-   r.   r   r/   rL   limit_valuer<   rM   exclude_processeds              r   _render_search_pagerZ   2   s   GQW"##%A
syb
!
'
'
)COG""$**,D+E2KSBWXij  @B  PU  `k  |G  Z[  op  z~  PQ  bc  dK2;eBBDJJLThh!//s+TX  uF   G"F$'L!%0M"%%g|%%))((*nn&//1'OO,>D"-"}kB-.?U>   FJ>  r   /)response_classc                 "    t        | |||||      S r   rZ   r3   r,   r-   r.   r   r/   s         r   indexr`   Q       w3e=VWWr   z/searchc                 "    t        | |||||      S r   r^   r_   s         r   searchrc   V   ra   r   z/videos/{source_id}	source_idc                     t        j                  |      }|t        dd      t        j	                  | dt
        j                  |d      S )N  zVideo nicht gefundenstatus_codedetailzvideo_detail.html)rE   source)r   
get_sourcer   r   rP   rQ   rR   )r3   rd   rj   s      r   video_detail_pagerl   [   sM    ]]9%F~4JKK%%g/B%%E  r   z/healthc                      dddS )Nokzcontent-extraction)statusappr   r   r   r   healthrq   f   s    #788r   z/sourceschannellanguagetranscript_statusis_high_valuehas_artifact_pathhas_itemc                     |||||||d}t        j                  |      \  }	}
t        j                         }t        j	                  | dt
        j                  |	|
t         j                  ||d   |d   |d   d      S )N)r,   rr   rs   rt   ru   rv   rw   zsources.htmlchannels	languagestranscript_statuses)rE   sourcestotalmax_resultsfiltersry   rz   r{   )r   list_sourcesget_distinct_source_valuesr   rP   rQ   rR   r"   )r3   r,   rr   rs   rt   ru   rv   rw   r   r|   r}   	dropdownss               r   sources_pager   k   s     7..HG
 __W-NGU--/I%%g~%%~~j){+()>?	@ 	 	r   z/admin/import-sourcesc                  2    t        j                         } d| iS )zManuell angestossener, read-only Import aus YouTube Research.
    Keine automatische Ausfuehrung -- nur ueber diesen Endpunkt/Button.import)r   $import_sources_from_youtube_research)statss    r   admin_import_sourcesr      s     335Eer   z/admin/import-statusc                  .    dt        j                         iS )NrI   )r   rV   r   r   r   admin_import_statusr      s    233566r   z /sources/{source_id}/create-itemc                 Z    t        j                  |       \  }}|t        dd      ||dS )Nrf   zQuelle nicht gefundenrg   )itemcreated)r   create_item_from_sourcer   )rd   r   r   s      r   create_itemr      s4    ..y9MD'|4KLLW--r   z/itemscontent_typero   imitation_scoreeffortfeasibilityexpected_valuec                     |||||||d}t        j                  |      \  }	}
t        j                  | dt        j
                  |	|
t         j                  |t         j                  t         j                  d      S )N)r,   r   ro   r   r   r   r   z
items.html)rE   itemsr}   r~   r   content_typesstatus_values)	r   
list_itemsr   rP   rQ   rR   r"   CONTENT_TYPESSTATUS_VALUES)r3   r,   r   ro   r   r   r   r   r   r   r}   s              r   
items_pager      sw     *f"nG
 ==)LE5%%g|%%~~))))>  r   z/items/{item_id}item_idc           
          t        j                  |      }|t        dd      t        j	                  | dt
        j                  |t         j                  t         j                  t         j                  d      S )Nrf   Kandidat nicht gefundenrg   zitem_detail.html)rE   r   r   r   level_values)
r   get_item_detailr   r   rP   rQ   rR   r   r   LEVEL_VALUES)r3   r   r   s      r   item_detail_pager      sh    g&D|4MNN%%g/A%%))))D  r   z/items/{item_id}/ratingnachahmbarkeitaufwandumsetzbarkeiterwarteter_nutzen	rationalec                     	 t        j                  | |xs d |xs d ||xs d |xs d |xs d |xs d       }|t        dd      d|iS # t        $ r}	t        dt	        |	            d }	~	ww xY w)N)r   ro   r   r   r   r   r   i  rg   rf   r   r   )r   save_item_ratingr$   r   r%   )
r   r   ro   r   r   r   r   r   r   excs
             r   save_ratingr      s    >""%->T)Ot'/4/74'4	
 |4MNND>	  >CH==>s   5A
 
	A.A))A.z/matrixc                 v    t         j                  | dt        j                  t	        j
                         d      S )zRead-only Auswertungsansicht ueber vorhandene ce_items/ce_ratings.
    Erzeugt keine neuen Daten, keine automatische Bewertung.zmatrix.html)rE   rows)r   rP   rQ   rR   r   list_content_matrix)r3   s    r   matrix_pager      s5     %%g}%%&&(?  r   )r)   r)   r*   r   r+   )r)   r)   r)   r)   r)   r)   r)   )+pathlibr   urllib.parser   r   fastapir   r   r   r	   fastapi.responsesr
   fastapi.templatingr   rQ   r   __file__parentBASE_DIRr%   r   rR   rp   on_eventr   r(   r2   rZ   rW   r`   rc   r#   rl   rq   r   postr   r   r   r   r   r   r   r   r   r   <module>r      s@    0 9 9 * .  	>  c([*@&AB	F$$% i 
 
 #%W[  D $C $3 $3 $QT $x{ $ S C C be   JM > \*X7 Xs Xc Xc XTW X{~ X +X <0XG X Xs Xs XUX X| X 1X 	|<w 3  = 9 9 L1 
  	
     2: 
!" # 	 7 !7 
,-.3 . .. ,/ 
  	
     06 	L9
g 
 
 :
 
#$ T
t*t*:d!$Z$Z  	
     %8 <0  1r   