
    =>gn                         d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlm	Z	 d dl
mZ d dlmZmZ ddZd Zd Zdd
Zd Zd Zd Zd Zd Zd ZddZddZd Zd Zd Zd Zd Zd Z d Z!dS )     N)service_account)Request)webpushWebPushExceptionFc                   K   |                     d           d {V }|                     d           d {V }|du rr|                    ddd           d {V }t          j        |                              d          }||                                 d {V |j        ||j        ||d	}n|}||d
}t          | |           d {V  d S )Nz%document.documentElement.scrollHeightzwindow.innerWidthFjpeg   T)typequality	full_pageutf-8)tab_idtitleurl
screenshotviewport_sizetotal_heighttotal_width)r   r   )	evaluater   base64	b64encodedecoder   r   r   send_websocket_message)		websocketpager   base64Existsr   viewport_widthscreenshot_bytesscreenshot_base64	data_sends	            O/var/www/wsoft.com.mx/carteraplus-automatizador/python/servicesgmm/gmm_utils.pysend_screenshotr"   
   s,     }}%LMMMMMMMM,':;;;;;;;;.U!__&"PT_UUUUUUUU()9::AA'JJ ZZ\\!!!!!!X%)"# II %% I
 	y)44444444444    c                    K   	 |                      t          j        |                     d{V  dS # t          $ r}t	          d|            Y d}~dS d}~ww xY w)u   
  Enviar un mensaje JSON por el WebSocket. 

  :param websocket: Conexión WebSocket
  :param message_data: Diccionario con los datos a enviar
  Nz#Error al enviar mensaje WebSocket: )sendjsondumps	Exceptionprint)r   message_dataes      r!   r   r   %   s      5
..L11
2
2222222222	 5 5 5	
3
3
34444444445s   -3 
AAAc                 t  K   	 |                      |          }|                                 d {V r|                    |           d {V  n#t          |d|d| d| dd           d {V  dS nE# t          $ r8}t          |d|d| dt          |           d           d {V  Y d }~dS d }~ww xY wdS )	Nerror(z) - El input con placeholder 'u$   ' no está disponible en la página.)r
   r   r-   Fz,) - Error al intentar escribir en el campo: T)get_by_placeholder
is_visiblefillr   r(   str)r   placeholdervaluer   r   input_elementr+   s          r!   write_inputr6   2   se     ++K88M%%'''''''' 
u%%%%%%%%%% #9lVll;lll/ / 	 	 	 	 	 	 	 	 	
 U & 
   
 O6OOs1vvOO- -         
 55555 
s   A,A3 3
B5=-B00B5  c                 8  K   	 t          j        |           d {V  | |vrt          d| j                    d S | |v r\||          d                                         D ]\  }}|                                 d {V   || = t          d| j                    d S )NTz+WebSocket inactivo, cerrando recursos para contextszRecursos liberados para )asynciosleepr)   remote_addressitemsclose)r   clients_contextstimeoutr   contexts        r!   check_inactividadrB   L   s      
-
 
         (((T):RTTUUUe $$$-i8DJJLL  /&'mmoo 9
%Ay'?AABBBe#r#   c                    K   	 t          j        d           d {V  t          j                                                    }||                     |d          z
  dk    rt          |||           d {V  d S v)NTg?r   g?)r:   r;   get_event_looptimegetr"   )last_input_timer   r   r   nows        r!   monitor_screenshotrI   a   s      
-



 
"
"
'
'
)
)C _  +++s22ItV444444444er#   c                    K   	 |                      d|          }|                    d           d {V }|d S |                                 d {V  t          j        d           d {V  k)NTbuttonnamedisabled   )get_by_roleget_attributeclickr:   r;   )r   
aria_labelelementois_disableds       r!   click_until_disabledrV   k   s       z::H !..z::::::::Ke NN -

!r#   c                 |  K   ddddddddd	d
ddd}||vrt          d| d           d S |dk    rd|                     d          j                                         d {V  t	          j        d           d {V  t          | d           d {V  n	|                     d                              d          j                                         d {V  t	          j        d           d {V  |                     dd          	                    d           d {V  t	          j        d           d {V  |                     dd          	                    d           d {V  t	          j        d           d {V  t          | d           d {V  t	          j        d           d {V  d}d}| 
                    d          }||k     r	 |
                    d|                                            d {V }	|	dk    rVd| d | d!}|
                    |          j                                         d {V  t	          j        d           d {V  nj|                     d"                                           d {V  t	          j        d           d {V  |dz  }n# t          $ r
}
Y d }
~
nd }
~
ww xY w||k     ||k    rd S ||         }	 |
                    d|                                            d {V }|dk    rVd| d | d!}|
                    |          j                                         d {V  t	          j        d           d {V  nd S n-# t          $ r }
t          d#| d$|
            Y d }
~
d S d }
~
ww xY w	 |
                    d|                                            d {V }|dk    r=d| d | d!}|
                    |          j                                         d {V  d S d S # t          $ r }
t          d%| d$|
            Y d }
~
d S d }
~
ww xY w)&NzENE.zFEB.zMAR.zABR.zMAY.zJUN.zJUL.zAGO.zSEP.zOCT.zNOV.zDIC.)rO                        	   
         zError: el mes u    no es válido.titularzOpen calendarrO   zNext 24 yearszAgregar AseguradozFecha de NacimientotextboxrL   TabrK   Enterr   rZ   z[id^='mat-datepicker-']ztext=zCspan.mat-calendar-body-cell-content.mat-focus-indicator:has-text(' zG '), span.mat-calendar-body-cell-content.mat-focus-indicator:has-text('z')zPrevious 24 yearsz%Error al intentar seleccionar el mes z: u&   Error al intentar seleccionar el día )r)   get_by_labelfirstrR   r:   r;   rV   get_by_textrP   presslocatorcountr(   )r   tipoanio_deseadomes_deseadodia_deseadomesesintentosmax_intentosdatepicker_container
anio_countr+   	mes_texto	mes_countmes_selector	dia_countdia_selectors                   r!   seleccionar_fechar{      s*      &V6f&VV % 	
7;
7
7
7888
F 
Y


O
,
,
2
8
8
:
::::::::
-


t_
5
555555555


/
0
0
<
<=R
S
S
Y
_
_
a
aaaaaaaa
-




9+@

A
A
G
G
N
NNNNNNNN
-




8/

:
:
@
@
I
IIIIIIII
-


t_
5
55555555a(,&?@@<-556Ll6L6LMMSSUUUUUUUUj	a C]i  C  C  s  C  C  C"**<88>DDFFFFFFFFFmA  344::<<<<<<<<<mAA   eeee+ 	<4 
F K )*223F93F3FGGMMOOOOOOOOI1}} {[d  {  {  nw  {  {  {l ((66<BBDDDDDDDDD M! f	 
 
   	
B)
B
Bq
B
BCCC
FFFFF
*223H;3H3HIIOOQQQQQQQQI1}} [f      p{      l !((66<BBDDDDDDDDDDD f	   	
E;
E
E!
E
EFFF
FFFFFsL   BJ1 $AJ1 1
K KBM. .
N8NNA1P 
P;P66P;c                 :  K   	 |dk    r|                      |                                           d {V }|dk    r0|                      |                              |           d {V  net          |dd| d| d| d|d           d {V  d	S |d
k    r|                     |                                           d {V }|dk    r/|                     |                              |           d {V  nt          |dd| d| d| d|d           d {V  d	S |dk    r|                     |                                           d {V }|dk    r/|                     |                              |           d {V  nIt          |dd| d| d| d|d           d {V  d	S t          |dd| d| d|d           d {V  d	S nH# t          $ r;}t          |dd| d| dt          |           |d           d {V  Y d }~d	S d }~ww xY wdS )Ntest_idr   r-   r.   ) - Campo '' tipo test_id '' no disponibler
   messager   Fr3   ' tipo placeholder 'label' tipo label ') - Tipo de identificador '' no soportado') - Error al intentar llenar el campo '': T)get_by_test_idrl   r1   r   r/   rg   r(   r2   )	r   identifier_typeidentifier_textr4   r   r   
field_nameelement_countr+   s	            r!   valida_escritura_loginr      s     /)## //@@FFHHHHHHHHm			!!/2277>>>>>>>>>>$YhhhJhhhhh1 1   	 	 	 	 	 	 	
 u	M	)	) 33ODDJJLLLLLLLLm			%%o66;;EBBBBBBBBBB$YlllJllOlll1 1   	 	 	 	 	 	 	
 u	G	#	# --o>>DDFFFFFFFFm			0055e<<<<<<<<<<$YfffJffofff1 1   	 	 	 	 	 	 	
 u"9YvYY/YYY/
 /
         
 U	   
 [V[[J[[SVWXSYSY[[- - 	 	 	 	 	 	 	 	 	
 55555 
s,   BG BG !BG /!G 
H0HHc                 x  K   	 t          d | j        D             d           }|dk    r|                    |                                           d {V }|dk    r0|                    |                              |           d {V  net          |dd| d| d| d|d	           d {V  d
S |dk    r|                    |                                           d {V }|dk    r/|                    |                              |           d {V  nt          |dd| d| d| d|d	           d {V  d
S |dk    r|                    |                                           d {V }|dk    r/|                    |                              |           d {V  nIt          |dd| d| d| d|d	           d {V  d
S t          |dd| d| d|d	           d {V  d
S nH# t          $ r;}	t          |dd| d| dt          |	           |d	           d {V  Y d }	~	d
S d }	~	ww xY wdS )Nc              3   0   K   | ]}|j         d k    |V  dS inlineFrameExampleNrL   .0fs     r!   	<genexpr>z'valida_escritura_gnp.<locals>.<genexpr>  s/      KKAF6J,J,J!,J,J,J,JKKr#   r}   r   r-   r.   r~   r   r   r   Fr3   r   r   r   r   r   r   r   T)
nextframesr   rl   r1   r   r/   rg   r(   r2   )
r   r   r   r4   r   r   r   framer   r+   s
             r!   valida_escritura_gnpr     s     0KKT[KKKTRRE)##!00AAGGIIIIIIIIm			""?3388??????????$YhhhJhhhhh1 1   	 	 	 	 	 	 	
 u	M	)	)!44_EEKKMMMMMMMMm			&&77<<UCCCCCCCCCC$YlllJllOlll1 1   	 	 	 	 	 	 	
 u	G	#	#!..??EEGGGGGGGGm			  1166u==========$YfffJffofff1 1   	 	 	 	 	 	 	
 u"9YvYY/YYY/
 /
         
 U	   
 [V[[J[[SVWXSYSY[[- - 	 	 	 	 	 	 	 	 	
 55555 
s,   B,G2 2BG2  BG2 !G2 2
H7<0H22H7c                    i ddddddddd	d
dddddddddddddddddddddd d!d"i d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDi dEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfi dgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~ddddddddddi dddddddddddddddddddddddddddddddddddddddddddddd}|                     |                                 d          S )NNINGUNAz0,0,
ABARROTEROz1,0,ABOGADOz2,0,zACTOR(NO EXTRAS DOBLAJE/CIRCO)z3,0,zACTOR DE CIRCOz4,0,zACTOR EXTRAS EN DOBLAJEz5,25,ACTUARIOz6,0,zADUANA FRONTERIZA(PERSONAL DE)z7,25,zADUANA NO FRONTERIZA(PERS.DE)z8,15,zAGENTE DE COMPRAS,VTAS,VIAJESz9,0,zAGENTE DE SEGUROS Y FIANZASz10,0,
AGRICULTORz11,0,zAJUSTADOR DE SEGUROSz12,0,u   ALBAÑILz13,15,ALFAREROz14,0,ALIJADORz15,25,zAMA DE CASAz17,0,ANESTESIOLOGOz18,0,zANUNCIOS(OBREROS EN TALER/EXT)z19,50,	APICULTORz20,15,
ARQUEOLOGOz21,0,
ARQUITECTOz22,0,ARTESANOz23,0,	ASTILLEROz24,15,	AVICULTORz26,0,BACTERIOLOGOz27,25,BANQUEROz28,0,BIOLOGOz29,0,BOMBEROz30,25,BOTANICOz31,0,zCAJERO/TESOREROz32,0,zCALDERAS (PERSONAL EN GRAL)z33,0,	CANTINEROz34,15,zCARGADOR (TODO TIPO)z35,15,
CARPINTEROz36,15,CARTEROz37,15,	CERRAJEROz38,0,zCHOFER (TODO TIPO)z39,25,COBRADORz40,15,COCINEROz41,0,zCOMERCIANTE (DE ANIMALES DOME)z42,15,zCOMERCIANTE (DE CARNICERIAS)z43,15,zCOMERCIANTE (DE FIERRO VIEJO)z44,15,zCOMERCIANTE (DE MAT. DE CONST)z45,15,zCOMERCIANTE (OTROS)z46,0,CONTADORz47,0,CONTRATISTAz48,0,zCORREDOR DE APUESTAS (TODOS)z49,0,DENTISTAz50,0,zDETECTIVE PRIVADOz51,15,DIPLOMATICOz52,25,zDOMADOR DE ANIMALESz53,0,ELECTRICISTAz54,15,zEMPLEADO ADMINISTRATIVOz55,0,zEMPLEADO DE LIMPIEZAz56,0,zEMPLEADO DOMESTICOz57,0,	ENFERMERAz58,0,ESCRITORz59,0,	ESTIBADORz60,15,
ESTUDIANTEz61,0,
EXPLORADORz62,0,zEXTERMINADOR DE PLAGASz64,25,zFAB. DE ARMAS DE FUEGO LAB/OFIz68,0,zFAB. DE ARMAS DE FUEGO S/MAQz69,25,zFAB. DE ARMAS DE FUEGO C/MAQz70,0,zFABRICA DE VIDRIOS LAB/OFICINAz71,0,zFABRICA DE VIDRIOS LAB/SUPERV.z72,25,zFABRICA DE VIDRIOS RESTO PERS.z73,0,FERROCARRILEROz74,15,FISIOTERAPEUTICAz75,0,FOGONEROz76,25,	FONTANEROz77,15,zFOTOGRAFO EN GENERALz78,0,	FUMIGADORz79,25,zFUNCIONARIO PUBLICOz80,25,FUNDIDORz81,25,zGANADERIA (EMPLEADO DE)z82,25,zGANADERIA (PROPIETARIO/ADMIST)z83,0,zGASOLINA,EXPENDIO DE(PERSONAL)z84,0,GEOLOGOz85,0,zGUARDA FORESTALz86,0,GUARDABOSQUEz87,0,GUARDIAz88,25,zGUIA DE TURISTASz89,0,u   GUIA DE MONTAÑAz90,25,z91,15,z92,15,z93,0,z94,15,z95,0,z96,25,z97,0,z98,0,z99,15,z100,0,z101,5,)HERRERO
HOJALATEROzINGENIERO EN OFICINAzINGENIERO EN SUPERVISIONzINSTALADOR DE ANTENASzINSTRUCTOR DE MANEJOJOYEROJUBILADOLANCHEROzLICENCIADO EN ADM. DE EMPRESASzLIDER SINDICALu   Ocupación no encontrada)rF   upper)	ocupacionocupacioness     r!   obtener_valor_ocupacion_mapfrer   O  sL   ava&a va %f	a
 fa wa a %ga $Wa $Va "7a 'a Ga a a  !a" 7#a a$ W%a& %h'a( )a* '+a, '-a. /a0 1a2 3a4 H5a6 7a8 w9a: x;a< =a> w?a@ "7AaB CaD HEa a aF (GaH xIaJ KaL (MaN OaP QaR %hSaT #HUaV $XWaX %hYaZ 7[a\ ]a^ 7_a` #Gaab cad eaf 8ga a ah 7iaj Hkal wman Goap 'qar sat uav wax 'yaz '{a| h}a~ %ga@ #HAaB #GCaD %gEaF %hGaH %gIa a aJ hKaL MaN OaP QaR GSaT UaV 8WaX YaZ x[a\ %g]a^ %g_a` waab wcad Geaf xgah iaj ka al # ($$&.Aa a a+D 
**,F	G	GGr#   Tc                 d  K   |                      d| d           d {V }|r6|du r0t          |d|d| d|d          d|d	          d
d           d {V  d S |                      d| d|d	          d           d {V }|d         r-|d         s%|                     ||d	                    d {V  d S t          |dd||d         |d         |d         dd |d         D             dd           d {V  |du r2t          |d|d| d|d	          d|d          d
d           d {V  d S d S )Nz:
    () => {
      const select = document.querySelector("z*");
      return select.disabled;
    }
  Tr-   r.   z) - El select "r   u<   " está deshabilitado y no se puede seleccionar la opción "valor".r
   r   r   z");
      const optionsArray = [];
      for (let option of select.options) {
        optionsArray.push({
          text: option.text.trim(),
          disabled: option.disabled
        });
        if (option.text.trim() === "z") {
          return { existe: true, disabled: option.disabled, options: optionsArray };
        }
      }
      return { existe: false, options: optionsArray };
    }
  existerN   )r   cambios_paginaupdateaseguradora
id_paquetenombre c                     g | ]
}|d          S text r   ops     r!   
<listcomp>z5seleccionar_opcion_con_validacion.<locals>.<listcomp>      ===BRZ===r#   optionsr   opciones)r
   subtyper   r   r   nombreCamponewDataFrom   ) - Opción "*   " no encontrada o está deshabilitada en ")r   r   select_option)	r   r   r   	form_dataselectorcampo	notificarselect_disabledr   s	            r!   !seleccionar_opcion_con_validacionr     s     -- ).6) ) )        /  D"9 Mv  M  MeGn  M  Mz  AH  {I  M  M  M/ / 	 	 	 	 	 	 	 	 	
 F -- !.6! ! &+7^! ! !        '$ X 	wz2 	


XU7^

<
<<<<<<<<<< !}-l+8_==')*<=== - -          D"9xvxxE'Nxxfklsftxxx/ / 	 	 	 	 	 	 	 	 	 	 	 r#   r   c                   K   t          d | j        D             d           }|                    d| d           d {V }	|	s+|r't          |d|d| d|d          dd	           d {V  d S |                    d| d
|d          d           d {V }
|
d         rX|
d         sP|                    |                               |d         d          j                                         d {V  d S 	 t          |dd|d||d         |d         |d         dd |
d         D             dd	           d {V  |r2t          |d|d| d|d          d|d          dd	           d {V  d S d S )Nc              3   0   K   | ]}|j         d k    |V  dS r   rL   r   s     r!   r   z@seleccionar_opcion_desde_lista_con_validacion.<locals>.<genexpr>  s/      IIa!&4H*H*H*H*H*H*HIIr#   z=
    () => {
      const container = document.querySelector("z-");
      return container !== null;
    }
  r-   r.   z) - El contenedor de opciones r   u    no está visible.r   ai  ");
      const optionsArray = [];
      const listItems = container.querySelectorAll("li[role='option']");
      for (let li of listItems) {
        optionsArray.push({
          text: li.textContent.trim(),
          disabled: li.getAttribute('aria-disabled') === 'true',
          id: li.getAttribute('id')
        });
        if (li.textContent.trim() === "r   z") {
          return { existe: true, disabled: li.getAttribute('aria-disabled') === 'true', options: optionsArray };
        }
      }
      return { existe: false, options: optionsArray };
    }
  r   rN   F)exactr   r   kanbanr   r   r   r   c                     g | ]
}|d          S r   r   r   s     r!   r   zAseleccionar_opcion_desde_lista_con_validacion.<locals>.<listcomp>=  r   r#   r   r   )	r
   r   r   displayindicer   r   r   r   r   r   r   )r   r   r   r   rk   ri   rh   rR   )r   r   r   r   r   r   r   r   r   container_visibler   s              r!   -seleccionar_opcion_desde_lista_con_validacionr     s     
II4;III4
P
P%!NN ,19, , ,         
 	  	"9_v__U7^___/ / 	 	 	 	 	 	 	 	 	
 F .. "19" " ).g" " "        '* X %	wz2 %	 --8
&
&
2
25>
2
O
O
U
[
[
]
]]]]]]]]]]
 !}-l+8_==')*<=== - -           	"9xvxxE'Nxxfklsftxxx/ / 	 	 	 	 	 	 	 	 	 	 		 	r#   c                   K   t           j                            d          }t          j        d| i          }ddi}|                    dd||           |                                }|                                }t          j        |	                    d                    }|d         d	         d
         
                    d          }|d         d	         |fS )Nzwsdl.segurocotizas.comcpContent-Typeapplication/jsonPOSTz/?opt=getLocalizacionr   listr   c_estado0)httpclientHTTPSConnectionr&   r'   requestgetresponsereadloadsr   lstrip)r   connpayloadheadersresdataresponse_dataestados           r!   obtenerDatosPorCodigoPostalr  I  s      		$	$%=	>	>$J"  ' &' ,,v.AAA#	$*T[[1122- #J/66s;;&	v	q	!6	))r#   c                  2    t          j                    j        S )N)uuiduuid4hexr   r#   r!   uniqidr  X  s    		r#   c                   K   d}|}d}d}d}d| v rd}d}nd| v rd	}d
}nd| v rd}d}d}d| d}d| dd}	d|d|ddidd| |ddgdddddd|dgdgd d!}
t          j        ||	t          j        |
          "          }|j        d#k    r1t          d$           t          |                                           n8t          d%|j                    t          |                                           d&S )'NEAAWhhs2smdABAPQX3F73c0R9gXNPIpQPywEKrdFg7jvwp1DXfoZAFstTnR8SXSElQZAm2S3eMssv3T6kMWFBFfUZBZAviqV71OffnBxSI2ztwEQMSlj9ll44zBEdJuXsgQJpOZCxDAto620ZAWbVEsmhagmCPCHCa9HvnE1tfIarOWbHDrGAMVuXkcpvYrk5qQoLPrDtXsKwZDZDgmm_recibo_impresou   Cotización.pdfDemo_axa_u   Cotización AXA.pdfzAXA Seguros_gnp_u   Cotización GNP.pdfzGNP Seguros_mapfre_u   Cotización Mapfre.pdfzMapfre Seguros109344535157512z!https://graph.facebook.com/v21.0/z	/messagesBearer r   Authorizationr   whatsapptemplatecodees_MXheaderdocument)linkfilename)r
   r*  )r
   
parametersbodyr   )r
   r   )rM   language
components)messaging_producttor
   r&  r  r     zMensaje enviado exitosamente.zError al enviar mensaje: ok)requestspostr&   r'   status_coder)   )enlace_documentophone	api_tokennumero_destinatarioplantilla_idnombre_documentor   telefono_remitenter   r  r  responses               r!   enviarMensajePlantillarA  [  s      b)., '+   ,KK""",KK%%%/"K+[>P[[[# +y**& ' $

  !(,  	
 	
    ! 		
 	
! !	&
 &
$P ]3dj6F6FGGG(S  	
)***	(--//	
<h&:
<
<===	(--//	r#   c                      dg} t           j                            d|           }t                      }|                    |           |j        S )zbRetrieve a valid access token that can be used to authorize requests.

  :return: Access token.
  z2https://www.googleapis.com/auth/firebase.messagingz5gmm-pwa-a8293-firebase-adminsdk-50cgd-0b4f167615.json)scopes)r   Credentialsfrom_service_account_filer   refreshtoken)SCOPEScredentialsr  s      r!   _get_access_token_fcmrJ    sX    
 AA&+EE;F F L L+II'g		r#   c                  *   t                      } t          d|            d}d|  dd}dddd	d
di}t          j        ||t	          j        |                    }|j        dk    rt          d           d S t          d|j        |j                   d S )NTOKENzBhttps://fcm.googleapis.com/v1/projects/gmm-pwa-a8293/messages:sendr"  zapplication/json; UTF-8r#  r   znzKf8P2PPRIEe1tHlHOquOg:BNjTFjBR6J_4ObA0-0R-yyi_KSEkepznpOm8hoVZesCD62vOvvwVIYY45aI6bCZbpFbDpkT2pXyKD14aQY02cIIPruebaMensajer   r.  )rG  notificationr3  r4  !   Notificación enviada con éxito.!   Error al enviar la notificación:)rJ  r)   r6  r7  r&   r'   r8  r   )rG  fcm_urlr  r   r@  s        r!   enviar_notificacion_push1rT    s    

!
!% Q'&u&&- '   ' ]7G$*W:M:MNNN( S  /00000/1Ex}UUUUUr#   c                     ddddd} d}d}dd	i}t          j        d
dd          }	 t          | |||d          }t          d|           d S # t          $ r(}t          dt          |                     Y d }~d S d }~ww xY w)Nzhttps://web.push.apple.com/QCQEVYlBRDeib-3MxBxovWH1_kDMpIo0iaOjqYhEsSBCg0_SV2QrgNoh0qZkxmVjPPWGTr2SdMcUsb2mlWaUEDnKiaqRjhUGbXyLsmp3MMmqkKziMbZC4vFy2BgPiomN1CBzIhFv1eL0BowpcmV1SjdIgSeNN269Wmn5ijnxNvczWBNjTFjBR6J_4ObA0-0R-yyi_KSEkepznpOm8hoVZesCD62vOvvwVIYY45aI6bCZbpFbDpkT2pXyKD14aQY02cIIzKf8P2PPRIEe1tHlHOquOg)p256dhauth)endpointkeys+PBMKqK0af2ZVvkDxvlJlCqKtXy4Nt3fLEuUvC9zSLQAzWBCajPMX8zYV_eyrnjGrM6-Wr-XmfG6BuvmNOWo0dZEj8hbHA9s9q_6k7OjZRa-nod-UX32yUXtSqwEQiSmWjgLAsubzmailto:jesus@wsoft.com.mxu    Notificación para Safari en iOSzEste es un mensaje de pruebarO  iQ )subscription_infor  vapid_private_keyvapid_claimsttlrQ  rR  )r&   r'   r   r)   r   repr)r]  r^  vapid_public_keyr_  r  r@  exs          r!   enviar_notificacion_pushrd    s     Yk(   Dn	&,
 J/*   '
9))
  H 

-x88888	 9 9 9	
-tBxx8888888889s   $A 
BA<<Bc                   K   |||          d         v r||          d                              |d           }||          d                              |d           }|r|                                 d {V  |r|                                 d {V  |                     t          j        |dd                     d {V  d S d S )Npagesr9   closed)r   status)popr>   r%   r&   r'   )r   r   r?   r   rA   s        r!   	cerrarTabrj    s      	*7333I&w/33FDAADy)*599&$GGG JJLL MMOO
..v$J$JKK
L
LLLLLLLLLL 43r#   )F)r7   )T)Tr   )"r   r&   r:   http.clientr  r  r6  sysgoogle.oauth2r   google.auth.transport.requestsr   	pywebpushr   r   r"   r   r6   rB   rI   rV   r{   r   r   r   r   r   r  r  rA  rJ  rT  rd  rj  r   r#   r!   <module>rp     s   > > > > > > > > > > > > > > > > > > > > > > > > > > > > ) ) ) ) ) ) 2 2 2 2 2 2 / / / / / / / /
5 5 5 56
5 
5 
5  4   *    (e e eP1 1 1f2 2 2jcH cH cHL;	 ;	 ;	 ;	~Q	 Q	 Q	 Q	j* * *  M M M`
 
 
V V V@#9 #9 #9JM M M M Mr#   