Ë
    û3îiå  ã                  óà   — d dl mZ d dlZd dlmZ d dlmZmZmZ d dlm	Z	 d dl
mZ d dlZd dlmZmZ dZd	Z ed
d¬«      Ze G d„ d«      «       Zdd„Z e	d¬«      d„ «       Zdd„Zdd„Zdd„Zy)é    )ÚannotationsN)Ú	dataclass)ÚdatetimeÚ	timedeltaÚtimezone)Ú	lru_cache)ÚPath)ÚcredentialsÚstoragezatmiya-db.appspot.comzsdm/svayamsevak-receiptsé   é   )ÚdaysÚhoursc                  ó,   — e Zd ZU ded<   ded<   ded<   y)ÚUploadedFileÚstrÚurlÚbucket_nameÚstorage_pathN)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© ó    ú:/var/www/html/sdm-receipt/app/services/firebase_storage.pyr   r      s   … à	ƒHØÓØÔr   r   c                 ó&  — t        t        «      j                  «       j                  } | j                  j                  }d}| |dz  |dz  dz  g}|D ]?  }|j	                  «       sŒ|D ]'  }t        |j                  |«      «      }|sŒ |d   c c S  ŒA y )N)z*firebase*adminsdk*.jsonz*firebase*.jsonz*adminsdk*.jsonÚconfigÚappÚservicesr   )r	   Ú__file__ÚresolveÚparentÚexistsÚsortedÚglob)Úcurrent_dirÚproject_rootÚcandidate_patternsÚsearch_rootsÚsearch_rootÚpatternÚmatchess          r   Ú_discover_service_account_filer.      sª   € Ü”x“.×(Ñ(Ó*×1Ñ1€KØ×%Ñ%×,Ñ,€LðÐð 	Ø�xÑØ�uÑ˜zÑ)ð€Lð $ò "ˆØ×!Ñ!Ô#ØØ)ò 	"ˆGÜ˜[×-Ñ-¨gÓ6Ó7ˆGÚØ˜q‘zÔ!ñ	"ð"ð r   é   )Úmaxsizec                 ó~  — t         j                  rt        j                  «       S t	        «       } | r`| j                  «       rPt        j                  t        | «      «      }t        j                  |dt        i«      }t        j                  |¬«      S t        t        t        j                  «       dz  «      «      }dt        d«      j                  v r!t        t        d«      j                  d   «      }|j                  «       r2t        j                  dt        i¬«      }t        j                  |¬«      S t        d«      ‚)NÚstorageBucket)r   ÚmissingÚGOOGLE_APPLICATION_CREDENTIALSÚos)ÚoptionszEFirebase service-account JSON file not found for the receipt service.)Úfirebase_adminÚ_appsr   Úbucketr.   r$   r
   ÚCertificater   Úinitialize_appÚDEFAULT_BUCKET_NAMEr	   ÚcwdÚ
__import__ÚenvironÚRuntimeError)Údiscovered_service_account_fileÚ
credentialr   Úgoogle_application_credentialss       r   Ú
get_bucketrD   1   sú   € ä×ÒÜ�~‰~ÓÐä&DÓ&FÐ#á&Ð+J×+QÑ+QÔ+SÜ ×,Ñ,¬SÐ1PÓ-QÓRˆ
Ü×+Ñ+ØØÔ1Ð2ó
ˆô �~‰~ #Ô&Ð&ä%)¬#¬d¯h©h«j¸9Ñ.DÓ*EÓ%FÐ"Ø'¬:°dÓ+;×+CÑ+CÑCÜ)-¬j¸Ó.>×.FÑ.FÐGgÑ.hÓ)iÐ&à%×,Ñ,Ô.Ü×+Ñ+°_ÔFYÐ4ZÔ[ˆÜ�~‰~ #Ô&Ð&ä
Ð^Ó
_Ð_r   c                ór   — t        j                  dd| «      j                  d«      j                  «       xs dS )Nz[^a-zA-Z0-9_-]+ú-Úreceipt)ÚreÚsubÚstripÚlower)Úvalues    r   Úsafe_segmentrM   K   s/   € Ü�6‰6Ð$ c¨5Ó1×7Ñ7¸Ó<×BÑBÓDÒQÈ	ÐQr   c                óš   — t        j                  t        j                  «      }|j	                  d«      }t
        › d|› dt        | «      › d�S )Nz%Y%m%dú/z.pdf)r   Únowr   ÚutcÚstrftimeÚDEFAULT_STORAGE_PREFIXrM   )Úreceipt_numberÚ	timestampÚdate_segments      r   Úbuild_storage_pathrW   O   sE   € Ü—‘œXŸ\™\Ó*€IØ×%Ñ% hÓ/€LÜ$Ð% Q | n°A´lÀ>Ó6RÐ5SÐSWÐXÐXr   c                ó¤  — t        «       }t        |«      }|j                  |«      }	 |j                  | d¬«       |j	                  dt        j                  t        j                  «      t        z   d¬«      }t        ||j                  |¬
«      S # t        $ r7}t        |«      }d|v xr d|v }|rt        d«      |‚t        d	|› �«      |‚d }~ww xY w)Nzapplication/pdf)Úcontent_typeÚv4ÚGET)ÚversionÚ
expirationÚmethodÚinvalid_grantzreasonable timeframezFirebase upload auth failed (invalid_grant). Check system clock/timezone and rotate the Firebase service-account key if needed.zFirebase upload failed: )r   r   r   )rD   rW   ÚblobÚupload_from_stringÚgenerate_signed_urlr   rP   r   rQ   ÚSIGNED_URL_TTLÚ	Exceptionr   r@   r   Úname)	Ú	pdf_bytesrT   r9   r   r`   Ú
signed_urlÚexcÚmessageÚlikely_clock_skews	            r   Úupload_pdf_bytesrk   U   sä   € Ü‹\€FÜ% nÓ5€LØ�;‰;�|Ó$€DðJØ×Ñ 	Ð8IÐÔJØ×-Ñ-ØÜ—|‘|¤H§L¡LÓ1´NÑBØð .ó 
ˆ
ô ˜J°F·K±KÈlÔ[Ð[øô ò JÜ�c“(ˆØ+¨wÐ6Ò\Ð;QÐU\Ð;\ÐÙÜð Róàðô Ð5°g°YÐ?Ó@ÀcÐIûðJús   ¨AB Â	CÂ2C
Ã
C)ÚreturnzPath | None)rL   r   rl   r   )rT   r   rl   r   )rf   ÚbytesrT   r   rl   r   )Ú
__future__r   rH   Údataclassesr   r   r   r   Ú	functoolsr   Úpathlibr	   r7   r
   r   r<   rS   rc   r   r.   rD   rM   rW   rk   r   r   r   ú<module>rr      s�   ðÝ "ã 	Ý !ß 2Ñ 2Ý Ý ã ß /à-Ð Ø3Ð Ù ¨Ô,€à
÷ð ó ðóñ4 �1Ôñ`ó ð`ó2RóYô\r   