codex 1.6.7__py3-none-any.whl → 1.6.9__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/cron/__init__.py +1 -0
- codex/librarian/cron/crond.py +84 -0
- codex/librarian/janitor/time.py +12 -0
- codex/librarian/librariand.py +9 -3
- codex/librarian/tasks.py +5 -1
- codex/librarian/telemeter/__init__.py +1 -0
- codex/librarian/{stats.py → telemeter/stats.py} +1 -0
- codex/librarian/telemeter/tasks.py +8 -0
- codex/librarian/telemeter/telemeter.py +77 -0
- codex/librarian/telemeter/time.py +48 -0
- codex/migrations/0028_telemeter.py +48 -0
- codex/models/admin.py +2 -0
- codex/settings/settings.py +1 -1
- codex/static_root/assets/{VCheckbox-CNCrUhbz.58c18f2fb2cd.js → VCheckbox-dIScsEcb.d54e90dd2ea2.js} +1 -1
- codex/static_root/assets/VCheckbox-dIScsEcb.d54e90dd2ea2.js.br +0 -0
- codex/static_root/assets/VCheckbox-dIScsEcb.d54e90dd2ea2.js.gz +0 -0
- codex/static_root/assets/{VCheckbox-CNCrUhbz.js → VCheckbox-dIScsEcb.js} +1 -1
- codex/static_root/assets/VCheckbox-dIScsEcb.js.br +0 -0
- codex/static_root/assets/VCheckbox-dIScsEcb.js.gz +0 -0
- codex/static_root/assets/{VCheckboxBtn-BQpfgjoJ.073ee1642f91.js → VCheckboxBtn-BpLxL6DP.a4cfab2286b6.js} +1 -1
- codex/static_root/assets/VCheckboxBtn-BpLxL6DP.a4cfab2286b6.js.br +0 -0
- codex/static_root/assets/VCheckboxBtn-BpLxL6DP.a4cfab2286b6.js.gz +0 -0
- codex/static_root/assets/{VCheckboxBtn-BQpfgjoJ.js → VCheckboxBtn-BpLxL6DP.js} +1 -1
- codex/static_root/assets/VCheckboxBtn-BpLxL6DP.js.br +0 -0
- codex/static_root/assets/VCheckboxBtn-BpLxL6DP.js.gz +0 -0
- codex/static_root/assets/{VCombobox-Bg-XK8ZC.5e53616e3bf3.js → VCombobox-BiTvNSAL.d1884eaf76e6.js} +1 -1
- codex/static_root/assets/VCombobox-BiTvNSAL.d1884eaf76e6.js.br +0 -0
- codex/static_root/assets/VCombobox-BiTvNSAL.d1884eaf76e6.js.gz +0 -0
- codex/static_root/assets/{VCombobox-Bg-XK8ZC.js → VCombobox-BiTvNSAL.js} +1 -1
- codex/static_root/assets/VCombobox-BiTvNSAL.js.br +0 -0
- codex/static_root/assets/VCombobox-BiTvNSAL.js.gz +0 -0
- codex/static_root/assets/{VDialog-C2lwLEJ5.2bf46190a6d5.js → VDialog-DO_IeNl2.1e644515ee26.js} +1 -1
- codex/static_root/assets/VDialog-DO_IeNl2.1e644515ee26.js.br +0 -0
- codex/static_root/assets/VDialog-DO_IeNl2.1e644515ee26.js.gz +0 -0
- codex/static_root/assets/{VDialog-C2lwLEJ5.js → VDialog-DO_IeNl2.js} +1 -1
- codex/static_root/assets/VDialog-DO_IeNl2.js.br +0 -0
- codex/static_root/assets/VDialog-DO_IeNl2.js.gz +0 -0
- codex/static_root/assets/{VExpansionPanels-CXR8yBcB.a8008489f539.js → VExpansionPanels-paVX7c3D.3be9407a80fd.js} +1 -1
- codex/static_root/assets/VExpansionPanels-paVX7c3D.3be9407a80fd.js.br +0 -0
- codex/static_root/assets/VExpansionPanels-paVX7c3D.3be9407a80fd.js.gz +0 -0
- codex/static_root/assets/{VExpansionPanels-CXR8yBcB.js → VExpansionPanels-paVX7c3D.js} +1 -1
- codex/static_root/assets/VExpansionPanels-paVX7c3D.js.br +0 -0
- codex/static_root/assets/VExpansionPanels-paVX7c3D.js.gz +0 -0
- codex/static_root/assets/{VRadioGroup-DL9_Ywre.a7b73019c5f4.js → VRadioGroup-CLZGmBdz.1e41ea70fba8.js} +1 -1
- codex/static_root/assets/VRadioGroup-CLZGmBdz.1e41ea70fba8.js.br +0 -0
- codex/static_root/assets/VRadioGroup-CLZGmBdz.1e41ea70fba8.js.gz +0 -0
- codex/static_root/assets/{VRadioGroup-DL9_Ywre.js → VRadioGroup-CLZGmBdz.js} +1 -1
- codex/static_root/assets/VRadioGroup-CLZGmBdz.js.br +0 -0
- codex/static_root/assets/VRadioGroup-CLZGmBdz.js.gz +0 -0
- codex/static_root/assets/{VSelect-CRvxnYwi.9a9bcedf5919.js → VSelect-Cwd7Ke2J.fd98b8f830af.js} +1 -1
- codex/static_root/assets/VSelect-Cwd7Ke2J.fd98b8f830af.js.br +0 -0
- codex/static_root/assets/VSelect-Cwd7Ke2J.fd98b8f830af.js.gz +0 -0
- codex/static_root/assets/{VSelect-CRvxnYwi.js → VSelect-Cwd7Ke2J.js} +1 -1
- codex/static_root/assets/VSelect-Cwd7Ke2J.js.br +0 -0
- codex/static_root/assets/VSelect-Cwd7Ke2J.js.gz +0 -0
- codex/static_root/assets/VSelectionControl-BFq--28I.9687c77461fc.css +1 -0
- codex/static_root/assets/VSelectionControl-BFq--28I.9687c77461fc.css.br +0 -0
- codex/static_root/assets/VSelectionControl-BFq--28I.9687c77461fc.css.gz +0 -0
- codex/static_root/assets/VSelectionControl-BFq--28I.css +1 -0
- codex/static_root/assets/VSelectionControl-BFq--28I.css.br +0 -0
- codex/static_root/assets/VSelectionControl-BFq--28I.css.gz +0 -0
- codex/static_root/assets/VSelectionControl-BTjn8uTI.3e9f6e646a35.js +1 -0
- codex/static_root/assets/VSelectionControl-BTjn8uTI.3e9f6e646a35.js.br +0 -0
- codex/static_root/assets/VSelectionControl-BTjn8uTI.3e9f6e646a35.js.gz +0 -0
- codex/static_root/assets/VSelectionControl-BTjn8uTI.js +1 -0
- codex/static_root/assets/VSelectionControl-BTjn8uTI.js.br +0 -0
- codex/static_root/assets/VSelectionControl-BTjn8uTI.js.gz +0 -0
- codex/static_root/assets/{VSlideGroup-CW34YaB5.5ca4ce80da01.js → VSlideGroup-D4BlVRr8.10a79fd58813.js} +1 -1
- codex/static_root/assets/VSlideGroup-D4BlVRr8.10a79fd58813.js.br +0 -0
- codex/static_root/assets/VSlideGroup-D4BlVRr8.10a79fd58813.js.gz +0 -0
- codex/static_root/assets/{VSlideGroup-CW34YaB5.js → VSlideGroup-D4BlVRr8.js} +1 -1
- codex/static_root/assets/VSlideGroup-D4BlVRr8.js.br +0 -0
- codex/static_root/assets/VSlideGroup-D4BlVRr8.js.gz +0 -0
- codex/static_root/assets/{VTable-CQQRjtmk.ea08a8b7b98e.js → VTable-IQf8Xj4J.2e69b517b235.js} +1 -1
- codex/static_root/assets/VTable-IQf8Xj4J.2e69b517b235.js.br +0 -0
- codex/static_root/assets/VTable-IQf8Xj4J.2e69b517b235.js.gz +0 -0
- codex/static_root/assets/{VTable-CQQRjtmk.js → VTable-IQf8Xj4J.js} +1 -1
- codex/static_root/assets/VTable-IQf8Xj4J.js.br +0 -0
- codex/static_root/assets/VTable-IQf8Xj4J.js.gz +0 -0
- codex/static_root/assets/VTextField-BssVoDhB.4cc388b4aa3c.css +1 -0
- codex/static_root/assets/VTextField-BssVoDhB.4cc388b4aa3c.css.br +0 -0
- codex/static_root/assets/VTextField-BssVoDhB.4cc388b4aa3c.css.gz +0 -0
- codex/static_root/assets/VTextField-BssVoDhB.css +1 -0
- codex/static_root/assets/VTextField-BssVoDhB.css.br +0 -0
- codex/static_root/assets/VTextField-BssVoDhB.css.gz +0 -0
- codex/static_root/assets/VTextField-DKXmWQyx.53d9e13b9847.js +1 -0
- codex/static_root/assets/VTextField-DKXmWQyx.53d9e13b9847.js.br +0 -0
- codex/static_root/assets/VTextField-DKXmWQyx.53d9e13b9847.js.gz +0 -0
- codex/static_root/assets/VTextField-DKXmWQyx.js +1 -0
- codex/static_root/assets/VTextField-DKXmWQyx.js.br +0 -0
- codex/static_root/assets/VTextField-DKXmWQyx.js.gz +0 -0
- codex/static_root/assets/{VWindowItem-C-ieUh3X.b48eab9f2068.js → VWindowItem-clwRzf0Z.01620e37f020.js} +1 -1
- codex/static_root/assets/VWindowItem-clwRzf0Z.01620e37f020.js.br +0 -0
- codex/static_root/assets/VWindowItem-clwRzf0Z.01620e37f020.js.gz +0 -0
- codex/static_root/assets/{VWindowItem-C-ieUh3X.js → VWindowItem-clwRzf0Z.js} +1 -1
- codex/static_root/assets/VWindowItem-clwRzf0Z.js.br +0 -0
- codex/static_root/assets/VWindowItem-clwRzf0Z.js.gz +0 -0
- codex/static_root/assets/{admin-DogdiwQo.74b6a788601b.js → admin-BMM4khnn.eeb686da7f67.js} +1 -1
- codex/static_root/assets/admin-BMM4khnn.eeb686da7f67.js.br +0 -0
- codex/static_root/assets/admin-BMM4khnn.eeb686da7f67.js.gz +0 -0
- codex/static_root/assets/{admin-DogdiwQo.js → admin-BMM4khnn.js} +1 -1
- codex/static_root/assets/admin-BMM4khnn.js.br +0 -0
- codex/static_root/assets/admin-BMM4khnn.js.gz +0 -0
- codex/static_root/assets/admin-drawer-panel-DOrhl9Nb.3a7af8ec4462.css +1 -0
- codex/static_root/assets/admin-drawer-panel-DOrhl9Nb.3a7af8ec4462.css.br +0 -0
- codex/static_root/assets/admin-drawer-panel-DOrhl9Nb.3a7af8ec4462.css.gz +0 -0
- codex/static_root/assets/admin-drawer-panel-DOrhl9Nb.css +1 -0
- codex/static_root/assets/admin-drawer-panel-DOrhl9Nb.css.br +0 -0
- codex/static_root/assets/admin-drawer-panel-DOrhl9Nb.css.gz +0 -0
- codex/static_root/assets/admin-drawer-panel-SQytza6T.d94cc92fef08.js +56 -0
- codex/static_root/assets/admin-drawer-panel-SQytza6T.d94cc92fef08.js.br +0 -0
- codex/static_root/assets/admin-drawer-panel-SQytza6T.d94cc92fef08.js.gz +0 -0
- codex/static_root/assets/admin-drawer-panel-SQytza6T.js +56 -0
- codex/static_root/assets/admin-drawer-panel-SQytza6T.js.br +0 -0
- codex/static_root/assets/admin-drawer-panel-SQytza6T.js.gz +0 -0
- codex/static_root/assets/browser-D6WDXwID.011e4a20946c.js +1 -0
- codex/static_root/assets/browser-D6WDXwID.011e4a20946c.js.br +0 -0
- codex/static_root/assets/browser-D6WDXwID.011e4a20946c.js.gz +0 -0
- codex/static_root/assets/browser-D6WDXwID.js +1 -0
- codex/static_root/assets/browser-D6WDXwID.js.br +0 -0
- codex/static_root/assets/browser-D6WDXwID.js.gz +0 -0
- codex/static_root/assets/{change-password-dialog-DA5q-03T.dee52c2bee1d.js → change-password-dialog-CD1pdXK9.8b94f4f171c6.js} +1 -1
- codex/static_root/assets/change-password-dialog-CD1pdXK9.8b94f4f171c6.js.br +0 -0
- codex/static_root/assets/change-password-dialog-CD1pdXK9.8b94f4f171c6.js.gz +0 -0
- codex/static_root/assets/{change-password-dialog-DA5q-03T.js → change-password-dialog-CD1pdXK9.js} +1 -1
- codex/static_root/assets/change-password-dialog-CD1pdXK9.js.br +0 -0
- codex/static_root/assets/change-password-dialog-CD1pdXK9.js.gz +0 -0
- codex/static_root/assets/{confirm-dialog-BQg9lyfv.583f88254cd6.js → confirm-dialog-_HotKBZZ.2e586037b3e1.js} +1 -1
- codex/static_root/assets/confirm-dialog-_HotKBZZ.2e586037b3e1.js.br +0 -0
- codex/static_root/assets/confirm-dialog-_HotKBZZ.2e586037b3e1.js.gz +0 -0
- codex/static_root/assets/{confirm-dialog-BQg9lyfv.js → confirm-dialog-_HotKBZZ.js} +1 -1
- codex/static_root/assets/confirm-dialog-_HotKBZZ.js.br +0 -0
- codex/static_root/assets/confirm-dialog-_HotKBZZ.js.gz +0 -0
- codex/static_root/assets/{datetime-column-D_0U7O5k.82d3bf46f6f0.js → datetime-column-D93BsvcX.5caf2255bdc3.js} +1 -1
- codex/static_root/assets/datetime-column-D93BsvcX.5caf2255bdc3.js.br +0 -0
- codex/static_root/assets/datetime-column-D93BsvcX.5caf2255bdc3.js.gz +0 -0
- codex/static_root/assets/{datetime-column-D_0U7O5k.js → datetime-column-D93BsvcX.js} +1 -1
- codex/static_root/assets/datetime-column-D93BsvcX.js.br +0 -0
- codex/static_root/assets/datetime-column-D93BsvcX.js.gz +0 -0
- codex/static_root/assets/{filter-Cd_ZATJq.d632f2f33be8.js → filter-ji46VTOR.f7b9ed6fec13.js} +1 -1
- codex/static_root/assets/filter-ji46VTOR.f7b9ed6fec13.js.br +0 -0
- codex/static_root/assets/filter-ji46VTOR.f7b9ed6fec13.js.gz +0 -0
- codex/static_root/assets/{filter-Cd_ZATJq.js → filter-ji46VTOR.js} +1 -1
- codex/static_root/assets/filter-ji46VTOR.js.br +0 -0
- codex/static_root/assets/filter-ji46VTOR.js.gz +0 -0
- codex/static_root/assets/flag-tab-CRfBTBsz.0d8f084eea6e.js +1 -0
- codex/static_root/assets/flag-tab-CRfBTBsz.0d8f084eea6e.js.br +0 -0
- codex/static_root/assets/flag-tab-CRfBTBsz.0d8f084eea6e.js.gz +0 -0
- codex/static_root/assets/flag-tab-CRfBTBsz.js +1 -0
- codex/static_root/assets/flag-tab-CRfBTBsz.js.br +0 -0
- codex/static_root/assets/flag-tab-CRfBTBsz.js.gz +0 -0
- codex/static_root/assets/{group-tab-DjLTMu0n.ec5e6c7d8fd4.js → group-tab-CMX07Y1c.98dd5e2d0bfc.js} +1 -1
- codex/static_root/assets/group-tab-CMX07Y1c.98dd5e2d0bfc.js.br +0 -0
- codex/static_root/assets/group-tab-CMX07Y1c.98dd5e2d0bfc.js.gz +0 -0
- codex/static_root/assets/{group-tab-DjLTMu0n.js → group-tab-CMX07Y1c.js} +1 -1
- codex/static_root/assets/group-tab-CMX07Y1c.js.br +0 -0
- codex/static_root/assets/group-tab-CMX07Y1c.js.gz +0 -0
- codex/static_root/assets/{http-error-6oixwfCY.fc79a5c9cec4.js → http-error-CzJHczxG.6ee3173d40a5.js} +1 -1
- codex/static_root/assets/http-error-CzJHczxG.6ee3173d40a5.js.br +0 -0
- codex/static_root/assets/http-error-CzJHczxG.6ee3173d40a5.js.gz +0 -0
- codex/static_root/assets/{http-error-6oixwfCY.js → http-error-CzJHczxG.js} +1 -1
- codex/static_root/assets/http-error-CzJHczxG.js.br +0 -0
- codex/static_root/assets/http-error-CzJHczxG.js.gz +0 -0
- codex/static_root/assets/{library-tab-DOkzAkbS.62feecf67428.js → library-tab-DfZENbbA.1117ad225bde.js} +1 -1
- codex/static_root/assets/library-tab-DfZENbbA.1117ad225bde.js.br +0 -0
- codex/static_root/assets/library-tab-DfZENbbA.1117ad225bde.js.gz +0 -0
- codex/static_root/assets/{library-tab-DOkzAkbS.js → library-tab-DfZENbbA.js} +1 -1
- codex/static_root/assets/library-tab-DfZENbbA.js.br +0 -0
- codex/static_root/assets/library-tab-DfZENbbA.js.gz +0 -0
- codex/static_root/assets/{main-DzK0FyQ4.64342c46e52e.js → main-EAqCu0p6.e749a8bc2923.js} +3 -3
- codex/static_root/assets/main-EAqCu0p6.e749a8bc2923.js.br +0 -0
- codex/static_root/assets/main-EAqCu0p6.e749a8bc2923.js.gz +0 -0
- codex/static_root/assets/{main-DzK0FyQ4.js → main-EAqCu0p6.js} +3 -3
- codex/static_root/assets/main-EAqCu0p6.js.br +0 -0
- codex/static_root/assets/main-EAqCu0p6.js.gz +0 -0
- codex/static_root/assets/{pagination-toolbar-Btd4gD8q.dccad5e791aa.js → pagination-toolbar-m4o9cYJ6.df24ef17e904.js} +1 -1
- codex/static_root/assets/pagination-toolbar-m4o9cYJ6.df24ef17e904.js.br +0 -0
- codex/static_root/assets/pagination-toolbar-m4o9cYJ6.df24ef17e904.js.gz +0 -0
- codex/static_root/assets/{pagination-toolbar-Btd4gD8q.js → pagination-toolbar-m4o9cYJ6.js} +1 -1
- codex/static_root/assets/pagination-toolbar-m4o9cYJ6.js.br +0 -0
- codex/static_root/assets/pagination-toolbar-m4o9cYJ6.js.gz +0 -0
- codex/static_root/assets/{pdf-doc-DJFTgxDu.b2f20f4fcce8.js → pdf-doc-RJuKdcoH.4be4a68338de.js} +1 -1
- codex/static_root/assets/pdf-doc-RJuKdcoH.4be4a68338de.js.br +0 -0
- codex/static_root/assets/pdf-doc-RJuKdcoH.4be4a68338de.js.gz +0 -0
- codex/static_root/assets/{pdf-doc-DJFTgxDu.js → pdf-doc-RJuKdcoH.js} +1 -1
- codex/static_root/assets/pdf-doc-RJuKdcoH.js.br +0 -0
- codex/static_root/assets/pdf-doc-RJuKdcoH.js.gz +0 -0
- codex/static_root/assets/{reader-BZ1zrFjp.37c92f19b36e.js → reader-BYz5uPEm.e2db8893aa10.js} +2 -2
- codex/static_root/assets/reader-BYz5uPEm.e2db8893aa10.js.br +0 -0
- codex/static_root/assets/reader-BYz5uPEm.e2db8893aa10.js.gz +0 -0
- codex/static_root/assets/{reader-BZ1zrFjp.js → reader-BYz5uPEm.js} +2 -2
- codex/static_root/assets/reader-BYz5uPEm.js.br +0 -0
- codex/static_root/assets/reader-BYz5uPEm.js.gz +0 -0
- codex/static_root/assets/relation-chips-BQX3oeiS.acfd60628c35.js +1 -0
- codex/static_root/assets/relation-chips-BQX3oeiS.acfd60628c35.js.br +0 -0
- codex/static_root/assets/relation-chips-BQX3oeiS.acfd60628c35.js.gz +0 -0
- codex/static_root/assets/relation-chips-BQX3oeiS.js +1 -0
- codex/static_root/assets/relation-chips-BQX3oeiS.js.br +0 -0
- codex/static_root/assets/relation-chips-BQX3oeiS.js.gz +0 -0
- codex/static_root/assets/{settings-drawer-DG-CKNyF.js → settings-drawer-C5t3OYPS.3fb97d35ae92.js} +2 -2
- codex/static_root/assets/settings-drawer-C5t3OYPS.3fb97d35ae92.js.br +0 -0
- codex/static_root/assets/settings-drawer-C5t3OYPS.3fb97d35ae92.js.gz +0 -0
- codex/static_root/assets/{settings-drawer-DG-CKNyF.442b7b74fcd2.js → settings-drawer-C5t3OYPS.js} +2 -2
- codex/static_root/assets/settings-drawer-C5t3OYPS.js.br +0 -0
- codex/static_root/assets/settings-drawer-C5t3OYPS.js.gz +0 -0
- codex/static_root/assets/{stats-tab-CI0u-X7Y.2d1b6a0d4139.css → stats-tab-BVZzfwi1.28f07f038e88.css} +1 -1
- codex/static_root/assets/stats-tab-BVZzfwi1.28f07f038e88.css.br +0 -0
- codex/static_root/assets/stats-tab-BVZzfwi1.28f07f038e88.css.gz +0 -0
- codex/static_root/assets/{stats-tab-CI0u-X7Y.css → stats-tab-BVZzfwi1.css} +1 -1
- codex/static_root/assets/stats-tab-BVZzfwi1.css.br +0 -0
- codex/static_root/assets/stats-tab-BVZzfwi1.css.gz +0 -0
- codex/static_root/assets/stats-tab-BZrcMjtP.b8d127a34aa7.js +1 -0
- codex/static_root/assets/stats-tab-BZrcMjtP.b8d127a34aa7.js.br +0 -0
- codex/static_root/assets/stats-tab-BZrcMjtP.b8d127a34aa7.js.gz +0 -0
- codex/static_root/assets/stats-tab-BZrcMjtP.js +1 -0
- codex/static_root/assets/stats-tab-BZrcMjtP.js.br +0 -0
- codex/static_root/assets/stats-tab-BZrcMjtP.js.gz +0 -0
- codex/static_root/assets/{task-tab-BPIRLtMw.e11b108187cb.js → task-tab-aLrGKXQT.f8498ed38d40.js} +1 -1
- codex/static_root/assets/task-tab-aLrGKXQT.f8498ed38d40.js.br +0 -0
- codex/static_root/assets/task-tab-aLrGKXQT.f8498ed38d40.js.gz +0 -0
- codex/static_root/assets/{task-tab-BPIRLtMw.js → task-tab-aLrGKXQT.js} +1 -1
- codex/static_root/assets/task-tab-aLrGKXQT.js.br +0 -0
- codex/static_root/assets/task-tab-aLrGKXQT.js.gz +0 -0
- codex/static_root/assets/{unauthorized-D99cAzQr.3fcb871efc34.js → unauthorized-DpTUrdQV.0c1bfe81f457.js} +1 -1
- codex/static_root/assets/unauthorized-DpTUrdQV.0c1bfe81f457.js.br +0 -0
- codex/static_root/assets/unauthorized-DpTUrdQV.0c1bfe81f457.js.gz +0 -0
- codex/static_root/assets/{unauthorized-D99cAzQr.js → unauthorized-DpTUrdQV.js} +1 -1
- codex/static_root/assets/unauthorized-DpTUrdQV.js.br +0 -0
- codex/static_root/assets/unauthorized-DpTUrdQV.js.gz +0 -0
- codex/static_root/assets/{user-tab-DhN1GEZN.f7c314e1f210.js → user-tab-B_CPCP10.d1a264b97a0f.js} +1 -1
- codex/static_root/assets/user-tab-B_CPCP10.d1a264b97a0f.js.br +0 -0
- codex/static_root/assets/user-tab-B_CPCP10.d1a264b97a0f.js.gz +0 -0
- codex/static_root/assets/{user-tab-DhN1GEZN.js → user-tab-B_CPCP10.js} +1 -1
- codex/static_root/assets/user-tab-B_CPCP10.js.br +0 -0
- codex/static_root/assets/user-tab-B_CPCP10.js.gz +0 -0
- codex/static_root/js/{choices-admin.3521e2a863df.json → choices-admin.1eca6d2c22cf.json} +1 -1
- codex/static_root/js/choices-admin.1eca6d2c22cf.json.br +0 -0
- codex/static_root/js/choices-admin.1eca6d2c22cf.json.gz +0 -0
- codex/static_root/js/choices-admin.json +1 -1
- codex/static_root/js/choices-admin.json.br +0 -0
- codex/static_root/js/choices-admin.json.gz +0 -0
- codex/static_root/{manifest.15533be94933.json → manifest.3d6dd67354d1.json} +220 -220
- codex/static_root/manifest.3d6dd67354d1.json.br +0 -0
- codex/static_root/manifest.3d6dd67354d1.json.gz +0 -0
- codex/static_root/manifest.json +220 -220
- 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/admin/flag.py +10 -1
- codex/views/admin/stats.py +1 -1
- codex/views/opds/v1/entry/links.py +14 -2
- codex/views/opds/v1/feed.py +13 -34
- codex/views/reader/page.py +3 -4
- {codex-1.6.7.dist-info → codex-1.6.9.dist-info}/METADATA +39 -44
- {codex-1.6.7.dist-info → codex-1.6.9.dist-info}/RECORD +258 -251
- codex/librarian/janitor/janitord.py +0 -76
- codex/static_root/assets/VCheckbox-CNCrUhbz.58c18f2fb2cd.js.br +0 -0
- codex/static_root/assets/VCheckbox-CNCrUhbz.58c18f2fb2cd.js.gz +0 -0
- codex/static_root/assets/VCheckbox-CNCrUhbz.js.br +0 -0
- codex/static_root/assets/VCheckbox-CNCrUhbz.js.gz +0 -0
- codex/static_root/assets/VCheckboxBtn-BQpfgjoJ.073ee1642f91.js.br +0 -0
- codex/static_root/assets/VCheckboxBtn-BQpfgjoJ.073ee1642f91.js.gz +0 -0
- codex/static_root/assets/VCheckboxBtn-BQpfgjoJ.js.br +0 -0
- codex/static_root/assets/VCheckboxBtn-BQpfgjoJ.js.gz +0 -0
- codex/static_root/assets/VCombobox-Bg-XK8ZC.5e53616e3bf3.js.br +0 -0
- codex/static_root/assets/VCombobox-Bg-XK8ZC.5e53616e3bf3.js.gz +0 -0
- codex/static_root/assets/VCombobox-Bg-XK8ZC.js.br +0 -0
- codex/static_root/assets/VCombobox-Bg-XK8ZC.js.gz +0 -0
- codex/static_root/assets/VDialog-C2lwLEJ5.2bf46190a6d5.js.br +0 -0
- codex/static_root/assets/VDialog-C2lwLEJ5.2bf46190a6d5.js.gz +0 -0
- codex/static_root/assets/VDialog-C2lwLEJ5.js.br +0 -0
- codex/static_root/assets/VDialog-C2lwLEJ5.js.gz +0 -0
- codex/static_root/assets/VExpansionPanels-CXR8yBcB.a8008489f539.js.br +0 -0
- codex/static_root/assets/VExpansionPanels-CXR8yBcB.a8008489f539.js.gz +0 -0
- codex/static_root/assets/VExpansionPanels-CXR8yBcB.js.br +0 -0
- codex/static_root/assets/VExpansionPanels-CXR8yBcB.js.gz +0 -0
- codex/static_root/assets/VRadioGroup-DL9_Ywre.a7b73019c5f4.js.br +0 -0
- codex/static_root/assets/VRadioGroup-DL9_Ywre.a7b73019c5f4.js.gz +0 -0
- codex/static_root/assets/VRadioGroup-DL9_Ywre.js.br +0 -0
- codex/static_root/assets/VRadioGroup-DL9_Ywre.js.gz +0 -0
- codex/static_root/assets/VSelect-CRvxnYwi.9a9bcedf5919.js.br +0 -0
- codex/static_root/assets/VSelect-CRvxnYwi.9a9bcedf5919.js.gz +0 -0
- codex/static_root/assets/VSelect-CRvxnYwi.js.br +0 -0
- codex/static_root/assets/VSelect-CRvxnYwi.js.gz +0 -0
- codex/static_root/assets/VSelectionControl-AnuOsZjr.0ca164ae628f.css +0 -1
- codex/static_root/assets/VSelectionControl-AnuOsZjr.0ca164ae628f.css.br +0 -0
- codex/static_root/assets/VSelectionControl-AnuOsZjr.0ca164ae628f.css.gz +0 -0
- codex/static_root/assets/VSelectionControl-AnuOsZjr.css +0 -1
- codex/static_root/assets/VSelectionControl-AnuOsZjr.css.br +0 -0
- codex/static_root/assets/VSelectionControl-AnuOsZjr.css.gz +0 -0
- codex/static_root/assets/VSelectionControl-Cg44PiY9.a2ae0de72544.js +0 -1
- codex/static_root/assets/VSelectionControl-Cg44PiY9.a2ae0de72544.js.br +0 -0
- codex/static_root/assets/VSelectionControl-Cg44PiY9.a2ae0de72544.js.gz +0 -0
- codex/static_root/assets/VSelectionControl-Cg44PiY9.js +0 -1
- codex/static_root/assets/VSelectionControl-Cg44PiY9.js.br +0 -0
- codex/static_root/assets/VSelectionControl-Cg44PiY9.js.gz +0 -0
- codex/static_root/assets/VSlideGroup-CW34YaB5.5ca4ce80da01.js.br +0 -0
- codex/static_root/assets/VSlideGroup-CW34YaB5.5ca4ce80da01.js.gz +0 -0
- codex/static_root/assets/VSlideGroup-CW34YaB5.js.br +0 -0
- codex/static_root/assets/VSlideGroup-CW34YaB5.js.gz +0 -0
- codex/static_root/assets/VTable-CQQRjtmk.ea08a8b7b98e.js.br +0 -0
- codex/static_root/assets/VTable-CQQRjtmk.ea08a8b7b98e.js.gz +0 -0
- codex/static_root/assets/VTable-CQQRjtmk.js.br +0 -0
- codex/static_root/assets/VTable-CQQRjtmk.js.gz +0 -0
- codex/static_root/assets/VTextField-Bc1tD4nS.2026682c8437.css +0 -1
- codex/static_root/assets/VTextField-Bc1tD4nS.2026682c8437.css.br +0 -0
- codex/static_root/assets/VTextField-Bc1tD4nS.2026682c8437.css.gz +0 -0
- codex/static_root/assets/VTextField-Bc1tD4nS.css +0 -1
- codex/static_root/assets/VTextField-Bc1tD4nS.css.br +0 -0
- codex/static_root/assets/VTextField-Bc1tD4nS.css.gz +0 -0
- codex/static_root/assets/VTextField-BkcCIE7o.b563f2af1649.js +0 -1
- codex/static_root/assets/VTextField-BkcCIE7o.b563f2af1649.js.br +0 -0
- codex/static_root/assets/VTextField-BkcCIE7o.b563f2af1649.js.gz +0 -0
- codex/static_root/assets/VTextField-BkcCIE7o.js +0 -1
- codex/static_root/assets/VTextField-BkcCIE7o.js.br +0 -0
- codex/static_root/assets/VTextField-BkcCIE7o.js.gz +0 -0
- codex/static_root/assets/VWindowItem-C-ieUh3X.b48eab9f2068.js.br +0 -0
- codex/static_root/assets/VWindowItem-C-ieUh3X.b48eab9f2068.js.gz +0 -0
- codex/static_root/assets/VWindowItem-C-ieUh3X.js.br +0 -0
- codex/static_root/assets/VWindowItem-C-ieUh3X.js.gz +0 -0
- codex/static_root/assets/admin-DogdiwQo.74b6a788601b.js.br +0 -0
- codex/static_root/assets/admin-DogdiwQo.74b6a788601b.js.gz +0 -0
- codex/static_root/assets/admin-DogdiwQo.js.br +0 -0
- codex/static_root/assets/admin-DogdiwQo.js.gz +0 -0
- codex/static_root/assets/admin-drawer-panel-DC6Y8jEw.2a38b027f538.js +0 -56
- codex/static_root/assets/admin-drawer-panel-DC6Y8jEw.2a38b027f538.js.br +0 -0
- codex/static_root/assets/admin-drawer-panel-DC6Y8jEw.2a38b027f538.js.gz +0 -0
- codex/static_root/assets/admin-drawer-panel-DC6Y8jEw.js +0 -56
- codex/static_root/assets/admin-drawer-panel-DC6Y8jEw.js.br +0 -0
- codex/static_root/assets/admin-drawer-panel-DC6Y8jEw.js.gz +0 -0
- codex/static_root/assets/admin-drawer-panel-Dm28c2tG.css +0 -1
- codex/static_root/assets/admin-drawer-panel-Dm28c2tG.css.br +0 -0
- codex/static_root/assets/admin-drawer-panel-Dm28c2tG.css.gz +0 -0
- codex/static_root/assets/admin-drawer-panel-Dm28c2tG.fb4e885ba7c4.css +0 -1
- codex/static_root/assets/admin-drawer-panel-Dm28c2tG.fb4e885ba7c4.css.br +0 -0
- codex/static_root/assets/admin-drawer-panel-Dm28c2tG.fb4e885ba7c4.css.gz +0 -0
- codex/static_root/assets/browser-CpAQokFL.107f9f92f55c.js +0 -1
- codex/static_root/assets/browser-CpAQokFL.107f9f92f55c.js.br +0 -0
- codex/static_root/assets/browser-CpAQokFL.107f9f92f55c.js.gz +0 -0
- codex/static_root/assets/browser-CpAQokFL.js +0 -1
- codex/static_root/assets/browser-CpAQokFL.js.br +0 -0
- codex/static_root/assets/browser-CpAQokFL.js.gz +0 -0
- codex/static_root/assets/change-password-dialog-DA5q-03T.dee52c2bee1d.js.br +0 -0
- codex/static_root/assets/change-password-dialog-DA5q-03T.dee52c2bee1d.js.gz +0 -0
- codex/static_root/assets/change-password-dialog-DA5q-03T.js.br +0 -0
- codex/static_root/assets/change-password-dialog-DA5q-03T.js.gz +0 -0
- codex/static_root/assets/confirm-dialog-BQg9lyfv.583f88254cd6.js.br +0 -0
- codex/static_root/assets/confirm-dialog-BQg9lyfv.583f88254cd6.js.gz +0 -0
- codex/static_root/assets/confirm-dialog-BQg9lyfv.js.br +0 -0
- codex/static_root/assets/confirm-dialog-BQg9lyfv.js.gz +0 -0
- codex/static_root/assets/datetime-column-D_0U7O5k.82d3bf46f6f0.js.br +0 -0
- codex/static_root/assets/datetime-column-D_0U7O5k.82d3bf46f6f0.js.gz +0 -0
- codex/static_root/assets/datetime-column-D_0U7O5k.js.br +0 -0
- codex/static_root/assets/datetime-column-D_0U7O5k.js.gz +0 -0
- codex/static_root/assets/filter-Cd_ZATJq.d632f2f33be8.js.br +0 -0
- codex/static_root/assets/filter-Cd_ZATJq.d632f2f33be8.js.gz +0 -0
- codex/static_root/assets/filter-Cd_ZATJq.js.br +0 -0
- codex/static_root/assets/filter-Cd_ZATJq.js.gz +0 -0
- codex/static_root/assets/flag-tab-BDStg-L6.542821f0bf3a.js +0 -1
- codex/static_root/assets/flag-tab-BDStg-L6.542821f0bf3a.js.br +0 -0
- codex/static_root/assets/flag-tab-BDStg-L6.542821f0bf3a.js.gz +0 -0
- codex/static_root/assets/flag-tab-BDStg-L6.js +0 -1
- codex/static_root/assets/flag-tab-BDStg-L6.js.br +0 -0
- codex/static_root/assets/flag-tab-BDStg-L6.js.gz +0 -0
- codex/static_root/assets/group-tab-DjLTMu0n.ec5e6c7d8fd4.js.br +0 -0
- codex/static_root/assets/group-tab-DjLTMu0n.ec5e6c7d8fd4.js.gz +0 -0
- codex/static_root/assets/group-tab-DjLTMu0n.js.br +0 -0
- codex/static_root/assets/group-tab-DjLTMu0n.js.gz +0 -0
- codex/static_root/assets/http-error-6oixwfCY.fc79a5c9cec4.js.br +0 -0
- codex/static_root/assets/http-error-6oixwfCY.fc79a5c9cec4.js.gz +0 -0
- codex/static_root/assets/http-error-6oixwfCY.js.br +0 -0
- codex/static_root/assets/http-error-6oixwfCY.js.gz +0 -0
- codex/static_root/assets/library-tab-DOkzAkbS.62feecf67428.js.br +0 -0
- codex/static_root/assets/library-tab-DOkzAkbS.62feecf67428.js.gz +0 -0
- codex/static_root/assets/library-tab-DOkzAkbS.js.br +0 -0
- codex/static_root/assets/library-tab-DOkzAkbS.js.gz +0 -0
- codex/static_root/assets/main-DzK0FyQ4.64342c46e52e.js.br +0 -0
- codex/static_root/assets/main-DzK0FyQ4.64342c46e52e.js.gz +0 -0
- codex/static_root/assets/main-DzK0FyQ4.js.br +0 -0
- codex/static_root/assets/main-DzK0FyQ4.js.gz +0 -0
- codex/static_root/assets/pagination-toolbar-Btd4gD8q.dccad5e791aa.js.br +0 -0
- codex/static_root/assets/pagination-toolbar-Btd4gD8q.dccad5e791aa.js.gz +0 -0
- codex/static_root/assets/pagination-toolbar-Btd4gD8q.js.br +0 -0
- codex/static_root/assets/pagination-toolbar-Btd4gD8q.js.gz +0 -0
- codex/static_root/assets/pdf-doc-DJFTgxDu.b2f20f4fcce8.js.br +0 -0
- codex/static_root/assets/pdf-doc-DJFTgxDu.b2f20f4fcce8.js.gz +0 -0
- codex/static_root/assets/pdf-doc-DJFTgxDu.js.br +0 -0
- codex/static_root/assets/pdf-doc-DJFTgxDu.js.gz +0 -0
- codex/static_root/assets/reader-BZ1zrFjp.37c92f19b36e.js.br +0 -0
- codex/static_root/assets/reader-BZ1zrFjp.37c92f19b36e.js.gz +0 -0
- codex/static_root/assets/reader-BZ1zrFjp.js.br +0 -0
- codex/static_root/assets/reader-BZ1zrFjp.js.gz +0 -0
- codex/static_root/assets/relation-chips-Do3jKDRV.90b12692b374.js +0 -1
- codex/static_root/assets/relation-chips-Do3jKDRV.90b12692b374.js.br +0 -0
- codex/static_root/assets/relation-chips-Do3jKDRV.90b12692b374.js.gz +0 -0
- codex/static_root/assets/relation-chips-Do3jKDRV.js +0 -1
- codex/static_root/assets/relation-chips-Do3jKDRV.js.br +0 -0
- codex/static_root/assets/relation-chips-Do3jKDRV.js.gz +0 -0
- codex/static_root/assets/settings-drawer-DG-CKNyF.442b7b74fcd2.js.br +0 -0
- codex/static_root/assets/settings-drawer-DG-CKNyF.442b7b74fcd2.js.gz +0 -0
- codex/static_root/assets/settings-drawer-DG-CKNyF.js.br +0 -0
- codex/static_root/assets/settings-drawer-DG-CKNyF.js.gz +0 -0
- codex/static_root/assets/stats-tab-CI0u-X7Y.2d1b6a0d4139.css.br +0 -0
- codex/static_root/assets/stats-tab-CI0u-X7Y.2d1b6a0d4139.css.gz +0 -0
- codex/static_root/assets/stats-tab-CI0u-X7Y.css.br +0 -0
- codex/static_root/assets/stats-tab-CI0u-X7Y.css.gz +0 -0
- codex/static_root/assets/stats-tab-GFSKUO2d.423e5a929890.js +0 -1
- codex/static_root/assets/stats-tab-GFSKUO2d.423e5a929890.js.br +0 -0
- codex/static_root/assets/stats-tab-GFSKUO2d.423e5a929890.js.gz +0 -0
- codex/static_root/assets/stats-tab-GFSKUO2d.js +0 -1
- codex/static_root/assets/stats-tab-GFSKUO2d.js.br +0 -0
- codex/static_root/assets/stats-tab-GFSKUO2d.js.gz +0 -0
- codex/static_root/assets/task-tab-BPIRLtMw.e11b108187cb.js.br +0 -0
- codex/static_root/assets/task-tab-BPIRLtMw.e11b108187cb.js.gz +0 -0
- codex/static_root/assets/task-tab-BPIRLtMw.js.br +0 -0
- codex/static_root/assets/task-tab-BPIRLtMw.js.gz +0 -0
- codex/static_root/assets/unauthorized-D99cAzQr.3fcb871efc34.js.br +0 -0
- codex/static_root/assets/unauthorized-D99cAzQr.3fcb871efc34.js.gz +0 -0
- codex/static_root/assets/unauthorized-D99cAzQr.js.br +0 -0
- codex/static_root/assets/unauthorized-D99cAzQr.js.gz +0 -0
- codex/static_root/assets/user-tab-DhN1GEZN.f7c314e1f210.js.br +0 -0
- codex/static_root/assets/user-tab-DhN1GEZN.f7c314e1f210.js.gz +0 -0
- codex/static_root/assets/user-tab-DhN1GEZN.js.br +0 -0
- codex/static_root/assets/user-tab-DhN1GEZN.js.gz +0 -0
- codex/static_root/js/choices-admin.3521e2a863df.json.br +0 -0
- codex/static_root/js/choices-admin.3521e2a863df.json.gz +0 -0
- codex/static_root/manifest.15533be94933.json.br +0 -0
- codex/static_root/manifest.15533be94933.json.gz +0 -0
- {codex-1.6.7.dist-info → codex-1.6.9.dist-info}/LICENSE +0 -0
- {codex-1.6.7.dist-info → codex-1.6.9.dist-info}/WHEEL +0 -0
- {codex-1.6.7.dist-info → codex-1.6.9.dist-info}/entry_points.txt +0 -0
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"paths": {"rest_framework/docs/js/api.js": "rest_framework/docs/js/api.18a5ba8a1bd8.js", "rest_framework/docs/js/jquery.json-view.min.js": "rest_framework/docs/js/jquery.json-view.min.b7c2d6981377.js", "rest_framework/docs/js/highlight.pack.js": "rest_framework/docs/js/highlight.pack.479b5f21dcba.js", "rest_framework/docs/img/favicon.ico": "rest_framework/docs/img/favicon.5195b4d0f3eb.ico", "rest_framework/docs/img/grid.png": "rest_framework/docs/img/grid.a4b938cf382b.png", "rest_framework/docs/css/jquery.json-view.min.css": "rest_framework/docs/css/jquery.json-view.min.a2e6beeb6710.css", "rest_framework/docs/css/highlight.css": "rest_framework/docs/css/highlight.e0e4d973c6d7.css", "rest_framework/docs/css/base.css": "rest_framework/docs/css/base.e630f8f4990e.css", "rest_framework/js/ajax-form.js": "rest_framework/js/ajax-form.4e1cdcb7acab.js", "rest_framework/js/csrf.js": "rest_framework/js/csrf.455080a7b2ce.js", "rest_framework/js/prettify-min.js": "rest_framework/js/prettify-min.709bfcc456c6.js", "rest_framework/js/jquery-3.7.1.min.js": "rest_framework/js/jquery-3.7.1.min.2c872dbe60f4.js", "rest_framework/js/default.js": "rest_framework/js/default.5b08897dbdc3.js", "rest_framework/js/bootstrap.min.js": "rest_framework/js/bootstrap.min.2f34b630ffe3.js", "rest_framework/js/coreapi-0.1.1.js": "rest_framework/js/coreapi-0.1.1.8851fb9336c9.js", "rest_framework/js/load-ajax-form.js": "rest_framework/js/load-ajax-form.8cdb3a9f3466.js", "rest_framework/fonts/fontawesome-webfont.woff": "rest_framework/fonts/fontawesome-webfont.3293616ec0c6.woff", "rest_framework/fonts/glyphicons-halflings-regular.eot": "rest_framework/fonts/glyphicons-halflings-regular.f4769f9bdb74.eot", "rest_framework/fonts/glyphicons-halflings-regular.ttf": "rest_framework/fonts/glyphicons-halflings-regular.e18bbf611f2a.ttf", "rest_framework/fonts/fontawesome-webfont.ttf": "rest_framework/fonts/fontawesome-webfont.dcb26c7239d8.ttf", "rest_framework/fonts/glyphicons-halflings-regular.woff2": "rest_framework/fonts/glyphicons-halflings-regular.448c34a56d69.woff2", "rest_framework/fonts/fontawesome-webfont.svg": "rest_framework/fonts/fontawesome-webfont.83e37a11f9d7.svg", "rest_framework/fonts/glyphicons-halflings-regular.woff": "rest_framework/fonts/glyphicons-halflings-regular.fa2772327f55.woff", "rest_framework/fonts/glyphicons-halflings-regular.svg": "rest_framework/fonts/glyphicons-halflings-regular.08eda92397ae.svg", "rest_framework/fonts/fontawesome-webfont.eot": "rest_framework/fonts/fontawesome-webfont.8b27bc96115c.eot", "rest_framework/img/glyphicons-halflings-white.png": "rest_framework/img/glyphicons-halflings-white.9bbc6e960299.png", "rest_framework/img/glyphicons-halflings.png": "rest_framework/img/glyphicons-halflings.90233c9067e9.png", "rest_framework/img/grid.png": "rest_framework/img/grid.a4b938cf382b.png", "rest_framework/css/bootstrap.min.css.map": "rest_framework/css/bootstrap.min.css.cafbda9c0e9e.map", "rest_framework/css/default.css": "rest_framework/css/default.789dfb5732d7.css", "rest_framework/css/bootstrap.min.css": "rest_framework/css/bootstrap.min.f17d4516b026.css", "rest_framework/css/prettify.css": "rest_framework/css/prettify.a987f72342ee.css", "rest_framework/css/bootstrap-theme.min.css": "rest_framework/css/bootstrap-theme.min.1d4b05b397c3.css", "rest_framework/css/bootstrap-tweaks.css": "rest_framework/css/bootstrap-tweaks.ee4ee6acf9eb.css", "rest_framework/css/font-awesome-4.0.3.css": "rest_framework/css/font-awesome-4.0.3.c1e1ea213abf.css", "rest_framework/css/bootstrap-theme.min.css.map": "rest_framework/css/bootstrap-theme.min.css.51806092cc05.map", "img/publisher.svg": "img/publisher.82d378fcd601.svg", "img/logo-32.webp": "img/logo-32.5688944495bf.webp", "img/logo.svg": "img/logo.0f5344a028ca.svg", "img/story-arc.svg": "img/story-arc.ca10014355ef.svg", "img/missing-cover-165.webp": "img/missing-cover-165.0743171f2148.webp", "img/series.svg": "img/series.ec8a889b8f95.svg", "img/logo-maskable-180.webp": "img/logo-maskable-180.c58d966aa64e.webp", "img/missing-cover.svg": "img/missing-cover.ddb038cc2c56.svg", "img/folder.svg": "img/folder.f28936a3701d.svg", "img/volume.svg": "img/volume.814e4c79461a.svg", "img/logo-maskable.svg": "img/logo-maskable.8f7de7f1c6a8.svg", "img/imprint.svg": "img/imprint.7c2adebb76d6.svg", "pwa/offline.html": "pwa/offline.7bfaf9f94bf9.html", "js/choices.json": "js/choices.2f6b0359e1ef.json", "js/choices-admin.json": "js/choices-admin.3521e2a863df.json", "assets/group-tab-CBKuS3Iv.css": "assets/group-tab-CBKuS3Iv.7e4746634782.css", "assets/group-tab-DjLTMu0n.js": "assets/group-tab-DjLTMu0n.ec5e6c7d8fd4.js", "assets/http-error-DKulXuTl.css": "assets/http-error-DKulXuTl.95e42988d5d5.css", "assets/VSelect-ARDhJiQK.css": "assets/VSelect-ARDhJiQK.372c098fb475.css", "assets/pdf-doc-CMzaSV_K.css": "assets/pdf-doc-CMzaSV_K.8cd4b3e65f9a.css", "assets/pagination-toolbar-Btd4gD8q.js": "assets/pagination-toolbar-Btd4gD8q.dccad5e791aa.js", "assets/materialdesignicons-webfont-PXm3-2wK.woff": "assets/materialdesignicons-webfont-PXm3-2wK.026b7ac9c43c.woff", "assets/admin-drawer-panel-Dm28c2tG.css": "assets/admin-drawer-panel-Dm28c2tG.fb4e885ba7c4.css", "assets/VSlideGroup-Dk_1upHt.css": "assets/VSlideGroup-Dk_1upHt.2c836070ec75.css", "assets/VTable-DflzroDq.css": "assets/VTable-DflzroDq.160504d82195.css", "assets/settings-drawer-nZ9HvKSZ.css": "assets/settings-drawer-nZ9HvKSZ.01744e131806.css", "assets/VDialog-lQ13FnRR.css": "assets/VDialog-lQ13FnRR.1c801ad756b2.css", "assets/relation-chips-BGitp3yx.css": "assets/relation-chips-BGitp3yx.b3e7d178a615.css", "assets/VTextField-BkcCIE7o.js": "assets/VTextField-BkcCIE7o.b563f2af1649.js", "assets/reader-BZ1zrFjp.js": "assets/reader-BZ1zrFjp.37c92f19b36e.js", "assets/main-Ztp855PW.css": "assets/main-Ztp855PW.d46d718fac45.css", "assets/VDialog-C2lwLEJ5.js": "assets/VDialog-C2lwLEJ5.2bf46190a6d5.js", "assets/http-error-6oixwfCY.js": "assets/http-error-6oixwfCY.fc79a5c9cec4.js", "assets/VRadioGroup-i2qP9Wu9.css": "assets/VRadioGroup-i2qP9Wu9.8e3741381961.css", "assets/VWindowItem-C-ieUh3X.js": "assets/VWindowItem-C-ieUh3X.b48eab9f2068.js", "assets/admin-D4sw3N4T.css": "assets/admin-D4sw3N4T.b590f88a62cf.css", "assets/filter-Cd_ZATJq.js": "assets/filter-Cd_ZATJq.d632f2f33be8.js", "assets/admin-drawer-panel-DC6Y8jEw.js": "assets/admin-drawer-panel-DC6Y8jEw.2a38b027f538.js", "assets/relation-chips-Do3jKDRV.js": "assets/relation-chips-Do3jKDRV.90b12692b374.js", "assets/settings-drawer-DG-CKNyF.js": "assets/settings-drawer-DG-CKNyF.442b7b74fcd2.js", "assets/VSlideGroup-CW34YaB5.js": "assets/VSlideGroup-CW34YaB5.5ca4ce80da01.js", "assets/confirm-dialog-BQg9lyfv.js": "assets/confirm-dialog-BQg9lyfv.583f88254cd6.js", "assets/reader-YbzUiD0T.css": "assets/reader-YbzUiD0T.efb15835b39d.css", "assets/change-password-dialog-0u6IJA87.css": "assets/change-password-dialog-0u6IJA87.5f9a9aa573b7.css", "assets/copy-to-clipboard-DoUvDJVx.js": "assets/copy-to-clipboard-DoUvDJVx.bec27f144aca.js", "assets/VWindowItem-ByIod57Y.css": "assets/VWindowItem-ByIod57Y.f7fb19752bf3.css", "assets/pagination-toolbar-BA9ifTed.css": "assets/pagination-toolbar-BA9ifTed.b4865334ee08.css", "assets/library-tab-BygwYPnO.css": "assets/library-tab-BygwYPnO.94e92aa60bf2.css", "assets/user-tab-DhN1GEZN.js": "assets/user-tab-DhN1GEZN.f7c314e1f210.js", "assets/browser-Cy0OgQJC.css": "assets/browser-Cy0OgQJC.fabbd1aaffcf.css", "assets/confirm-dialog-BmhedLCx.css": "assets/confirm-dialog-BmhedLCx.7c2103d319d4.css", "assets/VTextField-Bc1tD4nS.css": "assets/VTextField-Bc1tD4nS.2026682c8437.css", "assets/VTable-CQQRjtmk.js": "assets/VTable-CQQRjtmk.ea08a8b7b98e.js", "assets/materialdesignicons-webfont-B7mPwVP_.ttf": "assets/materialdesignicons-webfont-B7mPwVP_.6e435534bd35.ttf", "assets/VSelect-CRvxnYwi.js": "assets/VSelect-CRvxnYwi.9a9bcedf5919.js", "assets/unauthorized-DGIM1VFy.css": "assets/unauthorized-DGIM1VFy.c93d0b3ea5a4.css", "assets/VCombobox-BksEr4D_.css": "assets/VCombobox-BksEr4D_.73429bb75f42.css", "assets/VCheckboxBtn-BQpfgjoJ.js": "assets/VCheckboxBtn-BQpfgjoJ.073ee1642f91.js", "assets/VCheckbox-CNCrUhbz.js": "assets/VCheckbox-CNCrUhbz.58c18f2fb2cd.js", "assets/flag-tab-DBqpLKi7.css": "assets/flag-tab-DBqpLKi7.dcfef39f541e.css", "assets/browser-CpAQokFL.js": "assets/browser-CpAQokFL.107f9f92f55c.js", "assets/datetime-column-D_0U7O5k.js": "assets/datetime-column-D_0U7O5k.82d3bf46f6f0.js", "assets/VSelectionControl-AnuOsZjr.css": "assets/VSelectionControl-AnuOsZjr.0ca164ae628f.css", "assets/VSelectionControl-Cg44PiY9.js": "assets/VSelectionControl-Cg44PiY9.a2ae0de72544.js", "assets/task-tab-1XiWn9xP.css": "assets/task-tab-1XiWn9xP.06cb8e1b794d.css", "assets/pdf-doc-DJFTgxDu.js": "assets/pdf-doc-DJFTgxDu.b2f20f4fcce8.js", "assets/main-DzK0FyQ4.js": "assets/main-DzK0FyQ4.64342c46e52e.js", "assets/flag-tab-BDStg-L6.js": "assets/flag-tab-BDStg-L6.542821f0bf3a.js", "assets/change-password-dialog-DA5q-03T.js": "assets/change-password-dialog-DA5q-03T.dee52c2bee1d.js", "assets/admin-DogdiwQo.js": "assets/admin-DogdiwQo.74b6a788601b.js", "assets/datetime-column-DeCthByU.css": "assets/datetime-column-DeCthByU.1f3bf499e063.css", "assets/task-tab-BPIRLtMw.js": "assets/task-tab-BPIRLtMw.e11b108187cb.js", "assets/materialdesignicons-webfont-CSr8KVlo.eot": "assets/materialdesignicons-webfont-CSr8KVlo.8ced95a05e3c.eot", "assets/stats-tab-CI0u-X7Y.css": "assets/stats-tab-CI0u-X7Y.2d1b6a0d4139.css", "assets/unauthorized-D99cAzQr.js": "assets/unauthorized-D99cAzQr.3fcb871efc34.js", "assets/VExpansionPanels-DsEXVcCv.css": "assets/VExpansionPanels-DsEXVcCv.20b475255e66.css", "assets/stats-tab-GFSKUO2d.js": "assets/stats-tab-GFSKUO2d.423e5a929890.js", "assets/VRadioGroup-DL9_Ywre.js": "assets/VRadioGroup-DL9_Ywre.a7b73019c5f4.js", "assets/VExpansionPanels-CXR8yBcB.js": "assets/VExpansionPanels-CXR8yBcB.a8008489f539.js", "assets/VCombobox-Bg-XK8ZC.js": "assets/VCombobox-Bg-XK8ZC.5e53616e3bf3.js", "assets/VCheckbox-CMKdyl0R.css": "assets/VCheckbox-CMKdyl0R.016ed8d222c4.css", "assets/materialdesignicons-webfont-Dp5v-WZN.woff2": "assets/materialdesignicons-webfont-Dp5v-WZN.1d7bcee1b302.woff2", "assets/library-tab-DOkzAkbS.js": "assets/library-tab-DOkzAkbS.62feecf67428.js", "robots.txt": "robots.b6216d61c03e.txt", "manifest.json": "manifest.15533be94933.json"}, "version": "1.1", "hash": "88f87462cf7f"}
|
|
1
|
+
{"paths": {"rest_framework/docs/js/api.js": "rest_framework/docs/js/api.18a5ba8a1bd8.js", "rest_framework/docs/js/jquery.json-view.min.js": "rest_framework/docs/js/jquery.json-view.min.b7c2d6981377.js", "rest_framework/docs/js/highlight.pack.js": "rest_framework/docs/js/highlight.pack.479b5f21dcba.js", "rest_framework/docs/img/favicon.ico": "rest_framework/docs/img/favicon.5195b4d0f3eb.ico", "rest_framework/docs/img/grid.png": "rest_framework/docs/img/grid.a4b938cf382b.png", "rest_framework/docs/css/jquery.json-view.min.css": "rest_framework/docs/css/jquery.json-view.min.a2e6beeb6710.css", "rest_framework/docs/css/highlight.css": "rest_framework/docs/css/highlight.e0e4d973c6d7.css", "rest_framework/docs/css/base.css": "rest_framework/docs/css/base.e630f8f4990e.css", "rest_framework/js/ajax-form.js": "rest_framework/js/ajax-form.4e1cdcb7acab.js", "rest_framework/js/csrf.js": "rest_framework/js/csrf.455080a7b2ce.js", "rest_framework/js/prettify-min.js": "rest_framework/js/prettify-min.709bfcc456c6.js", "rest_framework/js/jquery-3.7.1.min.js": "rest_framework/js/jquery-3.7.1.min.2c872dbe60f4.js", "rest_framework/js/default.js": "rest_framework/js/default.5b08897dbdc3.js", "rest_framework/js/bootstrap.min.js": "rest_framework/js/bootstrap.min.2f34b630ffe3.js", "rest_framework/js/coreapi-0.1.1.js": "rest_framework/js/coreapi-0.1.1.8851fb9336c9.js", "rest_framework/js/load-ajax-form.js": "rest_framework/js/load-ajax-form.8cdb3a9f3466.js", "rest_framework/fonts/fontawesome-webfont.woff": "rest_framework/fonts/fontawesome-webfont.3293616ec0c6.woff", "rest_framework/fonts/glyphicons-halflings-regular.eot": "rest_framework/fonts/glyphicons-halflings-regular.f4769f9bdb74.eot", "rest_framework/fonts/glyphicons-halflings-regular.ttf": "rest_framework/fonts/glyphicons-halflings-regular.e18bbf611f2a.ttf", "rest_framework/fonts/fontawesome-webfont.ttf": "rest_framework/fonts/fontawesome-webfont.dcb26c7239d8.ttf", "rest_framework/fonts/glyphicons-halflings-regular.woff2": "rest_framework/fonts/glyphicons-halflings-regular.448c34a56d69.woff2", "rest_framework/fonts/fontawesome-webfont.svg": "rest_framework/fonts/fontawesome-webfont.83e37a11f9d7.svg", "rest_framework/fonts/glyphicons-halflings-regular.woff": "rest_framework/fonts/glyphicons-halflings-regular.fa2772327f55.woff", "rest_framework/fonts/glyphicons-halflings-regular.svg": "rest_framework/fonts/glyphicons-halflings-regular.08eda92397ae.svg", "rest_framework/fonts/fontawesome-webfont.eot": "rest_framework/fonts/fontawesome-webfont.8b27bc96115c.eot", "rest_framework/img/glyphicons-halflings-white.png": "rest_framework/img/glyphicons-halflings-white.9bbc6e960299.png", "rest_framework/img/glyphicons-halflings.png": "rest_framework/img/glyphicons-halflings.90233c9067e9.png", "rest_framework/img/grid.png": "rest_framework/img/grid.a4b938cf382b.png", "rest_framework/css/bootstrap.min.css.map": "rest_framework/css/bootstrap.min.css.cafbda9c0e9e.map", "rest_framework/css/default.css": "rest_framework/css/default.789dfb5732d7.css", "rest_framework/css/bootstrap.min.css": "rest_framework/css/bootstrap.min.f17d4516b026.css", "rest_framework/css/prettify.css": "rest_framework/css/prettify.a987f72342ee.css", "rest_framework/css/bootstrap-theme.min.css": "rest_framework/css/bootstrap-theme.min.1d4b05b397c3.css", "rest_framework/css/bootstrap-tweaks.css": "rest_framework/css/bootstrap-tweaks.ee4ee6acf9eb.css", "rest_framework/css/font-awesome-4.0.3.css": "rest_framework/css/font-awesome-4.0.3.c1e1ea213abf.css", "rest_framework/css/bootstrap-theme.min.css.map": "rest_framework/css/bootstrap-theme.min.css.51806092cc05.map", "img/publisher.svg": "img/publisher.82d378fcd601.svg", "img/logo-32.webp": "img/logo-32.5688944495bf.webp", "img/logo.svg": "img/logo.0f5344a028ca.svg", "img/story-arc.svg": "img/story-arc.ca10014355ef.svg", "img/missing-cover-165.webp": "img/missing-cover-165.0743171f2148.webp", "img/series.svg": "img/series.ec8a889b8f95.svg", "img/logo-maskable-180.webp": "img/logo-maskable-180.c58d966aa64e.webp", "img/missing-cover.svg": "img/missing-cover.ddb038cc2c56.svg", "img/folder.svg": "img/folder.f28936a3701d.svg", "img/volume.svg": "img/volume.814e4c79461a.svg", "img/logo-maskable.svg": "img/logo-maskable.8f7de7f1c6a8.svg", "img/imprint.svg": "img/imprint.7c2adebb76d6.svg", "pwa/offline.html": "pwa/offline.7bfaf9f94bf9.html", "js/choices.json": "js/choices.2f6b0359e1ef.json", "js/choices-admin.json": "js/choices-admin.1eca6d2c22cf.json", "assets/group-tab-CBKuS3Iv.css": "assets/group-tab-CBKuS3Iv.7e4746634782.css", "assets/http-error-DKulXuTl.css": "assets/http-error-DKulXuTl.95e42988d5d5.css", "assets/VSelect-ARDhJiQK.css": "assets/VSelect-ARDhJiQK.372c098fb475.css", "assets/VTextField-DKXmWQyx.js": "assets/VTextField-DKXmWQyx.53d9e13b9847.js", "assets/VSelectionControl-BFq--28I.css": "assets/VSelectionControl-BFq--28I.9687c77461fc.css", "assets/VSelect-Cwd7Ke2J.js": "assets/VSelect-Cwd7Ke2J.fd98b8f830af.js", "assets/pdf-doc-CMzaSV_K.css": "assets/pdf-doc-CMzaSV_K.8cd4b3e65f9a.css", "assets/library-tab-DfZENbbA.js": "assets/library-tab-DfZENbbA.1117ad225bde.js", "assets/materialdesignicons-webfont-PXm3-2wK.woff": "assets/materialdesignicons-webfont-PXm3-2wK.026b7ac9c43c.woff", "assets/VSlideGroup-Dk_1upHt.css": "assets/VSlideGroup-Dk_1upHt.2c836070ec75.css", "assets/VTable-DflzroDq.css": "assets/VTable-DflzroDq.160504d82195.css", "assets/settings-drawer-nZ9HvKSZ.css": "assets/settings-drawer-nZ9HvKSZ.01744e131806.css", "assets/VTable-IQf8Xj4J.js": "assets/VTable-IQf8Xj4J.2e69b517b235.js", "assets/VDialog-lQ13FnRR.css": "assets/VDialog-lQ13FnRR.1c801ad756b2.css", "assets/VCombobox-BiTvNSAL.js": "assets/VCombobox-BiTvNSAL.d1884eaf76e6.js", "assets/relation-chips-BGitp3yx.css": "assets/relation-chips-BGitp3yx.b3e7d178a615.css", "assets/main-Ztp855PW.css": "assets/main-Ztp855PW.d46d718fac45.css", "assets/stats-tab-BZrcMjtP.js": "assets/stats-tab-BZrcMjtP.b8d127a34aa7.js", "assets/VRadioGroup-i2qP9Wu9.css": "assets/VRadioGroup-i2qP9Wu9.8e3741381961.css", "assets/admin-D4sw3N4T.css": "assets/admin-D4sw3N4T.b590f88a62cf.css", "assets/browser-D6WDXwID.js": "assets/browser-D6WDXwID.011e4a20946c.js", "assets/datetime-column-D93BsvcX.js": "assets/datetime-column-D93BsvcX.5caf2255bdc3.js", "assets/VWindowItem-clwRzf0Z.js": "assets/VWindowItem-clwRzf0Z.01620e37f020.js", "assets/reader-YbzUiD0T.css": "assets/reader-YbzUiD0T.efb15835b39d.css", "assets/change-password-dialog-0u6IJA87.css": "assets/change-password-dialog-0u6IJA87.5f9a9aa573b7.css", "assets/copy-to-clipboard-DoUvDJVx.js": "assets/copy-to-clipboard-DoUvDJVx.bec27f144aca.js", "assets/VWindowItem-ByIod57Y.css": "assets/VWindowItem-ByIod57Y.f7fb19752bf3.css", "assets/VExpansionPanels-paVX7c3D.js": "assets/VExpansionPanels-paVX7c3D.3be9407a80fd.js", "assets/user-tab-B_CPCP10.js": "assets/user-tab-B_CPCP10.d1a264b97a0f.js", "assets/pagination-toolbar-BA9ifTed.css": "assets/pagination-toolbar-BA9ifTed.b4865334ee08.css", "assets/VSlideGroup-D4BlVRr8.js": "assets/VSlideGroup-D4BlVRr8.10a79fd58813.js", "assets/VRadioGroup-CLZGmBdz.js": "assets/VRadioGroup-CLZGmBdz.1e41ea70fba8.js", "assets/library-tab-BygwYPnO.css": "assets/library-tab-BygwYPnO.94e92aa60bf2.css", "assets/admin-drawer-panel-DOrhl9Nb.css": "assets/admin-drawer-panel-DOrhl9Nb.3a7af8ec4462.css", "assets/filter-ji46VTOR.js": "assets/filter-ji46VTOR.f7b9ed6fec13.js", "assets/pdf-doc-RJuKdcoH.js": "assets/pdf-doc-RJuKdcoH.4be4a68338de.js", "assets/browser-Cy0OgQJC.css": "assets/browser-Cy0OgQJC.fabbd1aaffcf.css", "assets/confirm-dialog-BmhedLCx.css": "assets/confirm-dialog-BmhedLCx.7c2103d319d4.css", "assets/main-EAqCu0p6.js": "assets/main-EAqCu0p6.e749a8bc2923.js", "assets/settings-drawer-C5t3OYPS.js": "assets/settings-drawer-C5t3OYPS.3fb97d35ae92.js", "assets/group-tab-CMX07Y1c.js": "assets/group-tab-CMX07Y1c.98dd5e2d0bfc.js", "assets/materialdesignicons-webfont-B7mPwVP_.ttf": "assets/materialdesignicons-webfont-B7mPwVP_.6e435534bd35.ttf", "assets/unauthorized-DGIM1VFy.css": "assets/unauthorized-DGIM1VFy.c93d0b3ea5a4.css", "assets/VCombobox-BksEr4D_.css": "assets/VCombobox-BksEr4D_.73429bb75f42.css", "assets/task-tab-aLrGKXQT.js": "assets/task-tab-aLrGKXQT.f8498ed38d40.js", "assets/VCheckboxBtn-BpLxL6DP.js": "assets/VCheckboxBtn-BpLxL6DP.a4cfab2286b6.js", "assets/admin-BMM4khnn.js": "assets/admin-BMM4khnn.eeb686da7f67.js", "assets/flag-tab-DBqpLKi7.css": "assets/flag-tab-DBqpLKi7.dcfef39f541e.css", "assets/relation-chips-BQX3oeiS.js": "assets/relation-chips-BQX3oeiS.acfd60628c35.js", "assets/confirm-dialog-_HotKBZZ.js": "assets/confirm-dialog-_HotKBZZ.2e586037b3e1.js", "assets/reader-BYz5uPEm.js": "assets/reader-BYz5uPEm.e2db8893aa10.js", "assets/VSelectionControl-BTjn8uTI.js": "assets/VSelectionControl-BTjn8uTI.3e9f6e646a35.js", "assets/VCheckbox-dIScsEcb.js": "assets/VCheckbox-dIScsEcb.d54e90dd2ea2.js", "assets/unauthorized-DpTUrdQV.js": "assets/unauthorized-DpTUrdQV.0c1bfe81f457.js", "assets/change-password-dialog-CD1pdXK9.js": "assets/change-password-dialog-CD1pdXK9.8b94f4f171c6.js", "assets/admin-drawer-panel-SQytza6T.js": "assets/admin-drawer-panel-SQytza6T.d94cc92fef08.js", "assets/task-tab-1XiWn9xP.css": "assets/task-tab-1XiWn9xP.06cb8e1b794d.css", "assets/VDialog-DO_IeNl2.js": "assets/VDialog-DO_IeNl2.1e644515ee26.js", "assets/datetime-column-DeCthByU.css": "assets/datetime-column-DeCthByU.1f3bf499e063.css", "assets/materialdesignicons-webfont-CSr8KVlo.eot": "assets/materialdesignicons-webfont-CSr8KVlo.8ced95a05e3c.eot", "assets/flag-tab-CRfBTBsz.js": "assets/flag-tab-CRfBTBsz.0d8f084eea6e.js", "assets/http-error-CzJHczxG.js": "assets/http-error-CzJHczxG.6ee3173d40a5.js", "assets/VExpansionPanels-DsEXVcCv.css": "assets/VExpansionPanels-DsEXVcCv.20b475255e66.css", "assets/stats-tab-BVZzfwi1.css": "assets/stats-tab-BVZzfwi1.28f07f038e88.css", "assets/pagination-toolbar-m4o9cYJ6.js": "assets/pagination-toolbar-m4o9cYJ6.df24ef17e904.js", "assets/VCheckbox-CMKdyl0R.css": "assets/VCheckbox-CMKdyl0R.016ed8d222c4.css", "assets/VTextField-BssVoDhB.css": "assets/VTextField-BssVoDhB.4cc388b4aa3c.css", "assets/materialdesignicons-webfont-Dp5v-WZN.woff2": "assets/materialdesignicons-webfont-Dp5v-WZN.1d7bcee1b302.woff2", "robots.txt": "robots.b6216d61c03e.txt", "manifest.json": "manifest.3d6dd67354d1.json"}, "version": "1.1", "hash": "262253ef875c"}
|
codex/views/admin/flag.py
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from codex.librarian.mp_queue import LIBRARIAN_QUEUE
|
|
4
4
|
from codex.librarian.notifier.tasks import LIBRARY_CHANGED_TASK
|
|
5
|
+
from codex.librarian.tasks import WakeCronTask
|
|
5
6
|
from codex.logger.logging import get_logger
|
|
6
7
|
from codex.models import AdminFlag
|
|
7
8
|
from codex.registration import patch_registration_setting
|
|
@@ -10,6 +11,11 @@ from codex.views.admin.auth import AdminModelViewSet
|
|
|
10
11
|
|
|
11
12
|
LOG = get_logger(__name__)
|
|
12
13
|
|
|
14
|
+
_REFRESH_LIBRARY_FLAGS = frozenset(
|
|
15
|
+
flag.value
|
|
16
|
+
for flag in (AdminFlag.FlagChoices.FOLDER_VIEW, AdminFlag.FlagChoices.NON_USERS)
|
|
17
|
+
)
|
|
18
|
+
|
|
13
19
|
|
|
14
20
|
class AdminFlagViewSet(AdminModelViewSet):
|
|
15
21
|
"""Admin Flag Viewset."""
|
|
@@ -23,10 +29,13 @@ class AdminFlagViewSet(AdminModelViewSet):
|
|
|
23
29
|
key = self.kwargs.get("key")
|
|
24
30
|
if key == AdminFlag.FlagChoices.REGISTRATION.value:
|
|
25
31
|
patch_registration_setting()
|
|
32
|
+
elif key == AdminFlag.FlagChoices.SEND_TELEMETRY.value:
|
|
33
|
+
LIBRARIAN_QUEUE.put(WakeCronTask())
|
|
26
34
|
# Heavy handed refresh everything, but simple.
|
|
27
35
|
# Folder View could only change the group view and let the ui decide
|
|
28
36
|
# Registration only needs to change the enable flag
|
|
29
|
-
|
|
37
|
+
if key in _REFRESH_LIBRARY_FLAGS:
|
|
38
|
+
LIBRARIAN_QUEUE.put(LIBRARY_CHANGED_TASK)
|
|
30
39
|
|
|
31
40
|
def perform_update(self, serializer):
|
|
32
41
|
"""Perform update and hook for change."""
|
codex/views/admin/stats.py
CHANGED
|
@@ -6,7 +6,7 @@ from drf_spectacular.utils import extend_schema
|
|
|
6
6
|
from rest_framework.response import Response
|
|
7
7
|
from rest_framework.serializers import empty
|
|
8
8
|
|
|
9
|
-
from codex.librarian.stats import CodexStats
|
|
9
|
+
from codex.librarian.telemeter.stats import CodexStats
|
|
10
10
|
from codex.logger.logging import get_logger
|
|
11
11
|
from codex.models.admin import Timestamp
|
|
12
12
|
from codex.permissions import HasAPIKeyOrIsAdminUser
|
|
@@ -4,6 +4,7 @@ from datetime import datetime
|
|
|
4
4
|
from math import floor
|
|
5
5
|
from urllib.parse import quote_plus
|
|
6
6
|
|
|
7
|
+
from comicbox.box import Comicbox
|
|
7
8
|
from django.urls import reverse
|
|
8
9
|
|
|
9
10
|
from codex.logger.logging import get_logger
|
|
@@ -96,6 +97,16 @@ class OPDS1EntryLinksMixin:
|
|
|
96
97
|
mime_type = self.mime_type_map.get(self.obj.file_type, MimeType.OCTET)
|
|
97
98
|
return OPDS1Link(Rel.ACQUISITION, href, mime_type, length=self.obj.size)
|
|
98
99
|
|
|
100
|
+
def lazy_metadata(self):
|
|
101
|
+
"""Get barebones metadata lazily to make pse work for chunky-like readers."""
|
|
102
|
+
if self.obj.page_count and self.obj.file_type:
|
|
103
|
+
return False
|
|
104
|
+
with Comicbox(self.obj.path) as cb:
|
|
105
|
+
self.obj.page_count = cb.get_page_count()
|
|
106
|
+
self.obj.file_type = cb.get_file_type()
|
|
107
|
+
LOG.debug(f"Got lazy opds pse metadata for {self.obj.path}")
|
|
108
|
+
return True
|
|
109
|
+
|
|
99
110
|
def _stream_link(self):
|
|
100
111
|
pk = self.obj.pk
|
|
101
112
|
if not pk:
|
|
@@ -107,13 +118,14 @@ class OPDS1EntryLinksMixin:
|
|
|
107
118
|
href = href.replace("0/page.jpg", "{pageNumber}/page.jpg")
|
|
108
119
|
page = self.obj.page
|
|
109
120
|
# extra stupid pse chunky fix for no metadata
|
|
110
|
-
|
|
121
|
+
self.lazy_metadata()
|
|
122
|
+
pse_count = self.obj.page_count
|
|
111
123
|
bookmark_updated_at = self.obj.bookmark_updated_at
|
|
112
124
|
return OPDS1Link(
|
|
113
125
|
Rel.STREAM,
|
|
114
126
|
href,
|
|
115
127
|
MimeType.STREAM,
|
|
116
|
-
pse_count=
|
|
128
|
+
pse_count=pse_count,
|
|
117
129
|
pse_last_read=page,
|
|
118
130
|
pse_last_read_date=bookmark_updated_at,
|
|
119
131
|
)
|
codex/views/opds/v1/feed.py
CHANGED
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
from types import MappingProxyType
|
|
4
4
|
from typing import TYPE_CHECKING, Any
|
|
5
5
|
|
|
6
|
-
from comicbox.box import Comicbox
|
|
7
6
|
from drf_spectacular.utils import extend_schema
|
|
8
7
|
from rest_framework.response import Response
|
|
9
8
|
from rest_framework.throttling import ScopedRateThrottle
|
|
@@ -30,7 +29,6 @@ from codex.views.opds.v1.links import (
|
|
|
30
29
|
if TYPE_CHECKING:
|
|
31
30
|
from collections.abc import Mapping
|
|
32
31
|
|
|
33
|
-
from django.db.models import QuerySet
|
|
34
32
|
|
|
35
33
|
LOG = get_logger(__name__)
|
|
36
34
|
|
|
@@ -132,15 +130,20 @@ class OPDS1FeedView(OPDS1LinksView, OPDSTemplateView):
|
|
|
132
130
|
self.acquisition_groups, zero_pad, metadata, self.mime_type_map
|
|
133
131
|
)
|
|
134
132
|
fallback = bool(self.admin_flags.get("folder_view"))
|
|
133
|
+
import_pks = set()
|
|
135
134
|
for obj in objs: # type: ignore
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
135
|
+
entry = OPDS1Entry(
|
|
136
|
+
obj,
|
|
137
|
+
self.request.GET,
|
|
138
|
+
data,
|
|
139
|
+
title_filename_fallback=fallback,
|
|
140
|
+
)
|
|
141
|
+
if key == "books" and entry.lazy_metadata():
|
|
142
|
+
import_pks.add(obj.pk)
|
|
143
|
+
entries.append(entry)
|
|
144
|
+
if import_pks:
|
|
145
|
+
task = LazyImportComicsTask(frozenset(import_pks))
|
|
146
|
+
LIBRARIAN_QUEUE.put(task)
|
|
144
147
|
return entries
|
|
145
148
|
|
|
146
149
|
@property
|
|
@@ -162,28 +165,6 @@ class OPDS1FeedView(OPDS1LinksView, OPDSTemplateView):
|
|
|
162
165
|
LOG.exception("Getting OPDS v1 entries")
|
|
163
166
|
return entries
|
|
164
167
|
|
|
165
|
-
def _ensure_page_counts(self):
|
|
166
|
-
"""Ensure page counts on books with just in time comicbox."""
|
|
167
|
-
if self.admin_flags.get("import_metadata"):
|
|
168
|
-
return
|
|
169
|
-
books_qs: QuerySet = self.obj["books"] # type: ignore
|
|
170
|
-
import_pks = set()
|
|
171
|
-
new_books = []
|
|
172
|
-
for book in books_qs:
|
|
173
|
-
if book.page_count is not None:
|
|
174
|
-
continue
|
|
175
|
-
with Comicbox(book.path) as cb:
|
|
176
|
-
book.file_type = cb.get_file_type()
|
|
177
|
-
book.page_count = cb.get_page_count()
|
|
178
|
-
new_books.append(book)
|
|
179
|
-
import_pks.add(book.pk)
|
|
180
|
-
if new_books:
|
|
181
|
-
writable_obj = dict(self.obj)
|
|
182
|
-
writable_obj["books"] = new_books # type: ignore
|
|
183
|
-
self.obj = MappingProxyType(writable_obj)
|
|
184
|
-
task = LazyImportComicsTask(frozenset(import_pks))
|
|
185
|
-
LIBRARIAN_QUEUE.put(task)
|
|
186
|
-
|
|
187
168
|
def get_object(self): # type: ignore
|
|
188
169
|
"""Get the browser page and serialize it for this subclass."""
|
|
189
170
|
group_qs, book_qs, num_pages, total_count, zero_pad, mtime = (
|
|
@@ -206,8 +187,6 @@ class OPDS1FeedView(OPDS1LinksView, OPDSTemplateView):
|
|
|
206
187
|
|
|
207
188
|
self.is_aq_feed = self.model_group in ("c", "f")
|
|
208
189
|
|
|
209
|
-
self._ensure_page_counts()
|
|
210
|
-
|
|
211
190
|
# Do not return a Mapping despite the type. Return self for the serializer.
|
|
212
191
|
return self
|
|
213
192
|
|
codex/views/reader/page.py
CHANGED
|
@@ -92,17 +92,16 @@ class ReaderPageView(BookmarkBaseView):
|
|
|
92
92
|
)
|
|
93
93
|
def get(self, *_args, **_kwargs):
|
|
94
94
|
"""Get the comic page from the archive."""
|
|
95
|
-
pk = self.kwargs.get("pk")
|
|
96
|
-
comic = None
|
|
97
95
|
try:
|
|
98
96
|
page_image, content_type = self._get_page_image()
|
|
99
97
|
self._update_bookmark()
|
|
100
98
|
except Comic.DoesNotExist as exc:
|
|
99
|
+
pk = self.kwargs.get("pk")
|
|
101
100
|
detail = f"comic {pk} not found in db."
|
|
102
101
|
raise NotFound(detail=detail) from exc
|
|
103
102
|
except FileNotFoundError as exc:
|
|
104
|
-
|
|
105
|
-
detail = f"comic {
|
|
103
|
+
pk = self.kwargs.get("pk")
|
|
104
|
+
detail = f"comic path for {pk} not found: {exc}."
|
|
106
105
|
raise NotFound(detail=detail) from exc
|
|
107
106
|
except Exception as exc:
|
|
108
107
|
LOG.warning(exc)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: codex
|
|
3
|
-
Version: 1.6.
|
|
3
|
+
Version: 1.6.9
|
|
4
4
|
Summary: A comic archive web server.
|
|
5
5
|
Home-page: https://github.com/ajslater/codex
|
|
6
6
|
License: GPL-3.0-only
|
|
@@ -115,27 +115,31 @@ the recommended way to run Codex.
|
|
|
115
115
|
You'll then want to read the [Administration](#administration) section of this
|
|
116
116
|
document.
|
|
117
117
|
|
|
118
|
-
### Install & Run
|
|
118
|
+
### Install & Run on <a href="homeassistant">HomeAssistant</a> server
|
|
119
119
|
|
|
120
|
-
|
|
120
|
+
If you have a [HomeAssistant](https://www.home-assistant.io/) server, Codex can
|
|
121
|
+
be installed with the following steps :
|
|
121
122
|
|
|
122
|
-
|
|
123
|
+
- Add the `https://github.com/alexbelgium/hassio-addons` repository by
|
|
124
|
+
[clicking here](https://my.home-assistant.io/redirect/supervisor_add_addon_repository/?repository_url=https%3A%2F%2Fgithub.com%2Falexbelgium%2Fhassio-addons)
|
|
125
|
+
- Install the addon :
|
|
126
|
+
[click here to automatically open the addon store, then install the addon](https://my.home-assistant.io/redirect/supervisor)
|
|
127
|
+
- Customize addon options, then then start the add-on.
|
|
123
128
|
|
|
124
|
-
|
|
129
|
+
### Install & Run as a Native Application
|
|
125
130
|
|
|
126
|
-
|
|
131
|
+
You can also run Codex as a natively installed python application with pip.
|
|
127
132
|
|
|
128
|
-
|
|
133
|
+
#### Binary Dependencies
|
|
129
134
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
```
|
|
135
|
+
You'll need to install the appropriate system dependencies for your platform
|
|
136
|
+
before installing Codex.
|
|
133
137
|
|
|
134
|
-
##### Linux
|
|
138
|
+
##### Linux Dependencies
|
|
135
139
|
|
|
136
|
-
###### <a href="#debian">Debian</a>
|
|
140
|
+
###### <a href="#debian">Debian</a> Dependencies
|
|
137
141
|
|
|
138
|
-
...and Ubuntu, Mint, MX
|
|
142
|
+
...and Ubuntu, Mint, MX, Window Subsystem for Linux, and others.
|
|
139
143
|
|
|
140
144
|
<!-- eslint-skip -->
|
|
141
145
|
|
|
@@ -144,8 +148,9 @@ apt install build-essential libimagequant0 libjpeg-turbo8 libopenjp2-7 libssl li
|
|
|
144
148
|
```
|
|
145
149
|
|
|
146
150
|
Versions of packages like libjpeg, libssl, libtiff may differ between flavors
|
|
147
|
-
and versions of
|
|
148
|
-
|
|
151
|
+
and versions of your distribution. If the package versions listed in the example
|
|
152
|
+
above are not available, try searching for ones that are with `apt-cache` or
|
|
153
|
+
`aptitude`.
|
|
149
154
|
|
|
150
155
|
<!-- eslint-skip -->
|
|
151
156
|
|
|
@@ -153,7 +158,7 @@ one that is with apt-cache or aptitude.
|
|
|
153
158
|
apt-cache search libjpeg-turbo
|
|
154
159
|
```
|
|
155
160
|
|
|
156
|
-
###### Alpine
|
|
161
|
+
###### <a href="alpine">Alpine</a> Dependencies
|
|
157
162
|
|
|
158
163
|
<!-- eslint-skip -->
|
|
159
164
|
|
|
@@ -169,31 +174,28 @@ packaged for Linux, but here are some instructions:
|
|
|
169
174
|
|
|
170
175
|
Unrar as packaged for Alpine Linux v3.14 seems to work on Alpine v3.15+
|
|
171
176
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
Windows users should use Docker to run Codex until this documentation section is
|
|
175
|
-
complete.
|
|
177
|
+
##### macOS Dependencies
|
|
176
178
|
|
|
177
|
-
|
|
178
|
-
tested it yet. Try following the instructions for [Debian](#debian) above. There
|
|
179
|
-
may be outstanding platform related bugs.
|
|
180
|
-
|
|
181
|
-
Contributions to the Windows documentation will be gratefully accepted on
|
|
182
|
-
[the outstanding issue](https://github.com/ajslater/codex/issues/76) or Discord.
|
|
183
|
-
|
|
184
|
-
#### Install Codex with pip
|
|
185
|
-
|
|
186
|
-
You may now install Codex with pip
|
|
179
|
+
Using [Homebrew](https://brew.sh/):
|
|
187
180
|
|
|
188
181
|
<!-- eslint-skip -->
|
|
189
182
|
|
|
190
183
|
```sh
|
|
191
|
-
|
|
184
|
+
brew install jpeg libffi libyaml libzip openssl python unrar webp
|
|
192
185
|
```
|
|
193
186
|
|
|
194
|
-
|
|
187
|
+
##### <a href="#windows">Windows</a> Dependencies
|
|
195
188
|
|
|
196
|
-
|
|
189
|
+
Windows users are encouraged to use Docker to run Codex, but it will also run
|
|
190
|
+
natively on the Windows Subsystem for Linux.
|
|
191
|
+
|
|
192
|
+
Installation instructions are in the <a href="/WINDOWS.md">Native Windows
|
|
193
|
+
Dependencies Installation Document</a>.
|
|
194
|
+
|
|
195
|
+
#### <a href="#run">Run</a> Codex Natively
|
|
196
|
+
|
|
197
|
+
Once you have installed codex, the codex binary should be on your path. To start
|
|
198
|
+
codex, run:
|
|
197
199
|
|
|
198
200
|
<!-- eslint-skip -->
|
|
199
201
|
|
|
@@ -201,18 +203,9 @@ pip should install the codex binary on your path. Run
|
|
|
201
203
|
codex
|
|
202
204
|
```
|
|
203
205
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
### Install & Run on your preexisting HomeAssistant server
|
|
206
|
+
### Use Codex
|
|
207
207
|
|
|
208
|
-
|
|
209
|
-
be installed with the following steps :
|
|
210
|
-
|
|
211
|
-
- Add the `https://github.com/alexbelgium/hassio-addons` repository by
|
|
212
|
-
[clicking here](https://my.home-assistant.io/redirect/supervisor_add_addon_repository/?repository_url=https%3A%2F%2Fgithub.com%2Falexbelgium%2Fhassio-addons)
|
|
213
|
-
- Install the addon :
|
|
214
|
-
[click here to automatically open the addon store, then install the addon](https://my.home-assistant.io/redirect/supervisor)
|
|
215
|
-
- Customize addon options, then then start the add-on.
|
|
208
|
+
Once installed and running you may navigate to <http://localhost:9810/>
|
|
216
209
|
|
|
217
210
|
## <a name="administration">👑 Administration</a>
|
|
218
211
|
|
|
@@ -579,6 +572,8 @@ questions on the [Mylar Discord](https://discord.gg/6UG94R7E8T). Please use the
|
|
|
579
572
|
|
|
580
573
|
- Thanks to [Aurélien Mazurie](https://pypi.org/user/ajmazurie/) for allowing me
|
|
581
574
|
to use the PyPi name 'codex'.
|
|
575
|
+
- To [ProfessionalTart](https://github.com/professionaltart) for providing
|
|
576
|
+
native Windows installation instructions.
|
|
582
577
|
- Thanks to the good people of
|
|
583
578
|
[#mylar](https://github.com/mylar3/mylar3#live-support--conversation) for
|
|
584
579
|
continuous feedback and comic ecosystem education.
|