← back to Rentv Sheet Enrich

__pycache__/snapshot.cpython-314.pyc

46 lines

+
&k~j���v�Rt^RIt^RIt^RIt^RIt^RIt^RItRtRt	RRlt
Rt]R8Xd
]!4R#R#)u^
snapshot.py — pull the ENTIRE workbook into OUR OWN local copy (data/snapshot.json) in
just a few batch reads, so the viewer never live-reads the Google Sheet per tab-switch
(that was the 60-reads/min quota that blanked tabs). One values.batchGet for all tab
values + one includeGridData get for all green (enriched) cell maps. Re-run to refresh.
Nc��\PPVRRV2/R7p\P!\PPV44#)�
AuthorizationzBearer )�headers)�urllib�request�Request�json�load�urlopen)�url�tok�rs&& �9/Users/macstudio3/Projects/rentv-sheet-enrich/snapshot.py�apir
sD�������s�_���u�o�,N��O�A��9�9�V�^�^�+�+�A�.�/�/�c��R\PPRVPRR4,R,RR7,#)zranges=�'z''�)�safe)r�parse�quote�replace)�titles&r�rngrs7���v�|�|�)�)�#��
�
�c�4�0H�*H�3�*N�UW�)�X�X�Xrc�xa.a/�T;'g\P!4p\P!V4R,Uu.uF#pVR,R,VR,R,3NK%	ppRPRV44p\	\P
R\PRVR2V4pVPR	.4p^R
IpVPRVP4o/V/3Rlp\Po.V.3R
lpRp	\	\P
R\PRVR2V4p
V
PR.4Uu/uFEpVR,R,VPR4;'g/.^,PR.4bKG	ppRp
Rp.p/p/pR
p\W%4EFNwwpppVPR.4pV'g"VPRVRVR.R.R.R/R^/4KEV
!V4p\RV4^R7p\V4Uu.uFCpV\!VV,48d(\#VV,V,4P%4MRNKE	ppVV^,R
UUu.uF=p\V4Uu.uF$pV\!V48dV!VV,4MRNK&	upNK?	pppV!V4pVeVf
VV,p.p/p\'VPV.44EFwp p!V V8:dKV V,
^,
p"\'V!PR.4;'g.4EF5wp#p$V$PR4;'g/PR 4p%V!V%4'dVPV"R!V#24MV	!V%4p&V&'dV&VV"R!V#2&VfKvV#V8XgKV	!V%4p'V''gK�^T"u;8:d\!V48gK�MK�V#\!VV",48gK�\#VV",V#,4P%4p(V('gK�VP)V(/4VV(,PV'^4^,VV(,V'&EK8	EK�	VebVF[pV\!V48d!\#VV,4P%4MRp)V)'gK?VPV)^4^,VV)&K]	VPRVRVRVRVRVRVRV/4EKQ	VP+4U)U*u/uFwp)p*V)\V*V*PR"7bK 	p+p)p*\-VP+4R#R"7U)U,u.uFwp)p,V)NK
	p-p)p,R$\/\0P0!44R%VR&VR'V+R(V-/#uupiuupiuupiuupiuuppiuup*p)iuup,p)i))�sheets�
properties�sheetIdr�&c3�<"�TFwr\V4x�K	R#5i�N)r)�.0�_�ts&  r�	<genexpr>�build.<locals>.<genexpr>s���,�V�T�Q�#�a�&�&�V�s��/z/values:batchGet?z.&majorDimension=ROWS&valueRenderOption=FORMULA�valueRangesNz=HYPERLINK\("([^"]+)"c�<�\V\4'dBVPR4'd+SPV4pV'dVP	^4#V#)�=)�
isinstance�str�
startswith�match�group)�v�m�_hls& �r�unlink�build.<locals>.unlinksA����a����!�,�,�s�"3�"3��	�	�!��A���w�w�q�z�!��rc�R<�\V4;'d�\VPR^4SR,,
4R8;'da\VPR^4SR,,
4R8;'d-\VPR^4SR,,
4R8#)�redg���Q��?�green�blue)�bool�abs�get)�bg�Gs&�r�is_green�build.<locals>.is_green$s�����B�x�f�f�C����u�a� 0�1�U�8� ;�<�t�C�f�f�����w��"�Q�w�Z�/�0�4�7�f�f�<?����v�q�@Q�TU�V\�T]�@]�<^�ae�<e�	frc��V'gR#VPRR4VPRR4VPRR4r2pVR8�dVR8�d
VR8�dR#\WV4\WV4,
R8d\WV4R8�dR#R	\V^�,4\V^�,4\V^�,43,#)
zKgsheets {red,green,blue} float color -> #rrggbb, or None for white/no-fill.Nr5gr6r7g���Q��?g{�G�z�?g��Q��?z
#%02x%02x%02x)r:�max�min�round)r;r
�g�bs&   r�hexc�build.<locals>.hexc's������&�&���$�b�f�f�W�c�&:�B�F�F�6�3�<O�a���t�8��D��Q��X����a�L�3�q�Q�<�'�4�/�C��a�L�4�4G���%��C��.�%��C��.�%��C��.�!Q�Q�Qr�?zl&includeGridData=true&fields=sheets(properties(sheetId),data.rowData.values.effectiveFormat.backgroundColor)�data�rowDatac��R^r!\\^\V444F%p\RW,44pWA8�gK#YCr!K'	V#)u�The real header is the row (of the first 4) with the most non-empty cells —
so a merged TITLE row above the header (panels, ARIZONA BROKERAGE) is skipped.c3�h"�TF(p\V4P4'gK$^x�K*	R#5i)�N)r+�strip)r!�cs& rr$�,build.<locals>.header_row.<locals>.<genexpr>:s���9�w�!�#�a�&�,�,�.�A�A�w�s�!2�
2�����)�rangerA�len�sum)�rows�best�bi�i�ns&    r�
header_row�build.<locals>.header_row5sH���q�b��s�1�c�$�i�(�)�A��9�t�w�9�9�A��x��b�*��	rc�*�\V4UUu.uF/wrT;'gRP4P4V3NK1	pppRFpVFwr!W$8XgK
Vuu#	K	VF wr!VPR4'gKVu#	R#uuppi)z�prefer the literal 'Status (color)' / 'Status' column over anything merely
CONTAINING the word status (e.g. 'Inferred meaning (Status column)').r�statusN)zstatus (color)r\)�	enumeraterM�lowerr,)�hsrW�h�low�wants&    r�find_status�build.<locals>.find_status>s���;D�B�-�H�-�$�!����b���!�'�'�)�1�-�-��H�0�D�����9��H��1��D�A��|�|�H�%�%������Is
�B�%B�values�gidrrTr6�colors�hrc3�8"�TFp\V4x�K	R#5ir �rR)r!r
s& rr$r%Ts���*�T��S��V�V�T�s�)�defaultr�effectiveFormat�backgroundColor�,)�keyc��V^,)#)rL�)�kvs&r�<lambda>�build.<locals>.<lambda>us
��PR�ST�PU�vr�	generated�tabs�status_field�
status_colors�
status_values)�lib�access_token�get_meta�joinr�API�SIDr:�re�compile�I�GREEN�zip�appendr@rQrRr+rMr]�
setdefault�items�sorted�int�time)0r�sr�qs�vals�value_ranges�_rer2r=rE�fmt�sh�
green_rowsrYrcrv�scolor_tally�svalue_tallyrwrfr�vrrTrh�widthrWrr
�body�sidxr6rg�ri�row�di�ci�cellr;�hx0�hx�valr/�cntsrxr"ryr<r1s0&                                             @@r�buildr�sT���

�
#�
#��!�!�#�C��|�|�C�(��2�4�2�!����y�)�1�\�?�7�+C�D�2��4�

���,�V�,�	,�B��#�'�'��!�C�G�G�9�$5�b�T�9g�h�jm�n�D��8�8�M�2�.�L��

�+�+�.����
6�C��	�	�	�A�f�	R�����	��3�7�7�)�1�R�D�)h�h�il�n�C� �G�G�H�b�1�3�1�b��\�"�9�-����v��0F�0F�2�$��/J�/N�/N�y�Z\�/]�]�1��3����D��L��L��L���5����e�b��v�v�h��#����K�K���W�e�Y��F�B�PW�Y[�]e�gi�ko�qr�s�t��
��
���*�T�*�A�6��TY�Z_�T`�a�T`�q��C��R��M�0A�C��R����$�*�*�,�r�I�T`��a�TX�Y[�^_�Y_�Y`�Ta�b�Ta�q�U�5�\�J�\���S��V����!����3�\�J�Ta��b��7�#����� 4�"�4�=�L���R�F� �����R�!8�9�G�B���R�x���b��1��B�%�c�g�g�h��&;�&A�&A�r�B���D��h�h�0�1�7�7�R�<�<�=N�O���B�<�<��L�L�B�4�q����.��r�(�C��/2��"��Q�r�d�|�,��#��d�
��b��B��r�a�2�1��D�	�1�1�b�3�t�B�x�=�6H�!�$�r�(�2�,�/�5�5�7���3�(�3�3�C��<�4@��4E�4I�4I�"�a�4P�ST�4T�L��-�b�1�C�	:�&����,0�3�q�6�M�C��$��L�&�&�(�r���1�&2�&6�&6�q�!�&<�q�&@�L��O��	
���U�C��%��G�V�T�SZ�\a�ck�ms�uy�{}�~��K6�L@L�?Q�?Q�?S�T�?S�G�A�t�Q��D�d�h�h�/�/�?S�M�T�#)�,�*<�*<�*>�DU�#V�W�#V�4�1�a�Q�#V�M�W���T�Y�Y�[�)�6�4��L�/�=��]�,�,��G4��@3��Db��J��b��<U��Ws=�)V�+V�7V�A	V �9V*�*V%�5V*�$V0�V6�%V*c�2�\4p\P!RRR7\P!V\RR44\
R\VR,4R\RVR,44R	\R
VR,44R24R#)
rHT)�exist_okzdata/snapshot.json�wz
snapshot: rvu	 tabs · c3�F"�TFp\VR,4x�K	R#5i)rTNrj�r!r#s& rr$�main.<locals>.<genexpr>s���6��A��Q�v�Y������!u	 rows · c3�F"�TFp\VR,4x�K	R#5i)r6Nrjr�s& rr$r��s���7�,�Q��Q�w�Z���,�r�z green cellsN)	r��os�makedirsr�dump�open�printrRrS)�snaps r�mainr�zs|���7�D��K�K���&��I�I�d�D�-�s�3�4�	�J�s�4��<�(�)��
�6��f��6�
6�7�y�
�7�$�v�,�7�
7�8��F�Gr�__main__r )
�__doc__rzr�urllib.requestr�urllib.parser�r�rrr�r��__name__rqrr�<module>r�sA���9�8�8�0�Y�g,�RG��z���F�r