o
    l h                     @   s  d dl Z d dlmZmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ d d	lmZ d d
lmZmZmZ d dlmZmZmZmZmZ d dlmZ d dlmZ d dl m!Z! d dl"Z"e Z#dd Z$dd Z%dd Z&dd Z'dd Z(dd Z)dS )    N)Flaskcurrent_app)Config)db)main_bp)BackgroundScheduler)CronTrigger)run_daily_link_maintenance)start_payload_scheduler)sync_active_subscribers_onceexpunge_billing_sync sync_billing_to_subscribers_once)&reset_has_received_message_for_activespush_news_links_to_activesenqueue_sms_for_activesprocess_sms_outbox_onceSENDER_DEFAULT)Mail)CORStimezonec              	   C   s   |   7 ztjd tdd}tjd|  W n ty*   tjd Y n	w W d   dS W d   dS 1 s>w   Y  dS )u@   Run the provider → BillingSync upsert once (with app context).z[BillingSync] Job startd   )Zlimitz[BillingSync] Job finished: z$[BillingSync] Unhandled error in jobN)app_contextr   loggerinfor   	Exception	exceptionappZsummary r   8/home/www/bk.finsightngr.online/FinSight/app/__init__.py_run_billing_sync_job   s   

"r!   c              	   C   s   |   7 ztjd tdd}tjd|  W n ty*   tjd Y n	w W d    d S W d    d S 1 s>w   Y  d S )Nz)[BillingSync:EXPUNGE] Nightly purge startT)Zhard_truncatez,[BillingSync:EXPUNGE] Nightly purge result: z%[BillingSync:EXPUNGE] Unhandled error)r   r   r   r   r   r   r   )r   resultr   r   r    _run_expunge_billing_sync/   s   

"r#   c              	   C      |   5 ztjd t }tjd|  W n ty(   tjd Y n	w W d    d S W d    d S 1 s<w   Y  d S )Nz[SubSync] job startz[SubSync] job done: z[SubSync] unhandled job error)r   r   r   r   r   r   r   r   r   r   r    _run_billing_to_subscribers_job:      
"r%   c              	   C   r$   )Nz[DailyLinks] Job startz[DailyLinks] Job finished: z[DailyLinks] Unhandled error)r   r   r   r   r	   r   r   )r   resr   r   r    _run_daily_links_jobE   r&   r(   c              	   O   s   |   < z||i |}tjd|j d|  W n ty/   tjd|j d Y n	w W d    d S W d    d S 1 sCw   Y  d S )Nz[Scheduler] z: z failed)r   r   r   r   __name__r   r   )r   fnargskwargsr'   r   r   r    _with_contextP   s   
"r-   c               	      s,  t t  jt t  t  t ddg diidg dg ddgd t	j
t	jd	 t	 } | t	d
  j|   t    t  W d    n1 sZw   Y  ttddddlm}  | ddlm}  | jtddddddd j fddddddddd j fddtdddddddd j fddddddddd j fd dtd!ddd"dddd j fd#dtd$d%dd&dddd j fd'dtd$d(dd)dddd j fd*dtd$d+dd,dddd   t fd-d  S ).Nz/*Zorigins)zhttps://finsightngr.onlinezhttp://192.168.0.177z!https://worker.finsightngr.onlinezhttps://fin.finsightngr.onlineT)ZGETZPOSTZPUTZDELETEZOPTIONS)Content-Typez	x-api-keyzX-Subscriber-TokenZAuthorizationr.   )Z	resourcesZsupports_credentialsmethodsZallow_headersZexpose_headers)levelz)%(asctime)s - %(levelname)s - %(message)szAfrica/Lagosr   r   )redirect_bp)link_bpZinterval   Zpayload_job   )functriggerZminutesidreplace_existingcoalescemax_instancesc                         t  S N)r!   r   r   r   r    <lambda>       zcreate_app.<locals>.<lambda>   Zbilling_sync_jobc                      r;   r<   )r#   r   r=   r   r    r>      r?   )ZhourZminuteZbilling_expunge_job)r5   r6   r7   r8   r9   r:   c                      r;   r<   )r%   r   r=   r   r    r>      r?      Zbilling_to_subscribers_jobc                      r;   r<   )r(   r   r=   r   r    r>      r?   z4-8Zdaily_links_jobc                      s
   t  tS r<   )r-   r   r   r=   r   r    r>      s   
 	      Zsubmsg_reset_jobc                      s   t  ttS r<   )r-   r   r   r   r=   r   r    r>             Zsms_enqueue_jobc                      s   t  tdS )Ni  )r-   r   r   r=   r   r    r>      rD   z16-59/1Zsms_worker_jobc                      s    j ddS )NF)wait)Zshutdownr   )	schedulerr   r    r>      rD   )!r   r)   ZconfigZfrom_objectr   r   Zinit_appmailr   loggingZbasicConfigZINFOZStreamHandlerZsetFormatterZ	Formatterr   Z
addHandlerZregister_blueprintr   r   Z
create_allr   r   Zapp.routes.redirect_routesr1   Zapp.routes.link_routesr2   Zadd_jobr
   r   startatexitregister)streamr1   r2   r   )r   rG   r    
create_app]   s   











	






	


rN   )*rI   Zflaskr   r   Z
app.configr   Z
app.modelsr   Z
app.routesr   Z!apscheduler.schedulers.backgroundr   Zapscheduler.triggers.cronr   Zapp.routes.scheduler_routesr	   Zapp.checker_1r
   Zapp.routes.callback_routesr   r   r   Zapp.sms_pushr   r   r   r   r   Z
flask_mailr   Z
flask_corsr   Zpytzr   rK   rH   r!   r#   r%   r(   r-   rN   r   r   r   r    <module>   s,    