
    E+hW8                     ,   S SK r S SKJrJrJr  SSKJr  S SKrS SKJ	r	  S SK
Jr  S SKJr  SrS	rS
 rS rS SKJrJr  S SKJr  SSKJr  S SK
Jr  S SKJrJr  S SKJr  S SK
Jr  S SKJr  \S 5       rS SK
Jr  \S 5       rS SK
Jr  S SKJrJr  SSKJr  \S 5       rS SK
Jr  S SKJrJr  SSKJr  \S 5       rS SKJr  S rS SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJ r   S SKJr  \S 5       r\S 5       r!S SK"J#r#  S SK$J%r%  S SK&J'r'  S SK
Jr  S SKJr  SSK(J)r)J*r*J+r+J,r,  SS K-J.r.  S! r/\#\%\S" 5       5       5       r0S SK"J#r#  S S#K&J'r'J1r1J2r2  S S$K3J4r4  S SK5r5S SK6r6S SK7r7S SK8r8S S%K9J:r:  \:" \4Rv                  S&9r<\#S' 5       r=g)(    N)renderredirectget_object_or_404   )Projeto)quote)
connection)login_required 3d8dccff4c994354a239d91df4427437z'https://api.open-meteo.com/v1/elevationc                 n    [        U  S35      nSU S[         3n[        R                  " SU 35        [        R
                  " U5      nUR                  S:X  aw  UR                  5       nSU;   aF  [        US   5      S:  a4  US   S   S   S	   n[        R                  " S
U  SU 35        US   US   4$ [        R                  " SU  35         g[        R                  " SUR                   SUR                   35         g! [         a&  n[        R                  " SU  SU 35         S nAgS nAff = f)Nz, Brasilz0https://api.geoapify.com/v1/geocode/search?text=z&apiKey=zURL enviada para Geoapify:    featuresr   geometrycoordinateszCoordenadas obtidas para z: r   u2   Não foram encontradas coordenadas para a cidade: u2   Erro ao acessar a API Geoapify: Código de status . Resposta: zErro ao obter coordenadas para )NN)r   GEOAPIFY_API_KEYlogginginforequestsgetstatus_codejsonlenerrortext	Exception	exception)cidadecidade_formatadaurlresponsedatacoordenadases          "/var/www/html/cag/projeto/views.pyobter_coordenadasr&      s\   K F88!45 AAQ@RRZ[kZlm23%89 <<$ 3&==?D T!c$z*:&;a&?":.q1*=mL8;-PQ"1~{1~55 RSYRZ[\  MMNxOcOcNddpqyq~q~p  A  B
   K;F82aSIJJKs$   B4D 7D 0D 
D4D//D4c           	          [          SU  SU 3n[        R                  " U5      nUR                  S:X  aS  UR	                  5       nSU;   a%  [        US   [        5      (       a  US   S   $ US   $ [        R                  " S5         g[        R                  " SUR                   SUR                   35         g! [         a)  n[        R                  " S	U  S
U SU 35         SnAgSnAff = f)z^
Usa a API Open-Meteo para obter a altitude com base nas coordenadas de latitude e longitude.
z
?latitude=z&longitude=r   	elevationr   u2   Não foi possível obter a elevação da resposta.u4   Erro ao acessar a API Open-Meteo: Código de status r   z,Erro ao obter altitude para as coordenadas (z, z): N)OPEN_METEO_API_URLr   r   r   r   
isinstancelistr   r   r   r   r   )latitude	longituder    r!   r"   r$   s         r%   obter_altituder.   2   s   h#$JxjI;O<<$ 3&==?Dd"/9${:KT/R/RtK(+iX\]hXiiRS  MMPQYQeQePffrs{  tA  tA  sB  C  D
   hH
RTU^T__bcdbefgghs*   A)B; ,B; 1B; 	0B; ;
C.C))C.)r   r   )messagesc                    U R                   S:X  a  U R                  S   nU R                  S   n[        U5      u  p4Ub  Uc  [        U SSS05      $ [	        X45      nU R
                  R                  R                  n[        R                  " U5        [        R                  R                  UUUUUS9n[        S5      $ [        U S	5      $ )
NPOSTnome_projetor   zprojeto/erro.htmlerrou2   Não foi possível obter as coordenadas da cidade.)r2   r   r,   r-   altitudelista_projetoszprojeto/cadastrar_projeto.html)methodr1   r&   r   r.   usertenantschema_namer	   
set_schemar   objectscreater   )requestr2   r   r,   r-   r4   tenant_schemaprojetos           r%   cadastrar_projetor@   T   s    ~~||N3h' 07 y0'#6Au8vww "(6  ++77m, //((% ) 
 ())';<<    c                 0   U R                   R                  (       aO  U R                   R                  (       a4  [        R                  " U R                   R                  R
                  5        [        R                  R                  5       n[        U SSU05      $ )Nprojeto/lista_projetos.htmlprojetos)
r7   is_authenticatedr8   r	   r:   r9   r   r;   allr   )r=   rD   s     r%   r5   r5   x   sb     ||$$)<)<gll11==>""$H'8:x:PQQrA   )r   r   c                 (   U R                   R                  (       aO  U R                   R                  (       a4  [        R                  " U R                   R                  R
                  5        [        [        US9nUR                  5         [        S5      $ )Nidr5   )
r7   rE   r8   r	   r:   r9   r   r   deleter   r=   
projeto_idr?   s      r%   deletar_projetorM      sc     ||$$)<)<gll11==>  J7G NN $%%rA   )r   r   c                    U R                   R                  (       aO  U R                   R                  (       a4  [        R                  " U R                   R                  R
                  5        [        [        US9n[        U SSU05      $ )NrH   zprojeto/detalhes_projeto.htmlr?   )	r7   rE   r8   r	   r:   r9   r   r   r   rK   s      r%   detalhes_projetorO      s`     ||$$)<)<gll11==>  J7G ':Y<PQQrA   r   c                     [        U S5      $ )Nzprojeto/sobre_este_app.htmlrP   r=   s    r%   sobre_este_apprS      s    '899rA   )Session)timezone)get_user_model)cachec                    U R                   R                  (       a4  [        R                  " U R                   R                  R                  5        [
        R                  R                  [        R                  " 5       S9n/ nU GH  n[        R                  " SUR                   35      nU(       d  M0  [        R                  " 5       R                  5       S-
  nXE:  d  M]  UR                  5       R                  S5      nU(       d  M  [        5       n UR                  R                  US9nXR                   :w  a\  UR                  U R                   R                  :X  a5  UR!                  UR"                  UR                  R$                  S.5        GM  GM  GM     [(        R                  R+                  5       n	[-        U SU	US.5      $ ! UR&                   a     GM[  f = f)	N)expire_date__gteuser_activity_i,  _auth_user_idrH   )usernamer8   rC   )rD   currently_online)r7   r8   r	   r:   r9   rT   r;   filterrU   nowrW   r   session_key	timestampget_decodedrV   appendr\   nameDoesNotExistr   rF   r   )
r=   active_sessionsr]   sessionlast_activitytime_thresholduidUserr7   rD   s
             r%   r5   r5      sv   ||gll11==>oo,,hlln,MO"		N73F3F2G"HI=%\\^557#=N-))+//@3)+D!#||//3/7<</DKK7<<CVCV4V,33,0MM*.++*:*:5  5W/ #$ ""$H'8,;  	  ,, ! !s   A>GG G c                     [        U S5      $ )Nz projeto/assistente_grfgraph.htmlrP   rR   s    r%   assistente_grfgraph_viewrm      s    '=>>rA   )csrf_exempt)require_POST)JsonResponse)responder_pergunta_termo_iaresposta_fixa_se_houverresposta_coeficiente_paredebuscar_resposta_rapida)resposta_treinamento_aplicativoc                 P    SR                  S U R                  S5       5       5      $ )u.   Formata texto plano com 

em parágrafos HTML. c              3   J   #    U  H  nS UR                  5        S3v   M     g7f)z<p>z</p>N)strip).0pars     r%   	<genexpr>%formatar_para_html.<locals>.<genexpr>   s!     J6IsST*6Is   !#z

)joinsplit)textos    r%   formatar_para_htmlr      s     77Jekk&6IJJJrA   c                 .   U R                   R                  (       a4  [        R                  " U R                   R                  R                  5        U R
                  R                  S5      nU(       d  [        SS0SS9$ SU R                  ;  a  / U R                  S'   U R                  S   R                  SUS.5        S	U R                  l
         [        U5      nU(       d  [        U5      nU(       d  [        U5      nU(       d  [        X R                  S   5      nU[        :X  a  [!        U5      nU R                  S   R                  SUS.5        S	U R                  l
        [        SU05      $ ! ["         a  nS
[%        U5       3n S nAN\S nAff = f)Nmensagemr3   u   Mensagem não informada.i  )statuschat_historyr7   )rolecontentTz[Erro ao processar mensagem]: 	assistantresposta)r7   r8   r	   r:   r9   r1   r   rp   rg   rc   modifiedrr   rt   rs   rq   ru   r   r   str)r=   r   r   r$   s       r%   chat_assistente_viewr      s[    ||gll11==>||
+HV%?@MMW__,*,'OON#**,   $GOO=*84-h7H28<H27OON<[\H 66)(3H
 OON#**,   $GOOX.//  =3CF8<=s   A#E2 2
F<FF)rp   HttpResponseBadRequestHttpResponse)settings)OpenAI)api_keyc                    U R                   S:w  a  [        S5      $  [        R                  " U R                  5      nUR                  SS5      R                  5       nUR                  SS5      R                  5       nU(       a  U(       d  [        S5      $ [        R                  " SSUS S	 5      nU S[        R                  " 5       R                  S S
  S3nSn[        R                  " USS9  [        R                  R                  Xe5      n[         R"                  R$                  R'                  SSUS9n[)        US5       n	U	R+                  UR,                  5        S S S 5        [/        UR,                  SS9$ ! , (       d  f       N"= f! [0         a*  n
[3        S[5        U
5      5        [        S5      s S n
A
$ S n
A
ff = f)Nr1   u   Método inválido.r   rw   perguntazTexto ou pergunta ausente.z\W+_2      z.mp3z+/var/www/html/cag/projeto/audios_gerados_iaT)exist_okztts-1echo)modelvoiceinputwbz
audio/mpeg)content_typeu   Erro ao gerar áudio:u   Erro ao gerar áudio.)r6   r   r   loadsbodyr   ry   resubuuiduuid4hexosmakedirspathr~   clientaudiospeechr<   openwriter   r   r   printr   )r=   r"   r   r   	nome_basenome_arquivocaminho_pastacaminho_completor!   fr$   s              r%   
tts_openair   b  sw   ~~%&:;; ?zz',,'"%++-88J+113H)*FGG FF63"6	#Adjjl&6&6r&:%;4@ F
MD177<<D <<&&-- . 
 "D)QGGH$$% * H,,<HH *)
  ?%s1v.%&=>>?s=   A8F B.F E< F <
F
F 
GF<6G<G)>r   django.shortcutsr   r   r   modelsr   r   requests.utilsr   	django.dbr	   django.contrib.auth.decoratorsr
   r   r)   r&   r.   django.contribr/   r@   r5   rM   rO   rS   django.contrib.sessions.modelsrT   django.utilsrU   django.contrib.authrV   django.core.cacherW   rm   django.views.decorators.csrfrn   django.views.decorators.httpro   django.httprp   agentrq   rr   rs   rt   respostas_rapidasru   r   r   r   r   django.confr   r   r   r   r   openair   OPENAI_API_KEYr   r    rA   r%   <module>r      s    @ @       9 6 > B0 . #    - #   9= =D !R R ! 8 & &  ! 6 
R 
R $:
 3 ! . 3 ! . 2 ! # . B ? ? 5 5 $   9  @K
 +0   +0B 5 J J    	 	  	//	0$? $?rA   