codex 1.6.0a11__py3-none-any.whl → 1.6.0a12__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/covers/create.py +21 -16
- codex/serializers/browser/choices.py +21 -54
- codex/serializers/browser/filters.py +30 -36
- codex/serializers/browser/mixins.py +2 -2
- codex/serializers/fields.py +32 -65
- codex/serializers/opds/v2.py +4 -6
- codex/static_root/assets/{VCheckbox-BwDyxhU7.831b00df198a.js → VCheckbox-B3vCf1Vu.e1991f98ab6c.js} +1 -1
- codex/static_root/assets/VCheckbox-B3vCf1Vu.e1991f98ab6c.js.br +0 -0
- codex/static_root/assets/VCheckbox-B3vCf1Vu.e1991f98ab6c.js.gz +0 -0
- codex/static_root/assets/{VCheckbox-BwDyxhU7.js → VCheckbox-B3vCf1Vu.js} +1 -1
- codex/static_root/assets/VCheckbox-B3vCf1Vu.js.br +0 -0
- codex/static_root/assets/VCheckbox-B3vCf1Vu.js.gz +0 -0
- codex/static_root/assets/{VCheckboxBtn-DVq5lDK4.5e6464c8d80a.js → VCheckboxBtn-Cj6bUYmw.196cc43ca1c8.js} +1 -1
- codex/static_root/assets/VCheckboxBtn-Cj6bUYmw.196cc43ca1c8.js.br +0 -0
- codex/static_root/assets/VCheckboxBtn-Cj6bUYmw.196cc43ca1c8.js.gz +0 -0
- codex/static_root/assets/{VCheckboxBtn-DVq5lDK4.js → VCheckboxBtn-Cj6bUYmw.js} +1 -1
- codex/static_root/assets/VCheckboxBtn-Cj6bUYmw.js.br +0 -0
- codex/static_root/assets/VCheckboxBtn-Cj6bUYmw.js.gz +0 -0
- codex/static_root/assets/{VCombobox-BASCOy0n.7801caa5e192.js → VCombobox-wIqJY8no.3547ff73e91e.js} +1 -1
- codex/static_root/assets/VCombobox-wIqJY8no.3547ff73e91e.js.br +0 -0
- codex/static_root/assets/VCombobox-wIqJY8no.3547ff73e91e.js.gz +0 -0
- codex/static_root/assets/{VCombobox-BASCOy0n.js → VCombobox-wIqJY8no.js} +1 -1
- codex/static_root/assets/VCombobox-wIqJY8no.js.br +0 -0
- codex/static_root/assets/VCombobox-wIqJY8no.js.gz +0 -0
- codex/static_root/assets/{VDialog-DnbL_v_u.0bd289bda8e6.js → VDialog-D6HUFV6a.ac71da510b3f.js} +1 -1
- codex/static_root/assets/VDialog-D6HUFV6a.ac71da510b3f.js.br +0 -0
- codex/static_root/assets/VDialog-D6HUFV6a.ac71da510b3f.js.gz +0 -0
- codex/static_root/assets/{VDialog-DnbL_v_u.js → VDialog-D6HUFV6a.js} +1 -1
- codex/static_root/assets/VDialog-D6HUFV6a.js.br +0 -0
- codex/static_root/assets/VDialog-D6HUFV6a.js.gz +0 -0
- codex/static_root/assets/{VExpansionPanels-B8nz8lN5.56e5adec4f62.js → VExpansionPanels-BUJaYmzY.44e8a00a2ebe.js} +1 -1
- codex/static_root/assets/VExpansionPanels-BUJaYmzY.44e8a00a2ebe.js.br +0 -0
- codex/static_root/assets/VExpansionPanels-BUJaYmzY.44e8a00a2ebe.js.gz +0 -0
- codex/static_root/assets/{VExpansionPanels-B8nz8lN5.js → VExpansionPanels-BUJaYmzY.js} +1 -1
- codex/static_root/assets/VExpansionPanels-BUJaYmzY.js.br +0 -0
- codex/static_root/assets/VExpansionPanels-BUJaYmzY.js.gz +0 -0
- codex/static_root/assets/{VRadioGroup-BgwJ_b94.55f84f3429b9.js → VRadioGroup-CayclHra.0a5b1c9a7b71.js} +1 -1
- codex/static_root/assets/VRadioGroup-CayclHra.0a5b1c9a7b71.js.br +0 -0
- codex/static_root/assets/VRadioGroup-CayclHra.0a5b1c9a7b71.js.gz +0 -0
- codex/static_root/assets/{VRadioGroup-BgwJ_b94.js → VRadioGroup-CayclHra.js} +1 -1
- codex/static_root/assets/VRadioGroup-CayclHra.js.br +0 -0
- codex/static_root/assets/VRadioGroup-CayclHra.js.gz +0 -0
- codex/static_root/assets/{VSelect-BoKpXxwe.a88f065dfe3b.js → VSelect-ou2Q9UaN.8ddd219784e1.js} +1 -1
- codex/static_root/assets/VSelect-ou2Q9UaN.8ddd219784e1.js.br +0 -0
- codex/static_root/assets/VSelect-ou2Q9UaN.8ddd219784e1.js.gz +0 -0
- codex/static_root/assets/{VSelect-BoKpXxwe.js → VSelect-ou2Q9UaN.js} +1 -1
- codex/static_root/assets/VSelect-ou2Q9UaN.js.br +0 -0
- codex/static_root/assets/VSelect-ou2Q9UaN.js.gz +0 -0
- codex/static_root/assets/{VSelectionControl-BXJGg8No.js → VSelectionControl-BOKIwNZb.16e0cdde978c.js} +1 -1
- codex/static_root/assets/VSelectionControl-BOKIwNZb.16e0cdde978c.js.br +0 -0
- codex/static_root/assets/VSelectionControl-BOKIwNZb.16e0cdde978c.js.gz +0 -0
- codex/static_root/assets/{VSelectionControl-BXJGg8No.0cb36d941d2a.js → VSelectionControl-BOKIwNZb.js} +1 -1
- codex/static_root/assets/VSelectionControl-BOKIwNZb.js.br +0 -0
- codex/static_root/assets/VSelectionControl-BOKIwNZb.js.gz +0 -0
- codex/static_root/assets/{VSlideGroup-C2TL5E34.775adeb5a973.js → VSlideGroup-C3XgVg2T.d2b0ee4f596c.js} +1 -1
- codex/static_root/assets/VSlideGroup-C3XgVg2T.d2b0ee4f596c.js.br +0 -0
- codex/static_root/assets/VSlideGroup-C3XgVg2T.d2b0ee4f596c.js.gz +0 -0
- codex/static_root/assets/{VSlideGroup-C2TL5E34.js → VSlideGroup-C3XgVg2T.js} +1 -1
- codex/static_root/assets/VSlideGroup-C3XgVg2T.js.br +0 -0
- codex/static_root/assets/VSlideGroup-C3XgVg2T.js.gz +0 -0
- codex/static_root/assets/{VTable-C0FptljX.e4840b635c6e.js → VTable-CrIiBr9q.b4669247af45.js} +1 -1
- codex/static_root/assets/VTable-CrIiBr9q.b4669247af45.js.br +0 -0
- codex/static_root/assets/VTable-CrIiBr9q.b4669247af45.js.gz +0 -0
- codex/static_root/assets/{VTable-C0FptljX.js → VTable-CrIiBr9q.js} +1 -1
- codex/static_root/assets/VTable-CrIiBr9q.js.br +0 -0
- codex/static_root/assets/VTable-CrIiBr9q.js.gz +0 -0
- codex/static_root/assets/{VTextField-Aw8nKhY6.428732ac22d7.js → VTextField-HAAxrpNi.6f6dcb50079a.js} +1 -1
- codex/static_root/assets/VTextField-HAAxrpNi.6f6dcb50079a.js.br +0 -0
- codex/static_root/assets/VTextField-HAAxrpNi.6f6dcb50079a.js.gz +0 -0
- codex/static_root/assets/{VTextField-Aw8nKhY6.js → VTextField-HAAxrpNi.js} +1 -1
- codex/static_root/assets/VTextField-HAAxrpNi.js.br +0 -0
- codex/static_root/assets/VTextField-HAAxrpNi.js.gz +0 -0
- codex/static_root/assets/{VWindowItem-D9j_u9MX.828acf3dee55.js → VWindowItem-aal6-Uv4.d178e2af20a7.js} +1 -1
- codex/static_root/assets/VWindowItem-aal6-Uv4.d178e2af20a7.js.br +0 -0
- codex/static_root/assets/VWindowItem-aal6-Uv4.d178e2af20a7.js.gz +0 -0
- codex/static_root/assets/{VWindowItem-D9j_u9MX.js → VWindowItem-aal6-Uv4.js} +1 -1
- codex/static_root/assets/VWindowItem-aal6-Uv4.js.br +0 -0
- codex/static_root/assets/VWindowItem-aal6-Uv4.js.gz +0 -0
- codex/static_root/assets/admin-D5JDmLDy.e4df3dd3a3fe.js +1 -0
- codex/static_root/assets/admin-D5JDmLDy.e4df3dd3a3fe.js.br +0 -0
- codex/static_root/assets/admin-D5JDmLDy.e4df3dd3a3fe.js.gz +0 -0
- codex/static_root/assets/admin-D5JDmLDy.js +1 -0
- codex/static_root/assets/admin-D5JDmLDy.js.br +0 -0
- codex/static_root/assets/admin-D5JDmLDy.js.gz +0 -0
- codex/static_root/assets/{admin-drawer-panel-Dmn4wEY3.af7e8490f0e3.js → admin-drawer-panel-BF-h3Wm0.1f372db8d08f.js} +2 -2
- codex/static_root/assets/admin-drawer-panel-BF-h3Wm0.1f372db8d08f.js.br +0 -0
- codex/static_root/assets/{admin-drawer-panel-Dmn4wEY3.af7e8490f0e3.js.gz → admin-drawer-panel-BF-h3Wm0.1f372db8d08f.js.gz} +0 -0
- codex/static_root/assets/{admin-drawer-panel-Dmn4wEY3.js → admin-drawer-panel-BF-h3Wm0.js} +2 -2
- codex/static_root/assets/admin-drawer-panel-BF-h3Wm0.js.br +0 -0
- codex/static_root/assets/{admin-drawer-panel-Dmn4wEY3.js.gz → admin-drawer-panel-BF-h3Wm0.js.gz} +0 -0
- codex/static_root/assets/browser-B1-dPld9.0b3fa4fdbe22.css +1 -0
- codex/static_root/assets/browser-B1-dPld9.0b3fa4fdbe22.css.br +0 -0
- codex/static_root/assets/browser-B1-dPld9.0b3fa4fdbe22.css.gz +0 -0
- codex/static_root/assets/browser-B1-dPld9.css +1 -0
- codex/static_root/assets/browser-B1-dPld9.css.br +0 -0
- codex/static_root/assets/browser-B1-dPld9.css.gz +0 -0
- codex/static_root/assets/browser-VhFkImB_.9c3b2c746614.js +1 -0
- codex/static_root/assets/browser-VhFkImB_.9c3b2c746614.js.br +0 -0
- codex/static_root/assets/browser-VhFkImB_.9c3b2c746614.js.gz +0 -0
- codex/static_root/assets/browser-VhFkImB_.js +1 -0
- codex/static_root/assets/browser-VhFkImB_.js.br +0 -0
- codex/static_root/assets/browser-VhFkImB_.js.gz +0 -0
- codex/static_root/assets/{change-password-dialog-Cc1e755p.b29d200537bf.js → change-password-dialog-BCYw5K7E.a8bae0450f20.js} +1 -1
- codex/static_root/assets/change-password-dialog-BCYw5K7E.a8bae0450f20.js.br +0 -0
- codex/static_root/assets/change-password-dialog-BCYw5K7E.a8bae0450f20.js.gz +0 -0
- codex/static_root/assets/{change-password-dialog-Cc1e755p.js → change-password-dialog-BCYw5K7E.js} +1 -1
- codex/static_root/assets/change-password-dialog-BCYw5K7E.js.br +0 -0
- codex/static_root/assets/change-password-dialog-BCYw5K7E.js.gz +0 -0
- codex/static_root/assets/{confirm-dialog-Cyr7HAAz.8ab1d8b6241a.js → confirm-dialog-c9JOSGSy.3c5788f95f47.js} +1 -1
- codex/static_root/assets/confirm-dialog-c9JOSGSy.3c5788f95f47.js.br +3 -0
- codex/static_root/assets/confirm-dialog-c9JOSGSy.3c5788f95f47.js.gz +0 -0
- codex/static_root/assets/{confirm-dialog-Cyr7HAAz.js → confirm-dialog-c9JOSGSy.js} +1 -1
- codex/static_root/assets/confirm-dialog-c9JOSGSy.js.br +3 -0
- codex/static_root/assets/confirm-dialog-c9JOSGSy.js.gz +0 -0
- codex/static_root/assets/{datetime-column-Cqi99Ze-.49d0ce340183.js → datetime-column-D-6LPKdI.d46bbd8134df.js} +1 -1
- codex/static_root/assets/datetime-column-D-6LPKdI.d46bbd8134df.js.br +0 -0
- codex/static_root/assets/datetime-column-D-6LPKdI.d46bbd8134df.js.gz +0 -0
- codex/static_root/assets/{datetime-column-Cqi99Ze-.js → datetime-column-D-6LPKdI.js} +1 -1
- codex/static_root/assets/datetime-column-D-6LPKdI.js.br +0 -0
- codex/static_root/assets/datetime-column-D-6LPKdI.js.gz +0 -0
- codex/static_root/assets/{filter-CuocBoS2.885d1b8d44cc.js → filter-BOnVoHTU.93c3d0d0d3f6.js} +1 -1
- codex/static_root/assets/filter-BOnVoHTU.93c3d0d0d3f6.js.br +0 -0
- codex/static_root/assets/filter-BOnVoHTU.93c3d0d0d3f6.js.gz +0 -0
- codex/static_root/assets/{filter-CuocBoS2.js → filter-BOnVoHTU.js} +1 -1
- codex/static_root/assets/filter-BOnVoHTU.js.br +0 -0
- codex/static_root/assets/filter-BOnVoHTU.js.gz +0 -0
- codex/static_root/assets/{flag-tab-B5dRCBAt.e858f7ec9f55.js → flag-tab-IniE-dLy.a02733e359aa.js} +1 -1
- codex/static_root/assets/flag-tab-IniE-dLy.a02733e359aa.js.br +0 -0
- codex/static_root/assets/flag-tab-IniE-dLy.a02733e359aa.js.gz +0 -0
- codex/static_root/assets/{flag-tab-B5dRCBAt.js → flag-tab-IniE-dLy.js} +1 -1
- codex/static_root/assets/flag-tab-IniE-dLy.js.br +0 -0
- codex/static_root/assets/flag-tab-IniE-dLy.js.gz +0 -0
- codex/static_root/assets/{group-tab-_nT2o04v.c06032b254dc.js → group-tab-RPa8XC0J.3d483919ea92.js} +1 -1
- codex/static_root/assets/group-tab-RPa8XC0J.3d483919ea92.js.br +0 -0
- codex/static_root/assets/group-tab-RPa8XC0J.3d483919ea92.js.gz +0 -0
- codex/static_root/assets/{group-tab-_nT2o04v.js → group-tab-RPa8XC0J.js} +1 -1
- codex/static_root/assets/group-tab-RPa8XC0J.js.br +0 -0
- codex/static_root/assets/group-tab-RPa8XC0J.js.gz +0 -0
- codex/static_root/assets/{http-error-CXo9qLiW.d5a337f399c9.js → http-error-DBQycf8i.561cde2b4598.js} +1 -1
- codex/static_root/assets/http-error-DBQycf8i.561cde2b4598.js.br +0 -0
- codex/static_root/assets/http-error-DBQycf8i.561cde2b4598.js.gz +0 -0
- codex/static_root/assets/{http-error-CXo9qLiW.js → http-error-DBQycf8i.js} +1 -1
- codex/static_root/assets/http-error-DBQycf8i.js.br +0 -0
- codex/static_root/assets/http-error-DBQycf8i.js.gz +0 -0
- codex/static_root/assets/{library-tab-lz5QMD4i.2f04b226ebe8.js → library-tab-C5trLvkq.35c7a1b79c71.js} +1 -1
- codex/static_root/assets/library-tab-C5trLvkq.35c7a1b79c71.js.br +0 -0
- codex/static_root/assets/library-tab-C5trLvkq.35c7a1b79c71.js.gz +0 -0
- codex/static_root/assets/{library-tab-lz5QMD4i.js → library-tab-C5trLvkq.js} +1 -1
- codex/static_root/assets/library-tab-C5trLvkq.js.br +0 -0
- codex/static_root/assets/library-tab-C5trLvkq.js.gz +0 -0
- codex/static_root/assets/main-x0Pcl23A.364bfe447c9c.js +32 -0
- codex/static_root/assets/main-x0Pcl23A.364bfe447c9c.js.br +0 -0
- codex/static_root/assets/main-x0Pcl23A.364bfe447c9c.js.gz +0 -0
- codex/static_root/assets/main-x0Pcl23A.js +32 -0
- codex/static_root/assets/main-x0Pcl23A.js.br +0 -0
- codex/static_root/assets/main-x0Pcl23A.js.gz +0 -0
- codex/static_root/assets/pagination-toolbar-BLUoVz2y.50051431acf1.css +1 -0
- codex/static_root/assets/pagination-toolbar-BLUoVz2y.50051431acf1.css.br +0 -0
- codex/static_root/assets/pagination-toolbar-BLUoVz2y.50051431acf1.css.gz +0 -0
- codex/static_root/assets/pagination-toolbar-BLUoVz2y.css +1 -0
- codex/static_root/assets/pagination-toolbar-BLUoVz2y.css.br +0 -0
- codex/static_root/assets/pagination-toolbar-BLUoVz2y.css.gz +0 -0
- codex/static_root/assets/pagination-toolbar-DEgDOzzp.71aa03f525e4.js +1 -0
- codex/static_root/assets/pagination-toolbar-DEgDOzzp.71aa03f525e4.js.br +0 -0
- codex/static_root/assets/pagination-toolbar-DEgDOzzp.71aa03f525e4.js.gz +0 -0
- codex/static_root/assets/pagination-toolbar-DEgDOzzp.js +1 -0
- codex/static_root/assets/pagination-toolbar-DEgDOzzp.js.br +0 -0
- codex/static_root/assets/pagination-toolbar-DEgDOzzp.js.gz +0 -0
- codex/static_root/assets/{pdf-doc-BpZdmj2g.93e86d9c7927.js → pdf-doc-CkV-xfvG.35c1a6a19a41.js} +1 -1
- codex/static_root/assets/pdf-doc-CkV-xfvG.35c1a6a19a41.js.br +0 -0
- codex/static_root/assets/pdf-doc-CkV-xfvG.35c1a6a19a41.js.gz +0 -0
- codex/static_root/assets/{pdf-doc-BpZdmj2g.js → pdf-doc-CkV-xfvG.js} +1 -1
- codex/static_root/assets/pdf-doc-CkV-xfvG.js.br +0 -0
- codex/static_root/assets/pdf-doc-CkV-xfvG.js.gz +0 -0
- codex/static_root/assets/{reader-CRJUR2qj.55d626f0f9fa.js → reader-ClcgSG93.6afe950e70ac.js} +2 -2
- codex/static_root/assets/reader-ClcgSG93.6afe950e70ac.js.br +0 -0
- codex/static_root/assets/reader-ClcgSG93.6afe950e70ac.js.gz +0 -0
- codex/static_root/assets/{reader-CRJUR2qj.js → reader-ClcgSG93.js} +2 -2
- codex/static_root/assets/reader-ClcgSG93.js.br +0 -0
- codex/static_root/assets/reader-ClcgSG93.js.gz +0 -0
- codex/static_root/assets/{relation-chips-NgDnInw_.3b5ba16f68f0.js → relation-chips-2vga5ApB.d94c344f909b.js} +1 -1
- codex/static_root/assets/relation-chips-2vga5ApB.d94c344f909b.js.br +0 -0
- codex/static_root/assets/relation-chips-2vga5ApB.d94c344f909b.js.gz +0 -0
- codex/static_root/assets/{relation-chips-NgDnInw_.js → relation-chips-2vga5ApB.js} +1 -1
- codex/static_root/assets/relation-chips-2vga5ApB.js.br +0 -0
- codex/static_root/assets/relation-chips-2vga5ApB.js.gz +0 -0
- codex/static_root/assets/{settings-drawer-BaQT27kc.js → settings-drawer-BOTI_tHr.03748f801e08.js} +2 -2
- codex/static_root/assets/settings-drawer-BOTI_tHr.03748f801e08.js.br +0 -0
- codex/static_root/assets/settings-drawer-BOTI_tHr.03748f801e08.js.gz +0 -0
- codex/static_root/assets/{settings-drawer-BaQT27kc.e43fc1527b66.js → settings-drawer-BOTI_tHr.js} +2 -2
- codex/static_root/assets/settings-drawer-BOTI_tHr.js.br +0 -0
- codex/static_root/assets/settings-drawer-BOTI_tHr.js.gz +0 -0
- codex/static_root/assets/{stats-tab-DoHb54IU.30d7deea7b9f.js → stats-tab-CBz_jhmH.9bdc41225f06.js} +1 -1
- codex/static_root/assets/stats-tab-CBz_jhmH.9bdc41225f06.js.br +0 -0
- codex/static_root/assets/stats-tab-CBz_jhmH.9bdc41225f06.js.gz +0 -0
- codex/static_root/assets/{stats-tab-DoHb54IU.js → stats-tab-CBz_jhmH.js} +1 -1
- codex/static_root/assets/stats-tab-CBz_jhmH.js.br +0 -0
- codex/static_root/assets/stats-tab-CBz_jhmH.js.gz +0 -0
- codex/static_root/assets/{task-tab-B88ucu1U.4f240e3d82c4.js → task-tab-B8sYV6Ia.90a8deec0214.js} +1 -1
- codex/static_root/assets/task-tab-B8sYV6Ia.90a8deec0214.js.br +0 -0
- codex/static_root/assets/task-tab-B8sYV6Ia.90a8deec0214.js.gz +0 -0
- codex/static_root/assets/{task-tab-B88ucu1U.js → task-tab-B8sYV6Ia.js} +1 -1
- codex/static_root/assets/task-tab-B8sYV6Ia.js.br +0 -0
- codex/static_root/assets/task-tab-B8sYV6Ia.js.gz +0 -0
- codex/static_root/assets/to-case-CnnzURtN.f0e4b42ddb89.js +1 -0
- codex/static_root/assets/to-case-CnnzURtN.js +1 -0
- codex/static_root/assets/{unauthorized-AnKtlgGy.62ee74d4373c.js → unauthorized-D5-FvA2_.61b1cd239b47.js} +1 -1
- codex/static_root/assets/unauthorized-D5-FvA2_.61b1cd239b47.js.br +0 -0
- codex/static_root/assets/unauthorized-D5-FvA2_.61b1cd239b47.js.gz +0 -0
- codex/static_root/assets/{unauthorized-AnKtlgGy.js → unauthorized-D5-FvA2_.js} +1 -1
- codex/static_root/assets/unauthorized-D5-FvA2_.js.br +0 -0
- codex/static_root/assets/unauthorized-D5-FvA2_.js.gz +0 -0
- codex/static_root/assets/{user-tab-BxtZ2u7W.161cc8f0dcce.js → user-tab-pzFjrggM.97c02ebee729.js} +1 -1
- codex/static_root/assets/user-tab-pzFjrggM.97c02ebee729.js.br +0 -0
- codex/static_root/assets/user-tab-pzFjrggM.97c02ebee729.js.gz +0 -0
- codex/static_root/assets/{user-tab-BxtZ2u7W.js → user-tab-pzFjrggM.js} +1 -1
- codex/static_root/assets/user-tab-pzFjrggM.js.br +0 -0
- codex/static_root/assets/user-tab-pzFjrggM.js.gz +0 -0
- codex/static_root/{manifest.3851c028b0cb.json → manifest.a18726680d5f.json} +222 -222
- codex/static_root/manifest.a18726680d5f.json.br +0 -0
- codex/static_root/manifest.a18726680d5f.json.gz +0 -0
- codex/static_root/manifest.json +222 -222
- 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/cover.py +13 -15
- codex/views/browser/metadata.py +5 -5
- codex/views/reader/page.py +13 -2
- codex/views/util.py +13 -0
- {codex-1.6.0a11.dist-info → codex-1.6.0a12.dist-info}/METADATA +1 -1
- {codex-1.6.0a11.dist-info → codex-1.6.0a12.dist-info}/RECORD +234 -236
- codex/static_root/assets/VCheckbox-BwDyxhU7.831b00df198a.js.br +0 -0
- codex/static_root/assets/VCheckbox-BwDyxhU7.831b00df198a.js.gz +0 -0
- codex/static_root/assets/VCheckbox-BwDyxhU7.js.br +0 -0
- codex/static_root/assets/VCheckbox-BwDyxhU7.js.gz +0 -0
- codex/static_root/assets/VCheckboxBtn-DVq5lDK4.5e6464c8d80a.js.br +0 -0
- codex/static_root/assets/VCheckboxBtn-DVq5lDK4.5e6464c8d80a.js.gz +0 -0
- codex/static_root/assets/VCheckboxBtn-DVq5lDK4.js.br +0 -0
- codex/static_root/assets/VCheckboxBtn-DVq5lDK4.js.gz +0 -0
- codex/static_root/assets/VCombobox-BASCOy0n.7801caa5e192.js.br +0 -0
- codex/static_root/assets/VCombobox-BASCOy0n.7801caa5e192.js.gz +0 -0
- codex/static_root/assets/VCombobox-BASCOy0n.js.br +0 -0
- codex/static_root/assets/VCombobox-BASCOy0n.js.gz +0 -0
- codex/static_root/assets/VDialog-DnbL_v_u.0bd289bda8e6.js.br +0 -0
- codex/static_root/assets/VDialog-DnbL_v_u.0bd289bda8e6.js.gz +0 -0
- codex/static_root/assets/VDialog-DnbL_v_u.js.br +0 -0
- codex/static_root/assets/VDialog-DnbL_v_u.js.gz +0 -0
- codex/static_root/assets/VExpansionPanels-B8nz8lN5.56e5adec4f62.js.br +0 -0
- codex/static_root/assets/VExpansionPanels-B8nz8lN5.56e5adec4f62.js.gz +0 -0
- codex/static_root/assets/VExpansionPanels-B8nz8lN5.js.br +0 -0
- codex/static_root/assets/VExpansionPanels-B8nz8lN5.js.gz +0 -0
- codex/static_root/assets/VRadioGroup-BgwJ_b94.55f84f3429b9.js.br +0 -0
- codex/static_root/assets/VRadioGroup-BgwJ_b94.55f84f3429b9.js.gz +0 -0
- codex/static_root/assets/VRadioGroup-BgwJ_b94.js.br +0 -0
- codex/static_root/assets/VRadioGroup-BgwJ_b94.js.gz +0 -0
- codex/static_root/assets/VSelect-BoKpXxwe.a88f065dfe3b.js.br +0 -0
- codex/static_root/assets/VSelect-BoKpXxwe.a88f065dfe3b.js.gz +0 -0
- codex/static_root/assets/VSelect-BoKpXxwe.js.br +0 -0
- codex/static_root/assets/VSelect-BoKpXxwe.js.gz +0 -0
- codex/static_root/assets/VSelectionControl-BXJGg8No.0cb36d941d2a.js.br +0 -0
- codex/static_root/assets/VSelectionControl-BXJGg8No.0cb36d941d2a.js.gz +0 -0
- codex/static_root/assets/VSelectionControl-BXJGg8No.js.br +0 -0
- codex/static_root/assets/VSelectionControl-BXJGg8No.js.gz +0 -0
- codex/static_root/assets/VSlideGroup-C2TL5E34.775adeb5a973.js.br +0 -0
- codex/static_root/assets/VSlideGroup-C2TL5E34.775adeb5a973.js.gz +0 -0
- codex/static_root/assets/VSlideGroup-C2TL5E34.js.br +0 -0
- codex/static_root/assets/VSlideGroup-C2TL5E34.js.gz +0 -0
- codex/static_root/assets/VTable-C0FptljX.e4840b635c6e.js.br +0 -0
- codex/static_root/assets/VTable-C0FptljX.e4840b635c6e.js.gz +0 -0
- codex/static_root/assets/VTable-C0FptljX.js.br +0 -0
- codex/static_root/assets/VTable-C0FptljX.js.gz +0 -0
- codex/static_root/assets/VTextField-Aw8nKhY6.428732ac22d7.js.br +0 -0
- codex/static_root/assets/VTextField-Aw8nKhY6.428732ac22d7.js.gz +0 -0
- codex/static_root/assets/VTextField-Aw8nKhY6.js.br +0 -0
- codex/static_root/assets/VTextField-Aw8nKhY6.js.gz +0 -0
- codex/static_root/assets/VWindowItem-D9j_u9MX.828acf3dee55.js.br +0 -0
- codex/static_root/assets/VWindowItem-D9j_u9MX.828acf3dee55.js.gz +0 -0
- codex/static_root/assets/VWindowItem-D9j_u9MX.js.br +0 -0
- codex/static_root/assets/VWindowItem-D9j_u9MX.js.gz +0 -0
- codex/static_root/assets/admin-drawer-panel-Dmn4wEY3.af7e8490f0e3.js.br +0 -0
- codex/static_root/assets/admin-drawer-panel-Dmn4wEY3.js.br +0 -0
- codex/static_root/assets/admin-jf7zR2p_.4741813376d2.js +0 -1
- codex/static_root/assets/admin-jf7zR2p_.4741813376d2.js.br +0 -0
- codex/static_root/assets/admin-jf7zR2p_.4741813376d2.js.gz +0 -0
- codex/static_root/assets/admin-jf7zR2p_.js +0 -1
- codex/static_root/assets/admin-jf7zR2p_.js.br +0 -0
- codex/static_root/assets/admin-jf7zR2p_.js.gz +0 -0
- codex/static_root/assets/browser-BKZuypzF.86e5333bd7d6.js +0 -1
- codex/static_root/assets/browser-BKZuypzF.86e5333bd7d6.js.br +0 -0
- codex/static_root/assets/browser-BKZuypzF.86e5333bd7d6.js.gz +0 -0
- codex/static_root/assets/browser-BKZuypzF.js +0 -1
- codex/static_root/assets/browser-BKZuypzF.js.br +0 -0
- codex/static_root/assets/browser-BKZuypzF.js.gz +0 -0
- codex/static_root/assets/browser-D7xci5SY.css +0 -1
- codex/static_root/assets/browser-D7xci5SY.css.br +0 -0
- codex/static_root/assets/browser-D7xci5SY.css.gz +0 -0
- codex/static_root/assets/browser-D7xci5SY.fa305e14005c.css +0 -1
- codex/static_root/assets/browser-D7xci5SY.fa305e14005c.css.br +0 -0
- codex/static_root/assets/browser-D7xci5SY.fa305e14005c.css.gz +0 -0
- codex/static_root/assets/change-password-dialog-Cc1e755p.b29d200537bf.js.br +0 -0
- codex/static_root/assets/change-password-dialog-Cc1e755p.b29d200537bf.js.gz +0 -0
- codex/static_root/assets/change-password-dialog-Cc1e755p.js.br +0 -0
- codex/static_root/assets/change-password-dialog-Cc1e755p.js.gz +0 -0
- codex/static_root/assets/confirm-dialog-Cyr7HAAz.8ab1d8b6241a.js.br +0 -0
- codex/static_root/assets/confirm-dialog-Cyr7HAAz.8ab1d8b6241a.js.gz +0 -0
- codex/static_root/assets/confirm-dialog-Cyr7HAAz.js.br +0 -0
- codex/static_root/assets/confirm-dialog-Cyr7HAAz.js.gz +0 -0
- codex/static_root/assets/datetime-column-Cqi99Ze-.49d0ce340183.js.br +0 -0
- codex/static_root/assets/datetime-column-Cqi99Ze-.49d0ce340183.js.gz +0 -0
- codex/static_root/assets/datetime-column-Cqi99Ze-.js.br +0 -0
- codex/static_root/assets/datetime-column-Cqi99Ze-.js.gz +0 -0
- codex/static_root/assets/filter-CuocBoS2.885d1b8d44cc.js.br +0 -0
- codex/static_root/assets/filter-CuocBoS2.885d1b8d44cc.js.gz +0 -0
- codex/static_root/assets/filter-CuocBoS2.js.br +0 -0
- codex/static_root/assets/filter-CuocBoS2.js.gz +0 -0
- codex/static_root/assets/flag-tab-B5dRCBAt.e858f7ec9f55.js.br +0 -0
- codex/static_root/assets/flag-tab-B5dRCBAt.e858f7ec9f55.js.gz +0 -0
- codex/static_root/assets/flag-tab-B5dRCBAt.js.br +0 -0
- codex/static_root/assets/flag-tab-B5dRCBAt.js.gz +0 -0
- codex/static_root/assets/group-tab-_nT2o04v.c06032b254dc.js.br +0 -0
- codex/static_root/assets/group-tab-_nT2o04v.c06032b254dc.js.gz +0 -0
- codex/static_root/assets/group-tab-_nT2o04v.js.br +0 -0
- codex/static_root/assets/group-tab-_nT2o04v.js.gz +0 -0
- codex/static_root/assets/http-error-CXo9qLiW.d5a337f399c9.js.br +0 -0
- codex/static_root/assets/http-error-CXo9qLiW.d5a337f399c9.js.gz +0 -0
- codex/static_root/assets/http-error-CXo9qLiW.js.br +0 -0
- codex/static_root/assets/http-error-CXo9qLiW.js.gz +0 -0
- codex/static_root/assets/library-tab-lz5QMD4i.2f04b226ebe8.js.br +0 -0
- codex/static_root/assets/library-tab-lz5QMD4i.2f04b226ebe8.js.gz +0 -0
- codex/static_root/assets/library-tab-lz5QMD4i.js.br +0 -0
- codex/static_root/assets/library-tab-lz5QMD4i.js.gz +0 -0
- codex/static_root/assets/main-17i0EBCp.7093c3f755f1.js +0 -32
- codex/static_root/assets/main-17i0EBCp.7093c3f755f1.js.br +0 -0
- codex/static_root/assets/main-17i0EBCp.7093c3f755f1.js.gz +0 -0
- codex/static_root/assets/main-17i0EBCp.js +0 -32
- codex/static_root/assets/main-17i0EBCp.js.br +0 -0
- codex/static_root/assets/main-17i0EBCp.js.gz +0 -0
- codex/static_root/assets/pagination-toolbar-BBvsIXTd.ad891da6617a.js +0 -1
- codex/static_root/assets/pagination-toolbar-BBvsIXTd.ad891da6617a.js.br +0 -0
- codex/static_root/assets/pagination-toolbar-BBvsIXTd.ad891da6617a.js.gz +0 -0
- codex/static_root/assets/pagination-toolbar-BBvsIXTd.js +0 -1
- codex/static_root/assets/pagination-toolbar-BBvsIXTd.js.br +0 -0
- codex/static_root/assets/pagination-toolbar-BBvsIXTd.js.gz +0 -0
- codex/static_root/assets/pagination-toolbar-B_zL7BQQ.css +0 -1
- codex/static_root/assets/pagination-toolbar-B_zL7BQQ.css.br +0 -0
- codex/static_root/assets/pagination-toolbar-B_zL7BQQ.css.gz +0 -0
- codex/static_root/assets/pagination-toolbar-B_zL7BQQ.d1311bd41edc.css +0 -1
- codex/static_root/assets/pagination-toolbar-B_zL7BQQ.d1311bd41edc.css.br +0 -0
- codex/static_root/assets/pagination-toolbar-B_zL7BQQ.d1311bd41edc.css.gz +0 -0
- codex/static_root/assets/pdf-doc-BpZdmj2g.93e86d9c7927.js.br +0 -0
- codex/static_root/assets/pdf-doc-BpZdmj2g.93e86d9c7927.js.gz +0 -0
- codex/static_root/assets/pdf-doc-BpZdmj2g.js.br +0 -0
- codex/static_root/assets/pdf-doc-BpZdmj2g.js.gz +0 -0
- codex/static_root/assets/reader-CRJUR2qj.55d626f0f9fa.js.br +0 -0
- codex/static_root/assets/reader-CRJUR2qj.55d626f0f9fa.js.gz +0 -0
- codex/static_root/assets/reader-CRJUR2qj.js.br +0 -0
- codex/static_root/assets/reader-CRJUR2qj.js.gz +0 -0
- codex/static_root/assets/relation-chips-NgDnInw_.3b5ba16f68f0.js.br +0 -0
- codex/static_root/assets/relation-chips-NgDnInw_.3b5ba16f68f0.js.gz +0 -0
- codex/static_root/assets/relation-chips-NgDnInw_.js.br +0 -0
- codex/static_root/assets/relation-chips-NgDnInw_.js.gz +0 -0
- codex/static_root/assets/settings-drawer-BaQT27kc.e43fc1527b66.js.br +0 -0
- codex/static_root/assets/settings-drawer-BaQT27kc.e43fc1527b66.js.gz +0 -0
- codex/static_root/assets/settings-drawer-BaQT27kc.js.br +0 -0
- codex/static_root/assets/settings-drawer-BaQT27kc.js.gz +0 -0
- codex/static_root/assets/stats-tab-DoHb54IU.30d7deea7b9f.js.br +0 -0
- codex/static_root/assets/stats-tab-DoHb54IU.30d7deea7b9f.js.gz +0 -0
- codex/static_root/assets/stats-tab-DoHb54IU.js.br +0 -0
- codex/static_root/assets/stats-tab-DoHb54IU.js.gz +0 -0
- codex/static_root/assets/task-tab-B88ucu1U.4f240e3d82c4.js.br +0 -0
- codex/static_root/assets/task-tab-B88ucu1U.4f240e3d82c4.js.gz +0 -0
- codex/static_root/assets/task-tab-B88ucu1U.js.br +0 -0
- codex/static_root/assets/task-tab-B88ucu1U.js.gz +0 -0
- codex/static_root/assets/to-case-B7MjLIw-.08fc8412de69.js +0 -1
- codex/static_root/assets/to-case-B7MjLIw-.08fc8412de69.js.br +0 -0
- codex/static_root/assets/to-case-B7MjLIw-.js +0 -1
- codex/static_root/assets/to-case-B7MjLIw-.js.br +0 -0
- codex/static_root/assets/unauthorized-AnKtlgGy.62ee74d4373c.js.br +0 -0
- codex/static_root/assets/unauthorized-AnKtlgGy.62ee74d4373c.js.gz +0 -0
- codex/static_root/assets/unauthorized-AnKtlgGy.js.br +0 -0
- codex/static_root/assets/unauthorized-AnKtlgGy.js.gz +0 -0
- codex/static_root/assets/user-tab-BxtZ2u7W.161cc8f0dcce.js.br +0 -0
- codex/static_root/assets/user-tab-BxtZ2u7W.161cc8f0dcce.js.gz +0 -0
- codex/static_root/assets/user-tab-BxtZ2u7W.js.br +0 -0
- codex/static_root/assets/user-tab-BxtZ2u7W.js.gz +0 -0
- codex/static_root/manifest.3851c028b0cb.json.br +0 -0
- codex/static_root/manifest.3851c028b0cb.json.gz +0 -0
- {codex-1.6.0a11.dist-info → codex-1.6.0a12.dist-info}/LICENSE +0 -0
- {codex-1.6.0a11.dist-info → codex-1.6.0a12.dist-info}/WHEEL +0 -0
- {codex-1.6.0a11.dist-info → codex-1.6.0a12.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/relation-chips-Bsc-gUxE.css": "assets/relation-chips-Bsc-gUxE.98e65384c3c9.css", "assets/pagination-toolbar-BBvsIXTd.js": "assets/pagination-toolbar-BBvsIXTd.ad891da6617a.js", "assets/group-tab-CBKuS3Iv.css": "assets/group-tab-CBKuS3Iv.7e4746634782.css", "assets/http-error-DKulXuTl.css": "assets/http-error-DKulXuTl.95e42988d5d5.css", "assets/group-tab-_nT2o04v.js": "assets/group-tab-_nT2o04v.c06032b254dc.js", "assets/VSelect-ARDhJiQK.css": "assets/VSelect-ARDhJiQK.372c098fb475.css", "assets/flag-tab-BNwbLfrN.css": "assets/flag-tab-BNwbLfrN.b755a99fff7e.css", "assets/library-tab-lz5QMD4i.js": "assets/library-tab-lz5QMD4i.2f04b226ebe8.js", "assets/VSelectionControl-BFq--28I.css": "assets/VSelectionControl-BFq--28I.9687c77461fc.css", "assets/datetime-column-Cqi99Ze-.js": "assets/datetime-column-Cqi99Ze-.49d0ce340183.js", "assets/VExpansionPanels-B8nz8lN5.js": "assets/VExpansionPanels-B8nz8lN5.56e5adec4f62.js", "assets/pdf-doc-CMzaSV_K.css": "assets/pdf-doc-CMzaSV_K.8cd4b3e65f9a.css", "assets/VSlideGroup-C2TL5E34.js": "assets/VSlideGroup-C2TL5E34.775adeb5a973.js", "assets/materialdesignicons-webfont-PXm3-2wK.woff": "assets/materialdesignicons-webfont-PXm3-2wK.026b7ac9c43c.woff", "assets/unauthorized-AnKtlgGy.js": "assets/unauthorized-AnKtlgGy.62ee74d4373c.js", "assets/VSlideGroup-Dk_1upHt.css": "assets/VSlideGroup-Dk_1upHt.2c836070ec75.css", "assets/admin-drawer-panel-mne3FIj6.css": "assets/admin-drawer-panel-mne3FIj6.561b3f75fe65.css", "assets/VTable-DflzroDq.css": "assets/VTable-DflzroDq.160504d82195.css", "assets/settings-drawer-nZ9HvKSZ.css": "assets/settings-drawer-nZ9HvKSZ.01744e131806.css", "assets/stats-tab-DoHb54IU.js": "assets/stats-tab-DoHb54IU.30d7deea7b9f.js", "assets/VCombobox-BASCOy0n.js": "assets/VCombobox-BASCOy0n.7801caa5e192.js", "assets/http-error-CXo9qLiW.js": "assets/http-error-CXo9qLiW.d5a337f399c9.js", "assets/VCheckboxBtn-DVq5lDK4.js": "assets/VCheckboxBtn-DVq5lDK4.5e6464c8d80a.js", "assets/VDialog-lQ13FnRR.css": "assets/VDialog-lQ13FnRR.1c801ad756b2.css", "assets/relation-chips-NgDnInw_.js": "assets/relation-chips-NgDnInw_.3b5ba16f68f0.js", "assets/main-Ztp855PW.css": "assets/main-Ztp855PW.d46d718fac45.css", "assets/VRadioGroup-i2qP9Wu9.css": "assets/VRadioGroup-i2qP9Wu9.8e3741381961.css", "assets/task-tab-B88ucu1U.js": "assets/task-tab-B88ucu1U.4f240e3d82c4.js", "assets/browser-BKZuypzF.js": "assets/browser-BKZuypzF.86e5333bd7d6.js", "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/VTextField-Aw8nKhY6.js": "assets/VTextField-Aw8nKhY6.428732ac22d7.js", "assets/VWindowItem-D9j_u9MX.js": "assets/VWindowItem-D9j_u9MX.828acf3dee55.js", "assets/VCheckbox-BwDyxhU7.js": "assets/VCheckbox-BwDyxhU7.831b00df198a.js", "assets/settings-drawer-BaQT27kc.js": "assets/settings-drawer-BaQT27kc.e43fc1527b66.js", "assets/library-tab-BN0SfPcH.css": "assets/library-tab-BN0SfPcH.913e236f625e.css", "assets/confirm-dialog-BmhedLCx.css": "assets/confirm-dialog-BmhedLCx.7c2103d319d4.css", "assets/materialdesignicons-webfont-B7mPwVP_.ttf": "assets/materialdesignicons-webfont-B7mPwVP_.6e435534bd35.ttf", "assets/user-tab-BxtZ2u7W.js": "assets/user-tab-BxtZ2u7W.161cc8f0dcce.js", "assets/admin-jf7zR2p_.js": "assets/admin-jf7zR2p_.4741813376d2.js", "assets/change-password-dialog-Cc1e755p.js": "assets/change-password-dialog-Cc1e755p.b29d200537bf.js", "assets/VSelect-BoKpXxwe.js": "assets/VSelect-BoKpXxwe.a88f065dfe3b.js", "assets/VCombobox-BksEr4D_.css": "assets/VCombobox-BksEr4D_.73429bb75f42.css", "assets/pdf-doc-BpZdmj2g.js": "assets/pdf-doc-BpZdmj2g.93e86d9c7927.js", "assets/VRadioGroup-BgwJ_b94.js": "assets/VRadioGroup-BgwJ_b94.55f84f3429b9.js", "assets/admin-drawer-panel-Dmn4wEY3.js": "assets/admin-drawer-panel-Dmn4wEY3.af7e8490f0e3.js", "assets/flag-tab-B5dRCBAt.js": "assets/flag-tab-B5dRCBAt.e858f7ec9f55.js", "assets/browser-D7xci5SY.css": "assets/browser-D7xci5SY.fa305e14005c.css", "assets/main-17i0EBCp.js": "assets/main-17i0EBCp.7093c3f755f1.js", "assets/admin-B8Bp2Uih.css": "assets/admin-B8Bp2Uih.82c98714bcf1.css", "assets/reader-CRJUR2qj.js": "assets/reader-CRJUR2qj.55d626f0f9fa.js", "assets/task-tab-1XiWn9xP.css": "assets/task-tab-1XiWn9xP.06cb8e1b794d.css", "assets/stats-tab-B4yKuY0c.css": "assets/stats-tab-B4yKuY0c.a5728396494b.css", "assets/reader-CqXFa_gE.css": "assets/reader-CqXFa_gE.78267e9de0c2.css", "assets/confirm-dialog-Cyr7HAAz.js": "assets/confirm-dialog-Cyr7HAAz.8ab1d8b6241a.js", "assets/to-case-B7MjLIw-.js": "assets/to-case-B7MjLIw-.08fc8412de69.js", "assets/datetime-column-DeCthByU.css": "assets/datetime-column-DeCthByU.1f3bf499e063.css", "assets/materialdesignicons-webfont-CSr8KVlo.eot": "assets/materialdesignicons-webfont-CSr8KVlo.8ced95a05e3c.eot", "assets/VExpansionPanels-DsEXVcCv.css": "assets/VExpansionPanels-DsEXVcCv.20b475255e66.css", "assets/unauthorized-CibJYD8o.css": "assets/unauthorized-CibJYD8o.4c2de98c2b53.css", "assets/VCheckbox-CMKdyl0R.css": "assets/VCheckbox-CMKdyl0R.016ed8d222c4.css", "assets/VTable-C0FptljX.js": "assets/VTable-C0FptljX.e4840b635c6e.js", "assets/VTextField-BssVoDhB.css": "assets/VTextField-BssVoDhB.4cc388b4aa3c.css", "assets/pagination-toolbar-B_zL7BQQ.css": "assets/pagination-toolbar-B_zL7BQQ.d1311bd41edc.css", "assets/VDialog-DnbL_v_u.js": "assets/VDialog-DnbL_v_u.0bd289bda8e6.js", "assets/materialdesignicons-webfont-Dp5v-WZN.woff2": "assets/materialdesignicons-webfont-Dp5v-WZN.1d7bcee1b302.woff2", "assets/filter-CuocBoS2.js": "assets/filter-CuocBoS2.885d1b8d44cc.js", "assets/VSelectionControl-BXJGg8No.js": "assets/VSelectionControl-BXJGg8No.0cb36d941d2a.js", "robots.txt": "robots.b6216d61c03e.txt", "manifest.json": "manifest.3851c028b0cb.json"}, "version": "1.1", "hash": "5a212e3ae156"}
|
|
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/relation-chips-Bsc-gUxE.css": "assets/relation-chips-Bsc-gUxE.98e65384c3c9.css", "assets/change-password-dialog-BCYw5K7E.js": "assets/change-password-dialog-BCYw5K7E.a8bae0450f20.js", "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/pdf-doc-CkV-xfvG.js": "assets/pdf-doc-CkV-xfvG.35c1a6a19a41.js", "assets/flag-tab-BNwbLfrN.css": "assets/flag-tab-BNwbLfrN.b755a99fff7e.css", "assets/VSelectionControl-BFq--28I.css": "assets/VSelectionControl-BFq--28I.9687c77461fc.css", "assets/library-tab-C5trLvkq.js": "assets/library-tab-C5trLvkq.35c7a1b79c71.js", "assets/http-error-DBQycf8i.js": "assets/http-error-DBQycf8i.561cde2b4598.js", "assets/user-tab-pzFjrggM.js": "assets/user-tab-pzFjrggM.97c02ebee729.js", "assets/VDialog-D6HUFV6a.js": "assets/VDialog-D6HUFV6a.ac71da510b3f.js", "assets/pdf-doc-CMzaSV_K.css": "assets/pdf-doc-CMzaSV_K.8cd4b3e65f9a.css", "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/admin-drawer-panel-mne3FIj6.css": "assets/admin-drawer-panel-mne3FIj6.561b3f75fe65.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/confirm-dialog-c9JOSGSy.js": "assets/confirm-dialog-c9JOSGSy.3c5788f95f47.js", "assets/main-Ztp855PW.css": "assets/main-Ztp855PW.d46d718fac45.css", "assets/VRadioGroup-i2qP9Wu9.css": "assets/VRadioGroup-i2qP9Wu9.8e3741381961.css", "assets/datetime-column-D-6LPKdI.js": "assets/datetime-column-D-6LPKdI.d46bbd8134df.js", "assets/change-password-dialog-0u6IJA87.css": "assets/change-password-dialog-0u6IJA87.5f9a9aa573b7.css", "assets/task-tab-B8sYV6Ia.js": "assets/task-tab-B8sYV6Ia.90a8deec0214.js", "assets/copy-to-clipboard-DoUvDJVx.js": "assets/copy-to-clipboard-DoUvDJVx.bec27f144aca.js", "assets/VWindowItem-ByIod57Y.css": "assets/VWindowItem-ByIod57Y.f7fb19752bf3.css", "assets/VSelect-ou2Q9UaN.js": "assets/VSelect-ou2Q9UaN.8ddd219784e1.js", "assets/admin-D5JDmLDy.js": "assets/admin-D5JDmLDy.e4df3dd3a3fe.js", "assets/browser-VhFkImB_.js": "assets/browser-VhFkImB_.9c3b2c746614.js", "assets/VSlideGroup-C3XgVg2T.js": "assets/VSlideGroup-C3XgVg2T.d2b0ee4f596c.js", "assets/flag-tab-IniE-dLy.js": "assets/flag-tab-IniE-dLy.a02733e359aa.js", "assets/VCombobox-wIqJY8no.js": "assets/VCombobox-wIqJY8no.3547ff73e91e.js", "assets/VTextField-HAAxrpNi.js": "assets/VTextField-HAAxrpNi.6f6dcb50079a.js", "assets/pagination-toolbar-DEgDOzzp.js": "assets/pagination-toolbar-DEgDOzzp.71aa03f525e4.js", "assets/library-tab-BN0SfPcH.css": "assets/library-tab-BN0SfPcH.913e236f625e.css", "assets/browser-B1-dPld9.css": "assets/browser-B1-dPld9.0b3fa4fdbe22.css", "assets/stats-tab-CBz_jhmH.js": "assets/stats-tab-CBz_jhmH.9bdc41225f06.js", "assets/confirm-dialog-BmhedLCx.css": "assets/confirm-dialog-BmhedLCx.7c2103d319d4.css", "assets/materialdesignicons-webfont-B7mPwVP_.ttf": "assets/materialdesignicons-webfont-B7mPwVP_.6e435534bd35.ttf", "assets/VCombobox-BksEr4D_.css": "assets/VCombobox-BksEr4D_.73429bb75f42.css", "assets/VTable-CrIiBr9q.js": "assets/VTable-CrIiBr9q.b4669247af45.js", "assets/admin-B8Bp2Uih.css": "assets/admin-B8Bp2Uih.82c98714bcf1.css", "assets/VCheckbox-B3vCf1Vu.js": "assets/VCheckbox-B3vCf1Vu.e1991f98ab6c.js", "assets/task-tab-1XiWn9xP.css": "assets/task-tab-1XiWn9xP.06cb8e1b794d.css", "assets/stats-tab-B4yKuY0c.css": "assets/stats-tab-B4yKuY0c.a5728396494b.css", "assets/reader-CqXFa_gE.css": "assets/reader-CqXFa_gE.78267e9de0c2.css", "assets/VExpansionPanels-BUJaYmzY.js": "assets/VExpansionPanels-BUJaYmzY.44e8a00a2ebe.js", "assets/datetime-column-DeCthByU.css": "assets/datetime-column-DeCthByU.1f3bf499e063.css", "assets/relation-chips-2vga5ApB.js": "assets/relation-chips-2vga5ApB.d94c344f909b.js", "assets/materialdesignicons-webfont-CSr8KVlo.eot": "assets/materialdesignicons-webfont-CSr8KVlo.8ced95a05e3c.eot", "assets/main-x0Pcl23A.js": "assets/main-x0Pcl23A.364bfe447c9c.js", "assets/group-tab-RPa8XC0J.js": "assets/group-tab-RPa8XC0J.3d483919ea92.js", "assets/VRadioGroup-CayclHra.js": "assets/VRadioGroup-CayclHra.0a5b1c9a7b71.js", "assets/VCheckboxBtn-Cj6bUYmw.js": "assets/VCheckboxBtn-Cj6bUYmw.196cc43ca1c8.js", "assets/VSelectionControl-BOKIwNZb.js": "assets/VSelectionControl-BOKIwNZb.16e0cdde978c.js", "assets/admin-drawer-panel-BF-h3Wm0.js": "assets/admin-drawer-panel-BF-h3Wm0.1f372db8d08f.js", "assets/VWindowItem-aal6-Uv4.js": "assets/VWindowItem-aal6-Uv4.d178e2af20a7.js", "assets/VExpansionPanels-DsEXVcCv.css": "assets/VExpansionPanels-DsEXVcCv.20b475255e66.css", "assets/pagination-toolbar-BLUoVz2y.css": "assets/pagination-toolbar-BLUoVz2y.50051431acf1.css", "assets/reader-ClcgSG93.js": "assets/reader-ClcgSG93.6afe950e70ac.js", "assets/unauthorized-D5-FvA2_.js": "assets/unauthorized-D5-FvA2_.61b1cd239b47.js", "assets/unauthorized-CibJYD8o.css": "assets/unauthorized-CibJYD8o.4c2de98c2b53.css", "assets/VCheckbox-CMKdyl0R.css": "assets/VCheckbox-CMKdyl0R.016ed8d222c4.css", "assets/settings-drawer-BOTI_tHr.js": "assets/settings-drawer-BOTI_tHr.03748f801e08.js", "assets/VTextField-BssVoDhB.css": "assets/VTextField-BssVoDhB.4cc388b4aa3c.css", "assets/filter-BOnVoHTU.js": "assets/filter-BOnVoHTU.93c3d0d0d3f6.js", "assets/to-case-CnnzURtN.js": "assets/to-case-CnnzURtN.f0e4b42ddb89.js", "assets/materialdesignicons-webfont-Dp5v-WZN.woff2": "assets/materialdesignicons-webfont-Dp5v-WZN.1d7bcee1b302.woff2", "robots.txt": "robots.b6216d61c03e.txt", "manifest.json": "manifest.a18726680d5f.json"}, "version": "1.1", "hash": "8941f2cb0fed"}
|
codex/views/browser/cover.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"""Comic cover thumbnail view."""
|
|
2
2
|
|
|
3
3
|
from django.db.models.query import Q
|
|
4
|
-
from django.http import
|
|
4
|
+
from django.http.response import StreamingHttpResponse
|
|
5
5
|
from drf_spectacular.types import OpenApiTypes
|
|
6
6
|
from drf_spectacular.utils import extend_schema
|
|
7
7
|
from rest_framework.renderers import BaseRenderer
|
|
@@ -21,6 +21,7 @@ from codex.views.const import (
|
|
|
21
21
|
MISSING_COVER_NAME_MAP,
|
|
22
22
|
STATIC_IMG_PATH,
|
|
23
23
|
)
|
|
24
|
+
from codex.views.util import chunker
|
|
24
25
|
|
|
25
26
|
LOG = get_logger(__name__)
|
|
26
27
|
|
|
@@ -51,17 +52,16 @@ class CoverView(BrowserAnnotationsView):
|
|
|
51
52
|
|
|
52
53
|
def get_group_filter(self, group=None, pks=None, page_mtime=False):
|
|
53
54
|
"""Get group filter for First Cover View."""
|
|
54
|
-
if self.params.get("dynamic_covers"):
|
|
55
|
+
if self.params.get("dynamic_covers") or self.model == Volume:
|
|
55
56
|
return super().get_group_filter(group=group, pks=pks, page_mtime=page_mtime)
|
|
56
57
|
|
|
57
58
|
# First cover group filter relies on sort names to look outside the browser supplied pks
|
|
58
59
|
# For multi_groups not in the browser query.
|
|
59
60
|
pks = self.kwargs["pks"]
|
|
60
|
-
name_rel = "name" if self.model == Volume else "sort_name"
|
|
61
61
|
qs = self.model.objects.filter(pk__in=pks) # type: ignore
|
|
62
|
-
sort_names = qs.values_list(
|
|
62
|
+
sort_names = qs.values_list("sort_name", flat=True).distinct()
|
|
63
63
|
model_rel = GROUP_RELATION[self.model_group]
|
|
64
|
-
group_filter = {f"{model_rel}
|
|
64
|
+
group_filter = {f"{model_rel}__sort_name__in": sort_names}
|
|
65
65
|
|
|
66
66
|
parent = self.params["parent"]
|
|
67
67
|
parent_pks = parent.get("pks", ())
|
|
@@ -133,24 +133,21 @@ class CoverView(BrowserAnnotationsView):
|
|
|
133
133
|
return cover_path, content_type
|
|
134
134
|
|
|
135
135
|
def _get_cover_data(self, pk, custom):
|
|
136
|
-
|
|
136
|
+
thumb_buffer = None
|
|
137
137
|
content_type = "image/webp"
|
|
138
138
|
|
|
139
139
|
cover_path = CoverPathMixin.get_cover_path(pk, custom)
|
|
140
140
|
if not cover_path.exists():
|
|
141
|
-
|
|
141
|
+
thumb_buffer = CoverCreateMixin.create_cover_from_path(
|
|
142
142
|
pk, cover_path, LOG, LIBRARIAN_QUEUE, custom
|
|
143
143
|
)
|
|
144
|
-
if not
|
|
144
|
+
if not thumb_buffer:
|
|
145
145
|
cover_path, content_type = self._get_missing_cover_path()
|
|
146
146
|
elif cover_path.stat().st_size == 0:
|
|
147
147
|
cover_path, content_type = self._get_missing_cover_path()
|
|
148
148
|
|
|
149
|
-
if
|
|
150
|
-
|
|
151
|
-
with cover_path.open("rb") as f:
|
|
152
|
-
thumb_image_data = f.read()
|
|
153
|
-
return thumb_image_data, content_type
|
|
149
|
+
cover_file = thumb_buffer if thumb_buffer else cover_path.open("rb")
|
|
150
|
+
return cover_file, content_type
|
|
154
151
|
|
|
155
152
|
@extend_schema(
|
|
156
153
|
parameters=[BrowserAnnotationsView.input_serializer_class],
|
|
@@ -161,7 +158,8 @@ class CoverView(BrowserAnnotationsView):
|
|
|
161
158
|
try:
|
|
162
159
|
self.init_request()
|
|
163
160
|
pk, custom = self._get_cover_pk()
|
|
164
|
-
|
|
165
|
-
|
|
161
|
+
cover_file, content_type = self._get_cover_data(pk, custom)
|
|
162
|
+
|
|
163
|
+
return StreamingHttpResponse(chunker(cover_file), content_type=content_type)
|
|
166
164
|
except Exception:
|
|
167
165
|
LOG.exception("get")
|
codex/views/browser/metadata.py
CHANGED
|
@@ -14,6 +14,7 @@ from codex.logger.logging import get_logger
|
|
|
14
14
|
from codex.models import AdminFlag, Comic
|
|
15
15
|
from codex.models.functions import JsonGroupArray
|
|
16
16
|
from codex.serializers.browser.metadata import PREFETCH_PREFIX, MetadataSerializer
|
|
17
|
+
from codex.serializers.browser.settings import BrowserFilterChoicesInputSerilalizer
|
|
17
18
|
from codex.views.browser.annotations import BrowserAnnotationsView
|
|
18
19
|
from codex.views.const import METADATA_GROUP_RELATION
|
|
19
20
|
|
|
@@ -62,6 +63,7 @@ class MetadataView(BrowserAnnotationsView):
|
|
|
62
63
|
"""Comic metadata."""
|
|
63
64
|
|
|
64
65
|
serializer_class = MetadataSerializer
|
|
66
|
+
input_serializer_class = BrowserFilterChoicesInputSerilalizer
|
|
65
67
|
TARGET = "metadata"
|
|
66
68
|
ADMIN_FLAG_VALUE_KEY_MAP = MappingProxyType(
|
|
67
69
|
{
|
|
@@ -177,8 +179,7 @@ class MetadataView(BrowserAnnotationsView):
|
|
|
177
179
|
|
|
178
180
|
qs = model.objects.filter(**group_filter)
|
|
179
181
|
qs = qs.only("name").distinct()
|
|
180
|
-
|
|
181
|
-
qs = qs.group_by(group_by)
|
|
182
|
+
qs = qs.group_by("name")
|
|
182
183
|
qs = qs.annotate(ids=JsonGroupArray("id", distinct=True))
|
|
183
184
|
qs = qs.values("ids", "name")
|
|
184
185
|
groups[field_name] = qs
|
|
@@ -238,8 +239,7 @@ class MetadataView(BrowserAnnotationsView):
|
|
|
238
239
|
if self.model and not self.is_model_comic:
|
|
239
240
|
# move the name of the group to the correct field
|
|
240
241
|
field = self.model.__name__.lower() + "_list"
|
|
241
|
-
|
|
242
|
-
group_list = [group_obj]
|
|
242
|
+
group_list = self.model.objects.filter(pk__in=obj.ids).values("name")
|
|
243
243
|
setattr(obj, field, group_list)
|
|
244
244
|
obj.name = None
|
|
245
245
|
|
|
@@ -322,7 +322,7 @@ class MetadataView(BrowserAnnotationsView):
|
|
|
322
322
|
m2m_intersections = self._query_m2m_intersections(filtered_qs)
|
|
323
323
|
return self._copy_annotations_into_comic_fields(obj, groups, m2m_intersections) # type: ignore
|
|
324
324
|
|
|
325
|
-
@extend_schema(parameters=[
|
|
325
|
+
@extend_schema(parameters=[input_serializer_class])
|
|
326
326
|
def get(self, *_args, **_kwargs):
|
|
327
327
|
"""Get metadata for a filtered browse group."""
|
|
328
328
|
# Init
|
codex/views/reader/page.py
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"""Views for reading comic books."""
|
|
2
2
|
|
|
3
|
+
from io import BytesIO
|
|
4
|
+
|
|
3
5
|
from comicbox.box import Comicbox
|
|
4
|
-
from django.http import
|
|
6
|
+
from django.http.response import StreamingHttpResponse
|
|
5
7
|
from drf_spectacular.types import OpenApiTypes
|
|
6
8
|
from drf_spectacular.utils import OpenApiParameter, extend_schema
|
|
7
9
|
from rest_framework.exceptions import NotFound
|
|
@@ -11,9 +13,13 @@ from codex.logger.logging import get_logger
|
|
|
11
13
|
from codex.models import Comic
|
|
12
14
|
from codex.views.bookmark import BookmarkBaseView
|
|
13
15
|
from codex.views.const import FALSY
|
|
16
|
+
from codex.views.util import chunker
|
|
14
17
|
|
|
15
18
|
LOG = get_logger(__name__)
|
|
16
19
|
_PDF_MIME_TYPE = "application/pdf"
|
|
20
|
+
# Most pages seem to be 2.5 Mb
|
|
21
|
+
# largest pages I've seen were 9 Mb
|
|
22
|
+
_PAGE_CHUNK_SIZE = (1024**2) * 3 # 3 Mb
|
|
17
23
|
|
|
18
24
|
|
|
19
25
|
class IgnoreClientContentNegotiation(BaseContentNegotiation):
|
|
@@ -66,8 +72,12 @@ class ReaderPageView(BookmarkBaseView):
|
|
|
66
72
|
content_type = _PDF_MIME_TYPE
|
|
67
73
|
else:
|
|
68
74
|
content_type = self.content_type
|
|
75
|
+
|
|
69
76
|
with Comicbox(comic.path) as cb:
|
|
70
77
|
page_image = cb.get_page_by_index(page, to_pixmap=to_pixmap)
|
|
78
|
+
if not page_image:
|
|
79
|
+
page_image = b""
|
|
80
|
+
|
|
71
81
|
return page_image, content_type
|
|
72
82
|
|
|
73
83
|
@extend_schema(
|
|
@@ -98,4 +108,5 @@ class ReaderPageView(BookmarkBaseView):
|
|
|
98
108
|
LOG.warning(exc)
|
|
99
109
|
raise NotFound(detail="comic page not found") from exc
|
|
100
110
|
else:
|
|
101
|
-
|
|
111
|
+
page_chunker = chunker(BytesIO(page_image), _PAGE_CHUNK_SIZE)
|
|
112
|
+
return StreamingHttpResponse(page_chunker, content_type=content_type)
|
codex/views/util.py
CHANGED
|
@@ -10,6 +10,9 @@ from urllib.parse import unquote_plus
|
|
|
10
10
|
from djangorestframework_camel_case.settings import api_settings
|
|
11
11
|
from djangorestframework_camel_case.util import underscoreize
|
|
12
12
|
|
|
13
|
+
# Maximum cover size is around 24 Kb
|
|
14
|
+
DEFAULT_CHUNK_SIZE = 64 * 1024 # 64 Kb
|
|
15
|
+
|
|
13
16
|
|
|
14
17
|
@dataclass()
|
|
15
18
|
class Route(dict):
|
|
@@ -62,3 +65,13 @@ def pop_name(kwargs: Mapping):
|
|
|
62
65
|
kwargs = dict(kwargs)
|
|
63
66
|
kwargs.pop("name", None)
|
|
64
67
|
return kwargs
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
async def chunker(open_file, chunk_size=DEFAULT_CHUNK_SIZE):
|
|
71
|
+
"""Asynchronous iterator for serving files."""
|
|
72
|
+
while True:
|
|
73
|
+
chunk = open_file.read(chunk_size)
|
|
74
|
+
if not chunk:
|
|
75
|
+
open_file.close()
|
|
76
|
+
break
|
|
77
|
+
yield chunk
|