codex 1.8.8__py3-none-any.whl → 1.8.10__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of codex might be problematic. Click here for more details.
- codex/librarian/bookmark/latest_version.py +2 -6
- codex/librarian/librariand.py +5 -3
- codex/librarian/restarter/restarter.py +2 -6
- codex/librarian/scribe/importer/init.py +4 -4
- codex/librarian/scribe/importer/link/many_to_many.py +2 -0
- codex/librarian/scribe/importer/link/prepare.py +7 -4
- codex/librarian/scribe/importer/query/update_comics.py +22 -12
- codex/librarian/scribe/importer/search/prepare.py +1 -1
- codex/librarian/scribe/importer/search/sync_m2m.py +28 -27
- codex/librarian/scribe/importer/search/update.py +27 -20
- codex/librarian/scribe/janitor/adopt_folders.py +2 -7
- codex/librarian/scribe/janitor/integrity.py +3 -8
- codex/librarian/scribe/lazy_importer.py +2 -6
- codex/librarian/scribe/search/optimize.py +4 -7
- codex/librarian/scribe/timestamp_update.py +2 -6
- codex/librarian/worker.py +27 -0
- codex/static_root/assets/{VCheckbox-MwE_xq11.b2e2086608d9.js → VCheckbox-BfVeJY8A.b8e4dee22b3c.js} +1 -1
- codex/static_root/assets/VCheckbox-BfVeJY8A.b8e4dee22b3c.js.br +0 -0
- codex/static_root/assets/VCheckbox-BfVeJY8A.b8e4dee22b3c.js.gz +0 -0
- codex/static_root/assets/{VCheckbox-MwE_xq11.js → VCheckbox-BfVeJY8A.js} +1 -1
- codex/static_root/assets/VCheckbox-BfVeJY8A.js.br +0 -0
- codex/static_root/assets/VCheckbox-BfVeJY8A.js.gz +0 -0
- codex/static_root/assets/{VCheckboxBtn-HUjl2ti_.f3e7b85503c6.js → VCheckboxBtn-dotsoE0r.6b66667a9120.js} +1 -1
- codex/static_root/assets/VCheckboxBtn-dotsoE0r.6b66667a9120.js.br +0 -0
- codex/static_root/assets/VCheckboxBtn-dotsoE0r.6b66667a9120.js.gz +0 -0
- codex/static_root/assets/{VCheckboxBtn-HUjl2ti_.js → VCheckboxBtn-dotsoE0r.js} +1 -1
- codex/static_root/assets/VCheckboxBtn-dotsoE0r.js.br +0 -0
- codex/static_root/assets/VCheckboxBtn-dotsoE0r.js.gz +0 -0
- codex/static_root/assets/{VCombobox-C1Osy24P.73168f28d07b.js → VCombobox-D6t70eT1.a5c82ecd9544.js} +1 -1
- codex/static_root/assets/VCombobox-D6t70eT1.a5c82ecd9544.js.br +0 -0
- codex/static_root/assets/VCombobox-D6t70eT1.a5c82ecd9544.js.gz +0 -0
- codex/static_root/assets/{VCombobox-C1Osy24P.js → VCombobox-D6t70eT1.js} +1 -1
- codex/static_root/assets/VCombobox-D6t70eT1.js.br +0 -0
- codex/static_root/assets/VCombobox-D6t70eT1.js.gz +0 -0
- codex/static_root/assets/{VDialog-c2XXqNJH.a4156ca20133.js → VDialog-Bn_MNvQ-.d1ca39e120b8.js} +1 -1
- codex/static_root/assets/VDialog-Bn_MNvQ-.d1ca39e120b8.js.br +0 -0
- codex/static_root/assets/VDialog-Bn_MNvQ-.d1ca39e120b8.js.gz +0 -0
- codex/static_root/assets/{VDialog-c2XXqNJH.js → VDialog-Bn_MNvQ-.js} +1 -1
- codex/static_root/assets/VDialog-Bn_MNvQ-.js.br +0 -0
- codex/static_root/assets/VDialog-Bn_MNvQ-.js.gz +0 -0
- codex/static_root/assets/{VDivider-C06z3Tn-.d5e3ed421a68.js → VDivider-DOOd4a9s.b14fca685b97.js} +1 -1
- codex/static_root/assets/VDivider-DOOd4a9s.b14fca685b97.js.br +0 -0
- codex/static_root/assets/VDivider-DOOd4a9s.b14fca685b97.js.gz +0 -0
- codex/static_root/assets/{VDivider-C06z3Tn-.js → VDivider-DOOd4a9s.js} +1 -1
- codex/static_root/assets/VDivider-DOOd4a9s.js.br +0 -0
- codex/static_root/assets/VDivider-DOOd4a9s.js.gz +0 -0
- codex/static_root/assets/{VExpansionPanels-B8gzbonk.3532c6d08817.js → VExpansionPanels-Be8WWdca.f7f019bb8480.js} +1 -1
- codex/static_root/assets/VExpansionPanels-Be8WWdca.f7f019bb8480.js.br +0 -0
- codex/static_root/assets/VExpansionPanels-Be8WWdca.f7f019bb8480.js.gz +0 -0
- codex/static_root/assets/{VExpansionPanels-B8gzbonk.js → VExpansionPanels-Be8WWdca.js} +1 -1
- codex/static_root/assets/VExpansionPanels-Be8WWdca.js.br +0 -0
- codex/static_root/assets/VExpansionPanels-Be8WWdca.js.gz +0 -0
- codex/static_root/assets/{VForm-Chf0FU2x.3e8425bff3d0.js → VForm-BRei2Gn2.967e83055611.js} +1 -1
- codex/static_root/assets/VForm-BRei2Gn2.967e83055611.js.br +0 -0
- codex/static_root/assets/VForm-BRei2Gn2.967e83055611.js.gz +0 -0
- codex/static_root/assets/{VForm-Chf0FU2x.js → VForm-BRei2Gn2.js} +1 -1
- codex/static_root/assets/VForm-BRei2Gn2.js.br +0 -0
- codex/static_root/assets/VForm-BRei2Gn2.js.gz +0 -0
- codex/static_root/assets/{VRadioGroup-CHteIFqx.23cb51ee43e1.js → VRadioGroup-DVVCXDtV.79214c05c9a4.js} +1 -1
- codex/static_root/assets/VRadioGroup-DVVCXDtV.79214c05c9a4.js.br +0 -0
- codex/static_root/assets/VRadioGroup-DVVCXDtV.79214c05c9a4.js.gz +0 -0
- codex/static_root/assets/{VRadioGroup-CHteIFqx.js → VRadioGroup-DVVCXDtV.js} +1 -1
- codex/static_root/assets/VRadioGroup-DVVCXDtV.js.br +0 -0
- codex/static_root/assets/VRadioGroup-DVVCXDtV.js.gz +0 -0
- codex/static_root/assets/{VSelect-BqS1Prvd.js → VSelect-CJ_8hyFq.c3d39e72c0b5.js} +1 -1
- codex/static_root/assets/VSelect-CJ_8hyFq.c3d39e72c0b5.js.br +0 -0
- codex/static_root/assets/VSelect-CJ_8hyFq.c3d39e72c0b5.js.gz +0 -0
- codex/static_root/assets/{VSelect-BqS1Prvd.36bbebae4f0d.js → VSelect-CJ_8hyFq.js} +1 -1
- codex/static_root/assets/VSelect-CJ_8hyFq.js.br +0 -0
- codex/static_root/assets/VSelect-CJ_8hyFq.js.gz +0 -0
- codex/static_root/assets/{VSelectionControl-BRWozKsT.js → VSelectionControl-N_wsNRlD.1e50d58ecadb.js} +1 -1
- codex/static_root/assets/VSelectionControl-N_wsNRlD.1e50d58ecadb.js.br +0 -0
- codex/static_root/assets/VSelectionControl-N_wsNRlD.1e50d58ecadb.js.gz +0 -0
- codex/static_root/assets/{VSelectionControl-BRWozKsT.d10531c1a243.js → VSelectionControl-N_wsNRlD.js} +1 -1
- codex/static_root/assets/VSelectionControl-N_wsNRlD.js.br +0 -0
- codex/static_root/assets/VSelectionControl-N_wsNRlD.js.gz +0 -0
- codex/static_root/assets/{VTable-BT6w_ifJ.ee6b710fb398.js → VTable-YgXyPctG.b776e9689646.js} +1 -1
- codex/static_root/assets/VTable-YgXyPctG.b776e9689646.js.br +0 -0
- codex/static_root/assets/VTable-YgXyPctG.b776e9689646.js.gz +0 -0
- codex/static_root/assets/{VTable-BT6w_ifJ.js → VTable-YgXyPctG.js} +1 -1
- codex/static_root/assets/VTable-YgXyPctG.js.br +0 -0
- codex/static_root/assets/VTable-YgXyPctG.js.gz +0 -0
- codex/static_root/assets/{VWindowItem-sfdsG_YK.ee17f6723988.js → VWindowItem-BmpD4isF.61a906c1109e.js} +1 -1
- codex/static_root/assets/VWindowItem-BmpD4isF.61a906c1109e.js.br +0 -0
- codex/static_root/assets/VWindowItem-BmpD4isF.61a906c1109e.js.gz +0 -0
- codex/static_root/assets/{VWindowItem-sfdsG_YK.js → VWindowItem-BmpD4isF.js} +1 -1
- codex/static_root/assets/VWindowItem-BmpD4isF.js.br +0 -0
- codex/static_root/assets/VWindowItem-BmpD4isF.js.gz +0 -0
- codex/static_root/assets/{admin-pnPIiLQj.b791e7869cf5.js → admin-26AnWn-T.fe23350475b4.js} +1 -1
- codex/static_root/assets/admin-26AnWn-T.fe23350475b4.js.br +0 -0
- codex/static_root/assets/admin-26AnWn-T.fe23350475b4.js.gz +0 -0
- codex/static_root/assets/{admin-pnPIiLQj.js → admin-26AnWn-T.js} +1 -1
- codex/static_root/assets/admin-26AnWn-T.js.br +0 -0
- codex/static_root/assets/admin-26AnWn-T.js.gz +0 -0
- codex/static_root/assets/{admin-DuEKXO1g.5c6bfe166705.js → admin-BhRwDL_I.72c00e104cd2.js} +1 -1
- codex/static_root/assets/admin-BhRwDL_I.72c00e104cd2.js.br +0 -0
- codex/static_root/assets/admin-BhRwDL_I.72c00e104cd2.js.gz +0 -0
- codex/static_root/assets/{admin-DuEKXO1g.js → admin-BhRwDL_I.js} +1 -1
- codex/static_root/assets/admin-BhRwDL_I.js.br +0 -0
- codex/static_root/assets/admin-BhRwDL_I.js.gz +0 -0
- codex/static_root/assets/{admin-menu-DBce75Uy.be45a0a53c1a.js → admin-menu-42Q4jLGf.b87cc355497b.js} +1 -1
- codex/static_root/assets/admin-menu-42Q4jLGf.b87cc355497b.js.br +0 -0
- codex/static_root/assets/admin-menu-42Q4jLGf.b87cc355497b.js.gz +0 -0
- codex/static_root/assets/{admin-menu-DBce75Uy.js → admin-menu-42Q4jLGf.js} +1 -1
- codex/static_root/assets/admin-menu-42Q4jLGf.js.br +0 -0
- codex/static_root/assets/admin-menu-42Q4jLGf.js.gz +0 -0
- codex/static_root/assets/{admin-settings-button-progress-C4VmW80I.c8d9033b8bc5.js → admin-settings-button-progress-hYnDmn23.ffed6d808c68.js} +1 -1
- codex/static_root/assets/admin-settings-button-progress-hYnDmn23.ffed6d808c68.js.br +4 -0
- codex/static_root/assets/admin-settings-button-progress-hYnDmn23.ffed6d808c68.js.gz +0 -0
- codex/static_root/assets/{admin-settings-button-progress-C4VmW80I.js → admin-settings-button-progress-hYnDmn23.js} +1 -1
- codex/static_root/assets/admin-settings-button-progress-hYnDmn23.js.br +4 -0
- codex/static_root/assets/admin-settings-button-progress-hYnDmn23.js.gz +0 -0
- codex/static_root/assets/{browser-DOuRKBxy.js → browser-BiLF_XL8.d0ffb7b04624.js} +1 -1
- codex/static_root/assets/browser-BiLF_XL8.d0ffb7b04624.js.br +0 -0
- codex/static_root/assets/browser-BiLF_XL8.d0ffb7b04624.js.gz +0 -0
- codex/static_root/assets/{browser-DOuRKBxy.c9a72e4f9498.js → browser-BiLF_XL8.js} +1 -1
- codex/static_root/assets/browser-BiLF_XL8.js.br +0 -0
- codex/static_root/assets/browser-BiLF_XL8.js.gz +0 -0
- codex/static_root/assets/{browser-TRzEFz_k.css → browser-CS6VSg0_.9a6e8eda0520.css} +1 -1
- codex/static_root/assets/browser-CS6VSg0_.9a6e8eda0520.css.br +0 -0
- codex/static_root/assets/browser-CS6VSg0_.9a6e8eda0520.css.gz +0 -0
- codex/static_root/assets/{browser-TRzEFz_k.e8ae750c4a41.css → browser-CS6VSg0_.css} +1 -1
- codex/static_root/assets/browser-CS6VSg0_.css.br +0 -0
- codex/static_root/assets/browser-CS6VSg0_.css.gz +0 -0
- codex/static_root/assets/{change-password-dialog-B4tB0bVX.5b476ac6a873.js → change-password-dialog-Df28DwbL.7e3eb3fdb42a.js} +1 -1
- codex/static_root/assets/change-password-dialog-Df28DwbL.7e3eb3fdb42a.js.br +0 -0
- codex/static_root/assets/change-password-dialog-Df28DwbL.7e3eb3fdb42a.js.gz +0 -0
- codex/static_root/assets/{change-password-dialog-B4tB0bVX.js → change-password-dialog-Df28DwbL.js} +1 -1
- codex/static_root/assets/change-password-dialog-Df28DwbL.js.br +0 -0
- codex/static_root/assets/change-password-dialog-Df28DwbL.js.gz +0 -0
- codex/static_root/assets/{confirm-dialog-C0DHEcnB.e2d9968f6fea.js → confirm-dialog-DgKUUL0b.bd6e76fa370e.js} +1 -1
- codex/static_root/assets/confirm-dialog-DgKUUL0b.bd6e76fa370e.js.br +0 -0
- codex/static_root/assets/confirm-dialog-DgKUUL0b.bd6e76fa370e.js.gz +0 -0
- codex/static_root/assets/{confirm-dialog-C0DHEcnB.js → confirm-dialog-DgKUUL0b.js} +1 -1
- codex/static_root/assets/confirm-dialog-DgKUUL0b.js.br +0 -0
- codex/static_root/assets/confirm-dialog-DgKUUL0b.js.gz +0 -0
- codex/static_root/assets/{datetime-column-j_CRGEuQ.cc499deb52f7.js → datetime-column-jb1Y13cY.f98386c3c6cf.js} +1 -1
- codex/static_root/assets/datetime-column-jb1Y13cY.f98386c3c6cf.js.br +0 -0
- codex/static_root/assets/datetime-column-jb1Y13cY.f98386c3c6cf.js.gz +0 -0
- codex/static_root/assets/{datetime-column-j_CRGEuQ.js → datetime-column-jb1Y13cY.js} +1 -1
- codex/static_root/assets/datetime-column-jb1Y13cY.js.br +0 -0
- codex/static_root/assets/datetime-column-jb1Y13cY.js.gz +0 -0
- codex/static_root/assets/{filter-Baea_DNH.985ef541d6af.js → filter-DU947LwF.64baedae8854.js} +1 -1
- codex/static_root/assets/filter-DU947LwF.64baedae8854.js.br +0 -0
- codex/static_root/assets/filter-DU947LwF.64baedae8854.js.gz +0 -0
- codex/static_root/assets/{filter-Baea_DNH.js → filter-DU947LwF.js} +1 -1
- codex/static_root/assets/filter-DU947LwF.js.br +0 -0
- codex/static_root/assets/filter-DU947LwF.js.gz +0 -0
- codex/static_root/assets/{flag-tab-DefdNLmr.0cf5a73c1c8c.js → flag-tab-BTT0536t.4219f4036821.js} +1 -1
- codex/static_root/assets/flag-tab-BTT0536t.4219f4036821.js.br +0 -0
- codex/static_root/assets/flag-tab-BTT0536t.4219f4036821.js.gz +0 -0
- codex/static_root/assets/{flag-tab-DefdNLmr.js → flag-tab-BTT0536t.js} +1 -1
- codex/static_root/assets/flag-tab-BTT0536t.js.br +0 -0
- codex/static_root/assets/flag-tab-BTT0536t.js.gz +0 -0
- codex/static_root/assets/{forwardRefs-Bvy6478W.js → forwardRefs-BGAZ1bvO.676c1aac262e.js} +1 -1
- codex/static_root/assets/forwardRefs-BGAZ1bvO.676c1aac262e.js.br +0 -0
- codex/static_root/assets/forwardRefs-BGAZ1bvO.676c1aac262e.js.gz +0 -0
- codex/static_root/assets/{forwardRefs-Bvy6478W.409df679a82f.js → forwardRefs-BGAZ1bvO.js} +1 -1
- codex/static_root/assets/forwardRefs-BGAZ1bvO.js.br +0 -0
- codex/static_root/assets/forwardRefs-BGAZ1bvO.js.gz +0 -0
- codex/static_root/assets/{group-tab-C71MBY7x.483482eaaf8c.js → group-tab-BP-SEY6G.0cb4e211f69e.js} +1 -1
- codex/static_root/assets/group-tab-BP-SEY6G.0cb4e211f69e.js.br +0 -0
- codex/static_root/assets/group-tab-BP-SEY6G.0cb4e211f69e.js.gz +0 -0
- codex/static_root/assets/{group-tab-C71MBY7x.js → group-tab-BP-SEY6G.js} +1 -1
- codex/static_root/assets/group-tab-BP-SEY6G.js.br +0 -0
- codex/static_root/assets/group-tab-BP-SEY6G.js.gz +0 -0
- codex/static_root/assets/{http-error-mPrHO762.70c41cde5ee1.js → http-error-1DNqtVPW.968aac8be867.js} +1 -1
- codex/static_root/assets/http-error-1DNqtVPW.968aac8be867.js.br +0 -0
- codex/static_root/assets/http-error-1DNqtVPW.968aac8be867.js.gz +0 -0
- codex/static_root/assets/{http-error-mPrHO762.js → http-error-1DNqtVPW.js} +1 -1
- codex/static_root/assets/http-error-1DNqtVPW.js.br +0 -0
- codex/static_root/assets/http-error-1DNqtVPW.js.gz +0 -0
- codex/static_root/assets/{index-Bxqss4CY.5f797cedb404.js → index-Cm9w_Tog.a1b4683f2e1d.js} +1 -1
- codex/static_root/assets/index-Cm9w_Tog.a1b4683f2e1d.js.br +0 -0
- codex/static_root/assets/index-Cm9w_Tog.a1b4683f2e1d.js.gz +0 -0
- codex/static_root/assets/{index-Bxqss4CY.js → index-Cm9w_Tog.js} +1 -1
- codex/static_root/assets/index-Cm9w_Tog.js.br +0 -0
- codex/static_root/assets/index-Cm9w_Tog.js.gz +0 -0
- codex/static_root/assets/{library-tab-DG2bhQ_A.e831e11418e2.js → library-tab-C6FTaygv.b5c79b97a5a3.js} +1 -1
- codex/static_root/assets/library-tab-C6FTaygv.b5c79b97a5a3.js.br +0 -0
- codex/static_root/assets/library-tab-C6FTaygv.b5c79b97a5a3.js.gz +0 -0
- codex/static_root/assets/{library-tab-DG2bhQ_A.js → library-tab-C6FTaygv.js} +1 -1
- codex/static_root/assets/library-tab-C6FTaygv.js.br +0 -0
- codex/static_root/assets/library-tab-C6FTaygv.js.gz +0 -0
- codex/static_root/assets/{main-RxUHaWll.d7d671319f8d.js → main-CTlarBH9.047e388380e4.js} +3 -3
- codex/static_root/assets/main-CTlarBH9.047e388380e4.js.br +0 -0
- codex/static_root/assets/main-CTlarBH9.047e388380e4.js.gz +0 -0
- codex/static_root/assets/{main-RxUHaWll.js → main-CTlarBH9.js} +3 -3
- codex/static_root/assets/main-CTlarBH9.js.br +0 -0
- codex/static_root/assets/main-CTlarBH9.js.gz +0 -0
- codex/static_root/assets/pager-full-pdf-BRkb6G_B.62c8a1533096.js +1 -0
- codex/static_root/assets/pager-full-pdf-BRkb6G_B.62c8a1533096.js.br +0 -0
- codex/static_root/assets/pager-full-pdf-BRkb6G_B.62c8a1533096.js.gz +0 -0
- codex/static_root/assets/pager-full-pdf-BRkb6G_B.js +1 -0
- codex/static_root/assets/pager-full-pdf-BRkb6G_B.js.br +0 -0
- codex/static_root/assets/pager-full-pdf-BRkb6G_B.js.gz +0 -0
- codex/static_root/assets/{pagination-toolbar-ChW-jj1Q.js → pagination-toolbar-U9PS3jI7.27a94126052e.js} +1 -1
- codex/static_root/assets/pagination-toolbar-U9PS3jI7.27a94126052e.js.br +0 -0
- codex/static_root/assets/pagination-toolbar-U9PS3jI7.27a94126052e.js.gz +0 -0
- codex/static_root/assets/{pagination-toolbar-ChW-jj1Q.0cf6985b630e.js → pagination-toolbar-U9PS3jI7.js} +1 -1
- codex/static_root/assets/pagination-toolbar-U9PS3jI7.js.br +0 -0
- codex/static_root/assets/pagination-toolbar-U9PS3jI7.js.gz +0 -0
- codex/static_root/assets/{pdf-doc-CfiAAYT8.c4fb1945d1c5.js → pdf-doc-CMzddyqW.5ef7eef50756.js} +1 -1
- codex/static_root/assets/pdf-doc-CMzddyqW.5ef7eef50756.js.br +0 -0
- codex/static_root/assets/{pdf-doc-CfiAAYT8.c4fb1945d1c5.js.gz → pdf-doc-CMzddyqW.5ef7eef50756.js.gz} +0 -0
- codex/static_root/assets/{pdf-doc-CfiAAYT8.js → pdf-doc-CMzddyqW.js} +1 -1
- codex/static_root/assets/pdf-doc-CMzddyqW.js.br +0 -0
- codex/static_root/assets/{pdf-doc-CfiAAYT8.js.gz → pdf-doc-CMzddyqW.js.gz} +0 -0
- codex/static_root/assets/{reader-BNwsMjad.js → reader-DFkGB8xM.ba0585d918b5.js} +2 -2
- codex/static_root/assets/reader-DFkGB8xM.ba0585d918b5.js.br +0 -0
- codex/static_root/assets/reader-DFkGB8xM.ba0585d918b5.js.gz +0 -0
- codex/static_root/assets/{reader-BNwsMjad.78e4ad034141.js → reader-DFkGB8xM.js} +2 -2
- codex/static_root/assets/reader-DFkGB8xM.js.br +0 -0
- codex/static_root/assets/reader-DFkGB8xM.js.gz +0 -0
- codex/static_root/assets/{relation-chips-Cfk3FVE5.eadbc380a353.js → relation-chips-32lE_odZ.7cc1620d4c97.js} +1 -1
- codex/static_root/assets/relation-chips-32lE_odZ.7cc1620d4c97.js.br +0 -0
- codex/static_root/assets/relation-chips-32lE_odZ.7cc1620d4c97.js.gz +0 -0
- codex/static_root/assets/{relation-chips-Cfk3FVE5.js → relation-chips-32lE_odZ.js} +1 -1
- codex/static_root/assets/relation-chips-32lE_odZ.js.br +0 -0
- codex/static_root/assets/relation-chips-32lE_odZ.js.gz +0 -0
- codex/static_root/assets/{settings-drawer-BvHMmEFL.6b6d9bf0e2ad.js → settings-drawer-BaTLfqbD.8693ca4de517.js} +2 -2
- codex/static_root/assets/settings-drawer-BaTLfqbD.8693ca4de517.js.br +0 -0
- codex/static_root/assets/settings-drawer-BaTLfqbD.8693ca4de517.js.gz +0 -0
- codex/static_root/assets/{settings-drawer-BvHMmEFL.js → settings-drawer-BaTLfqbD.js} +2 -2
- codex/static_root/assets/settings-drawer-BaTLfqbD.js.br +0 -0
- codex/static_root/assets/settings-drawer-BaTLfqbD.js.gz +0 -0
- codex/static_root/assets/{ssrBoot-BBuVfjys.ee6df7695a63.js → ssrBoot-CjQLVcFD.0db2c2fe9b66.js} +1 -1
- codex/static_root/assets/ssrBoot-CjQLVcFD.0db2c2fe9b66.js.br +0 -0
- codex/static_root/assets/ssrBoot-CjQLVcFD.0db2c2fe9b66.js.gz +0 -0
- codex/static_root/assets/{ssrBoot-BBuVfjys.js → ssrBoot-CjQLVcFD.js} +1 -1
- codex/static_root/assets/ssrBoot-CjQLVcFD.js.br +0 -0
- codex/static_root/assets/ssrBoot-CjQLVcFD.js.gz +0 -0
- codex/static_root/assets/{stats-tab-BW725H_T.61e34db4cc39.js → stats-tab-WD67DkuY.4cd13274173f.js} +1 -1
- codex/static_root/assets/stats-tab-WD67DkuY.4cd13274173f.js.br +0 -0
- codex/static_root/assets/stats-tab-WD67DkuY.4cd13274173f.js.gz +0 -0
- codex/static_root/assets/{stats-tab-BW725H_T.js → stats-tab-WD67DkuY.js} +1 -1
- codex/static_root/assets/stats-tab-WD67DkuY.js.br +0 -0
- codex/static_root/assets/stats-tab-WD67DkuY.js.gz +0 -0
- codex/static_root/assets/{task-tab-P3x-M3d5.59e0479f2f1e.js → task-tab-CHOLNUJh.bbf1c7a95058.js} +1 -1
- codex/static_root/assets/task-tab-CHOLNUJh.bbf1c7a95058.js.br +0 -0
- codex/static_root/assets/task-tab-CHOLNUJh.bbf1c7a95058.js.gz +0 -0
- codex/static_root/assets/{task-tab-P3x-M3d5.js → task-tab-CHOLNUJh.js} +1 -1
- codex/static_root/assets/task-tab-CHOLNUJh.js.br +0 -0
- codex/static_root/assets/task-tab-CHOLNUJh.js.gz +0 -0
- codex/static_root/assets/{unauthorized-CC6sHmUB.394dffd78457.js → unauthorized-BsEyzLQ2.e54a69cff5c6.js} +1 -1
- codex/static_root/assets/unauthorized-BsEyzLQ2.e54a69cff5c6.js.br +0 -0
- codex/static_root/assets/unauthorized-BsEyzLQ2.e54a69cff5c6.js.gz +0 -0
- codex/static_root/assets/{unauthorized-CC6sHmUB.js → unauthorized-BsEyzLQ2.js} +1 -1
- codex/static_root/assets/unauthorized-BsEyzLQ2.js.br +0 -0
- codex/static_root/assets/unauthorized-BsEyzLQ2.js.gz +0 -0
- codex/static_root/assets/{user-tab-OaDKeq2f.ac3d682c35f1.js → user-tab-CbNhbZzZ.af38f932a795.js} +1 -1
- codex/static_root/assets/user-tab-CbNhbZzZ.af38f932a795.js.br +0 -0
- codex/static_root/assets/user-tab-CbNhbZzZ.af38f932a795.js.gz +0 -0
- codex/static_root/assets/{user-tab-OaDKeq2f.js → user-tab-CbNhbZzZ.js} +1 -1
- codex/static_root/assets/user-tab-CbNhbZzZ.js.br +0 -0
- codex/static_root/assets/user-tab-CbNhbZzZ.js.gz +0 -0
- codex/static_root/{manifest.d51267c3637d.json → manifest.39fe502cd3a2.json} +296 -296
- codex/static_root/manifest.39fe502cd3a2.json.br +0 -0
- codex/static_root/manifest.39fe502cd3a2.json.gz +0 -0
- codex/static_root/manifest.json +296 -296
- codex/static_root/manifest.json.br +0 -0
- codex/static_root/manifest.json.gz +0 -0
- codex/static_root/staticfiles.json +1 -1
- {codex-1.8.8.dist-info → codex-1.8.10.dist-info}/METADATA +1 -1
- {codex-1.8.8.dist-info → codex-1.8.10.dist-info}/RECORD +268 -268
- codex/static_root/assets/VCheckbox-MwE_xq11.b2e2086608d9.js.br +0 -0
- codex/static_root/assets/VCheckbox-MwE_xq11.b2e2086608d9.js.gz +0 -0
- codex/static_root/assets/VCheckbox-MwE_xq11.js.br +0 -0
- codex/static_root/assets/VCheckbox-MwE_xq11.js.gz +0 -0
- codex/static_root/assets/VCheckboxBtn-HUjl2ti_.f3e7b85503c6.js.br +0 -0
- codex/static_root/assets/VCheckboxBtn-HUjl2ti_.f3e7b85503c6.js.gz +0 -0
- codex/static_root/assets/VCheckboxBtn-HUjl2ti_.js.br +0 -0
- codex/static_root/assets/VCheckboxBtn-HUjl2ti_.js.gz +0 -0
- codex/static_root/assets/VCombobox-C1Osy24P.73168f28d07b.js.br +0 -0
- codex/static_root/assets/VCombobox-C1Osy24P.73168f28d07b.js.gz +0 -0
- codex/static_root/assets/VCombobox-C1Osy24P.js.br +0 -0
- codex/static_root/assets/VCombobox-C1Osy24P.js.gz +0 -0
- codex/static_root/assets/VDialog-c2XXqNJH.a4156ca20133.js.br +0 -0
- codex/static_root/assets/VDialog-c2XXqNJH.a4156ca20133.js.gz +0 -0
- codex/static_root/assets/VDialog-c2XXqNJH.js.br +0 -0
- codex/static_root/assets/VDialog-c2XXqNJH.js.gz +0 -0
- codex/static_root/assets/VDivider-C06z3Tn-.d5e3ed421a68.js.br +0 -0
- codex/static_root/assets/VDivider-C06z3Tn-.d5e3ed421a68.js.gz +0 -0
- codex/static_root/assets/VDivider-C06z3Tn-.js.br +0 -0
- codex/static_root/assets/VDivider-C06z3Tn-.js.gz +0 -0
- codex/static_root/assets/VExpansionPanels-B8gzbonk.3532c6d08817.js.br +0 -0
- codex/static_root/assets/VExpansionPanels-B8gzbonk.3532c6d08817.js.gz +0 -0
- codex/static_root/assets/VExpansionPanels-B8gzbonk.js.br +0 -0
- codex/static_root/assets/VExpansionPanels-B8gzbonk.js.gz +0 -0
- codex/static_root/assets/VForm-Chf0FU2x.3e8425bff3d0.js.br +0 -0
- codex/static_root/assets/VForm-Chf0FU2x.3e8425bff3d0.js.gz +0 -0
- codex/static_root/assets/VForm-Chf0FU2x.js.br +0 -0
- codex/static_root/assets/VForm-Chf0FU2x.js.gz +0 -0
- codex/static_root/assets/VRadioGroup-CHteIFqx.23cb51ee43e1.js.br +0 -0
- codex/static_root/assets/VRadioGroup-CHteIFqx.23cb51ee43e1.js.gz +0 -0
- codex/static_root/assets/VRadioGroup-CHteIFqx.js.br +0 -0
- codex/static_root/assets/VRadioGroup-CHteIFqx.js.gz +0 -0
- codex/static_root/assets/VSelect-BqS1Prvd.36bbebae4f0d.js.br +0 -0
- codex/static_root/assets/VSelect-BqS1Prvd.36bbebae4f0d.js.gz +0 -0
- codex/static_root/assets/VSelect-BqS1Prvd.js.br +0 -0
- codex/static_root/assets/VSelect-BqS1Prvd.js.gz +0 -0
- codex/static_root/assets/VSelectionControl-BRWozKsT.d10531c1a243.js.br +0 -0
- codex/static_root/assets/VSelectionControl-BRWozKsT.d10531c1a243.js.gz +0 -0
- codex/static_root/assets/VSelectionControl-BRWozKsT.js.br +0 -0
- codex/static_root/assets/VSelectionControl-BRWozKsT.js.gz +0 -0
- codex/static_root/assets/VTable-BT6w_ifJ.ee6b710fb398.js.br +0 -0
- codex/static_root/assets/VTable-BT6w_ifJ.ee6b710fb398.js.gz +0 -0
- codex/static_root/assets/VTable-BT6w_ifJ.js.br +0 -0
- codex/static_root/assets/VTable-BT6w_ifJ.js.gz +0 -0
- codex/static_root/assets/VWindowItem-sfdsG_YK.ee17f6723988.js.br +0 -0
- codex/static_root/assets/VWindowItem-sfdsG_YK.ee17f6723988.js.gz +0 -0
- codex/static_root/assets/VWindowItem-sfdsG_YK.js.br +0 -0
- codex/static_root/assets/VWindowItem-sfdsG_YK.js.gz +0 -0
- codex/static_root/assets/admin-DuEKXO1g.5c6bfe166705.js.br +0 -0
- codex/static_root/assets/admin-DuEKXO1g.5c6bfe166705.js.gz +0 -0
- codex/static_root/assets/admin-DuEKXO1g.js.br +0 -0
- codex/static_root/assets/admin-DuEKXO1g.js.gz +0 -0
- codex/static_root/assets/admin-menu-DBce75Uy.be45a0a53c1a.js.br +0 -0
- codex/static_root/assets/admin-menu-DBce75Uy.be45a0a53c1a.js.gz +0 -0
- codex/static_root/assets/admin-menu-DBce75Uy.js.br +0 -0
- codex/static_root/assets/admin-menu-DBce75Uy.js.gz +0 -0
- codex/static_root/assets/admin-pnPIiLQj.b791e7869cf5.js.br +0 -0
- codex/static_root/assets/admin-pnPIiLQj.b791e7869cf5.js.gz +0 -0
- codex/static_root/assets/admin-pnPIiLQj.js.br +0 -0
- codex/static_root/assets/admin-pnPIiLQj.js.gz +0 -0
- codex/static_root/assets/admin-settings-button-progress-C4VmW80I.c8d9033b8bc5.js.br +0 -0
- codex/static_root/assets/admin-settings-button-progress-C4VmW80I.c8d9033b8bc5.js.gz +0 -0
- codex/static_root/assets/admin-settings-button-progress-C4VmW80I.js.br +0 -0
- codex/static_root/assets/admin-settings-button-progress-C4VmW80I.js.gz +0 -0
- codex/static_root/assets/browser-DOuRKBxy.c9a72e4f9498.js.br +0 -0
- codex/static_root/assets/browser-DOuRKBxy.c9a72e4f9498.js.gz +0 -0
- codex/static_root/assets/browser-DOuRKBxy.js.br +0 -0
- codex/static_root/assets/browser-DOuRKBxy.js.gz +0 -0
- codex/static_root/assets/browser-TRzEFz_k.css.br +0 -0
- codex/static_root/assets/browser-TRzEFz_k.css.gz +0 -0
- codex/static_root/assets/browser-TRzEFz_k.e8ae750c4a41.css.br +0 -0
- codex/static_root/assets/browser-TRzEFz_k.e8ae750c4a41.css.gz +0 -0
- codex/static_root/assets/change-password-dialog-B4tB0bVX.5b476ac6a873.js.br +0 -0
- codex/static_root/assets/change-password-dialog-B4tB0bVX.5b476ac6a873.js.gz +0 -0
- codex/static_root/assets/change-password-dialog-B4tB0bVX.js.br +0 -0
- codex/static_root/assets/change-password-dialog-B4tB0bVX.js.gz +0 -0
- codex/static_root/assets/confirm-dialog-C0DHEcnB.e2d9968f6fea.js.br +0 -0
- codex/static_root/assets/confirm-dialog-C0DHEcnB.e2d9968f6fea.js.gz +0 -0
- codex/static_root/assets/confirm-dialog-C0DHEcnB.js.br +0 -0
- codex/static_root/assets/confirm-dialog-C0DHEcnB.js.gz +0 -0
- codex/static_root/assets/datetime-column-j_CRGEuQ.cc499deb52f7.js.br +0 -4
- codex/static_root/assets/datetime-column-j_CRGEuQ.cc499deb52f7.js.gz +0 -0
- codex/static_root/assets/datetime-column-j_CRGEuQ.js.br +0 -4
- codex/static_root/assets/datetime-column-j_CRGEuQ.js.gz +0 -0
- codex/static_root/assets/filter-Baea_DNH.985ef541d6af.js.br +0 -0
- codex/static_root/assets/filter-Baea_DNH.985ef541d6af.js.gz +0 -0
- codex/static_root/assets/filter-Baea_DNH.js.br +0 -0
- codex/static_root/assets/filter-Baea_DNH.js.gz +0 -0
- codex/static_root/assets/flag-tab-DefdNLmr.0cf5a73c1c8c.js.br +0 -0
- codex/static_root/assets/flag-tab-DefdNLmr.0cf5a73c1c8c.js.gz +0 -0
- codex/static_root/assets/flag-tab-DefdNLmr.js.br +0 -0
- codex/static_root/assets/flag-tab-DefdNLmr.js.gz +0 -0
- codex/static_root/assets/forwardRefs-Bvy6478W.409df679a82f.js.br +0 -0
- codex/static_root/assets/forwardRefs-Bvy6478W.409df679a82f.js.gz +0 -0
- codex/static_root/assets/forwardRefs-Bvy6478W.js.br +0 -0
- codex/static_root/assets/forwardRefs-Bvy6478W.js.gz +0 -0
- codex/static_root/assets/group-tab-C71MBY7x.483482eaaf8c.js.br +0 -0
- codex/static_root/assets/group-tab-C71MBY7x.483482eaaf8c.js.gz +0 -0
- codex/static_root/assets/group-tab-C71MBY7x.js.br +0 -0
- codex/static_root/assets/group-tab-C71MBY7x.js.gz +0 -0
- codex/static_root/assets/http-error-mPrHO762.70c41cde5ee1.js.br +0 -0
- codex/static_root/assets/http-error-mPrHO762.70c41cde5ee1.js.gz +0 -0
- codex/static_root/assets/http-error-mPrHO762.js.br +0 -0
- codex/static_root/assets/http-error-mPrHO762.js.gz +0 -0
- codex/static_root/assets/index-Bxqss4CY.5f797cedb404.js.br +0 -0
- codex/static_root/assets/index-Bxqss4CY.5f797cedb404.js.gz +0 -0
- codex/static_root/assets/index-Bxqss4CY.js.br +0 -0
- codex/static_root/assets/index-Bxqss4CY.js.gz +0 -0
- codex/static_root/assets/library-tab-DG2bhQ_A.e831e11418e2.js.br +0 -0
- codex/static_root/assets/library-tab-DG2bhQ_A.e831e11418e2.js.gz +0 -0
- codex/static_root/assets/library-tab-DG2bhQ_A.js.br +0 -0
- codex/static_root/assets/library-tab-DG2bhQ_A.js.gz +0 -0
- codex/static_root/assets/main-RxUHaWll.d7d671319f8d.js.br +0 -0
- codex/static_root/assets/main-RxUHaWll.d7d671319f8d.js.gz +0 -0
- codex/static_root/assets/main-RxUHaWll.js.br +0 -0
- codex/static_root/assets/main-RxUHaWll.js.gz +0 -0
- codex/static_root/assets/pager-full-pdf-DYbA0-qc.b66019cafd05.js +0 -1
- codex/static_root/assets/pager-full-pdf-DYbA0-qc.b66019cafd05.js.br +0 -0
- codex/static_root/assets/pager-full-pdf-DYbA0-qc.b66019cafd05.js.gz +0 -0
- codex/static_root/assets/pager-full-pdf-DYbA0-qc.js +0 -1
- codex/static_root/assets/pager-full-pdf-DYbA0-qc.js.br +0 -0
- codex/static_root/assets/pager-full-pdf-DYbA0-qc.js.gz +0 -0
- codex/static_root/assets/pagination-toolbar-ChW-jj1Q.0cf6985b630e.js.br +0 -0
- codex/static_root/assets/pagination-toolbar-ChW-jj1Q.0cf6985b630e.js.gz +0 -0
- codex/static_root/assets/pagination-toolbar-ChW-jj1Q.js.br +0 -0
- codex/static_root/assets/pagination-toolbar-ChW-jj1Q.js.gz +0 -0
- codex/static_root/assets/pdf-doc-CfiAAYT8.c4fb1945d1c5.js.br +0 -0
- codex/static_root/assets/pdf-doc-CfiAAYT8.js.br +0 -0
- codex/static_root/assets/reader-BNwsMjad.78e4ad034141.js.br +0 -0
- codex/static_root/assets/reader-BNwsMjad.78e4ad034141.js.gz +0 -0
- codex/static_root/assets/reader-BNwsMjad.js.br +0 -0
- codex/static_root/assets/reader-BNwsMjad.js.gz +0 -0
- codex/static_root/assets/relation-chips-Cfk3FVE5.eadbc380a353.js.br +0 -0
- codex/static_root/assets/relation-chips-Cfk3FVE5.eadbc380a353.js.gz +0 -0
- codex/static_root/assets/relation-chips-Cfk3FVE5.js.br +0 -0
- codex/static_root/assets/relation-chips-Cfk3FVE5.js.gz +0 -0
- codex/static_root/assets/settings-drawer-BvHMmEFL.6b6d9bf0e2ad.js.br +0 -0
- codex/static_root/assets/settings-drawer-BvHMmEFL.6b6d9bf0e2ad.js.gz +0 -0
- codex/static_root/assets/settings-drawer-BvHMmEFL.js.br +0 -0
- codex/static_root/assets/settings-drawer-BvHMmEFL.js.gz +0 -0
- codex/static_root/assets/ssrBoot-BBuVfjys.ee6df7695a63.js.br +0 -0
- codex/static_root/assets/ssrBoot-BBuVfjys.ee6df7695a63.js.gz +0 -0
- codex/static_root/assets/ssrBoot-BBuVfjys.js.br +0 -0
- codex/static_root/assets/ssrBoot-BBuVfjys.js.gz +0 -0
- codex/static_root/assets/stats-tab-BW725H_T.61e34db4cc39.js.br +0 -0
- codex/static_root/assets/stats-tab-BW725H_T.61e34db4cc39.js.gz +0 -0
- codex/static_root/assets/stats-tab-BW725H_T.js.br +0 -0
- codex/static_root/assets/stats-tab-BW725H_T.js.gz +0 -0
- codex/static_root/assets/task-tab-P3x-M3d5.59e0479f2f1e.js.br +0 -0
- codex/static_root/assets/task-tab-P3x-M3d5.59e0479f2f1e.js.gz +0 -0
- codex/static_root/assets/task-tab-P3x-M3d5.js.br +0 -0
- codex/static_root/assets/task-tab-P3x-M3d5.js.gz +0 -0
- codex/static_root/assets/unauthorized-CC6sHmUB.394dffd78457.js.br +0 -0
- codex/static_root/assets/unauthorized-CC6sHmUB.394dffd78457.js.gz +0 -0
- codex/static_root/assets/unauthorized-CC6sHmUB.js.br +0 -0
- codex/static_root/assets/unauthorized-CC6sHmUB.js.gz +0 -0
- codex/static_root/assets/user-tab-OaDKeq2f.ac3d682c35f1.js.br +0 -0
- codex/static_root/assets/user-tab-OaDKeq2f.ac3d682c35f1.js.gz +0 -0
- codex/static_root/assets/user-tab-OaDKeq2f.js.br +0 -0
- codex/static_root/assets/user-tab-OaDKeq2f.js.gz +0 -0
- codex/static_root/manifest.d51267c3637d.json.br +0 -0
- codex/static_root/manifest.d51267c3637d.json.gz +0 -0
- {codex-1.8.8.dist-info → codex-1.8.10.dist-info}/WHEEL +0 -0
- {codex-1.8.8.dist-info → codex-1.8.10.dist-info}/entry_points.txt +0 -0
- {codex-1.8.8.dist-info → codex-1.8.10.dist-info}/licenses/LICENSE +0 -0
|
@@ -8,7 +8,7 @@ from django.utils import timezone
|
|
|
8
8
|
|
|
9
9
|
from codex.librarian.scribe.janitor.status import JanitorCodexLatestVersionStatus
|
|
10
10
|
from codex.librarian.scribe.janitor.tasks import JanitorCodexUpdateTask
|
|
11
|
-
from codex.librarian.worker import
|
|
11
|
+
from codex.librarian.worker import WorkerStatusBase
|
|
12
12
|
from codex.models import Timestamp
|
|
13
13
|
from codex.version import PACKAGE_NAME
|
|
14
14
|
|
|
@@ -18,7 +18,7 @@ _CACHE_EXPIRY = timedelta(days=1) - timedelta(minutes=5)
|
|
|
18
18
|
_REPO_TIMEOUT = 5
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
class CodexLatestVersionUpdater(
|
|
21
|
+
class CodexLatestVersionUpdater(WorkerStatusBase):
|
|
22
22
|
"""Methods for fetching the latest version."""
|
|
23
23
|
|
|
24
24
|
@staticmethod
|
|
@@ -59,7 +59,3 @@ class CodexLatestVersionUpdater(WorkerStatusMixin):
|
|
|
59
59
|
self.log.log(level, log_txt)
|
|
60
60
|
finally:
|
|
61
61
|
self.status_controller.finish(status)
|
|
62
|
-
|
|
63
|
-
def __init__(self, *args, **kwargs):
|
|
64
|
-
"""Init Worker."""
|
|
65
|
-
self.init_worker(*args, **kwargs)
|
codex/librarian/librariand.py
CHANGED
|
@@ -10,9 +10,11 @@ from aioprocessing.queues import AioQueue
|
|
|
10
10
|
from caseconverter import snakecase
|
|
11
11
|
from typing_extensions import override
|
|
12
12
|
|
|
13
|
-
from codex.librarian.bookmark.bookmarkd import BookmarkThread
|
|
13
|
+
from codex.librarian.bookmark.bookmarkd import BookmarkThread # typos: ignore
|
|
14
14
|
from codex.librarian.bookmark.tasks import BookmarkTask
|
|
15
|
-
from codex.librarian.covers.coverd import
|
|
15
|
+
from codex.librarian.covers.coverd import ( # codespell:ignore coverd, typos: ignore
|
|
16
|
+
CoverThread,
|
|
17
|
+
)
|
|
16
18
|
from codex.librarian.covers.tasks import CoverTask
|
|
17
19
|
from codex.librarian.cron.crond import CronThread
|
|
18
20
|
from codex.librarian.notifier.notifierd import NotifierThread
|
|
@@ -95,7 +97,7 @@ class LibrarianDaemon(Process):
|
|
|
95
97
|
case WakeCronTask():
|
|
96
98
|
self._threads.cron_thread.end_timeout()
|
|
97
99
|
case CodexRestarterTask():
|
|
98
|
-
restarter = CodexRestarter(self.log, self.queue)
|
|
100
|
+
restarter = CodexRestarter(self.log, self.queue, None)
|
|
99
101
|
restarter.handle_task(task)
|
|
100
102
|
case LibrarianShutdownTask():
|
|
101
103
|
self.log.info(f"Shutting down {self.name}...")
|
|
@@ -13,10 +13,10 @@ from codex.librarian.restarter.tasks import (
|
|
|
13
13
|
)
|
|
14
14
|
from codex.librarian.status import Status
|
|
15
15
|
from codex.librarian.tasks import LibrarianShutdownTask
|
|
16
|
-
from codex.librarian.worker import
|
|
16
|
+
from codex.librarian.worker import WorkerStatusBase
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
class CodexRestarter(
|
|
19
|
+
class CodexRestarter(WorkerStatusBase):
|
|
20
20
|
"""Codex restarter."""
|
|
21
21
|
|
|
22
22
|
def _shutdown_codex(self, status, name, sig):
|
|
@@ -49,7 +49,3 @@ class CodexRestarter(WorkerStatusMixin):
|
|
|
49
49
|
self.shutdown_codex()
|
|
50
50
|
case _:
|
|
51
51
|
self.log.warning(f"Unknown Codex RestarterTask: f{task}")
|
|
52
|
-
|
|
53
|
-
def __init__(self, *args, **kwargs):
|
|
54
|
-
"""Init worker."""
|
|
55
|
-
self.init_worker(*args, **kwargs)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""
|
|
1
|
+
"""Initialize Importer."""
|
|
2
2
|
|
|
3
3
|
from dataclasses import asdict, dataclass
|
|
4
4
|
from multiprocessing.queues import Queue
|
|
@@ -47,7 +47,7 @@ from codex.librarian.scribe.importer.statii.search import (
|
|
|
47
47
|
from codex.librarian.scribe.importer.tasks import ImportTask
|
|
48
48
|
from codex.librarian.scribe.search.status import SearchIndexCleanStatus
|
|
49
49
|
from codex.librarian.scribe.status import UpdateGroupTimestampsStatus
|
|
50
|
-
from codex.librarian.worker import
|
|
50
|
+
from codex.librarian.worker import WorkerStatusBase
|
|
51
51
|
from codex.models import Library
|
|
52
52
|
from codex.settings import LOGLEVEL
|
|
53
53
|
|
|
@@ -94,14 +94,14 @@ class Counts:
|
|
|
94
94
|
)
|
|
95
95
|
|
|
96
96
|
|
|
97
|
-
class InitImporter(
|
|
97
|
+
class InitImporter(WorkerStatusBase):
|
|
98
98
|
"""Initial Importer."""
|
|
99
99
|
|
|
100
100
|
def __init__(
|
|
101
101
|
self, task: ImportTask, logger_, librarian_queue: Queue, db_write_lock, event
|
|
102
102
|
):
|
|
103
103
|
"""Initialize the import."""
|
|
104
|
-
|
|
104
|
+
super().__init__(logger_, librarian_queue, db_write_lock)
|
|
105
105
|
self.task: ImportTask = task
|
|
106
106
|
self.metadata: dict[str, Any] = {}
|
|
107
107
|
self.counts = Counts()
|
|
@@ -84,5 +84,7 @@ class LinkManyToManyImporter(LinkSumImporter):
|
|
|
84
84
|
except Exception:
|
|
85
85
|
self.log.exception(f"Error recreating m2m field: {field_name}")
|
|
86
86
|
finally:
|
|
87
|
+
self.metadata.pop(LINK_M2MS, None)
|
|
88
|
+
self.metadata.pop(DELETE_M2MS, None)
|
|
87
89
|
self.status_controller.finish(status)
|
|
88
90
|
return created_total + del_total
|
|
@@ -8,9 +8,9 @@ from django.db.models.query import Q
|
|
|
8
8
|
from codex.librarian.scribe.importer.const import (
|
|
9
9
|
FIELD_NAME_KEYS_REL_MAP,
|
|
10
10
|
FOLDERS_FIELD_NAME,
|
|
11
|
-
FTS_CREATED_M2MS,
|
|
12
11
|
IDENTIFIERS_FIELD_NAME,
|
|
13
12
|
LINK_M2MS,
|
|
13
|
+
NON_FTS_FIELDS,
|
|
14
14
|
)
|
|
15
15
|
from codex.librarian.scribe.importer.link.const import COMPLEX_MODEL_FIELD_NAMES
|
|
16
16
|
from codex.librarian.scribe.importer.link.covers import (
|
|
@@ -47,9 +47,13 @@ class LinkComicsImporterPrepare(LinkCoversImporter):
|
|
|
47
47
|
):
|
|
48
48
|
if field_name == IDENTIFIERS_FIELD_NAME:
|
|
49
49
|
# sources extracton must come before identifiers is minified
|
|
50
|
-
|
|
50
|
+
# but now identifiers is not indexed at all, yet sources are.
|
|
51
|
+
sources = tuple(sorted({subvalues[0] for subvalues in values}))
|
|
51
52
|
self.add_links_to_fts(comic_pk, "sources", sources)
|
|
52
53
|
|
|
54
|
+
if field_name in NON_FTS_FIELDS:
|
|
55
|
+
return
|
|
56
|
+
|
|
53
57
|
field_name, fts_values = self.minify_complex_link_to_fts_tuple(
|
|
54
58
|
field_name, values
|
|
55
59
|
)
|
|
@@ -127,6 +131,5 @@ class LinkComicsImporterPrepare(LinkCoversImporter):
|
|
|
127
131
|
)
|
|
128
132
|
for field, names in md.items():
|
|
129
133
|
self._link_prepare_named_m2ms(all_m2m_links, comic_pk, field, names)
|
|
130
|
-
self.metadata.pop(LINK_M2MS)
|
|
131
|
-
self.metadata.pop(FTS_CREATED_M2MS)
|
|
134
|
+
self.metadata.pop(LINK_M2MS, None)
|
|
132
135
|
return all_m2m_links
|
|
@@ -13,12 +13,31 @@ from codex.librarian.scribe.importer.statii.create import (
|
|
|
13
13
|
ImporterUpdateComicsStatus,
|
|
14
14
|
)
|
|
15
15
|
from codex.librarian.scribe.importer.statii.query import ImporterQueryComicUpdatesStatus
|
|
16
|
+
from codex.librarian.status import Status
|
|
16
17
|
from codex.models import Comic
|
|
17
18
|
|
|
18
19
|
|
|
19
20
|
class QueryUpdateComics(QueryForeignKeysQueryImporter):
|
|
20
21
|
"""Move comics that need only updating into correct structure."""
|
|
21
22
|
|
|
23
|
+
def _query_update_comic(self, comic: Comic, status: Status):
|
|
24
|
+
"""Query for update one comic."""
|
|
25
|
+
proposed_comic_dict = self.metadata[CREATE_COMICS].pop(comic.path, None)
|
|
26
|
+
if not proposed_comic_dict:
|
|
27
|
+
self.log.warning(
|
|
28
|
+
f"{comic.path} can be updated, but the update metadata was not found."
|
|
29
|
+
)
|
|
30
|
+
return
|
|
31
|
+
update_comic_dict = {
|
|
32
|
+
key: value
|
|
33
|
+
for key, value in proposed_comic_dict.items()
|
|
34
|
+
if getattr(comic, key) != value
|
|
35
|
+
}
|
|
36
|
+
# Update even if update_comic_dict is empty to set stat
|
|
37
|
+
self.metadata[UPDATE_COMICS][comic.pk] = update_comic_dict
|
|
38
|
+
status.increment_complete()
|
|
39
|
+
self.status_controller.update(status)
|
|
40
|
+
|
|
22
41
|
def query_update_comics(self):
|
|
23
42
|
"""Pop existing comics from create & move to update if needed."""
|
|
24
43
|
paths = tuple(self.metadata[CREATE_COMICS].keys())
|
|
@@ -34,18 +53,9 @@ class QueryUpdateComics(QueryForeignKeysQueryImporter):
|
|
|
34
53
|
status.increment_complete(len(paths) - comics.count())
|
|
35
54
|
|
|
36
55
|
for comic in comics:
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
update_comic_dict = {
|
|
41
|
-
key: value
|
|
42
|
-
for key, value in proposed_comic_dict.items()
|
|
43
|
-
if getattr(comic, key) != value
|
|
44
|
-
}
|
|
45
|
-
if update_comic_dict:
|
|
46
|
-
self.metadata[UPDATE_COMICS][comic.pk] = update_comic_dict
|
|
47
|
-
status.increment_complete()
|
|
48
|
-
self.status_controller.update(status)
|
|
56
|
+
self._query_update_comic(comic, status)
|
|
57
|
+
if self.abort_event.is_set():
|
|
58
|
+
return
|
|
49
59
|
|
|
50
60
|
create_status = ImporterCreateComicsStatus(
|
|
51
61
|
None, len(self.metadata[CREATE_COMICS])
|
|
@@ -65,7 +65,7 @@ class SearchIndexPrepareImporter(SearchIndexCreateUpdateImporter):
|
|
|
65
65
|
self.metadata[key] = {}
|
|
66
66
|
if sub_key not in self.metadata[key]:
|
|
67
67
|
self.metadata[key][sub_key] = {}
|
|
68
|
-
self.log.
|
|
68
|
+
self.log.debug(
|
|
69
69
|
f"FTS import anomaly, attempting FTS update for comic {sub_key} {field_name}"
|
|
70
70
|
)
|
|
71
71
|
# Alternative might be kicking off an FTS sync
|
|
@@ -59,32 +59,33 @@ class SearchIndexSyncManyToManyImporter(FinishImporter):
|
|
|
59
59
|
|
|
60
60
|
def sync_fts_for_m2m_updates(self, already_updated_comicfts_pks: tuple[int, ...]):
|
|
61
61
|
"""Update fts entries for foreign keys."""
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
return
|
|
67
|
-
|
|
68
|
-
update_objs = []
|
|
69
|
-
for field_name in update_field_names:
|
|
70
|
-
if self.abort_event.is_set():
|
|
62
|
+
try:
|
|
63
|
+
count = 0
|
|
64
|
+
update_field_names = tuple(self.metadata.get(FTS_UPDATED_M2MS, {}).keys())
|
|
65
|
+
if not update_field_names:
|
|
71
66
|
return
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
67
|
+
|
|
68
|
+
update_objs = []
|
|
69
|
+
for field_name in update_field_names:
|
|
70
|
+
if self.abort_event.is_set():
|
|
71
|
+
return
|
|
72
|
+
self._sync_fts_for_m2m_updates_model(
|
|
73
|
+
field_name,
|
|
74
|
+
already_updated_comicfts_pks,
|
|
75
|
+
update_field_names,
|
|
76
|
+
update_objs,
|
|
77
|
+
)
|
|
78
|
+
count += len(update_objs)
|
|
79
|
+
tags = ", ".join(update_field_names)
|
|
80
|
+
self.log.debug(
|
|
81
|
+
f"Updating {count} search index entries for comics linked to updated tags: {tags}"
|
|
77
82
|
)
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
level,
|
|
88
|
-
f"Updated {count} search indexes entries for comics linked to updated tags: {tags}.",
|
|
89
|
-
)
|
|
90
|
-
self.metadata.pop(FTS_UPDATED_M2MS, None)
|
|
83
|
+
if count:
|
|
84
|
+
ComicFTS.objects.bulk_update(update_objs, update_field_names)
|
|
85
|
+
level = "INFO" if count else "DEBUG"
|
|
86
|
+
self.log.log(
|
|
87
|
+
level,
|
|
88
|
+
f"Updated {count} search indexes entries for comics linked to updated tags: {tags}.",
|
|
89
|
+
)
|
|
90
|
+
finally:
|
|
91
|
+
self.metadata.pop(FTS_UPDATED_M2MS, None)
|
|
@@ -6,6 +6,7 @@ from humanize import naturaldelta
|
|
|
6
6
|
|
|
7
7
|
from codex.librarian.scribe.importer.const import (
|
|
8
8
|
FTS_CREATE,
|
|
9
|
+
FTS_CREATED_M2MS,
|
|
9
10
|
FTS_EXISTING_M2MS,
|
|
10
11
|
FTS_UPDATE,
|
|
11
12
|
)
|
|
@@ -33,10 +34,13 @@ class SearchIndexCreateUpdateImporter(SearchIndexSyncManyToManyImporter):
|
|
|
33
34
|
obj_list: list[ComicFTS],
|
|
34
35
|
status: Status,
|
|
35
36
|
):
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
if entry:
|
|
38
|
+
existing_m2m_values = self.metadata[FTS_EXISTING_M2MS].get(pk)
|
|
39
|
+
SearchEntryPrepare.prepare_import_fts_entry(
|
|
40
|
+
pk, entry, existing_m2m_values, None, obj_list, status, create=True
|
|
41
|
+
)
|
|
42
|
+
else:
|
|
43
|
+
status.decrement_total()
|
|
40
44
|
self.status_controller.update(status)
|
|
41
45
|
|
|
42
46
|
def _update_comicfts_entry(
|
|
@@ -46,17 +50,19 @@ class SearchIndexCreateUpdateImporter(SearchIndexSyncManyToManyImporter):
|
|
|
46
50
|
status: Status,
|
|
47
51
|
):
|
|
48
52
|
comic_id = comicfts.comic_id # pyright:ignore[reportAttributeAccessIssue], # ty: ignore[unresolved-attribute]
|
|
49
|
-
entry
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
53
|
+
if entry := self.metadata[FTS_UPDATE].pop(comic_id):
|
|
54
|
+
existing_m2m_values = self.metadata[FTS_EXISTING_M2MS].get(comic_id)
|
|
55
|
+
SearchEntryPrepare.prepare_import_fts_entry(
|
|
56
|
+
comic_id,
|
|
57
|
+
entry,
|
|
58
|
+
existing_m2m_values,
|
|
59
|
+
comicfts,
|
|
60
|
+
obj_list,
|
|
61
|
+
status,
|
|
62
|
+
create=False,
|
|
63
|
+
)
|
|
64
|
+
else:
|
|
65
|
+
status.decrement_total()
|
|
60
66
|
self.status_controller.update(status)
|
|
61
67
|
|
|
62
68
|
def _update_search_index_operate_get_status(
|
|
@@ -71,9 +77,9 @@ class SearchIndexCreateUpdateImporter(SearchIndexSyncManyToManyImporter):
|
|
|
71
77
|
entries = self.metadata.pop(FTS_CREATE, {})
|
|
72
78
|
pks = tuple(sorted(entries.keys()))
|
|
73
79
|
obj_list = []
|
|
80
|
+
if self.abort_event.is_set():
|
|
81
|
+
return tuple(obj_list), ()
|
|
74
82
|
for pk in pks:
|
|
75
|
-
if self.abort_event.is_set():
|
|
76
|
-
return tuple(obj_list), ()
|
|
77
83
|
entry = entries.pop(pk)
|
|
78
84
|
self._create_comicfts_entry(pk, entry, obj_list, status)
|
|
79
85
|
return tuple(obj_list), pks
|
|
@@ -84,9 +90,9 @@ class SearchIndexCreateUpdateImporter(SearchIndexSyncManyToManyImporter):
|
|
|
84
90
|
obj_list = []
|
|
85
91
|
if pks := tuple(sorted(self.metadata.get(FTS_UPDATE, {}).keys())):
|
|
86
92
|
comicftss = ComicFTS.objects.filter(comic_id__in=pks)
|
|
93
|
+
if self.abort_event.is_set():
|
|
94
|
+
return tuple(obj_list), ()
|
|
87
95
|
for comicfts in comicftss:
|
|
88
|
-
if self.abort_event.is_set():
|
|
89
|
-
return tuple(obj_list), ()
|
|
90
96
|
self._update_comicfts_entry(comicfts, obj_list, status)
|
|
91
97
|
if self.metadata[FTS_UPDATE]:
|
|
92
98
|
# If updates not popped, turn them into creates.
|
|
@@ -204,7 +210,8 @@ class SearchIndexCreateUpdateImporter(SearchIndexSyncManyToManyImporter):
|
|
|
204
210
|
if self.abort_event.is_set():
|
|
205
211
|
self.log.info("Search Index update aborted early.")
|
|
206
212
|
self.abort_event.clear()
|
|
207
|
-
self.metadata.pop(FTS_EXISTING_M2MS)
|
|
213
|
+
self.metadata.pop(FTS_EXISTING_M2MS, None)
|
|
214
|
+
self.metadata.pop(FTS_CREATED_M2MS, None)
|
|
208
215
|
self.status_controller.finish_many(
|
|
209
216
|
(ImporterFTSCreateStatus, ImporterFTSUpdateStatus)
|
|
210
217
|
)
|
|
@@ -8,11 +8,11 @@ from codex.librarian.scribe.importer.statii.moved import ImporterMoveFoldersStat
|
|
|
8
8
|
from codex.librarian.scribe.importer.tasks import ImportTask
|
|
9
9
|
from codex.librarian.scribe.janitor.status import JanitorAdoptOrphanFoldersStatus
|
|
10
10
|
from codex.librarian.scribe.search.tasks import SearchIndexSyncTask
|
|
11
|
-
from codex.librarian.worker import
|
|
11
|
+
from codex.librarian.worker import WorkerStatusAbortableBase
|
|
12
12
|
from codex.models import Folder, Library
|
|
13
13
|
|
|
14
14
|
|
|
15
|
-
class OrphanFolderAdopter(
|
|
15
|
+
class OrphanFolderAdopter(WorkerStatusAbortableBase):
|
|
16
16
|
"""A worker to handle all bulk database updates."""
|
|
17
17
|
|
|
18
18
|
def _adopt_orphan_folders_for_library(self, library):
|
|
@@ -74,8 +74,3 @@ class OrphanFolderAdopter(WorkerStatusMixin):
|
|
|
74
74
|
self.log.debug("Adopt Orphan Folders aborted early.")
|
|
75
75
|
|
|
76
76
|
self.abort_event.clear()
|
|
77
|
-
|
|
78
|
-
def __init__(self, *args, event, **kwargs):
|
|
79
|
-
"""Initialize Worker."""
|
|
80
|
-
self.abort_event = event
|
|
81
|
-
self.init_worker(*args, **kwargs)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""Database integrity checks and remedies."""
|
|
2
|
-
# Uses app.get_model() because functions may also be called before the models are ready on startup.
|
|
3
2
|
|
|
3
|
+
# Uses app.get_model() because functions may also be called before the models are ready on startup.
|
|
4
4
|
import re
|
|
5
5
|
from typing import TYPE_CHECKING
|
|
6
6
|
|
|
@@ -16,7 +16,7 @@ from codex.librarian.scribe.janitor.status import (
|
|
|
16
16
|
JanitorDBIntegrityStatus,
|
|
17
17
|
)
|
|
18
18
|
from codex.librarian.scribe.janitor.tasks import JanitorFTSRebuildTask
|
|
19
|
-
from codex.librarian.worker import
|
|
19
|
+
from codex.librarian.worker import WorkerStatusAbortableBase
|
|
20
20
|
from codex.models.base import BaseModel
|
|
21
21
|
from codex.settings import (
|
|
22
22
|
CONFIG_PATH,
|
|
@@ -323,14 +323,9 @@ def fts_integrity_check(log):
|
|
|
323
323
|
return success
|
|
324
324
|
|
|
325
325
|
|
|
326
|
-
class JanitorIntegrity(
|
|
326
|
+
class JanitorIntegrity(WorkerStatusAbortableBase):
|
|
327
327
|
"""Integrity Check Mixin."""
|
|
328
328
|
|
|
329
|
-
def __init__(self, *args, event, **kwargs):
|
|
330
|
-
"""Init self.log."""
|
|
331
|
-
self.abort_event = event
|
|
332
|
-
self.init_worker(*args, **kwargs)
|
|
333
|
-
|
|
334
329
|
def foreign_key_check(self):
|
|
335
330
|
"""Foreign Key Check task."""
|
|
336
331
|
status = JanitorDBFKIntegrityStatus()
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
from codex.choices.admin import AdminFlagChoices
|
|
4
4
|
from codex.librarian.scribe.importer.tasks import ImportTask
|
|
5
|
-
from codex.librarian.worker import
|
|
5
|
+
from codex.librarian.worker import WorkerBase
|
|
6
6
|
from codex.models.admin import AdminFlag
|
|
7
7
|
from codex.models.comic import Comic
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
class LazyImporter(
|
|
10
|
+
class LazyImporter(WorkerBase):
|
|
11
11
|
"""Kick off an import task for just these books."""
|
|
12
12
|
|
|
13
13
|
def lazy_import(self, task):
|
|
@@ -45,7 +45,3 @@ class LazyImporter(WorkerMixin):
|
|
|
45
45
|
force_import_metadata=True,
|
|
46
46
|
)
|
|
47
47
|
self.librarian_queue.put(task)
|
|
48
|
-
|
|
49
|
-
def __init__(self, *args, **kwargs):
|
|
50
|
-
"""Initialize Worker."""
|
|
51
|
-
self.init_worker(*args, **kwargs)
|
|
@@ -3,20 +3,17 @@
|
|
|
3
3
|
from django.db import connection
|
|
4
4
|
|
|
5
5
|
from codex.librarian.scribe.search.status import SearchIndexOptimizeStatus
|
|
6
|
-
from codex.librarian.worker import
|
|
6
|
+
from codex.librarian.worker import (
|
|
7
|
+
WorkerStatusAbortableBase,
|
|
8
|
+
)
|
|
7
9
|
|
|
8
10
|
_TABLE = "codex_comicfts"
|
|
9
11
|
_OPTIMIZE_SQL = f"INSERT INTO {_TABLE}({_TABLE}) VALUES('optimize')"
|
|
10
12
|
|
|
11
13
|
|
|
12
|
-
class SearchIndexerOptimize(
|
|
14
|
+
class SearchIndexerOptimize(WorkerStatusAbortableBase):
|
|
13
15
|
"""Search Index optimize methods."""
|
|
14
16
|
|
|
15
|
-
def __init__(self, *args, event, **kwargs):
|
|
16
|
-
"""Initialize search engine."""
|
|
17
|
-
self.abort_event = event
|
|
18
|
-
self.init_worker(*args, **kwargs)
|
|
19
|
-
|
|
20
17
|
def optimize(self):
|
|
21
18
|
"""Remove records not in the database from the index, trapping exceptions."""
|
|
22
19
|
status = SearchIndexOptimizeStatus()
|
|
@@ -11,7 +11,7 @@ from django.utils import timezone
|
|
|
11
11
|
|
|
12
12
|
from codex.librarian.notifier.tasks import LIBRARY_CHANGED_TASK
|
|
13
13
|
from codex.librarian.scribe.status import UpdateGroupTimestampsStatus
|
|
14
|
-
from codex.librarian.worker import
|
|
14
|
+
from codex.librarian.worker import WorkerStatusBase
|
|
15
15
|
from codex.models import StoryArc, Volume
|
|
16
16
|
from codex.models.groups import BrowserGroupModel
|
|
17
17
|
from codex.models.library import Library
|
|
@@ -20,7 +20,7 @@ from codex.views.const import GROUP_MODELS
|
|
|
20
20
|
_UPDATE_FIELDS = ("updated_at",)
|
|
21
21
|
|
|
22
22
|
|
|
23
|
-
class TimestampUpdater(
|
|
23
|
+
class TimestampUpdater(WorkerStatusBase):
|
|
24
24
|
"""Update Groups timestamp for cover cache busting."""
|
|
25
25
|
|
|
26
26
|
@staticmethod
|
|
@@ -129,7 +129,3 @@ class TimestampUpdater(WorkerStatusMixin):
|
|
|
129
129
|
level = "INFO" if count else "DEBUG"
|
|
130
130
|
self.log.log(level, f"Updated timestamps for {count} groups.")
|
|
131
131
|
self.librarian_queue.put(LIBRARY_CHANGED_TASK)
|
|
132
|
-
|
|
133
|
-
def __init__(self, log, librarian_queue, db_write_lock):
|
|
134
|
-
"""Initialize Worker."""
|
|
135
|
-
self.init_worker(log, librarian_queue, db_write_lock)
|
codex/librarian/worker.py
CHANGED
|
@@ -30,3 +30,30 @@ class WorkerStatusMixin(WorkerMixin):
|
|
|
30
30
|
self.status_controller = StatusController( # pyright: ignore[reportUninitializedInstanceVariable]
|
|
31
31
|
logger_, librarian_queue
|
|
32
32
|
)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class WorkerBase(WorkerMixin):
|
|
36
|
+
"""Base for Worker."""
|
|
37
|
+
|
|
38
|
+
def __init__(self, logger_, librarian_queue: Queue, db_write_lock):
|
|
39
|
+
"""Initialize Worker."""
|
|
40
|
+
super().__init__()
|
|
41
|
+
self.init_worker(logger_, librarian_queue, db_write_lock)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class WorkerStatusBase(WorkerStatusMixin):
|
|
45
|
+
"""Base for Status Worker."""
|
|
46
|
+
|
|
47
|
+
def __init__(self, logger_, librarian_queue: Queue, db_write_lock):
|
|
48
|
+
"""Initialize Worker."""
|
|
49
|
+
super().__init__()
|
|
50
|
+
self.init_worker(logger_, librarian_queue, db_write_lock)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
class WorkerStatusAbortableBase(WorkerStatusBase):
|
|
54
|
+
"""Base for Abortable Status Worker."""
|
|
55
|
+
|
|
56
|
+
def __init__(self, logger_, librarian_queue: Queue, db_write_lock, event):
|
|
57
|
+
"""Initialize Abortable Worker."""
|
|
58
|
+
super().__init__(logger_, librarian_queue, db_write_lock)
|
|
59
|
+
self.abort_event = event
|
codex/static_root/assets/{VCheckbox-MwE_xq11.b2e2086608d9.js → VCheckbox-BfVeJY8A.b8e4dee22b3c.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{m as I,V as r}from"./VCheckboxBtn-
|
|
1
|
+
import{m as I,V as r}from"./VCheckboxBtn-dotsoE0r.js";import{u as A,m as F,g as u}from"./VSelectionControl-N_wsNRlD.js";import{f as R}from"./forwardRefs-BGAZ1bvO.js";import{g as B,p as U,e as w,r as D,u as M,o as N,bu as $,bv as j,a as l,m as d}from"./main-CTlarBH9.js";const q=U({...F(),...N(I(),["inline"])},"VCheckbox"),J=B()({name:"VCheckbox",inheritAttrs:!1,props:q(),emits:{"update:modelValue":e=>!0,"update:focused":e=>!0},setup(e,c){let{attrs:n,slots:a}=c;const s=w(e,"modelValue"),{isFocused:i,focus:m,blur:f}=A(e),t=D(),V=$();return M(()=>{const[p,b]=j(n),v=u.filterProps(e),k=r.filterProps(e);return l(u,d({ref:t,class:["v-checkbox",e.class]},p,v,{modelValue:s.value,"onUpdate:modelValue":o=>s.value=o,id:e.id||`checkbox-${V}`,focused:i.value,style:e.style}),{...a,default:o=>{let{id:x,messagesId:h,isDisabled:P,isReadonly:C,isValid:y}=o;return l(r,d(k,{id:x.value,"aria-describedby":h.value,disabled:P.value,readonly:C.value},b,{error:y.value===!1,modelValue:s.value,"onUpdate:modelValue":g=>s.value=g,onFocus:m,onBlur:f}),a)}})}),R({},t)}});export{J as V};
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{m as I,V as r}from"./VCheckboxBtn-
|
|
1
|
+
import{m as I,V as r}from"./VCheckboxBtn-dotsoE0r.js";import{u as A,m as F,g as u}from"./VSelectionControl-N_wsNRlD.js";import{f as R}from"./forwardRefs-BGAZ1bvO.js";import{g as B,p as U,e as w,r as D,u as M,o as N,bu as $,bv as j,a as l,m as d}from"./main-CTlarBH9.js";const q=U({...F(),...N(I(),["inline"])},"VCheckbox"),J=B()({name:"VCheckbox",inheritAttrs:!1,props:q(),emits:{"update:modelValue":e=>!0,"update:focused":e=>!0},setup(e,c){let{attrs:n,slots:a}=c;const s=w(e,"modelValue"),{isFocused:i,focus:m,blur:f}=A(e),t=D(),V=$();return M(()=>{const[p,b]=j(n),v=u.filterProps(e),k=r.filterProps(e);return l(u,d({ref:t,class:["v-checkbox",e.class]},p,v,{modelValue:s.value,"onUpdate:modelValue":o=>s.value=o,id:e.id||`checkbox-${V}`,focused:i.value,style:e.style}),{...a,default:o=>{let{id:x,messagesId:h,isDisabled:P,isReadonly:C,isValid:y}=o;return l(r,d(k,{id:x.value,"aria-describedby":h.value,disabled:P.value,readonly:C.value},b,{error:y.value===!1,modelValue:s.value,"onUpdate:modelValue":g=>s.value=g,onFocus:m,onBlur:f}),a)}})}),R({},t)}});export{J as V};
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{l as f,k as a}from"./VSelectionControl-
|
|
1
|
+
import{l as f,k as a}from"./VSelectionControl-N_wsNRlD.js";import{p as V,L as k,g as v,e as c,t as l,u as I,o as x,a as h,m as b}from"./main-CTlarBH9.js";const C=V({indeterminate:Boolean,indeterminateIcon:{type:k,default:"$checkboxIndeterminate"},...f({falseIcon:"$checkboxOff",trueIcon:"$checkboxOn"})},"VCheckboxBtn"),B=v()({name:"VCheckboxBtn",props:C(),emits:{"update:modelValue":e=>!0,"update:indeterminate":e=>!0},setup(e,r){let{slots:s}=r;const t=c(e,"indeterminate"),n=c(e,"modelValue");function u(o){t.value&&(t.value=!1)}const i=l(()=>t.value?e.indeterminateIcon:e.falseIcon),m=l(()=>t.value?e.indeterminateIcon:e.trueIcon);return I(()=>{const o=x(a.filterProps(e),["modelValue"]);return h(a,b(o,{modelValue:n.value,"onUpdate:modelValue":[d=>n.value=d,u],class:["v-checkbox-btn",e.class],style:e.style,type:"checkbox",falseIcon:i.value,trueIcon:m.value,"aria-checked":t.value?"mixed":void 0}),s)}),{}}});export{B as V,C as m};
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{l as f,k as a}from"./VSelectionControl-
|
|
1
|
+
import{l as f,k as a}from"./VSelectionControl-N_wsNRlD.js";import{p as V,L as k,g as v,e as c,t as l,u as I,o as x,a as h,m as b}from"./main-CTlarBH9.js";const C=V({indeterminate:Boolean,indeterminateIcon:{type:k,default:"$checkboxIndeterminate"},...f({falseIcon:"$checkboxOff",trueIcon:"$checkboxOn"})},"VCheckboxBtn"),B=v()({name:"VCheckboxBtn",props:C(),emits:{"update:modelValue":e=>!0,"update:indeterminate":e=>!0},setup(e,r){let{slots:s}=r;const t=c(e,"indeterminate"),n=c(e,"modelValue");function u(o){t.value&&(t.value=!1)}const i=l(()=>t.value?e.indeterminateIcon:e.falseIcon),m=l(()=>t.value?e.indeterminateIcon:e.trueIcon);return I(()=>{const o=x(a.filterProps(e),["modelValue"]);return h(a,b(o,{modelValue:n.value,"onUpdate:modelValue":[d=>n.value=d,u],class:["v-checkbox-btn",e.class],style:e.style,type:"checkbox",falseIcon:i.value,trueIcon:m.value,"aria-checked":t.value?"mixed":void 0}),s)}),{}}});export{B as V,C as m};
|
|
Binary file
|
|
Binary file
|
codex/static_root/assets/{VCombobox-C1Osy24P.73168f28d07b.js → VCombobox-D6t70eT1.a5c82ecd9544.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as ye,t as I,e as Ve,m as pe,a as ke,V as Ce,b as we,f as Se,d as Ie}from"./VSelect-
|
|
1
|
+
import{u as ye,t as I,e as Ve,m as pe,a as ke,V as Ce,b as we,f as Se,d as Ie}from"./VSelect-CJ_8hyFq.js";import{p as Fe,c as j,q as De}from"./VSelectionControl-N_wsNRlD.js";import{u as Pe,f as Re,p as Ae,k as G,l as Te}from"./forwardRefs-BGAZ1bvO.js";import{u as Ee,m as Me,h as _e}from"./filter-DU947LwF.js";import{g as Ne,p as Ke,aC as Le,r as _,aU as F,e as J,bE as Be,c as x,aX as N,bF as Oe,t as Ue,aV as D,bG as W,u as ze,a as d,m as k,o as $e,bH as qe,bI as X,bt as He,b as C,bJ as je,F as $,bK as Ge,n as Je,d as We,z as Xe}from"./main-CTlarBH9.js";import{a as Q,g as Qe}from"./VDialog-Bn_MNvQ-.js";import{a as Ye}from"./VDivider-DOOd4a9s.js";import{V as Ze}from"./VCheckboxBtn-dotsoE0r.js";const el=Ke({autoSelectFirst:{type:[Boolean,String]},clearOnSelect:{type:Boolean,default:!0},delimiters:Array,...Me({filterKeys:["title"]}),...pe({hideNoData:!0,returnObject:!0}),...$e(De({modelValue:null,role:"combobox"}),["validationValue","dirty","appendInnerIcon"]),...Ae({transition:!1})},"VCombobox"),rl=Ne()({name:"VCombobox",props:el(),emits:{"update:focused":e=>!0,"update:modelValue":e=>!0,"update:search":e=>!0,"update:menu":e=>!0},setup(e,Y){let{emit:Z,slots:r}=Y;const{t:K}=Le(),m=_(),b=F(!1),y=F(!0),L=F(!1),q=_(),P=_(),n=F(-1);let B=!1;const{items:ee,transformIn:le,transformOut:ae}=ye(e),{textColorClasses:te,textColorStyles:ue}=Pe(()=>m.value?.color),u=J(e,"modelValue",[],l=>le(Be(l)),l=>{const o=ae(l);return e.multiple?o:o[0]??null}),R=Fe(e),A=x(()=>!!(e.chips||r.chip)),g=x(()=>A.value||!!r.selection),V=F(!e.multiple&&!g.value?u.value[0]?.title??"":""),c=x({get:()=>V.value,set:async l=>{if(V.value=l??"",!e.multiple&&!g.value&&(u.value=[I(e,l)],N(()=>P.value?.scrollToIndex(0))),l&&e.multiple&&e.delimiters?.length){const o=e.delimiters.map(Oe).join("|"),i=l.split(new RegExp(`(?:${o})+`));if(i.length>1){for(let a of i)a=a.trim(),a&&(h(I(e,a)),await N());V.value=""}}l||(n.value=-1),y.value=!l}}),ne=x(()=>typeof e.counterValue=="function"?e.counterValue(u.value):typeof e.counterValue=="number"?e.counterValue:e.multiple?u.value.length:c.value.length),{filteredItems:T,getMatches:oe}=Ee(e,ee,()=>y.value?"":c.value),p=x(()=>e.hideSelected?T.value.filter(l=>!u.value.some(o=>o.value===l.value)):T.value),E=x(()=>e.hideNoData&&!p.value.length||R.isReadonly.value||R.isDisabled.value),O=J(e,"menu"),s=x({get:()=>O.value,set:l=>{O.value&&!l&&q.value?.ΨopenChildren.size||l&&E.value||(O.value=l)}}),H=Ue(()=>s.value?e.closeText:e.openText);D(V,l=>{B?N(()=>B=!1):b.value&&!s.value&&(s.value=!0),Z("update:search",l)}),D(u,l=>{!e.multiple&&!g.value&&(V.value=l[0]?.title??"")});const ie=x(()=>u.value.map(l=>l.value)),U=x(()=>(e.autoSelectFirst===!0||e.autoSelectFirst==="exact"&&c.value===p.value[0]?.title)&&p.value.length>0&&!y.value&&!L.value),z=_(),se=Ve(z,m);function re(l){B=!0,e.openOnClear&&(s.value=!0)}function ce(){E.value||(s.value=!0)}function ve(l){E.value||(b.value&&(l.preventDefault(),l.stopPropagation()),s.value=!s.value)}function de(l){(X(l)||l.key==="Backspace")&&m.value?.focus()}function fe(l){if(qe(l)||R.isReadonly.value)return;const o=m.value?.selectionStart,i=u.value.length;if(["Enter","ArrowDown","ArrowUp"].includes(l.key)&&l.preventDefault(),["Enter","ArrowDown"].includes(l.key)&&(s.value=!0),["Escape"].includes(l.key)&&(s.value=!1),["Enter","Escape","Tab"].includes(l.key)&&(U.value&&["Enter","Tab"].includes(l.key)&&!u.value.some(a=>{let{value:t}=a;return t===p.value[0].value})&&h(T.value[0]),y.value=!0),l.key==="ArrowDown"&&U.value&&z.value?.focus("next"),l.key==="Enter"&&c.value&&(h(I(e,c.value)),g.value&&(V.value="")),["Backspace","Delete"].includes(l.key)){if(!e.multiple&&g.value&&u.value.length>0&&!c.value)return h(u.value[0],!1);if(~n.value){l.preventDefault();const a=n.value;h(u.value[n.value],!1),n.value=a>=i-1?i-2:a}else l.key==="Backspace"&&!c.value&&(n.value=i-1);return}if(e.multiple)if(l.key==="ArrowLeft"){if(n.value<0&&o&&o>0)return;const a=n.value>-1?n.value-1:i-1;u.value[a]?n.value=a:(n.value=-1,m.value?.setSelectionRange(c.value.length,c.value.length))}else if(l.key==="ArrowRight"){if(n.value<0)return;const a=n.value+1;u.value[a]?n.value=a:(n.value=-1,m.value?.setSelectionRange(0,0))}else~n.value&&X(l)&&(n.value=-1)}function me(){e.eager&&P.value?.calculateVisibleItems()}function he(){b.value&&(y.value=!0,m.value?.focus())}function h(l){let o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(!(!l||l.props.disabled))if(e.multiple){const i=u.value.findIndex(t=>(e.valueComparator||W)(t.value,l.value)),a=o??!~i;if(~i){const t=a?[...u.value,l]:[...u.value];t.splice(i,1),u.value=t}else a&&(u.value=[...u.value,l]);e.clearOnSelect&&(c.value="")}else{const i=o!==!1;u.value=i?[l]:[],V.value=i&&!g.value?l.title:"",N(()=>{s.value=!1,y.value=!0})}}function be(l){b.value=!0,setTimeout(()=>{L.value=!0})}function ge(l){L.value=!1}function xe(l){(l==null||l===""&&!e.multiple&&!g.value)&&(u.value=[])}return D(b,(l,o)=>{if(!(l||l===o)&&(n.value=-1,s.value=!1,c.value)){if(e.multiple){h(I(e,c.value));return}if(!g.value)return;u.value.some(i=>{let{title:a}=i;return a===c.value})?V.value="":h(I(e,c.value))}}),D(s,()=>{if(!e.hideSelected&&s.value&&u.value.length){const l=p.value.findIndex(o=>u.value.some(i=>(e.valueComparator||W)(i.value,o.value)));He&&window.requestAnimationFrame(()=>{l>=0&&P.value?.scrollToIndex(l)})}}),D(()=>e.items,(l,o)=>{s.value||b.value&&!o.length&&l.length&&(s.value=!0)}),ze(()=>{const l=!!(!e.hideNoData||p.value.length||r["prepend-item"]||r["append-item"]||r["no-data"]),o=u.value.length>0,i=j.filterProps(e);return d(j,k({ref:m},i,{modelValue:c.value,"onUpdate:modelValue":[a=>c.value=a,xe],focused:b.value,"onUpdate:focused":a=>b.value=a,validationValue:u.externalValue,counterValue:ne.value,dirty:o,class:["v-combobox",{"v-combobox--active-menu":s.value,"v-combobox--chips":!!e.chips,"v-combobox--selection-slot":!!g.value,"v-combobox--selecting-index":n.value>-1,[`v-combobox--${e.multiple?"multiple":"single"}`]:!0},e.class],style:e.style,readonly:R.isReadonly.value,placeholder:o?void 0:e.placeholder,"onClick:clear":re,"onMousedown:control":ce,onKeydown:fe}),{...r,default:()=>C($,null,[d(ke,k({ref:q,modelValue:s.value,"onUpdate:modelValue":a=>s.value=a,activator:"parent",contentClass:"v-combobox__content",disabled:E.value,eager:e.eager,maxHeight:310,openOnClick:!1,closeOnContentClick:!1,transition:e.transition,onAfterEnter:me,onAfterLeave:he},e.menuProps),{default:()=>[l&&d(Ce,k({ref:z,filterable:!0,selected:ie.value,selectStrategy:e.multiple?"independent":"single-independent",onMousedown:a=>a.preventDefault(),onKeydown:de,onFocusin:be,onFocusout:ge,tabindex:"-1","aria-live":"polite",color:e.itemColor??e.color},se,e.listProps),{default:()=>[r["prepend-item"]?.(),!p.value.length&&!e.hideNoData&&(r["no-data"]?.()??d(Q,{key:"no-data",title:K(e.noDataText)},null)),d(we,{ref:P,renderless:!0,items:p.value,itemKey:"value"},{default:a=>{let{item:t,index:v,itemRef:M}=a;const w=k(t.props,{ref:M,key:t.value,active:U.value&&v===0?!0:void 0,onClick:()=>h(t,null)});return t.type==="divider"?r.divider?.({props:t.raw,index:v})??d(Ye,k(t.props,{key:`divider-${v}`}),null):t.type==="subheader"?r.subheader?.({props:t.raw,index:v})??d(Se,k(t.props,{key:`subheader-${v}`}),null):r.item?.({item:t,index:v,props:w})??d(Q,k(w,{role:"option"}),{prepend:S=>{let{isSelected:f}=S;return C($,null,[e.multiple&&!e.hideSelected?d(Ze,{key:t.value,modelValue:f,ripple:!1,tabindex:"-1"},null):void 0,t.props.prependAvatar&&d(Qe,{image:t.props.prependAvatar},null),t.props.prependIcon&&d(G,{icon:t.props.prependIcon},null)])},title:()=>y.value?t.title:_e("v-combobox",t.title,oe(t)?.title)})}}),r["append-item"]?.()]})]}),u.value.map((a,t)=>{function v(f){f.stopPropagation(),f.preventDefault(),h(a,!1)}const M={"onClick:close":v,onKeydown(f){f.key!=="Enter"&&f.key!==" "||(f.preventDefault(),f.stopPropagation(),v(f))},onMousedown(f){f.preventDefault(),f.stopPropagation()},modelValue:!0,"onUpdate:modelValue":void 0},w=A.value?!!r.chip:!!r.selection,S=w?Ge(A.value?r.chip({item:a,index:t,props:M}):r.selection({item:a,index:t})):void 0;if(!(w&&!S))return C("div",{key:a.value,class:We(["v-combobox__selection",t===n.value&&["v-combobox__selection--selected",te.value]]),style:Je(t===n.value?ue.value:{})},[A.value?r.chip?d(Te,{key:"chip-defaults",defaults:{VChip:{closable:e.closableChips,size:"small",text:a.title}}},{default:()=>[S]}):d(Ie,k({key:"chip",closable:e.closableChips,size:"small",text:a.title,disabled:a.props.disabled},M),null):S??C("span",{class:"v-combobox__selection-text"},[a.title,e.multiple&&t<u.value.length-1&&C("span",{class:"v-combobox__selection-comma"},[Xe(",")])])])})]),"append-inner":function(){for(var a=arguments.length,t=new Array(a),v=0;v<a;v++)t[v]=arguments[v];return C($,null,[r["append-inner"]?.(...t),(!e.hideNoData||e.items.length)&&e.menuIcon?d(G,{class:"v-combobox__menu-icon",color:m.value?.fieldIconColor,icon:e.menuIcon,onMousedown:ve,onClick:je,"aria-label":K(H.value),title:K(H.value),tabindex:"-1"},null):void 0])}})}),Re({isFocused:b,isPristine:y,menu:s,search:c,selectionIndex:n,filteredItems:T,select:h},m)}});export{rl as V};
|
|
Binary file
|
|
Binary file
|