codex 1.8.4__py3-none-any.whl → 1.8.6__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/scribe/importer/delete/comics.py +2 -2
- codex/librarian/scribe/scribed.py +2 -13
- codex/librarian/scribe/search/sync.py +74 -78
- codex/librarian/status.py +1 -1
- codex/librarian/status_controller.py +42 -36
- codex/librarian/watchdog/emitter.py +2 -3
- codex/librarian/watchdog/event_batcherd.py +1 -1
- codex/serializers/browser/settings.py +0 -1
- codex/settings/__init__.py +9 -10
- codex/static_root/assets/{VCheckbox-BUS-Yeeg.7324b2d79f7e.js → VCheckbox--IZv20K5.121e571f623b.js} +1 -1
- codex/static_root/assets/VCheckbox--IZv20K5.121e571f623b.js.br +0 -0
- codex/static_root/assets/VCheckbox--IZv20K5.121e571f623b.js.gz +0 -0
- codex/static_root/assets/{VCheckbox-BUS-Yeeg.js → VCheckbox--IZv20K5.js} +1 -1
- codex/static_root/assets/VCheckbox--IZv20K5.js.br +0 -0
- codex/static_root/assets/VCheckbox--IZv20K5.js.gz +0 -0
- codex/static_root/assets/{VCheckboxBtn-BZqfedDW.52d389bdccde.js → VCheckboxBtn-BzgViWAb.1400a41af9da.js} +1 -1
- codex/static_root/assets/VCheckboxBtn-BzgViWAb.1400a41af9da.js.br +0 -0
- codex/static_root/assets/VCheckboxBtn-BzgViWAb.1400a41af9da.js.gz +0 -0
- codex/static_root/assets/{VCheckboxBtn-BZqfedDW.js → VCheckboxBtn-BzgViWAb.js} +1 -1
- codex/static_root/assets/VCheckboxBtn-BzgViWAb.js.br +0 -0
- codex/static_root/assets/VCheckboxBtn-BzgViWAb.js.gz +0 -0
- codex/static_root/assets/{VCombobox-D1Ha7FmT.76d5650a920c.js → VCombobox-0VKjtXTP.f7c9bb8e7f77.js} +1 -1
- codex/static_root/assets/VCombobox-0VKjtXTP.f7c9bb8e7f77.js.br +0 -0
- codex/static_root/assets/VCombobox-0VKjtXTP.f7c9bb8e7f77.js.gz +0 -0
- codex/static_root/assets/{VCombobox-D1Ha7FmT.js → VCombobox-0VKjtXTP.js} +1 -1
- codex/static_root/assets/VCombobox-0VKjtXTP.js.br +0 -0
- codex/static_root/assets/VCombobox-0VKjtXTP.js.gz +0 -0
- codex/static_root/assets/{VDialog-CwCy5caJ.31afcb45bd4b.js → VDialog-Oz6-kM3S.2244675141c7.js} +1 -1
- codex/static_root/assets/VDialog-Oz6-kM3S.2244675141c7.js.br +0 -0
- codex/static_root/assets/VDialog-Oz6-kM3S.2244675141c7.js.gz +0 -0
- codex/static_root/assets/{VDialog-CwCy5caJ.js → VDialog-Oz6-kM3S.js} +1 -1
- codex/static_root/assets/VDialog-Oz6-kM3S.js.br +0 -0
- codex/static_root/assets/VDialog-Oz6-kM3S.js.gz +0 -0
- codex/static_root/assets/{VDivider-QEWmQwZy.89d318a32d70.js → VDivider-CSRFyKQO.5f8e1ffafbaf.js} +1 -1
- codex/static_root/assets/VDivider-CSRFyKQO.5f8e1ffafbaf.js.br +0 -0
- codex/static_root/assets/VDivider-CSRFyKQO.5f8e1ffafbaf.js.gz +0 -0
- codex/static_root/assets/{VDivider-QEWmQwZy.js → VDivider-CSRFyKQO.js} +1 -1
- codex/static_root/assets/VDivider-CSRFyKQO.js.br +0 -0
- codex/static_root/assets/VDivider-CSRFyKQO.js.gz +0 -0
- codex/static_root/assets/{VExpansionPanels-Dzh4hOyH.dd0796960676.js → VExpansionPanels-82Ocr2Kh.1ccaea91f07c.js} +1 -1
- codex/static_root/assets/VExpansionPanels-82Ocr2Kh.1ccaea91f07c.js.br +0 -0
- codex/static_root/assets/VExpansionPanels-82Ocr2Kh.1ccaea91f07c.js.gz +0 -0
- codex/static_root/assets/{VExpansionPanels-Dzh4hOyH.js → VExpansionPanels-82Ocr2Kh.js} +1 -1
- codex/static_root/assets/VExpansionPanels-82Ocr2Kh.js.br +0 -0
- codex/static_root/assets/VExpansionPanels-82Ocr2Kh.js.gz +0 -0
- codex/static_root/assets/{VForm-CKTqFmYD.837ad5ecbb66.js → VForm-BaeKMRS9.be058cf1518f.js} +1 -1
- codex/static_root/assets/VForm-BaeKMRS9.be058cf1518f.js.br +0 -0
- codex/static_root/assets/VForm-BaeKMRS9.be058cf1518f.js.gz +0 -0
- codex/static_root/assets/{VForm-CKTqFmYD.js → VForm-BaeKMRS9.js} +1 -1
- codex/static_root/assets/VForm-BaeKMRS9.js.br +0 -0
- codex/static_root/assets/VForm-BaeKMRS9.js.gz +0 -0
- codex/static_root/assets/{VRadioGroup-B2m47wR5.cf163036f69b.js → VRadioGroup-DeB10IRm.4ea874709ffb.js} +1 -1
- codex/static_root/assets/VRadioGroup-DeB10IRm.4ea874709ffb.js.br +0 -0
- codex/static_root/assets/VRadioGroup-DeB10IRm.4ea874709ffb.js.gz +0 -0
- codex/static_root/assets/{VRadioGroup-B2m47wR5.js → VRadioGroup-DeB10IRm.js} +1 -1
- codex/static_root/assets/VRadioGroup-DeB10IRm.js.br +0 -0
- codex/static_root/assets/VRadioGroup-DeB10IRm.js.gz +0 -0
- codex/static_root/assets/{VSelect-De33kkeP.0679e23c959b.js → VSelect-4ozzBEef.36f749b6f4ab.js} +1 -1
- codex/static_root/assets/VSelect-4ozzBEef.36f749b6f4ab.js.br +0 -0
- codex/static_root/assets/VSelect-4ozzBEef.36f749b6f4ab.js.gz +0 -0
- codex/static_root/assets/{VSelect-De33kkeP.js → VSelect-4ozzBEef.js} +1 -1
- codex/static_root/assets/VSelect-4ozzBEef.js.br +0 -0
- codex/static_root/assets/VSelect-4ozzBEef.js.gz +0 -0
- codex/static_root/assets/{VSelectionControl-Cib41eud.c30c8e31df2a.js → VSelectionControl-D3h7FjSM.6cf4ba197995.js} +1 -1
- codex/static_root/assets/VSelectionControl-D3h7FjSM.6cf4ba197995.js.br +0 -0
- codex/static_root/assets/VSelectionControl-D3h7FjSM.6cf4ba197995.js.gz +0 -0
- codex/static_root/assets/{VSelectionControl-Cib41eud.js → VSelectionControl-D3h7FjSM.js} +1 -1
- codex/static_root/assets/VSelectionControl-D3h7FjSM.js.br +0 -0
- codex/static_root/assets/VSelectionControl-D3h7FjSM.js.gz +0 -0
- codex/static_root/assets/{VTable-DBmzLdWQ.1b4c12852e73.js → VTable-Dj5EC5Aq.7abc9daf78be.js} +1 -1
- codex/static_root/assets/VTable-Dj5EC5Aq.7abc9daf78be.js.br +0 -0
- codex/static_root/assets/VTable-Dj5EC5Aq.7abc9daf78be.js.gz +0 -0
- codex/static_root/assets/{VTable-DBmzLdWQ.js → VTable-Dj5EC5Aq.js} +1 -1
- codex/static_root/assets/VTable-Dj5EC5Aq.js.br +0 -0
- codex/static_root/assets/VTable-Dj5EC5Aq.js.gz +0 -0
- codex/static_root/assets/{VWindowItem-BeK4JUp7.4e60834c43b0.js → VWindowItem-Dwb7oeu0.6a4505330db3.js} +1 -1
- codex/static_root/assets/VWindowItem-Dwb7oeu0.6a4505330db3.js.br +0 -0
- codex/static_root/assets/VWindowItem-Dwb7oeu0.6a4505330db3.js.gz +0 -0
- codex/static_root/assets/{VWindowItem-BeK4JUp7.js → VWindowItem-Dwb7oeu0.js} +1 -1
- codex/static_root/assets/VWindowItem-Dwb7oeu0.js.br +0 -0
- codex/static_root/assets/VWindowItem-Dwb7oeu0.js.gz +0 -0
- codex/static_root/assets/{admin-Bhck3Mck.c3ea899835a2.js → admin-mQ-F7brp.cc388b064f3a.js} +1 -1
- codex/static_root/assets/admin-mQ-F7brp.cc388b064f3a.js.br +0 -0
- codex/static_root/assets/admin-mQ-F7brp.cc388b064f3a.js.gz +0 -0
- codex/static_root/assets/{admin-Bhck3Mck.js → admin-mQ-F7brp.js} +1 -1
- codex/static_root/assets/admin-mQ-F7brp.js.br +0 -0
- codex/static_root/assets/admin-mQ-F7brp.js.gz +0 -0
- codex/static_root/assets/{admin-menu-BZRid1Ps.3402782e61d1.js → admin-menu-CfGPKhvz.1e224da855f5.js} +1 -1
- codex/static_root/assets/admin-menu-CfGPKhvz.1e224da855f5.js.br +0 -0
- codex/static_root/assets/admin-menu-CfGPKhvz.1e224da855f5.js.gz +0 -0
- codex/static_root/assets/{admin-menu-BZRid1Ps.js → admin-menu-CfGPKhvz.js} +1 -1
- codex/static_root/assets/admin-menu-CfGPKhvz.js.br +0 -0
- codex/static_root/assets/admin-menu-CfGPKhvz.js.gz +0 -0
- codex/static_root/assets/{admin-CDRC0Rok.0427890caa22.js → admin-nYIgbfe8.d2acbae0b198.js} +1 -1
- codex/static_root/assets/admin-nYIgbfe8.d2acbae0b198.js.br +0 -0
- codex/static_root/assets/admin-nYIgbfe8.d2acbae0b198.js.gz +0 -0
- codex/static_root/assets/{admin-CDRC0Rok.js → admin-nYIgbfe8.js} +1 -1
- codex/static_root/assets/admin-nYIgbfe8.js.br +0 -0
- codex/static_root/assets/admin-nYIgbfe8.js.gz +0 -0
- codex/static_root/assets/{admin-settings-button-progress-DnsCBRll.5fdbf19092e8.js → admin-settings-button-progress-BBRW69l3.697026d00887.js} +1 -1
- codex/static_root/assets/admin-settings-button-progress-BBRW69l3.697026d00887.js.br +0 -0
- codex/static_root/assets/admin-settings-button-progress-BBRW69l3.697026d00887.js.gz +0 -0
- codex/static_root/assets/{admin-settings-button-progress-DnsCBRll.js → admin-settings-button-progress-BBRW69l3.js} +1 -1
- codex/static_root/assets/admin-settings-button-progress-BBRW69l3.js.br +0 -0
- codex/static_root/assets/admin-settings-button-progress-BBRW69l3.js.gz +0 -0
- codex/static_root/assets/{browser-Dr_bPvQw.45714261db30.js → browser-BzV_-1Jg.e39184a92bab.js} +1 -1
- codex/static_root/assets/browser-BzV_-1Jg.e39184a92bab.js.br +0 -0
- codex/static_root/assets/browser-BzV_-1Jg.e39184a92bab.js.gz +0 -0
- codex/static_root/assets/{browser-Dr_bPvQw.js → browser-BzV_-1Jg.js} +1 -1
- codex/static_root/assets/browser-BzV_-1Jg.js.br +0 -0
- codex/static_root/assets/browser-BzV_-1Jg.js.gz +0 -0
- codex/static_root/assets/{change-password-dialog-DgVD2Irc.0bc698baa5dd.js → change-password-dialog-DpqXgZ53.3f22c3114669.js} +1 -1
- codex/static_root/assets/change-password-dialog-DpqXgZ53.3f22c3114669.js.br +0 -0
- codex/static_root/assets/change-password-dialog-DpqXgZ53.3f22c3114669.js.gz +0 -0
- codex/static_root/assets/{change-password-dialog-DgVD2Irc.js → change-password-dialog-DpqXgZ53.js} +1 -1
- codex/static_root/assets/change-password-dialog-DpqXgZ53.js.br +0 -0
- codex/static_root/assets/change-password-dialog-DpqXgZ53.js.gz +0 -0
- codex/static_root/assets/{confirm-dialog-CzIH9jqe.1dfcb7de1a9f.js → confirm-dialog-uoXMmYq3.0ec4c4eba588.js} +1 -1
- codex/static_root/assets/confirm-dialog-uoXMmYq3.0ec4c4eba588.js.br +0 -0
- codex/static_root/assets/confirm-dialog-uoXMmYq3.0ec4c4eba588.js.gz +0 -0
- codex/static_root/assets/{confirm-dialog-CzIH9jqe.js → confirm-dialog-uoXMmYq3.js} +1 -1
- codex/static_root/assets/confirm-dialog-uoXMmYq3.js.br +0 -0
- codex/static_root/assets/confirm-dialog-uoXMmYq3.js.gz +0 -0
- codex/static_root/assets/{datetime-column-dv3EPaad.c897aa7a3039.js → datetime-column-GkTrMP1-.bf4adfaa4e02.js} +1 -1
- codex/static_root/assets/datetime-column-GkTrMP1-.bf4adfaa4e02.js.br +0 -0
- codex/static_root/assets/datetime-column-GkTrMP1-.bf4adfaa4e02.js.gz +0 -0
- codex/static_root/assets/{datetime-column-dv3EPaad.js → datetime-column-GkTrMP1-.js} +1 -1
- codex/static_root/assets/datetime-column-GkTrMP1-.js.br +0 -0
- codex/static_root/assets/datetime-column-GkTrMP1-.js.gz +0 -0
- codex/static_root/assets/{filter-Db5Fln7r.0d58582de664.js → filter-CRnAKgPp.cc654b8f8155.js} +1 -1
- codex/static_root/assets/filter-CRnAKgPp.cc654b8f8155.js.br +0 -0
- codex/static_root/assets/filter-CRnAKgPp.cc654b8f8155.js.gz +0 -0
- codex/static_root/assets/{filter-Db5Fln7r.js → filter-CRnAKgPp.js} +1 -1
- codex/static_root/assets/filter-CRnAKgPp.js.br +0 -0
- codex/static_root/assets/filter-CRnAKgPp.js.gz +0 -0
- codex/static_root/assets/{flag-tab-BZ2kKZ5N.20ffe7c0b7bf.js → flag-tab-BA4kiUXn.408cc0a71ec1.js} +1 -1
- codex/static_root/assets/flag-tab-BA4kiUXn.408cc0a71ec1.js.br +0 -0
- codex/static_root/assets/flag-tab-BA4kiUXn.408cc0a71ec1.js.gz +0 -0
- codex/static_root/assets/{flag-tab-BZ2kKZ5N.js → flag-tab-BA4kiUXn.js} +1 -1
- codex/static_root/assets/flag-tab-BA4kiUXn.js.br +0 -0
- codex/static_root/assets/flag-tab-BA4kiUXn.js.gz +0 -0
- codex/static_root/assets/{forwardRefs-BtYmQRWE.js → forwardRefs-FxOC1qa_.6e14881eedf1.js} +1 -1
- codex/static_root/assets/forwardRefs-FxOC1qa_.6e14881eedf1.js.br +0 -0
- codex/static_root/assets/forwardRefs-FxOC1qa_.6e14881eedf1.js.gz +0 -0
- codex/static_root/assets/{forwardRefs-BtYmQRWE.83587cda5fc0.js → forwardRefs-FxOC1qa_.js} +1 -1
- codex/static_root/assets/forwardRefs-FxOC1qa_.js.br +0 -0
- codex/static_root/assets/forwardRefs-FxOC1qa_.js.gz +0 -0
- codex/static_root/assets/{group-tab-CesC8o-T.d0a43da901be.js → group-tab-BD9iJZwB.b3e2b1b68d3a.js} +1 -1
- codex/static_root/assets/group-tab-BD9iJZwB.b3e2b1b68d3a.js.br +0 -0
- codex/static_root/assets/group-tab-BD9iJZwB.b3e2b1b68d3a.js.gz +0 -0
- codex/static_root/assets/{group-tab-CesC8o-T.js → group-tab-BD9iJZwB.js} +1 -1
- codex/static_root/assets/group-tab-BD9iJZwB.js.br +0 -0
- codex/static_root/assets/group-tab-BD9iJZwB.js.gz +0 -0
- codex/static_root/assets/{http-error-DrBUwxBc.8787039f5cec.js → http-error-D-b5OfHC.e661fa6e0000.js} +1 -1
- codex/static_root/assets/http-error-D-b5OfHC.e661fa6e0000.js.br +2 -0
- codex/static_root/assets/http-error-D-b5OfHC.e661fa6e0000.js.gz +0 -0
- codex/static_root/assets/{http-error-DrBUwxBc.js → http-error-D-b5OfHC.js} +1 -1
- codex/static_root/assets/http-error-D-b5OfHC.js.br +2 -0
- codex/static_root/assets/http-error-D-b5OfHC.js.gz +0 -0
- codex/static_root/assets/{index-C0my3yQ1.36ddbda3d37e.js → index-DCZ6v5x6.848976e7722c.js} +1 -1
- codex/static_root/assets/index-DCZ6v5x6.848976e7722c.js.br +0 -0
- codex/static_root/assets/index-DCZ6v5x6.848976e7722c.js.gz +0 -0
- codex/static_root/assets/{index-C0my3yQ1.js → index-DCZ6v5x6.js} +1 -1
- codex/static_root/assets/index-DCZ6v5x6.js.br +0 -0
- codex/static_root/assets/index-DCZ6v5x6.js.gz +0 -0
- codex/static_root/assets/{library-tab-DPHJtlEd.4c7e08aec414.js → library-tab-ju4WtRth.97949bf344d7.js} +1 -1
- codex/static_root/assets/library-tab-ju4WtRth.97949bf344d7.js.br +0 -0
- codex/static_root/assets/library-tab-ju4WtRth.97949bf344d7.js.gz +0 -0
- codex/static_root/assets/{library-tab-DPHJtlEd.js → library-tab-ju4WtRth.js} +1 -1
- codex/static_root/assets/library-tab-ju4WtRth.js.br +0 -0
- codex/static_root/assets/library-tab-ju4WtRth.js.gz +0 -0
- codex/static_root/assets/main-Bmi4BPiO.d75c8b55081b.js +39 -0
- codex/static_root/assets/main-Bmi4BPiO.d75c8b55081b.js.br +0 -0
- codex/static_root/assets/main-Bmi4BPiO.d75c8b55081b.js.gz +0 -0
- codex/static_root/assets/main-Bmi4BPiO.js +39 -0
- codex/static_root/assets/main-Bmi4BPiO.js.br +0 -0
- codex/static_root/assets/main-Bmi4BPiO.js.gz +0 -0
- codex/static_root/assets/pager-full-pdf-BjSr3CzH.ffbe3d735455.js +1 -0
- codex/static_root/assets/pager-full-pdf-BjSr3CzH.ffbe3d735455.js.br +0 -0
- codex/static_root/assets/pager-full-pdf-BjSr3CzH.ffbe3d735455.js.gz +0 -0
- codex/static_root/assets/pager-full-pdf-BjSr3CzH.js +1 -0
- codex/static_root/assets/pager-full-pdf-BjSr3CzH.js.br +0 -0
- codex/static_root/assets/pager-full-pdf-BjSr3CzH.js.gz +0 -0
- codex/static_root/assets/{pagination-toolbar-CoAXq9YN.aa7525342f11.js → pagination-toolbar-DpMVSiz_.86ce692ff9b4.js} +1 -1
- codex/static_root/assets/pagination-toolbar-DpMVSiz_.86ce692ff9b4.js.br +0 -0
- codex/static_root/assets/pagination-toolbar-DpMVSiz_.86ce692ff9b4.js.gz +0 -0
- codex/static_root/assets/{pagination-toolbar-CoAXq9YN.js → pagination-toolbar-DpMVSiz_.js} +1 -1
- codex/static_root/assets/pagination-toolbar-DpMVSiz_.js.br +0 -0
- codex/static_root/assets/pagination-toolbar-DpMVSiz_.js.gz +0 -0
- codex/static_root/assets/{pdf-doc-DGfmGYlA.ba1623aa7715.js → pdf-doc-DQBmNe4l.8dbdebf30643.js} +1 -1
- codex/static_root/assets/pdf-doc-DQBmNe4l.8dbdebf30643.js.br +0 -0
- codex/static_root/assets/pdf-doc-DQBmNe4l.8dbdebf30643.js.gz +0 -0
- codex/static_root/assets/{pdf-doc-DGfmGYlA.js → pdf-doc-DQBmNe4l.js} +1 -1
- codex/static_root/assets/pdf-doc-DQBmNe4l.js.br +0 -0
- codex/static_root/assets/pdf-doc-DQBmNe4l.js.gz +0 -0
- codex/static_root/assets/{reader-U6RQth6A.js → reader-BQVYc_LF.e327430a14a1.js} +2 -2
- codex/static_root/assets/reader-BQVYc_LF.e327430a14a1.js.br +0 -0
- codex/static_root/assets/reader-BQVYc_LF.e327430a14a1.js.gz +0 -0
- codex/static_root/assets/{reader-U6RQth6A.095d021092dd.js → reader-BQVYc_LF.js} +2 -2
- codex/static_root/assets/reader-BQVYc_LF.js.br +0 -0
- codex/static_root/assets/reader-BQVYc_LF.js.gz +0 -0
- codex/static_root/assets/{relation-chips-C4BoTvJv.4a245330f997.js → relation-chips-TRmABTTI.918cb21596f9.js} +1 -1
- codex/static_root/assets/relation-chips-TRmABTTI.918cb21596f9.js.br +0 -0
- codex/static_root/assets/relation-chips-TRmABTTI.918cb21596f9.js.gz +0 -0
- codex/static_root/assets/{relation-chips-C4BoTvJv.js → relation-chips-TRmABTTI.js} +1 -1
- codex/static_root/assets/relation-chips-TRmABTTI.js.br +0 -0
- codex/static_root/assets/relation-chips-TRmABTTI.js.gz +0 -0
- codex/static_root/assets/{settings-drawer-CpS_aX4Z.9d4d9533d033.css → settings-drawer-B-pwZRSy.8fc8b237bb52.css} +1 -1
- codex/static_root/assets/settings-drawer-B-pwZRSy.8fc8b237bb52.css.br +0 -0
- codex/static_root/assets/settings-drawer-B-pwZRSy.8fc8b237bb52.css.gz +0 -0
- codex/static_root/assets/{settings-drawer-CpS_aX4Z.css → settings-drawer-B-pwZRSy.css} +1 -1
- codex/static_root/assets/settings-drawer-B-pwZRSy.css.br +0 -0
- codex/static_root/assets/settings-drawer-B-pwZRSy.css.gz +0 -0
- codex/static_root/assets/settings-drawer-BoAnrKCI.46b6a030c81f.js +2 -0
- codex/static_root/assets/settings-drawer-BoAnrKCI.46b6a030c81f.js.br +0 -0
- codex/static_root/assets/settings-drawer-BoAnrKCI.46b6a030c81f.js.gz +0 -0
- codex/static_root/assets/settings-drawer-BoAnrKCI.js +2 -0
- codex/static_root/assets/settings-drawer-BoAnrKCI.js.br +0 -0
- codex/static_root/assets/settings-drawer-BoAnrKCI.js.gz +0 -0
- codex/static_root/assets/{ssrBoot-CRLVxq-1.b83b1b4b8e29.js → ssrBoot-B6P0M2z2.38ab2f4bde57.js} +1 -1
- codex/static_root/assets/ssrBoot-B6P0M2z2.38ab2f4bde57.js.br +0 -0
- codex/static_root/assets/ssrBoot-B6P0M2z2.38ab2f4bde57.js.gz +0 -0
- codex/static_root/assets/{ssrBoot-CRLVxq-1.js → ssrBoot-B6P0M2z2.js} +1 -1
- codex/static_root/assets/ssrBoot-B6P0M2z2.js.br +0 -0
- codex/static_root/assets/ssrBoot-B6P0M2z2.js.gz +0 -0
- codex/static_root/assets/{stats-tab-DikOLx9_.a6a703fc9501.js → stats-tab-C5m62fu3.8482d96809e9.js} +1 -1
- codex/static_root/assets/stats-tab-C5m62fu3.8482d96809e9.js.br +0 -0
- codex/static_root/assets/stats-tab-C5m62fu3.8482d96809e9.js.gz +0 -0
- codex/static_root/assets/{stats-tab-DikOLx9_.js → stats-tab-C5m62fu3.js} +1 -1
- codex/static_root/assets/stats-tab-C5m62fu3.js.br +0 -0
- codex/static_root/assets/stats-tab-C5m62fu3.js.gz +0 -0
- codex/static_root/assets/{task-tab-NvMiShar.fe041cff9c48.js → task-tab-B3WOGyYT.508fce185a28.js} +1 -1
- codex/static_root/assets/task-tab-B3WOGyYT.508fce185a28.js.br +0 -0
- codex/static_root/assets/task-tab-B3WOGyYT.508fce185a28.js.gz +0 -0
- codex/static_root/assets/{task-tab-NvMiShar.js → task-tab-B3WOGyYT.js} +1 -1
- codex/static_root/assets/task-tab-B3WOGyYT.js.br +0 -0
- codex/static_root/assets/task-tab-B3WOGyYT.js.gz +0 -0
- codex/static_root/assets/{unauthorized-C_c4p1TM.bf7dc6249167.js → unauthorized-DXoWE_v2.19c70a140f9b.js} +1 -1
- codex/static_root/assets/unauthorized-DXoWE_v2.19c70a140f9b.js.br +0 -0
- codex/static_root/assets/unauthorized-DXoWE_v2.19c70a140f9b.js.gz +0 -0
- codex/static_root/assets/{unauthorized-C_c4p1TM.js → unauthorized-DXoWE_v2.js} +1 -1
- codex/static_root/assets/unauthorized-DXoWE_v2.js.br +0 -0
- codex/static_root/assets/unauthorized-DXoWE_v2.js.gz +0 -0
- codex/static_root/assets/{user-tab-B9Nfgojx.903696a6e25e.js → user-tab-DhsQxTkZ.8a8167f9f2c4.js} +1 -1
- codex/static_root/assets/user-tab-DhsQxTkZ.8a8167f9f2c4.js.br +0 -0
- codex/static_root/assets/user-tab-DhsQxTkZ.8a8167f9f2c4.js.gz +0 -0
- codex/static_root/assets/{user-tab-B9Nfgojx.js → user-tab-DhsQxTkZ.js} +1 -1
- codex/static_root/assets/user-tab-DhsQxTkZ.js.br +0 -0
- codex/static_root/assets/user-tab-DhsQxTkZ.js.gz +0 -0
- codex/static_root/{manifest.f01588978268.json → manifest.db295ed1ca03.json} +307 -307
- codex/static_root/manifest.db295ed1ca03.json.br +0 -0
- codex/static_root/manifest.db295ed1ca03.json.gz +0 -0
- codex/static_root/manifest.json +307 -307
- codex/static_root/manifest.json.br +0 -0
- codex/static_root/manifest.json.gz +0 -0
- codex/static_root/staticfiles.json +1 -1
- codex/views/browser/bookmark.py +12 -0
- codex/views/browser/params.py +1 -1
- codex/views/browser/settings.py +3 -17
- codex/views/reader/params.py +1 -1
- codex/views/session.py +8 -4
- codex/views/settings.py +1 -0
- {codex-1.8.4.dist-info → codex-1.8.6.dist-info}/METADATA +1 -1
- {codex-1.8.4.dist-info → codex-1.8.6.dist-info}/RECORD +268 -268
- codex/static_root/assets/VCheckbox-BUS-Yeeg.7324b2d79f7e.js.br +0 -0
- codex/static_root/assets/VCheckbox-BUS-Yeeg.7324b2d79f7e.js.gz +0 -0
- codex/static_root/assets/VCheckbox-BUS-Yeeg.js.br +0 -0
- codex/static_root/assets/VCheckbox-BUS-Yeeg.js.gz +0 -0
- codex/static_root/assets/VCheckboxBtn-BZqfedDW.52d389bdccde.js.br +0 -0
- codex/static_root/assets/VCheckboxBtn-BZqfedDW.52d389bdccde.js.gz +0 -0
- codex/static_root/assets/VCheckboxBtn-BZqfedDW.js.br +0 -0
- codex/static_root/assets/VCheckboxBtn-BZqfedDW.js.gz +0 -0
- codex/static_root/assets/VCombobox-D1Ha7FmT.76d5650a920c.js.br +0 -0
- codex/static_root/assets/VCombobox-D1Ha7FmT.76d5650a920c.js.gz +0 -0
- codex/static_root/assets/VCombobox-D1Ha7FmT.js.br +0 -0
- codex/static_root/assets/VCombobox-D1Ha7FmT.js.gz +0 -0
- codex/static_root/assets/VDialog-CwCy5caJ.31afcb45bd4b.js.br +0 -0
- codex/static_root/assets/VDialog-CwCy5caJ.31afcb45bd4b.js.gz +0 -0
- codex/static_root/assets/VDialog-CwCy5caJ.js.br +0 -0
- codex/static_root/assets/VDialog-CwCy5caJ.js.gz +0 -0
- codex/static_root/assets/VDivider-QEWmQwZy.89d318a32d70.js.br +0 -0
- codex/static_root/assets/VDivider-QEWmQwZy.89d318a32d70.js.gz +0 -0
- codex/static_root/assets/VDivider-QEWmQwZy.js.br +0 -0
- codex/static_root/assets/VDivider-QEWmQwZy.js.gz +0 -0
- codex/static_root/assets/VExpansionPanels-Dzh4hOyH.dd0796960676.js.br +0 -0
- codex/static_root/assets/VExpansionPanels-Dzh4hOyH.dd0796960676.js.gz +0 -0
- codex/static_root/assets/VExpansionPanels-Dzh4hOyH.js.br +0 -0
- codex/static_root/assets/VExpansionPanels-Dzh4hOyH.js.gz +0 -0
- codex/static_root/assets/VForm-CKTqFmYD.837ad5ecbb66.js.br +0 -0
- codex/static_root/assets/VForm-CKTqFmYD.837ad5ecbb66.js.gz +0 -0
- codex/static_root/assets/VForm-CKTqFmYD.js.br +0 -0
- codex/static_root/assets/VForm-CKTqFmYD.js.gz +0 -0
- codex/static_root/assets/VRadioGroup-B2m47wR5.cf163036f69b.js.br +0 -0
- codex/static_root/assets/VRadioGroup-B2m47wR5.cf163036f69b.js.gz +0 -0
- codex/static_root/assets/VRadioGroup-B2m47wR5.js.br +0 -0
- codex/static_root/assets/VRadioGroup-B2m47wR5.js.gz +0 -0
- codex/static_root/assets/VSelect-De33kkeP.0679e23c959b.js.br +0 -0
- codex/static_root/assets/VSelect-De33kkeP.0679e23c959b.js.gz +0 -0
- codex/static_root/assets/VSelect-De33kkeP.js.br +0 -0
- codex/static_root/assets/VSelect-De33kkeP.js.gz +0 -0
- codex/static_root/assets/VSelectionControl-Cib41eud.c30c8e31df2a.js.br +0 -0
- codex/static_root/assets/VSelectionControl-Cib41eud.c30c8e31df2a.js.gz +0 -0
- codex/static_root/assets/VSelectionControl-Cib41eud.js.br +0 -0
- codex/static_root/assets/VSelectionControl-Cib41eud.js.gz +0 -0
- codex/static_root/assets/VTable-DBmzLdWQ.1b4c12852e73.js.br +0 -0
- codex/static_root/assets/VTable-DBmzLdWQ.1b4c12852e73.js.gz +0 -0
- codex/static_root/assets/VTable-DBmzLdWQ.js.br +0 -0
- codex/static_root/assets/VTable-DBmzLdWQ.js.gz +0 -0
- codex/static_root/assets/VWindowItem-BeK4JUp7.4e60834c43b0.js.br +0 -0
- codex/static_root/assets/VWindowItem-BeK4JUp7.4e60834c43b0.js.gz +0 -0
- codex/static_root/assets/VWindowItem-BeK4JUp7.js.br +0 -0
- codex/static_root/assets/VWindowItem-BeK4JUp7.js.gz +0 -0
- codex/static_root/assets/admin-Bhck3Mck.c3ea899835a2.js.br +0 -0
- codex/static_root/assets/admin-Bhck3Mck.c3ea899835a2.js.gz +0 -0
- codex/static_root/assets/admin-Bhck3Mck.js.br +0 -0
- codex/static_root/assets/admin-Bhck3Mck.js.gz +0 -0
- codex/static_root/assets/admin-CDRC0Rok.0427890caa22.js.br +0 -0
- codex/static_root/assets/admin-CDRC0Rok.0427890caa22.js.gz +0 -0
- codex/static_root/assets/admin-CDRC0Rok.js.br +0 -0
- codex/static_root/assets/admin-CDRC0Rok.js.gz +0 -0
- codex/static_root/assets/admin-menu-BZRid1Ps.3402782e61d1.js.br +0 -0
- codex/static_root/assets/admin-menu-BZRid1Ps.3402782e61d1.js.gz +0 -0
- codex/static_root/assets/admin-menu-BZRid1Ps.js.br +0 -0
- codex/static_root/assets/admin-menu-BZRid1Ps.js.gz +0 -0
- codex/static_root/assets/admin-settings-button-progress-DnsCBRll.5fdbf19092e8.js.br +0 -2
- codex/static_root/assets/admin-settings-button-progress-DnsCBRll.5fdbf19092e8.js.gz +0 -0
- codex/static_root/assets/admin-settings-button-progress-DnsCBRll.js.br +0 -2
- codex/static_root/assets/admin-settings-button-progress-DnsCBRll.js.gz +0 -0
- codex/static_root/assets/browser-Dr_bPvQw.45714261db30.js.br +0 -0
- codex/static_root/assets/browser-Dr_bPvQw.45714261db30.js.gz +0 -0
- codex/static_root/assets/browser-Dr_bPvQw.js.br +0 -0
- codex/static_root/assets/browser-Dr_bPvQw.js.gz +0 -0
- codex/static_root/assets/change-password-dialog-DgVD2Irc.0bc698baa5dd.js.br +0 -0
- codex/static_root/assets/change-password-dialog-DgVD2Irc.0bc698baa5dd.js.gz +0 -0
- codex/static_root/assets/change-password-dialog-DgVD2Irc.js.br +0 -0
- codex/static_root/assets/change-password-dialog-DgVD2Irc.js.gz +0 -0
- codex/static_root/assets/confirm-dialog-CzIH9jqe.1dfcb7de1a9f.js.br +0 -0
- codex/static_root/assets/confirm-dialog-CzIH9jqe.1dfcb7de1a9f.js.gz +0 -0
- codex/static_root/assets/confirm-dialog-CzIH9jqe.js.br +0 -0
- codex/static_root/assets/confirm-dialog-CzIH9jqe.js.gz +0 -0
- codex/static_root/assets/datetime-column-dv3EPaad.c897aa7a3039.js.br +0 -0
- codex/static_root/assets/datetime-column-dv3EPaad.c897aa7a3039.js.gz +0 -0
- codex/static_root/assets/datetime-column-dv3EPaad.js.br +0 -0
- codex/static_root/assets/datetime-column-dv3EPaad.js.gz +0 -0
- codex/static_root/assets/filter-Db5Fln7r.0d58582de664.js.br +0 -0
- codex/static_root/assets/filter-Db5Fln7r.0d58582de664.js.gz +0 -0
- codex/static_root/assets/filter-Db5Fln7r.js.br +0 -0
- codex/static_root/assets/filter-Db5Fln7r.js.gz +0 -0
- codex/static_root/assets/flag-tab-BZ2kKZ5N.20ffe7c0b7bf.js.br +0 -0
- codex/static_root/assets/flag-tab-BZ2kKZ5N.20ffe7c0b7bf.js.gz +0 -0
- codex/static_root/assets/flag-tab-BZ2kKZ5N.js.br +0 -0
- codex/static_root/assets/flag-tab-BZ2kKZ5N.js.gz +0 -0
- codex/static_root/assets/forwardRefs-BtYmQRWE.83587cda5fc0.js.br +0 -0
- codex/static_root/assets/forwardRefs-BtYmQRWE.83587cda5fc0.js.gz +0 -0
- codex/static_root/assets/forwardRefs-BtYmQRWE.js.br +0 -0
- codex/static_root/assets/forwardRefs-BtYmQRWE.js.gz +0 -0
- codex/static_root/assets/group-tab-CesC8o-T.d0a43da901be.js.br +0 -0
- codex/static_root/assets/group-tab-CesC8o-T.d0a43da901be.js.gz +0 -0
- codex/static_root/assets/group-tab-CesC8o-T.js.br +0 -0
- codex/static_root/assets/group-tab-CesC8o-T.js.gz +0 -0
- codex/static_root/assets/http-error-DrBUwxBc.8787039f5cec.js.br +0 -0
- codex/static_root/assets/http-error-DrBUwxBc.8787039f5cec.js.gz +0 -0
- codex/static_root/assets/http-error-DrBUwxBc.js.br +0 -0
- codex/static_root/assets/http-error-DrBUwxBc.js.gz +0 -0
- codex/static_root/assets/index-C0my3yQ1.36ddbda3d37e.js.br +0 -0
- codex/static_root/assets/index-C0my3yQ1.36ddbda3d37e.js.gz +0 -0
- codex/static_root/assets/index-C0my3yQ1.js.br +0 -0
- codex/static_root/assets/index-C0my3yQ1.js.gz +0 -0
- codex/static_root/assets/library-tab-DPHJtlEd.4c7e08aec414.js.br +0 -0
- codex/static_root/assets/library-tab-DPHJtlEd.4c7e08aec414.js.gz +0 -0
- codex/static_root/assets/library-tab-DPHJtlEd.js.br +0 -0
- codex/static_root/assets/library-tab-DPHJtlEd.js.gz +0 -0
- codex/static_root/assets/main-CBIBLN5b.56d293f52ca6.js +0 -39
- codex/static_root/assets/main-CBIBLN5b.56d293f52ca6.js.br +0 -0
- codex/static_root/assets/main-CBIBLN5b.56d293f52ca6.js.gz +0 -0
- codex/static_root/assets/main-CBIBLN5b.js +0 -39
- codex/static_root/assets/main-CBIBLN5b.js.br +0 -0
- codex/static_root/assets/main-CBIBLN5b.js.gz +0 -0
- codex/static_root/assets/pager-full-pdf-DI-QlEmf.49318b2dfd3f.js +0 -1
- codex/static_root/assets/pager-full-pdf-DI-QlEmf.49318b2dfd3f.js.br +0 -0
- codex/static_root/assets/pager-full-pdf-DI-QlEmf.49318b2dfd3f.js.gz +0 -0
- codex/static_root/assets/pager-full-pdf-DI-QlEmf.js +0 -1
- codex/static_root/assets/pager-full-pdf-DI-QlEmf.js.br +0 -0
- codex/static_root/assets/pager-full-pdf-DI-QlEmf.js.gz +0 -0
- codex/static_root/assets/pagination-toolbar-CoAXq9YN.aa7525342f11.js.br +0 -0
- codex/static_root/assets/pagination-toolbar-CoAXq9YN.aa7525342f11.js.gz +0 -0
- codex/static_root/assets/pagination-toolbar-CoAXq9YN.js.br +0 -0
- codex/static_root/assets/pagination-toolbar-CoAXq9YN.js.gz +0 -0
- codex/static_root/assets/pdf-doc-DGfmGYlA.ba1623aa7715.js.br +0 -0
- codex/static_root/assets/pdf-doc-DGfmGYlA.ba1623aa7715.js.gz +0 -0
- codex/static_root/assets/pdf-doc-DGfmGYlA.js.br +0 -0
- codex/static_root/assets/pdf-doc-DGfmGYlA.js.gz +0 -0
- codex/static_root/assets/reader-U6RQth6A.095d021092dd.js.br +0 -0
- codex/static_root/assets/reader-U6RQth6A.095d021092dd.js.gz +0 -0
- codex/static_root/assets/reader-U6RQth6A.js.br +0 -0
- codex/static_root/assets/reader-U6RQth6A.js.gz +0 -0
- codex/static_root/assets/relation-chips-C4BoTvJv.4a245330f997.js.br +0 -0
- codex/static_root/assets/relation-chips-C4BoTvJv.4a245330f997.js.gz +0 -0
- codex/static_root/assets/relation-chips-C4BoTvJv.js.br +0 -0
- codex/static_root/assets/relation-chips-C4BoTvJv.js.gz +0 -0
- codex/static_root/assets/settings-drawer-CpS_aX4Z.9d4d9533d033.css.br +0 -0
- codex/static_root/assets/settings-drawer-CpS_aX4Z.9d4d9533d033.css.gz +0 -0
- codex/static_root/assets/settings-drawer-CpS_aX4Z.css.br +0 -0
- codex/static_root/assets/settings-drawer-CpS_aX4Z.css.gz +0 -0
- codex/static_root/assets/settings-drawer-DxBOD9ng.8b8b749e7724.js +0 -2
- codex/static_root/assets/settings-drawer-DxBOD9ng.8b8b749e7724.js.br +0 -0
- codex/static_root/assets/settings-drawer-DxBOD9ng.8b8b749e7724.js.gz +0 -0
- codex/static_root/assets/settings-drawer-DxBOD9ng.js +0 -2
- codex/static_root/assets/settings-drawer-DxBOD9ng.js.br +0 -0
- codex/static_root/assets/settings-drawer-DxBOD9ng.js.gz +0 -0
- codex/static_root/assets/ssrBoot-CRLVxq-1.b83b1b4b8e29.js.br +0 -0
- codex/static_root/assets/ssrBoot-CRLVxq-1.b83b1b4b8e29.js.gz +0 -0
- codex/static_root/assets/ssrBoot-CRLVxq-1.js.br +0 -0
- codex/static_root/assets/ssrBoot-CRLVxq-1.js.gz +0 -0
- codex/static_root/assets/stats-tab-DikOLx9_.a6a703fc9501.js.br +0 -0
- codex/static_root/assets/stats-tab-DikOLx9_.a6a703fc9501.js.gz +0 -0
- codex/static_root/assets/stats-tab-DikOLx9_.js.br +0 -0
- codex/static_root/assets/stats-tab-DikOLx9_.js.gz +0 -0
- codex/static_root/assets/task-tab-NvMiShar.fe041cff9c48.js.br +0 -0
- codex/static_root/assets/task-tab-NvMiShar.fe041cff9c48.js.gz +0 -0
- codex/static_root/assets/task-tab-NvMiShar.js.br +0 -0
- codex/static_root/assets/task-tab-NvMiShar.js.gz +0 -0
- codex/static_root/assets/unauthorized-C_c4p1TM.bf7dc6249167.js.br +0 -0
- codex/static_root/assets/unauthorized-C_c4p1TM.bf7dc6249167.js.gz +0 -0
- codex/static_root/assets/unauthorized-C_c4p1TM.js.br +0 -0
- codex/static_root/assets/unauthorized-C_c4p1TM.js.gz +0 -0
- codex/static_root/assets/user-tab-B9Nfgojx.903696a6e25e.js.br +0 -0
- codex/static_root/assets/user-tab-B9Nfgojx.903696a6e25e.js.gz +0 -0
- codex/static_root/assets/user-tab-B9Nfgojx.js.br +0 -0
- codex/static_root/assets/user-tab-B9Nfgojx.js.gz +0 -0
- codex/static_root/manifest.f01588978268.json.br +0 -0
- codex/static_root/manifest.f01588978268.json.gz +0 -0
- /codex/librarian/{watchdog/memory.py → memory.py} +0 -0
- {codex-1.8.4.dist-info → codex-1.8.6.dist-info}/WHEEL +0 -0
- {codex-1.8.4.dist-info → codex-1.8.6.dist-info}/entry_points.txt +0 -0
- {codex-1.8.4.dist-info → codex-1.8.6.dist-info}/licenses/LICENSE +0 -0
|
@@ -4,7 +4,7 @@ from codex.librarian.scribe.importer.const import ALL_COMIC_GROUP_FIELD_NAMES
|
|
|
4
4
|
from codex.librarian.scribe.importer.delete.covers import DeletedCoversImporter
|
|
5
5
|
from codex.librarian.scribe.importer.statii.delete import ImporterRemoveComicsStatus
|
|
6
6
|
from codex.models import Comic, Folder, StoryArc
|
|
7
|
-
from codex.settings import
|
|
7
|
+
from codex.settings import DELETE_MAX_CHUNK_SIZE
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
class DeletedComicsImporter(DeletedCoversImporter):
|
|
@@ -29,7 +29,7 @@ class DeletedComicsImporter(DeletedCoversImporter):
|
|
|
29
29
|
comics_deleted_qs = delete_qs.only(
|
|
30
30
|
*ALL_COMIC_GROUP_FIELD_NAMES
|
|
31
31
|
).prefetch_related("story_arc_numbers__story_arc")
|
|
32
|
-
for comic in comics_deleted_qs.iterator(chunk_size=
|
|
32
|
+
for comic in comics_deleted_qs.iterator(chunk_size=DELETE_MAX_CHUNK_SIZE):
|
|
33
33
|
for field_name in ALL_COMIC_GROUP_FIELD_NAMES:
|
|
34
34
|
if field_name == "story_arc_numbers":
|
|
35
35
|
for san in comic.story_arc_numbers.select_related("story_arc").only(
|
|
@@ -29,23 +29,12 @@ from codex.librarian.scribe.tasks import (
|
|
|
29
29
|
)
|
|
30
30
|
from codex.librarian.scribe.timestamp_update import TimestampUpdater
|
|
31
31
|
from codex.librarian.threads import QueuedThread
|
|
32
|
-
from codex.settings import SEARCH_INDEX_BATCH_SIZE
|
|
33
32
|
|
|
34
|
-
|
|
33
|
+
ABORT_SEARCH_UPDATE_TASKS = (
|
|
35
34
|
SearchIndexClearTask,
|
|
36
35
|
SearchIndexSyncAbortTask,
|
|
37
36
|
JanitorFTSRebuildTask,
|
|
38
37
|
)
|
|
39
|
-
_ABORT_SEARCH_UPDATE_ON_IMPORT_TASKS = (
|
|
40
|
-
ImportTask,
|
|
41
|
-
JanitorAdoptOrphanFoldersTask,
|
|
42
|
-
)
|
|
43
|
-
_ABORT_SEARCH_UPDATE_ON_IMPORT_BATCH_SIZE = 1000
|
|
44
|
-
ABORT_SEARCH_UPDATE_TASKS = (
|
|
45
|
-
_ABORT_SEARCH_UPDATE_TASKS + _ABORT_SEARCH_UPDATE_ON_IMPORT_TASKS
|
|
46
|
-
if SEARCH_INDEX_BATCH_SIZE <= _ABORT_SEARCH_UPDATE_ON_IMPORT_BATCH_SIZE
|
|
47
|
-
else _ABORT_SEARCH_UPDATE_TASKS
|
|
48
|
-
)
|
|
49
38
|
|
|
50
39
|
|
|
51
40
|
class ScribeThread(QueuedThread):
|
|
@@ -118,7 +107,7 @@ class ScribeThread(QueuedThread):
|
|
|
118
107
|
self.log.debug("Abort cleanup db signal given.")
|
|
119
108
|
elif isinstance(task, SearchIndexSyncAbortTask):
|
|
120
109
|
self.log.debug(
|
|
121
|
-
"Search Index
|
|
110
|
+
"Search Index Sync abort signal given. It may take a while for the current import chunk to finish."
|
|
122
111
|
)
|
|
123
112
|
return
|
|
124
113
|
elif isinstance(task, ImportAbortTask):
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"""Search Index update."""
|
|
2
2
|
|
|
3
3
|
from datetime import datetime
|
|
4
|
+
from math import floor
|
|
4
5
|
from time import time
|
|
6
|
+
from typing import TYPE_CHECKING
|
|
5
7
|
from zoneinfo import ZoneInfo
|
|
6
8
|
|
|
7
9
|
from comicbox.enums.maps.identifiers import ID_SOURCE_NAME_MAP
|
|
@@ -12,6 +14,7 @@ from django.db.models.functions.datetime import Now
|
|
|
12
14
|
from django.db.models.query import QuerySet
|
|
13
15
|
from humanize import intcomma, naturaldelta
|
|
14
16
|
|
|
17
|
+
from codex.librarian.memory import get_mem_limit
|
|
15
18
|
from codex.librarian.scribe.search.remove import SearchIndexerRemove
|
|
16
19
|
from codex.librarian.scribe.search.status import (
|
|
17
20
|
SEARCH_INDEX_STATII,
|
|
@@ -20,12 +23,14 @@ from codex.librarian.scribe.search.status import (
|
|
|
20
23
|
SearchIndexSyncCreateStatus,
|
|
21
24
|
SearchIndexSyncUpdateStatus,
|
|
22
25
|
)
|
|
23
|
-
from codex.librarian.status import Status
|
|
24
26
|
from codex.models import Comic
|
|
25
27
|
from codex.models.comic import ComicFTS
|
|
26
28
|
from codex.models.functions import GroupConcat
|
|
27
29
|
from codex.serializers.fields.browser import CountryField, LanguageField, PyCountryField
|
|
28
|
-
from codex.settings import
|
|
30
|
+
from codex.settings import SEARCH_SYNC_BATCH_MEMORY_RATIO
|
|
31
|
+
|
|
32
|
+
if TYPE_CHECKING:
|
|
33
|
+
from codex.librarian.status import Status
|
|
29
34
|
|
|
30
35
|
_COMICFTS_ATTRIBUTES = (
|
|
31
36
|
"collection_title",
|
|
@@ -69,7 +74,6 @@ _COMICFTS_UPDATE_FIELDS = (
|
|
|
69
74
|
*_COMICFTS_M2MS,
|
|
70
75
|
)
|
|
71
76
|
_MIN_UTC_DATE = datetime.min.replace(tzinfo=ZoneInfo("UTC"))
|
|
72
|
-
_CHUNK_HUMAN_SIZE = intcomma(SEARCH_INDEX_BATCH_SIZE)
|
|
73
77
|
|
|
74
78
|
|
|
75
79
|
class SearchIndexerSync(SearchIndexerRemove):
|
|
@@ -184,32 +188,19 @@ class SearchIndexerSync(SearchIndexerRemove):
|
|
|
184
188
|
names.append(long_name)
|
|
185
189
|
return ",".join(names)
|
|
186
190
|
|
|
187
|
-
def
|
|
188
|
-
self,
|
|
189
|
-
obj_list: list[ComicFTS],
|
|
190
|
-
status,
|
|
191
|
-
*,
|
|
192
|
-
create: bool,
|
|
191
|
+
def _update_search_index_operate_get_status(
|
|
192
|
+
self, total_comics: int, chunk_human_size: str, *, create: bool
|
|
193
193
|
):
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
batch_position = f"({status.complete}/{status.total})"
|
|
201
|
-
self.log.debug(f"{verbing} {num_comic_fts} {batch_position} search entries...")
|
|
202
|
-
if create:
|
|
203
|
-
ComicFTS.objects.bulk_create(obj_list)
|
|
204
|
-
else:
|
|
205
|
-
ComicFTS.objects.bulk_update(obj_list, _COMICFTS_UPDATE_FIELDS)
|
|
206
|
-
obj_list.clear()
|
|
194
|
+
status_class = (
|
|
195
|
+
SearchIndexSyncCreateStatus if create else SearchIndexSyncUpdateStatus
|
|
196
|
+
)
|
|
197
|
+
subtitle = f"Chunks of {chunk_human_size}" if total_comics else ""
|
|
198
|
+
return status_class(total=total_comics, subtitle=subtitle)
|
|
207
199
|
|
|
208
200
|
def _create_comicfts_entry(
|
|
209
201
|
self,
|
|
210
202
|
comic,
|
|
211
203
|
obj_list: list[ComicFTS],
|
|
212
|
-
status: Status,
|
|
213
204
|
*,
|
|
214
205
|
create: bool,
|
|
215
206
|
):
|
|
@@ -262,73 +253,78 @@ class SearchIndexerSync(SearchIndexerRemove):
|
|
|
262
253
|
comicfts.created_at = now
|
|
263
254
|
|
|
264
255
|
obj_list.append(comicfts)
|
|
265
|
-
status.increment_complete()
|
|
266
|
-
self.status_controller.update(status)
|
|
267
256
|
|
|
268
|
-
def
|
|
269
|
-
self,
|
|
257
|
+
def _update_search_index_create_or_update(
|
|
258
|
+
self,
|
|
259
|
+
obj_list: list[ComicFTS],
|
|
260
|
+
status,
|
|
261
|
+
*,
|
|
262
|
+
create: bool,
|
|
270
263
|
):
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
264
|
+
if self.abort_event.is_set():
|
|
265
|
+
return
|
|
266
|
+
verb = "create" if create else "update"
|
|
267
|
+
verbing = (verb[:-1] + "ing").capitalize()
|
|
268
|
+
num_comic_fts = len(obj_list)
|
|
269
|
+
|
|
270
|
+
batch_position = f"({status.complete}/{status.total})"
|
|
271
|
+
self.log.debug(f"{verbing} {num_comic_fts} {batch_position} search entries...")
|
|
272
|
+
if create:
|
|
273
|
+
ComicFTS.objects.bulk_create(obj_list)
|
|
274
|
+
else:
|
|
275
|
+
ComicFTS.objects.bulk_update(obj_list, _COMICFTS_UPDATE_FIELDS)
|
|
276
|
+
|
|
277
|
+
status.increment_complete(num_comic_fts)
|
|
278
|
+
self.status_controller.update(status, notify=True)
|
|
276
279
|
|
|
277
280
|
def _update_search_index_operate(
|
|
278
281
|
self, comics_filtered_qs: QuerySet, *, create: bool
|
|
279
282
|
):
|
|
280
|
-
|
|
283
|
+
# Smaller systems may run out of virtual memory unless this is auto governed.
|
|
284
|
+
mem_limit_gb = get_mem_limit("g")
|
|
285
|
+
search_index_batch_size = floor(
|
|
286
|
+
(mem_limit_gb / SEARCH_SYNC_BATCH_MEMORY_RATIO) * 1000
|
|
287
|
+
)
|
|
288
|
+
chunk_human_size = intcomma(search_index_batch_size)
|
|
281
289
|
|
|
282
290
|
verb = "create" if create else "update"
|
|
291
|
+
self.log.debug(f"Counting total search index entries to {verb}...")
|
|
292
|
+
total_comics = comics_filtered_qs.count()
|
|
283
293
|
status = self._update_search_index_operate_get_status(
|
|
284
|
-
total_comics, create=create
|
|
294
|
+
total_comics, chunk_human_size, create=create
|
|
285
295
|
)
|
|
286
296
|
|
|
287
297
|
try:
|
|
288
|
-
if total_comics:
|
|
289
|
-
reason = (
|
|
290
|
-
f"Batching this search engine {verb} operation in to chunks of {_CHUNK_HUMAN_SIZE}."
|
|
291
|
-
f" Search engine {verb}s run much faster as one large batch but then there's no progress updates."
|
|
292
|
-
" You may adjust the batch size with the environment variable CODEX_SEARCH_INDEX_BATCH_SIZE."
|
|
293
|
-
)
|
|
294
|
-
else:
|
|
295
|
-
reason = f"No search entries to {verb}."
|
|
296
|
-
self.log.debug(reason)
|
|
297
298
|
if not total_comics:
|
|
299
|
+
self.log.debug(f"No search entries to {verb}.")
|
|
298
300
|
return total_comics
|
|
299
301
|
|
|
300
|
-
self.status_controller.start(status)
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
comics = self._annotate_fts_query(comics)
|
|
304
|
-
comics = comics.order_by("pk")
|
|
305
|
-
|
|
306
|
-
obj_list = []
|
|
307
|
-
prep_num = min(SEARCH_INDEX_BATCH_SIZE, total_comics)
|
|
308
|
-
self.log.debug(f"Preparing {prep_num} comics for search indexing...")
|
|
309
|
-
for comic in comics.iterator(chunk_size=SEARCH_INDEX_BATCH_SIZE):
|
|
302
|
+
self.status_controller.start(status, notify=True)
|
|
303
|
+
while True:
|
|
304
|
+
obj_list = []
|
|
310
305
|
if self.abort_event.is_set():
|
|
311
306
|
break
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
307
|
+
# Not using standard iterator chunking to control memory and really
|
|
308
|
+
# do this in batches.
|
|
309
|
+
self.log.debug(
|
|
310
|
+
f"Preparing up to {search_index_batch_size} comics for search indexing..."
|
|
311
|
+
)
|
|
312
|
+
comics = comics_filtered_qs
|
|
313
|
+
comics = self._select_related_fts_query(comics)
|
|
314
|
+
comics = self._prefetch_related_fts_query(comics)
|
|
315
|
+
comics = comics.order_by("pk")
|
|
316
|
+
comics = comics[:search_index_batch_size]
|
|
317
|
+
comics = self._annotate_fts_query(comics)
|
|
318
|
+
for comic in comics:
|
|
319
|
+
self._create_comicfts_entry(comic, obj_list, create=create)
|
|
320
|
+
|
|
321
|
+
if not obj_list:
|
|
322
|
+
break
|
|
323
|
+
self._update_search_index_create_or_update(
|
|
324
|
+
obj_list,
|
|
325
|
+
status,
|
|
326
|
+
create=create,
|
|
327
|
+
)
|
|
332
328
|
|
|
333
329
|
finally:
|
|
334
330
|
self.status_controller.finish(status)
|
|
@@ -340,17 +336,17 @@ class SearchIndexerSync(SearchIndexerRemove):
|
|
|
340
336
|
since = fts_watermark or "the fracturing of the multiverse"
|
|
341
337
|
self.log.info(f"Looking for search entries to update since {since}...")
|
|
342
338
|
fts_watermark = fts_watermark or _MIN_UTC_DATE
|
|
343
|
-
out_of_date_comics = (
|
|
344
|
-
|
|
345
|
-
.exclude(comicfts__isnull=True)
|
|
346
|
-
.filter(updated_at__gt=fts_watermark)
|
|
339
|
+
out_of_date_comics = Comic.objects.filter(
|
|
340
|
+
pk__in=ComicFTS.objects.values("comic_id"), updated_at__gt=fts_watermark
|
|
347
341
|
)
|
|
348
342
|
return self._update_search_index_operate(out_of_date_comics, create=False)
|
|
349
343
|
|
|
350
344
|
def _update_search_index_create(self):
|
|
351
345
|
"""Create missing search entries."""
|
|
352
346
|
self.log.info("Looking for missing search entries to create...")
|
|
353
|
-
missing_comics = Comic.objects.
|
|
347
|
+
missing_comics = Comic.objects.exclude(
|
|
348
|
+
pk__in=ComicFTS.objects.values("comic_id")
|
|
349
|
+
)
|
|
354
350
|
return self._update_search_index_operate(missing_comics, create=True)
|
|
355
351
|
|
|
356
352
|
def _update_search_index(self, *, rebuild: bool):
|
codex/librarian/status.py
CHANGED
|
@@ -111,7 +111,30 @@ class StatusController:
|
|
|
111
111
|
return
|
|
112
112
|
self._update(status, notify=notify)
|
|
113
113
|
|
|
114
|
-
|
|
114
|
+
@staticmethod
|
|
115
|
+
def _finish_status_prepare(
|
|
116
|
+
positive_statii: MappingProxyType[str, Status | type[Status]],
|
|
117
|
+
updates: dict[str, Any],
|
|
118
|
+
):
|
|
119
|
+
# Filter all active or preactive statii
|
|
120
|
+
ls_filter = Q(active__isnull=False) | Q(preactive__isnull=False)
|
|
121
|
+
if positive_statii:
|
|
122
|
+
ls_filter_dict: dict[str, Any] = {"status_type__in": positive_statii.keys()}
|
|
123
|
+
# Filter on status codes
|
|
124
|
+
ls_filter &= Q(**ls_filter_dict)
|
|
125
|
+
lses = LibrarianStatus.objects.filter(ls_filter)
|
|
126
|
+
update_ls = []
|
|
127
|
+
log_statii = []
|
|
128
|
+
for ls in lses.iterator():
|
|
129
|
+
for key, value in updates.items():
|
|
130
|
+
setattr(ls, key, value)
|
|
131
|
+
update_ls.append(ls)
|
|
132
|
+
status = positive_statii[ls.status_type]
|
|
133
|
+
if isinstance(status, Status):
|
|
134
|
+
log_statii.append(status)
|
|
135
|
+
return update_ls, log_statii
|
|
136
|
+
|
|
137
|
+
def _log_finish(self, status: Status, *, clear_subtitle: bool):
|
|
115
138
|
"""Log finish of status with stats."""
|
|
116
139
|
level = "INFO"
|
|
117
140
|
suffix = ""
|
|
@@ -130,41 +153,22 @@ class StatusController:
|
|
|
130
153
|
if status.log_success:
|
|
131
154
|
level = "SUCCESS"
|
|
132
155
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
prefix_parts
|
|
156
|
+
if clear_subtitle:
|
|
157
|
+
status.subtitle = ""
|
|
158
|
+
|
|
159
|
+
prefix_parts = filter(
|
|
160
|
+
None, (status.verbed(), count, status.ITEM_NAME, status.subtitle)
|
|
161
|
+
)
|
|
137
162
|
prefix = " ".join(prefix_parts)
|
|
138
163
|
|
|
139
164
|
self.log.log(level, f"{prefix}{suffix}.")
|
|
140
165
|
|
|
141
|
-
@staticmethod
|
|
142
|
-
def _finish_status_prepare(
|
|
143
|
-
positive_statii: MappingProxyType[str, Status | type[Status]],
|
|
144
|
-
updates: dict[str, Any],
|
|
145
|
-
):
|
|
146
|
-
# Filter on submitted codes or all statii if nothing.
|
|
147
|
-
ls_filter_dict: dict[str, Any] = (
|
|
148
|
-
{"status_type__in": positive_statii.keys()} if positive_statii else {}
|
|
149
|
-
)
|
|
150
|
-
# Filter all active or preactive statii
|
|
151
|
-
ls_filter = (Q(active__isnull=False) | Q(preactive__isnull=False)) & Q(
|
|
152
|
-
**ls_filter_dict
|
|
153
|
-
)
|
|
154
|
-
lses = LibrarianStatus.objects.filter(ls_filter)
|
|
155
|
-
update_ls = []
|
|
156
|
-
log_statii = []
|
|
157
|
-
for ls in lses.iterator():
|
|
158
|
-
for key, value in updates.items():
|
|
159
|
-
setattr(ls, key, value)
|
|
160
|
-
update_ls.append(ls)
|
|
161
|
-
status = positive_statii[ls.status_type]
|
|
162
|
-
if isinstance(status, Status):
|
|
163
|
-
log_statii.append(status)
|
|
164
|
-
return update_ls, log_statii
|
|
165
|
-
|
|
166
166
|
def finish_many(
|
|
167
|
-
self,
|
|
167
|
+
self,
|
|
168
|
+
statii: Iterable[Status | type[Status] | None],
|
|
169
|
+
*,
|
|
170
|
+
notify: bool = True,
|
|
171
|
+
clear_subtitle=True,
|
|
168
172
|
):
|
|
169
173
|
"""Finish all librarian statuses."""
|
|
170
174
|
positive_statii: MappingProxyType[str, Status | type[Status]] = (
|
|
@@ -184,13 +188,15 @@ class StatusController:
|
|
|
184
188
|
if not positive_statii:
|
|
185
189
|
self.log.info("Cleared all librarian statuses")
|
|
186
190
|
for status in log_statii:
|
|
187
|
-
self._log_finish(status)
|
|
188
|
-
except Exception
|
|
189
|
-
self.log.
|
|
191
|
+
self._log_finish(status, clear_subtitle=clear_subtitle)
|
|
192
|
+
except Exception:
|
|
193
|
+
self.log.exception(f"Finish status {positive_statii}")
|
|
190
194
|
|
|
191
|
-
def finish(
|
|
195
|
+
def finish(
|
|
196
|
+
self, status: Status | None, *, notify: bool = True, clear_subtitle=True
|
|
197
|
+
):
|
|
192
198
|
"""Finish a librarian status."""
|
|
193
199
|
try:
|
|
194
|
-
self.finish_many((status,), notify=notify)
|
|
200
|
+
self.finish_many((status,), notify=notify, clear_subtitle=clear_subtitle)
|
|
195
201
|
except Exception as exc:
|
|
196
202
|
self.log.warning(exc)
|
|
@@ -153,7 +153,7 @@ class DatabasePollingEmitter(EventEmitter, WorkerStatusMixin):
|
|
|
153
153
|
"""Determine if we should take a snapshot."""
|
|
154
154
|
with self._poll_cond:
|
|
155
155
|
if timeout:
|
|
156
|
-
self.log.
|
|
156
|
+
self.log.debug(
|
|
157
157
|
f"Polling {self.watch.path} again in {naturaldelta(timeout)}."
|
|
158
158
|
)
|
|
159
159
|
self._poll_cond.wait(timeout)
|
|
@@ -241,12 +241,11 @@ class DatabasePollingEmitter(EventEmitter, WorkerStatusMixin):
|
|
|
241
241
|
library = Library.objects.get(path=self.watch.path)
|
|
242
242
|
library.last_poll = Now()
|
|
243
243
|
library.save()
|
|
244
|
-
self.log.info(f"Polled {self.watch.path}")
|
|
245
244
|
except Exception:
|
|
246
245
|
self.log.exception("poll for watchdog events and queue them")
|
|
247
246
|
raise
|
|
248
247
|
finally:
|
|
249
|
-
self.status_controller.finish(status)
|
|
248
|
+
self.status_controller.finish(status, clear_subtitle=False)
|
|
250
249
|
# Reset on poll()
|
|
251
250
|
self._force = False
|
|
252
251
|
|
|
@@ -14,6 +14,7 @@ from types import MappingProxyType
|
|
|
14
14
|
from typing_extensions import override
|
|
15
15
|
from watchdog.events import EVENT_TYPE_MOVED, FileSystemEvent
|
|
16
16
|
|
|
17
|
+
from codex.librarian.memory import get_mem_limit
|
|
17
18
|
from codex.librarian.scribe.importer.tasks import ImportTask
|
|
18
19
|
from codex.librarian.threads import AggregateMessageQueuedThread
|
|
19
20
|
from codex.librarian.watchdog.const import EVENT_CLASS_DIFF_ALL_MAP
|
|
@@ -21,7 +22,6 @@ from codex.librarian.watchdog.events import (
|
|
|
21
22
|
EVENT_TYPE_FINISH_POLL,
|
|
22
23
|
EVENT_TYPE_START_POLL,
|
|
23
24
|
)
|
|
24
|
-
from codex.librarian.watchdog.memory import get_mem_limit
|
|
25
25
|
|
|
26
26
|
_IMPORT_TASK_PARAMS = MappingProxyType(
|
|
27
27
|
{
|
codex/settings/__init__.py
CHANGED
|
@@ -40,12 +40,14 @@ BUILD = not_falsy_env("BUILD")
|
|
|
40
40
|
# limit in seconds
|
|
41
41
|
SLOW_QUERY_LIMIT = float(environ.get("CODEX_SLOW_QUERY_LIMIT", "0.5"))
|
|
42
42
|
LOG_RESPONSE_TIME = not_falsy_env("CODEX_LOG_RESPONSE_TIME")
|
|
43
|
-
#
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
43
|
+
# Misc
|
|
44
|
+
VITE_HOST = environ.get("VITE_HOST")
|
|
45
|
+
LOG_RETENTION = environ.get("LOG_RETENTION", "6 months")
|
|
46
|
+
MAX_OBJ_PER_PAGE = int(environ.get("CODEX_BROWSER_MAX_OBJ_PER_PAGE", "100"))
|
|
47
|
+
# Search sync query
|
|
48
|
+
SEARCH_SYNC_BATCH_MEMORY_RATIO = float(
|
|
49
|
+
environ.get("CODEX_SEARCH_SYNC_BATCH_MEMORY_RATIO", "3.2")
|
|
50
|
+
)
|
|
49
51
|
# sqlite parser breaks with more than 1000 variables in a query and
|
|
50
52
|
# django only fixes this in the bulk_create & bulk_update functions.
|
|
51
53
|
# So for complicated queries I gotta batch them myself. These batch sizes
|
|
@@ -54,10 +56,7 @@ MAX_CHUNK_SIZE = int(environ.get("CODEX_MAX_CHUNK_SIZE", "1000"))
|
|
|
54
56
|
FILTER_BATCH_SIZE = int(environ.get("CODEX_FILTER_BATCH_SIZE", "900"))
|
|
55
57
|
LINK_FK_BATCH_SIZE = int(environ.get("CODEX_LINK_FK_BATCH_SIZE", "20000"))
|
|
56
58
|
LINK_M2M_BATCH_SIZE = int(environ.get("CODEX_LINK_M2M_BATCH_SIZE", "20000"))
|
|
57
|
-
|
|
58
|
-
SEARCH_INDEX_BATCH_SIZE = int(environ.get("CODEX_SEARCH_INDEX_BATCH_SIZE", "10000"))
|
|
59
|
-
LOG_RETENTION = environ.get("LOG_RETENTION", "6 months")
|
|
60
|
-
MAX_OBJ_PER_PAGE = int(environ.get("CODEX_BROWSER_MAX_OBJ_PER_PAGE", "100"))
|
|
59
|
+
DELETE_MAX_CHUNK_SIZE = int(environ.get("CODEX_DELETE_MAX_CHUNK_SIZE", "1000"))
|
|
61
60
|
|
|
62
61
|
|
|
63
62
|
####################################
|
codex/static_root/assets/{VCheckbox-BUS-Yeeg.7324b2d79f7e.js → VCheckbox--IZv20K5.121e571f623b.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{m as I,V as r}from"./VCheckboxBtn-
|
|
1
|
+
import{m as I,V as r}from"./VCheckboxBtn-BzgViWAb.js";import{u as A,m as F,g as u}from"./VSelectionControl-D3h7FjSM.js";import{f as R}from"./forwardRefs-FxOC1qa_.js";import{g as B,p as U,e as w,r as D,u as M,o as N,bt as $,bu as j,a as l,m as d}from"./main-Bmi4BPiO.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),k=u.filterProps(e),v=r.filterProps(e);return l(u,d({ref:t,class:["v-checkbox",e.class]},p,k,{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(v,{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-BzgViWAb.js";import{u as A,m as F,g as u}from"./VSelectionControl-D3h7FjSM.js";import{f as R}from"./forwardRefs-FxOC1qa_.js";import{g as B,p as U,e as w,r as D,u as M,o as N,bt as $,bu as j,a as l,m as d}from"./main-Bmi4BPiO.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),k=u.filterProps(e),v=r.filterProps(e);return l(u,d({ref:t,class:["v-checkbox",e.class]},p,k,{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(v,{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-D3h7FjSM.js";import{p as V,K 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-Bmi4BPiO.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-D3h7FjSM.js";import{p as V,K 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-Bmi4BPiO.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-D1Ha7FmT.76d5650a920c.js → VCombobox-0VKjtXTP.f7c9bb8e7f77.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as xe,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 xe,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-4ozzBEef.js";import{p as Fe,c as j,q as De}from"./VSelectionControl-D3h7FjSM.js";import{u as Pe,f as Re,p as Ae,k as W,l as Ee}from"./forwardRefs-FxOC1qa_.js";import{u as Te,m as Me,h as _e}from"./filter-CRnAKgPp.js";import{g as Ne,p as Be,aB as Le,r as _,aT as F,e as G,bD as Ke,c as y,aW as z,t as Oe,aU as D,bE as J,u as Ue,a as d,m as k,o as ze,bF as $e,bG as Q,bs as qe,b as C,bH as He,F as $,bI as je,n as We,d as Ge,y as Je}from"./main-Bmi4BPiO.js";import{a as X,g as Qe}from"./VDialog-Oz6-kM3S.js";import{a as Xe}from"./VDivider-CSRFyKQO.js";import{V as Ye}from"./VCheckboxBtn-BzgViWAb.js";const Ze=Be({autoSelectFirst:{type:[Boolean,String]},clearOnSelect:{type:Boolean,default:!0},delimiters:Array,...Me({filterKeys:["title"]}),...pe({hideNoData:!0,returnObject:!0}),...ze(De({modelValue:null,role:"combobox"}),["validationValue","dirty","appendInnerIcon"]),...Ae({transition:!1})},"VCombobox"),sl=Ne()({name:"VCombobox",props:Ze(),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:N}=Le(),m=_(),b=F(!1),x=F(!0),B=F(!1),q=_(),P=_(),o=F(-1);let L=!1;const{items:ee,transformIn:le,transformOut:ae}=xe(e),{textColorClasses:te,textColorStyles:ue}=Pe(()=>m.value?.color),u=G(e,"modelValue",[],l=>le(Ke(l)),l=>{const n=ae(l);return e.multiple?n:n[0]??null}),R=Fe(e),A=y(()=>!!(e.chips||r.chip)),g=y(()=>A.value||!!r.selection),V=F(!e.multiple&&!g.value?u.value[0]?.title??"":""),c=y({get:()=>V.value,set:l=>{if(V.value=l??"",!e.multiple&&!g.value&&(u.value=[I(e,l)],z(()=>P.value?.scrollToIndex(0))),l&&e.multiple&&e.delimiters?.length){const n=l.split(new RegExp(`(?:${e.delimiters.join("|")})+`));n.length>1&&(n.forEach(i=>{i=i.trim(),i&&h(I(e,i))}),V.value="")}l||(o.value=-1),x.value=!l}}),ne=y(()=>typeof e.counterValue=="function"?e.counterValue(u.value):typeof e.counterValue=="number"?e.counterValue:e.multiple?u.value.length:c.value.length),{filteredItems:E,getMatches:oe}=Te(e,ee,()=>x.value?"":c.value),p=y(()=>e.hideSelected?E.value.filter(l=>!u.value.some(n=>n.value===l.value)):E.value),T=y(()=>e.hideNoData&&!p.value.length||R.isReadonly.value||R.isDisabled.value),K=G(e,"menu"),s=y({get:()=>K.value,set:l=>{K.value&&!l&&q.value?.ΨopenChildren.size||l&&T.value||(K.value=l)}}),H=Oe(()=>s.value?e.closeText:e.openText);D(V,l=>{L?z(()=>L=!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=y(()=>u.value.map(l=>l.value)),O=y(()=>(e.autoSelectFirst===!0||e.autoSelectFirst==="exact"&&c.value===p.value[0]?.title)&&p.value.length>0&&!x.value&&!B.value),U=_(),se=Ve(U,m);function re(l){L=!0,e.openOnClear&&(s.value=!0)}function ce(){T.value||(s.value=!0)}function ve(l){T.value||(b.value&&(l.preventDefault(),l.stopPropagation()),s.value=!s.value)}function de(l){(Q(l)||l.key==="Backspace")&&m.value?.focus()}function fe(l){if($e(l)||R.isReadonly.value)return;const n=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)&&(O.value&&["Enter","Tab"].includes(l.key)&&!u.value.some(a=>{let{value:t}=a;return t===p.value[0].value})&&h(E.value[0]),x.value=!0),l.key==="ArrowDown"&&O.value&&U.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(~o.value){l.preventDefault();const a=o.value;h(u.value[o.value],!1),o.value=a>=i-1?i-2:a}else l.key==="Backspace"&&!c.value&&(o.value=i-1);return}if(e.multiple)if(l.key==="ArrowLeft"){if(o.value<0&&n&&n>0)return;const a=o.value>-1?o.value-1:i-1;u.value[a]?o.value=a:(o.value=-1,m.value?.setSelectionRange(c.value.length,c.value.length))}else if(l.key==="ArrowRight"){if(o.value<0)return;const a=o.value+1;u.value[a]?o.value=a:(o.value=-1,m.value?.setSelectionRange(0,0))}else~o.value&&Q(l)&&(o.value=-1)}function me(){e.eager&&P.value?.calculateVisibleItems()}function he(){b.value&&(x.value=!0,m.value?.focus())}function h(l){let n=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||J)(t.value,l.value)),a=n??!~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=n!==!1;u.value=i?[l]:[],V.value=i&&!g.value?l.title:"",z(()=>{s.value=!1,x.value=!0})}}function be(l){b.value=!0,setTimeout(()=>{B.value=!0})}function ge(l){B.value=!1}function ye(l){(l==null||l===""&&!e.multiple&&!g.value)&&(u.value=[])}return D(b,(l,n)=>{if(!(l||l===n)&&(o.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(n=>u.value.some(i=>(e.valueComparator||J)(i.value,n.value)));qe&&window.requestAnimationFrame(()=>{l>=0&&P.value?.scrollToIndex(l)})}}),D(()=>e.items,(l,n)=>{s.value||b.value&&!n.length&&l.length&&(s.value=!0)}),Ue(()=>{const l=!!(!e.hideNoData||p.value.length||r["prepend-item"]||r["append-item"]||r["no-data"]),n=u.value.length>0,i=j.filterProps(e);return d(j,k({ref:m},i,{modelValue:c.value,"onUpdate:modelValue":[a=>c.value=a,ye],focused:b.value,"onUpdate:focused":a=>b.value=a,validationValue:u.externalValue,counterValue:ne.value,dirty:n,class:["v-combobox",{"v-combobox--active-menu":s.value,"v-combobox--chips":!!e.chips,"v-combobox--selection-slot":!!g.value,"v-combobox--selecting-index":o.value>-1,[`v-combobox--${e.multiple?"multiple":"single"}`]:!0},e.class],style:e.style,readonly:R.isReadonly.value,placeholder:n?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:T.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:U,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(X,{key:"no-data",title:N(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:O.value&&v===0?!0:void 0,onClick:()=>h(t,null)});return t.type==="divider"?r.divider?.({props:t.raw,index:v})??d(Xe,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(X,k(w,{role:"option"}),{prepend:S=>{let{isSelected:f}=S;return C($,null,[e.multiple&&!e.hideSelected?d(Ye,{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(W,{icon:t.props.prependIcon},null)])},title:()=>x.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?je(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:Ge(["v-combobox__selection",t===o.value&&["v-combobox__selection--selected",te.value]]),style:We(t===o.value?ue.value:{})},[A.value?r.chip?d(Ee,{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"},[Je(",")])])])})]),"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(W,{class:"v-combobox__menu-icon",color:m.value?.fieldIconColor,icon:e.menuIcon,onMousedown:ve,onClick:He,"aria-label":N(H.value),title:N(H.value),tabindex:"-1"},null):void 0])}})}),Re({isFocused:b,isPristine:x,menu:s,search:c,selectionIndex:o,filteredItems:E,select:h},m)}});export{sl as V};
|
|
Binary file
|
|
Binary file
|