
    +j                     t   S SK r S SKrS SKrS SKJr  S SKJr  S SKJrJ	r	  S SK
Jr  SrSq S SKJr  S SKJr  S S	KJr  S S
KJr  S SKJrJr  S SKJr  S SKJr  S SKJr  S SKr SrS r$S r%S r&S r'Sq(S r)S r*S r+S r,S r-S r.g! \! a,  r"\" S\" S\" 5        S3RG                  5       5         Sr"C"NNSr"C"ff = f)    N)log_startup_warning) get_missing_requirements_message)FileLockTimeout)argsF)command)Config)MigrationContext)ScriptDirectory)create_engineevent)sessionmaker)
StaticPool)BaseTzh
------------------------------------------------------------------------
Error importing dependencies: 
z
This error is happening because ComfyUI now uses a local sqlite database.
------------------------------------------------------------------------
c                      [         $ )z?
Temporary function to check if the dependencies are available
)_DB_AVAILABLE     //home/wildlama/comfy/ComfyUI/app/database/db.pydependencies_availabler   &   s
     r   c                  4    [        5       =(       a    [        SL$ )z
Temporary function to check if the database is available to create a session
During initial release there may be environmental issues (or missing dependencies) that prevent the database from being created
N)r   Sessionr   r   r   can_create_sessionr   -   s    
 "#;t(;;r   c                     [         R                  R                  [         R                  R                  [        5      S5      n [         R                  R                  [         R                  R                  U S5      5      n[         R                  R                  [         R                  R                  U S5      5      n[        U5      nUR                  SU5        UR                  S[        R                  5        U$ )Nz../..zalembic.ini
alembic_dbscript_locationzsqlalchemy.url)
ospathjoindirname__file__abspathr	   set_main_optionr   database_url)	root_pathconfig_pathscripts_pathconfigs       r   get_alembic_configr*   5   s    RWW__X6@I''//"'',,y-"HIK77??277<<	<#HILK F
,l;
+T->->?Mr   c                      [         R                  n U R                  S5      (       a  U R                  S5      S   $ [	        SU  S35      e)Nz
sqlite:///z///   zUnsupported database URL 'z'.)r   r%   
startswithsplit
ValueError)urls    r   get_db_pathr1   A   sE    


C
~~l##yy""5cU"=>>r   c                     U S-   n[        U5      q [        R                  SS9  g! [         a    [	        SU  S35      ef = f)zAcquire an OS-level file lock to prevent multi-process access.

Uses filelock for cross-platform support (macOS, Linux, Windows).
The OS automatically releases the lock when the process exits, even on crashes.
z.lockr   )timeoutz$Could not acquire lock on database 'zk'. Another ComfyUI process may already be using it. Use --database-url to specify a separate database file.N)r   _db_lockacquirer   RuntimeError)db_path	lock_paths     r   _acquire_file_lockr9   K   s]     '!I	"H
# 
27) <F F
 	

s	   & A c                     U S;   $ )zACheck if the database URL refers to an in-memory SQLite database.)zsqlite:///:memory:z	sqlite://r   db_urls    r   _is_memory_dbr=   ^   s    888r   c                      [         R                  n [        R                  " SU  35        [	        U 5      (       a  [        U 5        g [        U 5        g )NzDatabase URL: )r   r%   loggingdebugr=   _init_memory_db_init_file_dbr;   s    r   init_dbrC   c   s;    FMMN6(+,Vfr   c                     [        U [        SS0S9n[        R                  " US5      S 5       n[        R
                  R                  U5        [        US9qg)u   Initialize an in-memory SQLite database using metadata.create_all.

Alembic migrations don't work with in-memory SQLite because each
connection gets its own separate database — tables created by Alembic's
internal connection are lost immediately.
check_same_threadF)	poolclassconnect_argsconnectc                 f    U R                  5       nUR                  S5        UR                  5         g NzPRAGMA foreign_keys=ONcursorexecuteclosedbapi_connectionconnection_recordrL   s      r   set_sqlite_pragma*_init_memory_db.<locals>.set_sqlite_pragmaz   &    !((*/0r   bindN)	r   r   r   listens_forr   metadata
create_allr   r   )r<   enginerR   s      r   rA   rA   m   s]     )51F vy) *
 	MMV$ 'Gr   c                 b   [        5       n[        R                  R                  U5      n[	        5       n[        U 5      n[        R                  " US5      S 5       nUR                  5       n[        R                  " U5      nUR                  5       n[        R                  " U5      n	U	R                  5       n
U
c  [        R                   " S5        O]X:w  aX  US-   nU(       a  ["        R$                  " X5        OSn [&        R(                  " X:5        [        R*                  " SU SU
 35        UR3                  5         [5        U5        [7        US	9qg! [,         aP  nU(       a,  ["        R$                  " X5        [        R.                  " U5        [        R0                  " S5        UeSnAff = f)
zBInitialize a file-backed SQLite database using Alembic migrations.rH   c                 f    U R                  5       nUR                  S5        UR                  5         g rJ   rK   rO   s      r   rR   (_init_file_db.<locals>.set_sqlite_pragma   rT   r   NzNo target revision found.z.bkpzDatabase upgraded from z to zError upgrading database: rU   )r1   r   r   existsr*   r   r   rW   rH   r
   	configureget_current_revisionr   from_configget_current_headr?   warningshutilcopyr   upgradeinfo	Exceptionremove	exceptionrN   r9   r   r   )r<   r7   	db_existsr)   rZ   rR   conncontextcurrent_revscript
target_revbackup_pathes                r   rB   rB      s\   mGw'I!F 6"F vy) *
 >>D((.G..0K((0F((*J34		"&KK-K		OOF/LL2;-tJ<PQ 	JJLw 'G  	K1		+&:;G	s   =2E 
F.AF))F.c                      [        5       $ )N)r   r   r   r   create_sessionrt      s
    9r   )/r?   r   rd   
app.loggerr   utils.install_utilr   filelockr   r   comfy.cli_argsr   r   r   alembicr   alembic.configr	   alembic.runtime.migrationr
   alembic.scriptr   
sqlalchemyr   r   sqlalchemy.ormr   sqlalchemy.poolr   app.database.modelsr   app.assets.database.modelsappImportErrorrr   stripr   r   r*   r1   r4   r9   r=   rC   rA   rB   rt   r   r   r   <module>r      s     	  * ? & 
%:./+*(%M<	? 
&9
(25(pI  	 c "!# $ %	 
EG 	s   8B B7"B22B7