r4iGddlZddlmZmZddlmZddlmZmZmZddl m Z m Z m Z  ddl mZGdd eZy#e$rZededZ[wwxYw) N)datetimetimezone)Job) BaseJobStoreConflictingIdErrorJobLookupError)datetime_to_utc_timestamp maybe_refutc_timestamp_to_datetime) Etcd3Clientz(EtcdJobStore requires etcd3 be installedceZdZdZdddej ffd ZdZdZdZ d Z d Z d Z d Z d ZdZdZdZdZxZS) EtcdJobStorea Stores jobs in a etcd. Any leftover keyword arguments are directly passed to etcd3's `etcd3.client `_. Plugin alias: ``etcd`` :param str path: path to store jobs in :param client: a :class:`~etcd3.client.etcd3` instance to use instead of providing connection arguments :param int pickle_protocol: pickle protocol level to use (for serialization), defaults to the highest available z /apschedulerNFc t|||_||_|s t d||_|rt ||_ytdi||_y)Nz&The "path" parameter must not be empty) super__init__pickle_protocolclose_connection_on_exit ValueErrorpathr clientr )selfrrrr connect_args __class__s f/mnt/ssd/data/python-lab/DaemonControl/venv/lib/python3.12/site-packages/apscheduler/jobstores/etcd.pyrzEtcdJobStore.__init__!sT .(@%EF F #F+DK%5 5DKc|jdzt|z} |jj|\}}t j |}|j |d}|S#t$rYywxYw)N/ job_state)rstrrgetpickleloads_reconstitute_job BaseException)rjob_id node_pathcontent_jobs r lookup_jobzEtcdJobStore.lookup_job7smIIOc&k1  3JGQll7+G(()=>CJ  sAA&& A21A2ct|}|jDcgc]}|d |d|kr|d}}|Scc}w)N next_run_timer*)r _get_jobs)rnow timestamp job_recordjobss r get_due_jobszEtcdJobStore.get_due_jobsAs[-c2 #nn. /*6?+y8 u     s;c|jDcgc] }|d|d}}t|dkDrtt|SdScc}w)Nr-r)r.lenr min)rr1 next_runss rget_next_run_timezEtcdJobStore.get_next_run_timeKsa#nn. /*6  '  =@ NQrr?comparesuccessfailure)rr rAr r-rBr"rCrr transaction transactionsversionputr)rr*r'changesrErFr)s r update_jobzEtcdJobStore.update_jobcsIIOc#&&k1 6s7H7HI))+ ||GT%9%9:KK++[[--55i@1DE[[--11)41HI,   ( (rc,|jdzt|z}|jj|jjj |dkDg|jjj |gg\}}|s t|y)NrrrI)rr rrMrNrOdeleter)rr&r'rFr)s r remove_jobzEtcdJobStore.remove_jobrsIIOc&k1 KK++[[--55i@1DE[[--44Y?@,   ( (rcN|jj|jyN)r delete_prefixrrs rremove_all_jobszEtcdJobStore.remove_all_jobs|s !!$)),rc8|jjyrW)rcloserYs rshutdownzEtcdJobStore.shutdowns rc|}tjt}|j||j|_|j|_|SrW)r__new__ __setstate__ _scheduler_alias_jobstore_alias)rrr*s rr$zEtcdJobStore._reconstitute_jobs? kk# #"kk rc> g}g}t|jj|j}|D]F\}} t j |}|d|j |dd}|j|H|r|D]}|j|tdddtj  t| fd  S#t$rMt j |}|dd}|j||jjd|YwxYw) Nr-r)r-r*rAz)Unable to restore job "%s" -- removing iti' )tzinfoc*|djxsSr:)r-)r1paused_sort_keys rz(EtcdJobStore._get_jobs..s:e#4#B#B#Uor)key)listr get_prefixrr"r#r$appendr%_logger exceptionrUrrutcsorted) rr2failed_job_idsall_idsdocr)r(r1 failed_idris @rr.zEtcdJobStore._get_jobsst{{--dii89 FC  ,,s+%,_%=11'+2FG  J'  + +  * +"4R E U  !  ,,s+#K06 %%i0 &&?  sACADDc|jjd|jj|jd|jjd|jdS)Nz<%s (client=%s)>)rorpr__name__rrYs r__repr__zEtcdJobStore.__repr__sK 14>>3J3JDKKX4>>**+9T[[MDDr)ry __module__ __qualname____doc__r"DEFAULT_PROTOCOLrr+r3r8r<rGrRrUrZr]r$r.rz __classcell__)rs@rrrs_  !&// 6,Y - ))- <Err)r"rrapscheduler.jobrapscheduler.jobstores.baserrrapscheduler.utilr r r etcd3r ImportErrorexcrrrrrsY 'WW K! XE<XE K @ AsJKs:A  AA