
    hnh%                         d dl Z d dlZd dlmZ d dlZd dlm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  e        d d	lmZmZmZ d
 ZddZy)    N)TimedRotatingFileHandler)	timedelta)Flaskjsonify)LoginManager)
SQLAlchemy)Migrate)load_dotenv)dbmigratelogin_managerc                    t        j                         }t        j                  d      }|j                  |       | j                  rI|j                  t         j                         | j                  j                  t         j                         nH|j                  t         j                         | j                  j                  t         j                         | j                  j                         r$| j                  j                  j                          | j                  j                  |       | j                  j                  d       y)z.Configure logging to stderr for production usez6[%(asctime)s] %(levelname)s in %(module)s: %(message)szLogging configured to stderrN)loggingStreamHandler	FormattersetFormatterdebugsetLevelDEBUGloggerINFOhasHandlershandlersclear
addHandlerinfo)apphandler	formatters      /var/www/html/app/__init__.pyconfigure_loggingr!      s     ##%G !!@I # yy'

GMM*&

GLL) zz

!!# JJ'" JJOO23    c                 6   t        t              }t        |       |j                  j	                  d       |  t
        j                  j                  dd      } t
        j                  j                  dd      j                         dk(  |j                  d<   t        d	
      |j                  d<   t
        j                  j                  d      |j                  d<   t
        j                  j                  dd      |j                  d<   t
        j                  j                  d      }|s|j                  j                  d       |j                  j                  dt
        j                  j                         D cg c]	  }|dvs| c}        |j                  j                  dt        j                                 t        d      ||j                  d<   |j                  d      d   j                  d      d   dz   d|v r|j                  d      d	   ndz   }|j                  j	                  d|        d|j                  d<   d|j                  d<   d|j                  d <   d|j                  d!<   d|j                  d"<   t
        j                  j                  d#      |j                  d#<   t
        j                  j                  d$      |j                  d$<   t
        j                  j                  d%d&      |j                  d%<   t
        j                  j                  d'      |j                  d'<   t
        j                  j                  d(d)      |j                  d(<   t
        j                  j                  d*      |j                  d*<   t
        j                  j                  d+d,      |j                  d+<   t
        j                  j                  d-      |j                  d-<   t
        j                  j                  d.d/      |j                  d.<   t
        j                  j                  d0d1      |j                  d0<   t
        j                  j                  d2d      j                         dk(  |j                  d2<   t
        j                  j                  d3      |j                  d3<   t
        j                  j                  d4      |j                  d4<   d5|j                  d6<   t
        j                  j                  d7      |j                  d7<   |j                  j	                  d8       |j                  d   |j                  d   |j                  d   |j                  d   |j                  d    |j                  d!   |j                  d"   |j                  d   |j                  d2   |j                  d(   |j                  d+   |j                  d.   |j                  d6   d9}|j!                         D ]&  \  }}|j                  j	                  d:| d;|        ( g d<}|D ]@  }|j                  j	                  d=| d>|j                  j                  |      rd?nd@        B ddAlm}	m}
m}m}  ||       |j                  j	                  dB       |j-                         5  ddClm}m}m}m}m} ddDlm}m}m } ddEl!m"}  ||	       |j                  j	                  dF       ddd       |j                  j                  d2d      rK	 ddGl#m$} |j-                         5  |jK                          |j                  j	                  dH       ddd       ddKlm}m}m}m} ddDlm}m}m } dL|_)        dM|_*        |jV                  dN        }|j                  j	                  dO       ddPl,m-} |j]                  |dQR       |j                  j	                  dS       ddTl/m0} |j]                  |       |j                  j	                  dU       ddVl1m2} |j]                  |       |j                  j	                  dW       ddXl3m4} |j]                  |dYR       |j                  j	                  dZ       dd[l5m6} |j]                  |d\R       |j                  j	                  d]       dd^l7m}  ||       |S c c}w # 1 sw Y   xY w# 1 sw Y   }xY w# tL        $ r3}|j                  jO                  dItQ        |       dJ       Y d}~d}~ww xY w)_z)Application factory pattern for Flask appz#Starting application initializationN	FLASK_ENVdevelopmentFLASK_DEBUGfalsetruer      )daysPERMANENT_SESSION_LIFETIME
SECRET_KEYFRONTEND_URLzhttp://localhost:3001DATABASE_URLz\DATABASE_URL environment variable is not set. Check your .env file and server configuration.zCurrent environment variables: )r,   STRIPE_SECRET_KEYOPENAI_API_KEYGOOGLE_CLIENT_SECRETzCurrent working directory: zCDATABASE_URL environment variable is not set. See logs for details.SQLALCHEMY_DATABASE_URI@r   z://z	://*****@zlocalhost/dbzDatabase URL set to: FSQLALCHEMY_TRACK_MODIFICATIONSTSESSION_COOKIE_SECUREREMEMBER_COOKIE_SECURESESSION_COOKIE_HTTPONLYREMEMBER_COOKIE_HTTPONLYr/   STRIPE_PUBLISHABLE_KEYSTRIPE_WEBHOOK_SECRET r0   OPENAI_MODELzgpt-4oDEEPSEEK_API_KEYDEEPSEEK_MODELzdeepseek-chatCLAUDE_3_OPUS_API_KEYCLAUDE_3_OPUS_MODELzclaude-3-opus-20240229	REDIS_URLzredis://localhost:6379/0REDIS_CACHE_ENABLEDGOOGLE_CLIENT_IDr1   z<https://accounts.google.com/.well-known/openid-configurationGOOGLE_DISCOVERY_URLGOOGLE_REDIRECT_URIzApplication configuration:)r   r+   r-   r5   r6   r7   r8   r4   rB   r<   r>   r@   rD   zConfig: z = )r,   r2   r/   r9   r:   r0   r=   r?   rA   rC   r1   rE   zSensitive config: z is setznot set)r   r   r   init_appz#Extensions initialized successfully)UserSubscriptionPaymentHistorySubscriptionPlan
QueryUsage)DatabaseConnectionDatabaseSchemaQueryHistory)initialize_soft_deletez7Database models registered and initialized successfully)
RedisCachez$Redis cache initialized successfullyz Error initializing Redis cache: z#. Falling back to file-based cache.)rH   rI   rJ   rK   z
auth.loginr   c                  $    t        dddd      dfS )NFzAuthentication required)successmessageauthenticatedi  )r    r"   r    unauthorizedz create_app.<locals>.unauthorized   s'    0"
  	 	r"   zRegistering blueprints...)auth_bpz/auth)
url_prefixzRegistered auth blueprint)	google_bpz Registered Google auth blueprint)api_bpzRegistered API blueprint)
webhook_bpz	/webhookszRegistered webhooks blueprint)database_bpz	/databasezRegistered database blueprint)rG   )8r   __name__r!   r   r   osenvirongetlowerconfigr   errorkeysgetcwd
ValueErrorsplititemsapp.extensionsr   r   r   rG   app_contextapp.auth.modelsrH   rI   rJ   rK   rL   app.database.modelsrM   rN   rO   app.utils.soft_deleterP   app.utils.redis_cacherQ   
initialize	Exceptionwarningstr
login_viewlogin_message_categoryunauthorized_handlerapp.authrX   register_blueprintapp.auth.google_routesrZ   app.apir[   app.api.webhooksr\   app.databaser]   
app.routes)config_namer   database_urlk
masked_urlsafe_configkeyvaluesensitive_keysr   r   r   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   erW   rX   rZ   r[   r\   r]   s                                 r    
create_appr   2   st   
/C c JJOO9: jjnn[-@ **..@FFHFRCJJw/8a/@CJJ+,  "zz~~l;CJJ|!#@W!XCJJ~ ::>>.1L

wx

:rzzGX  <t!\]  fs  ]sA  <t  ;u  v  	w

6ryy{mDE^__,8CJJ() ##C(+11%8;kIknr~k~\M_M_`cMdefMg  ES  TJJJOO+J<89 49CJJ/0 +/CJJ&'+/CJJ'(,0CJJ()-1CJJ)* ')jjnn5H&ICJJ"#+-::>>:R+SCJJ'(*,**..9PRT*UCJJ&' $&::>>2B#CCJJ !#!ICJJ~%'ZZ^^4F%GCJJ!"#%::>>2BO#TCJJ *,**..9P*QCJJ&'(*

7LNf(gCJJ$% !jjnn[:TUCJJ{(*

7Lf(U([([(]ag(gCJJ$% &(ZZ^^4F%GCJJ!")+8N)OCJJ%&)gCJJ%&(*

7L(MCJJ$% JJOO01 G$&)jj1M&N

>2!$,C!D"%**-E"F#&::.G#H$'JJ/I$J*-**5U*V"zz*?@

>2**%56"zz*?@ #

+A BK" "'') 4
U

(3%s5'234N  e

,SEszz~~c?ReXa5bcde
 DC SMJJOO9: 
	 	SddXX 	Ar"

QR	S zz~~+T2	o8" H%%'

 FGH UTTT  ,M+1M( '' ( JJOO/0 !7w7JJOO/0 19%JJOO67 6"JJOO./ ,:+>JJOO34 );;?JJOO34 $SMJw <tj	S 	SH H  	oJJ!A#a&Ilmnn	osI   :	b=
b=
+Acc (,cc ccc 	d%(dd)N)r_   r   logging.handlersr   pathlibdatetimer   flaskr   r   flask_loginr   flask_sqlalchemyr   flask_migrater	   dotenvr
   rj   r   r   r   r!   r   rV   r"   r    <module>r      s=    	  5     $ ' !   6 54:vr"   