\L iddlZddlmZddlmZmZmZddlmZm Z m Z  ddl m Z m Z mZmZmZmZmZmZmZddlmZddlmZGd d eZy#e$rZededZ[wwxYw) N)Job) BaseJobStoreConflictingIdErrorJobLookupError)datetime_to_utc_timestamp maybe_refutc_timestamp_to_datetime) ColumnFloat LargeBinaryMetaDataTableUnicodeand_ create_engineselect)IntegrityError)nullz0SQLAlchemyJobStore requires SQLAlchemy installedceZdZdZddddej ddffd ZfdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZxZS)SQLAlchemyJobStorea Stores jobs in a database table using SQLAlchemy. The table will be created if it doesn't exist in the database. Plugin alias: ``sqlalchemy`` :param str url: connection string (see :ref:`SQLAlchemy documentation ` on this) :param engine: an SQLAlchemy :class:`~sqlalchemy.engine.Engine` to use instead of creating a new one based on ``url`` :param str tablename: name of the table to store jobs in :param metadata: a :class:`~sqlalchemy.schema.MetaData` instance to use instead of creating a new one :param int pickle_protocol: pickle protocol level to use (for serialization), defaults to the highest available :param str tableschema: name of the (existing) schema in the target database where the table should be :param dict engine_options: keyword arguments to :func:`~sqlalchemy.create_engine` (ignored if ``engine`` is given) Napscheduler_jobsc jt|||_t|xs t }|rt||_n#|rt |fi|xsi|_n tdt||tdtddtdtddtd td | |_ y) Nz%Need either "engine" or "url" definedidT) primary_key next_run_time)index job_stateF)nullable)schema)super__init__pickle_protocolrr enginer ValueErrorrr rr r jobs_t) selfurlr% tablenamemetadatar$ tableschemaengine_options __class__s f/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/apscheduler/jobstores/sqlalchemy.pyr#zSQLAlchemyJobStore.__init__3s .X&4(* #F+DK 'F0D"FDKDE E   44 8 ?E"IT : ; e <   crt||||jj|jdy)NT)r"startr'creater%)r( scheduleraliasr.s r/r2zSQLAlchemyJobStore.startSs)  i' 4;;-r0c|t|jjjj |jjj |k(}|j j5}|j|j}|r|j|ndcdddS#1swYyxYwN) rr'crwhererr%beginexecutescalar_reconstitute_job)r(job_id selectable connectionrs r/ lookup_jobzSQLAlchemyJobStore.lookup_jobWsDKKMM334::4;;==;K;Kv;UV [[    LJ"**:6==?I8A4)))4t L L Ls 44B22B;c|t|}|j|jjj|kSr7)r _get_jobsr'r8r)r(now timestamps r/ get_due_jobszSQLAlchemyJobStore.get_due_jobs]s.-c2 ~~dkkmm99YFGGr0ct|jjjj |jjjt k7j |jjjjd}|jj5}|j|j}t|cdddS#1swYyxYw)N) rr'r8rr9rorder_bylimitr%r:r;r<r )r(r?r@rs r/get_next_run_timez$SQLAlchemyJobStore.get_next_run_timeas 4;;==.. / U4;;==..$&8 9 Xdkkmm11 2 U1X  [[    R>RS [[    1J 1""6* 1 1" 1(00 1 1 1sCB//CCCc |jjjdit|jt j |j|jdj|jjj|jk(}|jj5}|j|}|jdk(rt!|j dddy#1swYyxYw)N)rrrrQ)r'updaterSrrrTrUrVr$r9r8rr%r:r;rowcountr)r(rWrZr@results r/ update_jobzSQLAlchemyJobStore.update_jobs DKK   V &?s?P?P%Q!'c.>.>.@$BVBV!W U4;;==##svv- . [[    -J''/F!#$SVV,,$ - - -s 6DD cN|jjj|jjj|k(}|j j 5}|j|}|jdk(r t| dddy#1swYyxYw)Nr) r'deleter9r8rr%r:r;r[r)r(r>r_r@r\s r/ remove_jobzSQLAlchemyJobStore.remove_jobs##%++DKKMM,<,<,FG [[    -J''/F!#$V,,$ - - -s %,BB$c|jj}|jj5}|j |dddy#1swYyxYwr7)r'r_r%r:r;)r(r_r@s r/remove_all_jobsz"SQLAlchemyJobStore.remove_all_jobssI##% [[    'J   v & ' ' 's AAc8|jjyr7)r%disposer(s r/shutdownzSQLAlchemyJobStore.shutdowns r0ctj|}||d<tjt}|j ||j |_|j |_|S)Njobstore)rTloadsr__new__ __setstate__ _scheduler_alias_jobstore_alias)r(rrWs r/r=z$SQLAlchemyJobStore._reconstitute_jobsRLL+ $ *kk# #"kk r0cg}t|jjj|jjjj |jjj }|r|jt|n|}t}|jj5}|j|D]-} |j|j|j/|rg|jj'j|jjjj)|}|j|ddd|S#t$rD|j j#d|j|j%|jYwxYw#1swY|SxYw)Nz)Unable to restore job "%s" -- removing it)rr'r8rrrIrr9rsetr%r:r;appendr= BaseException_logger exceptionaddr_in_)r( conditionsrNr?failed_job_idsr@rowr_s r/rCzSQLAlchemyJobStore._get_jobssfDKKMM,,dkkmm.E.EFOO KKMM ' ' =GZ%%dJ&78J  [[    +J!))*5 //KK 6 6s}} EF /++-33KKMM$$((8""6* +" %/LL**CSVV#&&svv. /  +" s27F< *E,7A+F<,A F96F<8F99F<<Gcdd|jjd|jjdS)N)r.__name__r%r)res r/__repr__zSQLAlchemyJobStore.__repr__s+4>>**+6$++//1B"EEr0)r| __module__ __qualname____doc__rTHIGHEST_PROTOCOLr#r2rArFrKrOrXr]r`rbrfr=rCr} __classcell__)r.s@r/rrso. $// @.L H < 1- -' 4Fr0r)rTapscheduler.jobrapscheduler.jobstores.baserrrapscheduler.utilrrr sqlalchemyr r r r rrrrrsqlalchemy.excrsqlalchemy.sql.expressionr ImportErrorexcrrQr0r/rsj WW S   .. eFeF S H IsRSs"AA! AA!