
    h                     >   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Zd dlmZ d d	lmZ d dlZd
 ZddZd Zd Zdededededej2                  defdZdedefdZ ej8                  ej:                         defdZej>                  dd       Z y)    )Session)task_postrun)SessionLocal)!generate_feedback_recommendations)
Datasource)TaskN)urlparse)parsec                 \    	 | rt        |       j                         S d S # t        $ r Y y w xY wN)
parse_date	isoformat	Exception)date_strs    ./var/www/html/hubwallet-dev/src/utils/tasks.pysafe_parse_dater      s4    3;z(#--/EE s     	++c                 x    t        | t              r)| j                         rt        |       j                         S |S r   )
isinstancestrstrip)valuedefaults     r   safe_stringr      s+    !+E3!7EKKM3u:VwV    c                 D    	 t        |       S # t        t        f$ r Y yw xY w)Nr   )float	TypeError
ValueError)r   s    r   safe_ratingr      s(    U|z" s   
 c                 l   t        | t              r| }n.t        | t              r| j                  dg       }nt	        d      |rt        |t              st	        d      |d   }d }d }d|v r7d}|j                  di       j                  d      xs |j                  d      }n3d	|v r$d
}|j                  di       j                  d      }nt	        d      |}t               }|j                  t              j                  t        j                  |k(        j                  t        j                  j                               j                         }|j                          |st	        d      |j                  }|j                   }	|j"                  }
|j$                  }g }|D ]  }|dv r{t'        |j                  di       j                  d            }t'        |j                  d      d      }t)        |j                  d            }t+        |j                  d            }np|dv rkt'        |j                  d            }t'        |j                  d      d      }t)        |j                  d            }t+        |j                  d            }n|j-                  ||||d        ||	|
|||dS )NdatazUnexpected data formatzNo valid reviews foundr   place_idgoogleinputurlbusiness_idyelpz2Invalid review data format or missing business URLzDatasource entry not found.>   Yelpr'   Review_autherUsernameContentzNo comment provided Yelp)r   RatingDate>   Googler#   reviewer_namereviewzNo comment provided Googlereview_ratingreview_date)namecommentratingdate)store_id	branch_iddatasource_iddatasource_sourcesnapshot_idreviews)r   listdictgetr   r   queryr   filterr%   order_by
created_atdescfirstcloser7   r8   ds_idr;   r   r   r   append)bright_datar<   review_sampleraw_business_urlsource_typeclean_business_urldbdatasource_entryr7   r8   r9   r;   formatted_reviewsr0   r3   r4   r5   r6   s                     r   extract_review_detailsrQ      s   +t$	K	&//&"-122*Wd3122 AJMK]"(,,Wb9==eD`HYHYZ_H`	-	'(,,Wb9==eDMNN * 
Bxx
+22:>>EW3WXaablbwbwb|b|b~  F  F  HHHJ677((H **I$**M"..K  **vzz/2>BB:NOD!&**Y"7A[\G H!56F"6::f#56D00vzz/:;D!&**X"6@\]G O!<=F"6::m#<=D   	"
 	!0 &("$ r   rN   celery_job_idr7   r8   r;   r9   c                 V   	 t        |||||d      }| j                  |       | j                  t              j	                  t        j
                  |k(        j                         }|rd|_        y y # t        $ r-}| j                          t        dt        |               d }~ww xY w)N	Analyzing)rR   r7   r8   r;   r9   task_statuspendingz<[Error] Failed to create task and update datasource status: )r   addr@   r   rA   rG   rE   last_fetch_statusr   rollbackprintr   )	rN   rR   r7   r8   r;   r9   task
datasourcees	            r   create_task_entryr^   j   s    '#'#
 	tXXj)001A1A]1RSYY[
+4J(   
LSQRVHUVs   A.A2 2	B(;(B##B(statusc                    t               }	 |j                  t              j                  t        j                  | k(        j                         }|r||_        |j                  t              j                  t        j                  |j                  k(        j                         }|r||_
        |j                          |j                  |j                  f|j                          S 	 |j                          y# t        $ rA}|j                          t!        dt#        |              Y d }~|j                          yd }~ww xY w# |j                          w xY w)N)NNz5[Error] Failed to update task and datasource status: )r   r@   r   rA   rR   rE   rU   r   rG   r9   rX   commitr8   rF   r   rY   rZ   r   )rR   r_   rN   r[   r\   r]   s         r   update_task_statusrb      s   .Bxx~$$T%7%7=%HIOOQ%D*-44Z5E5EI[I[5[\bbdJ/5
,IIK>>4#5#55 	
  	
  
Ec!fXNO 	
 	
s*   C	C8 8	E'D=(E =EE E)levelc                    t               }	 t        j                  d|         t        j                  d       t        j                  d|         t        j                  d       t        ||        |j	                          t        j                  d|         	 |j                          y# t
        $ r'}t        j                  dt        |               d}~ww xY w# |j                          w xY w)zI
    Celery task to generate and store recommendations for a branch.
    z:[Celery Worker] Generating recommendations for branch_id: u:   
========== 📢 GENERATE RECOMMENDATIONS INPUT ==========zBranch ID: z8=======================================================
zF[Celery Worker] Recommendations generated successfully for branch_id: z2[Celery Worker] Error generating recommendations: N)	r   logginginfor   ra   r   errorr   rF   )r8   rN   r]   s      r   generate_recommendations_taskrh      s     .BQR[Q\]^ 	RS{9+./PQ 	*"i8
		]^g]hij 	
  J3q6(ST
 	
s$   BB, ,	C5"CCC C1c                 &   | r| j                   dk7  ry t               }	 t        d| d|        |dk(  rt        |d       |j                          y # t        $ r!}t        dt        |              Y d }~6d }~ww xY w# |j                          w xY w)Nz/src.utils.celery_worker.process_csv_review_dataz-[Celery] Post-run handler for parent task_id=z, state=FAILUREfailedz([Error] Failed in task_postrun_handler: )r3   r   rZ   rb   r   r   rF   )sendertask_idstatekwargsrN   r]   s         r   task_postrun_handlerrp      s     V[[$UU.B	=gYhugVWIw1
 	
  C8QABBC 	
s)   "A 	A;A61A> 6A;;A> >B)Unknown)NNN)!sqlalchemy.ormr   celery.signalsr   src.utils.dbr   #src.apps.recommendations.controllerr   src.apps.datasource.modelsr   src.apps.feedback.modelsr   uuidurllib.parser	   dateutil.parserr
   r   re   r   r   r   rQ   r   intUUIDr^   rb   basicConfigDEBUGrh   connectrp    r   r   <module>r      s    " ' % Q 1 )  ! / WJ\' #  QT cgclcl   ~A .c 3 6   '-- (S 6  r   