
    +j                        d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZm	Z	 d dl
mZ dZda	 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 d dlmZ d dlmZ d dlmZ d dlZ dZn># e!$ r6Z" ede" d e             d#                                           Y dZ"["ndZ"["ww xY wd Z$d Z%d Z&d Z'da(d Z)d Z*d Z+d Z,d Z-d Z.dS )    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                      t           S )zG
    Temporary function to check if the dependencies are available
    )_DB_AVAILABLE     //home/wildlama/comfy/ComfyUI/app/database/db.pydependencies_availabler   &   s
     r   c                  0    t                      ot          duS )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                     t           j                            t           j                            t                    d          } t           j                            t           j                            | d                    }t           j                            t           j                            | d                    }t          |          }|                    d|           |                    dt          j	                   |S )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    RW__X66@@I'//"',,y-"H"HIIK7??27<<	<#H#HIILK  F
,l;;;
+T->???Mr   c                      t           j        } |                     d          r|                     d          d         S t	          d|  d          )Nz
sqlite:///z///   zUnsupported database URL 'z'.)r   r%   
startswithsplit
ValueError)urls    r   get_db_pathr1   A   sO    

C
~~l## ?yy""=c===>>>r   c                     | dz   }t          |          a	 t                              d           dS # t          $ r t	          d|  d          w xY w)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
##### 
 
 
F7 F F F
 
 	

s	   3 Ac                 
    | dv 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                      t           j        } t          j        d|             t	          |           rt          |            d S t          |            d S )NzDatabase URL: )r   r%   loggingdebugr=   _init_memory_db_init_file_dbr;   s    r   init_dbrC   c   s[    FM+6++,,,V fr   c                     t          | t          ddi          }t          j        |d          d             }t          j                            |           t          |          adS )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                     |                                  }|                    d           |                                 d S NzPRAGMA foreign_keys=ONcursorexecuteclosedbapi_connectionconnection_recordrL   s      r   set_sqlite_pragmaz*_init_memory_db.<locals>.set_sqlite_pragmaz   7    !((**/000r   bindN)	r   r   r   listens_forr   metadata
create_allr   r   )r<   enginerR   s      r   rA   rA   m   s}     )51  F vy))  *)
 	MV$$$ '''GGGr   c                    t                      }t          j                            |          }t	                      }t          |           }t          j        |d          d             }|                                }t          j
        |          }|                                }t          j        |          }	|	                                }
|
t          j        d           n||
k    r|dz   }|rt#          j        ||           nd}	 t'          j        ||
           t          j        d| d|
            nS# t,          $ rF}|r)t#          j        ||           t          j        |           t          j        d           |d}~ww xY w|                                 t5          |           t7          |	          adS )
zBInitialize a file-backed SQLite database using Alembic migrations.rH   c                     |                                  }|                    d           |                                 d S rJ   rK   rO   s      r   rR   z(_init_file_db.<locals>.set_sqlite_pragma   rS   r   NzNo target revision found.z.bkpzDatabase upgraded from z to zError upgrading database: rT   )r1   r   r   existsr*   r   r   rV   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)   rY   rR   conncontextcurrent_revscript
target_revbackup_pathes                r   rB   rB      s   mmGw''I!!F 6""F vy))  *)
 >>D(..G..00K(00F((**J34444	
	"	"& 	K----K		OFJ///LP;PPJPPQQQQ 	 	 	 'K111	+&&&:;;;G	 	JJLLLw '''GGGs   
/D: :
F
AFF
c                      t                      S )N)r   r   r   r   create_sessionrr      s    99r   )/r?   r   rb   
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ImportErrorrp   stripr   r   r*   r1   r4   r9   r=   rC   rA   rB   rr   r   r   r   <module>r      sU    				  * * * * * * ? ? ? ? ? ? & & & & & & & &      
%%%%%%::::::......////////++++++******((((((%%%%MM 	 	 		 	 	 "!##	 	 	 
EGG       	  < < <	 	 	? ? ? 
 
 
&9 9 9
  ( ( (25( 5( 5(p    s   8A% %B *,BB 