codex 1.8.16__py3-none-any.whl → 1.8.17__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.

Files changed (580) hide show
  1. codex/librarian/librariand.py +2 -0
  2. codex/librarian/scribe/importer/query/foreign_keys.py +1 -1
  3. codex/librarian/scribe/search/prepare.py +1 -1
  4. codex/librarian/threads.py +2 -0
  5. codex/librarian/watchdog/db_snapshot.py +1 -1
  6. codex/settings/__init__.py +10 -3
  7. codex/signals/os_signals.py +10 -5
  8. codex/startup/db.py +1 -3
  9. codex/static_root/assets/{VCheckbox-BY6G_rgf.269e45107a7a.js → VCheckbox-C85C3qG-.aaf01232a24e.js} +1 -1
  10. codex/static_root/assets/VCheckbox-C85C3qG-.aaf01232a24e.js.br +0 -0
  11. codex/static_root/assets/VCheckbox-C85C3qG-.aaf01232a24e.js.gz +0 -0
  12. codex/static_root/assets/{VCheckbox-BY6G_rgf.js → VCheckbox-C85C3qG-.js} +1 -1
  13. codex/static_root/assets/VCheckbox-C85C3qG-.js.br +0 -0
  14. codex/static_root/assets/VCheckbox-C85C3qG-.js.gz +0 -0
  15. codex/static_root/assets/{VCheckboxBtn-zhUZJChm.9761785b500b.js → VCheckboxBtn-BL2_20_y.e3dea72fc366.js} +1 -1
  16. codex/static_root/assets/VCheckboxBtn-BL2_20_y.e3dea72fc366.js.br +0 -0
  17. codex/static_root/assets/VCheckboxBtn-BL2_20_y.e3dea72fc366.js.gz +0 -0
  18. codex/static_root/assets/{VCheckboxBtn-zhUZJChm.js → VCheckboxBtn-BL2_20_y.js} +1 -1
  19. codex/static_root/assets/VCheckboxBtn-BL2_20_y.js.br +0 -0
  20. codex/static_root/assets/VCheckboxBtn-BL2_20_y.js.gz +0 -0
  21. codex/static_root/assets/VCombobox-D4B1V7pC.ee65a2bb85cd.js +1 -0
  22. codex/static_root/assets/VCombobox-D4B1V7pC.ee65a2bb85cd.js.br +0 -0
  23. codex/static_root/assets/VCombobox-D4B1V7pC.ee65a2bb85cd.js.gz +0 -0
  24. codex/static_root/assets/VCombobox-D4B1V7pC.js +1 -0
  25. codex/static_root/assets/VCombobox-D4B1V7pC.js.br +0 -0
  26. codex/static_root/assets/VCombobox-D4B1V7pC.js.gz +0 -0
  27. codex/static_root/assets/VDialog-CZkKUrky.ac0451670402.js +1 -0
  28. codex/static_root/assets/VDialog-CZkKUrky.ac0451670402.js.br +0 -0
  29. codex/static_root/assets/VDialog-CZkKUrky.ac0451670402.js.gz +0 -0
  30. codex/static_root/assets/VDialog-CZkKUrky.js +1 -0
  31. codex/static_root/assets/VDialog-CZkKUrky.js.br +0 -0
  32. codex/static_root/assets/VDialog-CZkKUrky.js.gz +0 -0
  33. codex/static_root/assets/{VDialog-BN4XvYQH.b7408d9d3262.css → VDialog-wubh7-W_.css} +1 -1
  34. codex/static_root/assets/VDialog-wubh7-W_.css.br +0 -0
  35. codex/static_root/assets/VDialog-wubh7-W_.css.gz +0 -0
  36. codex/static_root/assets/{VDialog-BN4XvYQH.css → VDialog-wubh7-W_.db3957bfe939.css} +1 -1
  37. codex/static_root/assets/VDialog-wubh7-W_.db3957bfe939.css.br +0 -0
  38. codex/static_root/assets/VDialog-wubh7-W_.db3957bfe939.css.gz +0 -0
  39. codex/static_root/assets/VDivider-BXArtxT-.e522dd8902c8.js +1 -0
  40. codex/static_root/assets/VDivider-BXArtxT-.e522dd8902c8.js.br +0 -0
  41. codex/static_root/assets/VDivider-BXArtxT-.e522dd8902c8.js.gz +0 -0
  42. codex/static_root/assets/VDivider-BXArtxT-.js +1 -0
  43. codex/static_root/assets/VDivider-BXArtxT-.js.br +0 -0
  44. codex/static_root/assets/VDivider-BXArtxT-.js.gz +0 -0
  45. codex/static_root/assets/VExpansionPanels-Dyw0hWW-.css +1 -0
  46. codex/static_root/assets/VExpansionPanels-Dyw0hWW-.css.br +0 -0
  47. codex/static_root/assets/VExpansionPanels-Dyw0hWW-.css.gz +0 -0
  48. codex/static_root/assets/VExpansionPanels-Dyw0hWW-.e3fa1db9f5b5.css +1 -0
  49. codex/static_root/assets/VExpansionPanels-Dyw0hWW-.e3fa1db9f5b5.css.br +0 -0
  50. codex/static_root/assets/VExpansionPanels-Dyw0hWW-.e3fa1db9f5b5.css.gz +0 -0
  51. codex/static_root/assets/{VExpansionPanels-B8bQXRWn.de33285def27.js → VExpansionPanels-Et85Xw04.1a332e39be39.js} +1 -1
  52. codex/static_root/assets/VExpansionPanels-Et85Xw04.1a332e39be39.js.br +0 -0
  53. codex/static_root/assets/VExpansionPanels-Et85Xw04.1a332e39be39.js.gz +0 -0
  54. codex/static_root/assets/{VExpansionPanels-B8bQXRWn.js → VExpansionPanels-Et85Xw04.js} +1 -1
  55. codex/static_root/assets/VExpansionPanels-Et85Xw04.js.br +0 -0
  56. codex/static_root/assets/VExpansionPanels-Et85Xw04.js.gz +0 -0
  57. codex/static_root/assets/{VForm-Dt0Uesri.5f3eb2e10d58.js → VForm-Bz_gI_Wh.1e32d0faee10.js} +1 -1
  58. codex/static_root/assets/VForm-Bz_gI_Wh.1e32d0faee10.js.br +0 -0
  59. codex/static_root/assets/VForm-Bz_gI_Wh.1e32d0faee10.js.gz +0 -0
  60. codex/static_root/assets/{VForm-Dt0Uesri.js → VForm-Bz_gI_Wh.js} +1 -1
  61. codex/static_root/assets/VForm-Bz_gI_Wh.js.br +0 -0
  62. codex/static_root/assets/VForm-Bz_gI_Wh.js.gz +0 -0
  63. codex/static_root/assets/{VRadioGroup-CU9nYUHk.a25611eb0aff.js → VRadioGroup-BNlf_ga1.739298534bda.js} +1 -1
  64. codex/static_root/assets/VRadioGroup-BNlf_ga1.739298534bda.js.br +0 -0
  65. codex/static_root/assets/VRadioGroup-BNlf_ga1.739298534bda.js.gz +0 -0
  66. codex/static_root/assets/{VRadioGroup-CU9nYUHk.js → VRadioGroup-BNlf_ga1.js} +1 -1
  67. codex/static_root/assets/VRadioGroup-BNlf_ga1.js.br +0 -0
  68. codex/static_root/assets/VRadioGroup-BNlf_ga1.js.gz +0 -0
  69. codex/static_root/assets/{VSelect-BvTTr4RP.be69766e6916.css → VSelect-Bp3PUbea.a69e7f3360ec.css} +1 -1
  70. codex/static_root/assets/VSelect-Bp3PUbea.a69e7f3360ec.css.br +0 -0
  71. codex/static_root/assets/{VSelect-BvTTr4RP.be69766e6916.css.gz → VSelect-Bp3PUbea.a69e7f3360ec.css.gz} +0 -0
  72. codex/static_root/assets/{VSelect-BvTTr4RP.css → VSelect-Bp3PUbea.css} +1 -1
  73. codex/static_root/assets/VSelect-Bp3PUbea.css.br +0 -0
  74. codex/static_root/assets/{VSelect-BvTTr4RP.css.gz → VSelect-Bp3PUbea.css.gz} +0 -0
  75. codex/static_root/assets/VSelect-DcgePQge.89929a190a04.js +1 -0
  76. codex/static_root/assets/VSelect-DcgePQge.89929a190a04.js.br +0 -0
  77. codex/static_root/assets/VSelect-DcgePQge.89929a190a04.js.gz +0 -0
  78. codex/static_root/assets/VSelect-DcgePQge.js +1 -0
  79. codex/static_root/assets/VSelect-DcgePQge.js.br +0 -0
  80. codex/static_root/assets/VSelect-DcgePQge.js.gz +0 -0
  81. codex/static_root/assets/VSelectionControl-BOfjazsp.a8fe60521481.js +1 -0
  82. codex/static_root/assets/VSelectionControl-BOfjazsp.a8fe60521481.js.br +0 -0
  83. codex/static_root/assets/VSelectionControl-BOfjazsp.a8fe60521481.js.gz +0 -0
  84. codex/static_root/assets/VSelectionControl-BOfjazsp.js +1 -0
  85. codex/static_root/assets/VSelectionControl-BOfjazsp.js.br +0 -0
  86. codex/static_root/assets/VSelectionControl-BOfjazsp.js.gz +0 -0
  87. codex/static_root/assets/VSelectionControl-BmYSXANf.61cf72c55175.css +1 -0
  88. codex/static_root/assets/VSelectionControl-BmYSXANf.61cf72c55175.css.br +0 -0
  89. codex/static_root/assets/VSelectionControl-BmYSXANf.61cf72c55175.css.gz +0 -0
  90. codex/static_root/assets/VSelectionControl-BmYSXANf.css +1 -0
  91. codex/static_root/assets/VSelectionControl-BmYSXANf.css.br +0 -0
  92. codex/static_root/assets/VSelectionControl-BmYSXANf.css.gz +0 -0
  93. codex/static_root/assets/{VTable-MenML-QS.8d54c08274e1.js → VTable-DwP4GgFJ.f64a953b0f46.js} +1 -1
  94. codex/static_root/assets/VTable-DwP4GgFJ.f64a953b0f46.js.br +0 -0
  95. codex/static_root/assets/VTable-DwP4GgFJ.f64a953b0f46.js.gz +0 -0
  96. codex/static_root/assets/{VTable-MenML-QS.js → VTable-DwP4GgFJ.js} +1 -1
  97. codex/static_root/assets/VTable-DwP4GgFJ.js.br +0 -0
  98. codex/static_root/assets/VTable-DwP4GgFJ.js.gz +0 -0
  99. codex/static_root/assets/VWindowItem-D0E4VZDp.05007113eed6.js +1 -0
  100. codex/static_root/assets/VWindowItem-D0E4VZDp.05007113eed6.js.br +0 -0
  101. codex/static_root/assets/VWindowItem-D0E4VZDp.05007113eed6.js.gz +0 -0
  102. codex/static_root/assets/VWindowItem-D0E4VZDp.js +1 -0
  103. codex/static_root/assets/VWindowItem-D0E4VZDp.js.br +0 -0
  104. codex/static_root/assets/VWindowItem-D0E4VZDp.js.gz +0 -0
  105. codex/static_root/assets/{VWindowItem-CWv03gfN.css → VWindowItem-DqNaT6b1.css} +1 -1
  106. codex/static_root/assets/VWindowItem-DqNaT6b1.css.br +0 -0
  107. codex/static_root/assets/VWindowItem-DqNaT6b1.css.gz +0 -0
  108. codex/static_root/assets/{VWindowItem-CWv03gfN.ddad20bc51ba.css → VWindowItem-DqNaT6b1.d2f9460fb23b.css} +1 -1
  109. codex/static_root/assets/VWindowItem-DqNaT6b1.d2f9460fb23b.css.br +0 -0
  110. codex/static_root/assets/VWindowItem-DqNaT6b1.d2f9460fb23b.css.gz +0 -0
  111. codex/static_root/assets/{admin-BStn9kk0.b50ab54d4a08.js → admin-0MogMIWh.935f3602f03c.js} +1 -1
  112. codex/static_root/assets/admin-0MogMIWh.935f3602f03c.js.br +0 -0
  113. codex/static_root/assets/admin-0MogMIWh.935f3602f03c.js.gz +0 -0
  114. codex/static_root/assets/{admin-BStn9kk0.js → admin-0MogMIWh.js} +1 -1
  115. codex/static_root/assets/admin-0MogMIWh.js.br +0 -0
  116. codex/static_root/assets/admin-0MogMIWh.js.gz +0 -0
  117. codex/static_root/assets/{admin-DJCVf2PA.7ba26fd73264.css → admin-DEoSGrPH.644bc371ba3c.css} +1 -1
  118. codex/static_root/assets/admin-DEoSGrPH.644bc371ba3c.css.br +0 -0
  119. codex/static_root/assets/{admin-DJCVf2PA.7ba26fd73264.css.gz → admin-DEoSGrPH.644bc371ba3c.css.gz} +0 -0
  120. codex/static_root/assets/{admin-DJCVf2PA.css → admin-DEoSGrPH.css} +1 -1
  121. codex/static_root/assets/admin-DEoSGrPH.css.br +0 -0
  122. codex/static_root/assets/{admin-DJCVf2PA.css.gz → admin-DEoSGrPH.css.gz} +0 -0
  123. codex/static_root/assets/{admin-menu-8MqbD6SS.de80d9c3a174.js → admin-menu-CxWZ4NVB.1cb05f15fcfe.js} +1 -1
  124. codex/static_root/assets/admin-menu-CxWZ4NVB.1cb05f15fcfe.js.br +0 -0
  125. codex/static_root/assets/admin-menu-CxWZ4NVB.1cb05f15fcfe.js.gz +0 -0
  126. codex/static_root/assets/{admin-menu-8MqbD6SS.js → admin-menu-CxWZ4NVB.js} +1 -1
  127. codex/static_root/assets/admin-menu-CxWZ4NVB.js.br +0 -0
  128. codex/static_root/assets/admin-menu-CxWZ4NVB.js.gz +0 -0
  129. codex/static_root/assets/{admin-settings-button-progress-HmQvm62f.6d2798eb3429.js → admin-settings-button-progress-BWW5U-_2.574a05a140cd.js} +1 -1
  130. codex/static_root/assets/admin-settings-button-progress-BWW5U-_2.574a05a140cd.js.br +0 -0
  131. codex/static_root/assets/admin-settings-button-progress-BWW5U-_2.574a05a140cd.js.gz +0 -0
  132. codex/static_root/assets/{admin-settings-button-progress-HmQvm62f.js → admin-settings-button-progress-BWW5U-_2.js} +1 -1
  133. codex/static_root/assets/admin-settings-button-progress-BWW5U-_2.js.br +0 -0
  134. codex/static_root/assets/admin-settings-button-progress-BWW5U-_2.js.gz +0 -0
  135. codex/static_root/assets/{admin-ri1JM4_Z.fc516b4b96f2.js → admin-vsdk5Rss.c942515d69e6.js} +1 -1
  136. codex/static_root/assets/admin-vsdk5Rss.c942515d69e6.js.br +0 -0
  137. codex/static_root/assets/admin-vsdk5Rss.c942515d69e6.js.gz +0 -0
  138. codex/static_root/assets/{admin-ri1JM4_Z.js → admin-vsdk5Rss.js} +1 -1
  139. codex/static_root/assets/admin-vsdk5Rss.js.br +0 -0
  140. codex/static_root/assets/admin-vsdk5Rss.js.gz +0 -0
  141. codex/static_root/assets/browser-CWALWjwb.cf58ec0ffddb.css +1 -0
  142. codex/static_root/assets/browser-CWALWjwb.cf58ec0ffddb.css.br +0 -0
  143. codex/static_root/assets/browser-CWALWjwb.cf58ec0ffddb.css.gz +0 -0
  144. codex/static_root/assets/browser-CWALWjwb.css +1 -0
  145. codex/static_root/assets/browser-CWALWjwb.css.br +0 -0
  146. codex/static_root/assets/browser-CWALWjwb.css.gz +0 -0
  147. codex/static_root/assets/{browser-BQva2GCO.2748e733040b.js → browser-DL9hPskM.0db706bb532e.js} +1 -1
  148. codex/static_root/assets/browser-DL9hPskM.0db706bb532e.js.br +0 -0
  149. codex/static_root/assets/browser-DL9hPskM.0db706bb532e.js.gz +0 -0
  150. codex/static_root/assets/{browser-BQva2GCO.js → browser-DL9hPskM.js} +1 -1
  151. codex/static_root/assets/browser-DL9hPskM.js.br +0 -0
  152. codex/static_root/assets/browser-DL9hPskM.js.gz +0 -0
  153. codex/static_root/assets/{change-password-dialog-CEdhZwC3.c41faf4b7311.js → change-password-dialog-CsA0dV8F.993dc1de7cd9.js} +1 -1
  154. codex/static_root/assets/change-password-dialog-CsA0dV8F.993dc1de7cd9.js.br +0 -0
  155. codex/static_root/assets/change-password-dialog-CsA0dV8F.993dc1de7cd9.js.gz +0 -0
  156. codex/static_root/assets/{change-password-dialog-CEdhZwC3.js → change-password-dialog-CsA0dV8F.js} +1 -1
  157. codex/static_root/assets/change-password-dialog-CsA0dV8F.js.br +0 -0
  158. codex/static_root/assets/change-password-dialog-CsA0dV8F.js.gz +0 -0
  159. codex/static_root/assets/confirm-dialog-DOcInEYk.8249b3c5e331.js +1 -0
  160. codex/static_root/assets/confirm-dialog-DOcInEYk.8249b3c5e331.js.br +0 -0
  161. codex/static_root/assets/confirm-dialog-DOcInEYk.8249b3c5e331.js.gz +0 -0
  162. codex/static_root/assets/confirm-dialog-DOcInEYk.js +1 -0
  163. codex/static_root/assets/confirm-dialog-DOcInEYk.js.br +0 -0
  164. codex/static_root/assets/confirm-dialog-DOcInEYk.js.gz +0 -0
  165. codex/static_root/assets/{datetime-column-CzIyyJDK.f9be11efa2e2.js → datetime-column-BbSapWKr.be1674c183f8.js} +1 -1
  166. codex/static_root/assets/datetime-column-BbSapWKr.be1674c183f8.js.br +0 -0
  167. codex/static_root/assets/datetime-column-BbSapWKr.be1674c183f8.js.gz +0 -0
  168. codex/static_root/assets/{datetime-column-CzIyyJDK.js → datetime-column-BbSapWKr.js} +1 -1
  169. codex/static_root/assets/datetime-column-BbSapWKr.js.br +0 -0
  170. codex/static_root/assets/datetime-column-BbSapWKr.js.gz +0 -0
  171. codex/static_root/assets/{filter-BfEbIpVl.ec48ef2a75bc.js → filter-BtcXW5zO.75aeec1895a1.js} +1 -1
  172. codex/static_root/assets/filter-BtcXW5zO.75aeec1895a1.js.br +0 -0
  173. codex/static_root/assets/filter-BtcXW5zO.75aeec1895a1.js.gz +0 -0
  174. codex/static_root/assets/{filter-BfEbIpVl.js → filter-BtcXW5zO.js} +1 -1
  175. codex/static_root/assets/filter-BtcXW5zO.js.br +0 -0
  176. codex/static_root/assets/filter-BtcXW5zO.js.gz +0 -0
  177. codex/static_root/assets/{flag-tab-BtZ098bQ.2c417cda39c8.js → flag-tab-C2myvzRx.5659c0293fe6.js} +1 -1
  178. codex/static_root/assets/flag-tab-C2myvzRx.5659c0293fe6.js.br +0 -0
  179. codex/static_root/assets/flag-tab-C2myvzRx.5659c0293fe6.js.gz +0 -0
  180. codex/static_root/assets/{flag-tab-BtZ098bQ.js → flag-tab-C2myvzRx.js} +1 -1
  181. codex/static_root/assets/flag-tab-C2myvzRx.js.br +0 -0
  182. codex/static_root/assets/flag-tab-C2myvzRx.js.gz +0 -0
  183. codex/static_root/assets/forwardRefs-8AR4cmsy.28c24ed68c07.js +1 -0
  184. codex/static_root/assets/forwardRefs-8AR4cmsy.28c24ed68c07.js.br +0 -0
  185. codex/static_root/assets/forwardRefs-8AR4cmsy.28c24ed68c07.js.gz +0 -0
  186. codex/static_root/assets/forwardRefs-8AR4cmsy.js +1 -0
  187. codex/static_root/assets/forwardRefs-8AR4cmsy.js.br +0 -0
  188. codex/static_root/assets/forwardRefs-8AR4cmsy.js.gz +0 -0
  189. codex/static_root/assets/forwardRefs-BsADouR7.63a958497048.css +1 -0
  190. codex/static_root/assets/forwardRefs-BsADouR7.63a958497048.css.br +0 -0
  191. codex/static_root/assets/{forwardRefs-CecUXkvN.css.gz → forwardRefs-BsADouR7.63a958497048.css.gz} +0 -0
  192. codex/static_root/assets/forwardRefs-BsADouR7.css +1 -0
  193. codex/static_root/assets/forwardRefs-BsADouR7.css.br +0 -0
  194. codex/static_root/assets/{forwardRefs-CecUXkvN.d595d41108e3.css.gz → forwardRefs-BsADouR7.css.gz} +0 -0
  195. codex/static_root/assets/{group-tab-FI6afuX5.a569809fb228.js → group-tab-vFOTxxPA.d343b05fb11f.js} +1 -1
  196. codex/static_root/assets/group-tab-vFOTxxPA.d343b05fb11f.js.br +0 -0
  197. codex/static_root/assets/group-tab-vFOTxxPA.d343b05fb11f.js.gz +0 -0
  198. codex/static_root/assets/{group-tab-FI6afuX5.js → group-tab-vFOTxxPA.js} +1 -1
  199. codex/static_root/assets/group-tab-vFOTxxPA.js.br +0 -0
  200. codex/static_root/assets/group-tab-vFOTxxPA.js.gz +0 -0
  201. codex/static_root/assets/{http-error-CB3k5P-n.82d886ac81c7.css → http-error-DUBqZFpY.6f8e0c765b4f.css} +1 -1
  202. codex/static_root/assets/http-error-DUBqZFpY.6f8e0c765b4f.css.br +0 -0
  203. codex/static_root/assets/http-error-DUBqZFpY.6f8e0c765b4f.css.gz +0 -0
  204. codex/static_root/assets/{http-error-CB3k5P-n.css → http-error-DUBqZFpY.css} +1 -1
  205. codex/static_root/assets/http-error-DUBqZFpY.css.br +0 -0
  206. codex/static_root/assets/http-error-DUBqZFpY.css.gz +0 -0
  207. codex/static_root/assets/{http-error-BmuMBbvn.9f6b9dc6dc16.js → http-error-DycyYGJ1.68755b67ed72.js} +1 -1
  208. codex/static_root/assets/http-error-DycyYGJ1.68755b67ed72.js.br +0 -0
  209. codex/static_root/assets/http-error-DycyYGJ1.68755b67ed72.js.gz +0 -0
  210. codex/static_root/assets/{http-error-BmuMBbvn.js → http-error-DycyYGJ1.js} +1 -1
  211. codex/static_root/assets/http-error-DycyYGJ1.js.br +0 -0
  212. codex/static_root/assets/http-error-DycyYGJ1.js.gz +0 -0
  213. codex/static_root/assets/{index-DXqyJRWg.58b55c49a1ba.js → index-BqvRLlbQ.bbc93c5e1124.js} +1 -1
  214. codex/static_root/assets/index-BqvRLlbQ.bbc93c5e1124.js.br +0 -0
  215. codex/static_root/assets/index-BqvRLlbQ.bbc93c5e1124.js.gz +0 -0
  216. codex/static_root/assets/{index-DXqyJRWg.js → index-BqvRLlbQ.js} +1 -1
  217. codex/static_root/assets/index-BqvRLlbQ.js.br +0 -0
  218. codex/static_root/assets/index-BqvRLlbQ.js.gz +0 -0
  219. codex/static_root/assets/{library-tab-DlGRxHD-.e2e3049de8fe.js → library-tab-DzW9vEih.225e01869860.js} +1 -1
  220. codex/static_root/assets/library-tab-DzW9vEih.225e01869860.js.br +0 -0
  221. codex/static_root/assets/library-tab-DzW9vEih.225e01869860.js.gz +0 -0
  222. codex/static_root/assets/{library-tab-DlGRxHD-.js → library-tab-DzW9vEih.js} +1 -1
  223. codex/static_root/assets/library-tab-DzW9vEih.js.br +0 -0
  224. codex/static_root/assets/library-tab-DzW9vEih.js.gz +0 -0
  225. codex/static_root/assets/{main-CZN13qLI.12debfe1e227.css → main-CqGLcuU5.4419befb30af.css} +1 -1
  226. codex/static_root/assets/main-CqGLcuU5.4419befb30af.css.br +0 -0
  227. codex/static_root/assets/{main-CZN13qLI.12debfe1e227.css.gz → main-CqGLcuU5.4419befb30af.css.gz} +0 -0
  228. codex/static_root/assets/{main-CZN13qLI.css → main-CqGLcuU5.css} +1 -1
  229. codex/static_root/assets/main-CqGLcuU5.css.br +0 -0
  230. codex/static_root/assets/{main-CZN13qLI.css.gz → main-CqGLcuU5.css.gz} +0 -0
  231. codex/static_root/assets/main-Df6H3rcv.8ad231e2da5c.js +38 -0
  232. codex/static_root/assets/main-Df6H3rcv.8ad231e2da5c.js.br +0 -0
  233. codex/static_root/assets/main-Df6H3rcv.8ad231e2da5c.js.gz +0 -0
  234. codex/static_root/assets/main-Df6H3rcv.js +38 -0
  235. codex/static_root/assets/main-Df6H3rcv.js.br +0 -0
  236. codex/static_root/assets/main-Df6H3rcv.js.gz +0 -0
  237. codex/static_root/assets/pager-full-pdf-BNEwAMUk.38c6e07e1759.js +1 -0
  238. codex/static_root/assets/pager-full-pdf-BNEwAMUk.38c6e07e1759.js.br +0 -0
  239. codex/static_root/assets/pager-full-pdf-BNEwAMUk.38c6e07e1759.js.gz +0 -0
  240. codex/static_root/assets/pager-full-pdf-BNEwAMUk.js +1 -0
  241. codex/static_root/assets/pager-full-pdf-BNEwAMUk.js.br +0 -0
  242. codex/static_root/assets/pager-full-pdf-BNEwAMUk.js.gz +0 -0
  243. codex/static_root/assets/{pagination-toolbar-BBoV7kGz.3812691bafd5.js → pagination-toolbar--v4Pvgn4.19d9227abe73.js} +1 -1
  244. codex/static_root/assets/pagination-toolbar--v4Pvgn4.19d9227abe73.js.br +0 -0
  245. codex/static_root/assets/pagination-toolbar--v4Pvgn4.19d9227abe73.js.gz +0 -0
  246. codex/static_root/assets/{pagination-toolbar-BBoV7kGz.js → pagination-toolbar--v4Pvgn4.js} +1 -1
  247. codex/static_root/assets/pagination-toolbar--v4Pvgn4.js.br +0 -0
  248. codex/static_root/assets/pagination-toolbar--v4Pvgn4.js.gz +0 -0
  249. codex/static_root/assets/pagination-toolbar-CXcyeTVQ.c7e64e3c3af4.css +1 -0
  250. codex/static_root/assets/pagination-toolbar-CXcyeTVQ.c7e64e3c3af4.css.br +0 -0
  251. codex/static_root/assets/pagination-toolbar-CXcyeTVQ.c7e64e3c3af4.css.gz +0 -0
  252. codex/static_root/assets/pagination-toolbar-CXcyeTVQ.css +1 -0
  253. codex/static_root/assets/pagination-toolbar-CXcyeTVQ.css.br +0 -0
  254. codex/static_root/assets/pagination-toolbar-CXcyeTVQ.css.gz +0 -0
  255. codex/static_root/assets/{pdf-doc-DY8a-Suh.4ef483220f83.js → pdf-doc-BJJ9OK87.11b34dd73a86.js} +1 -1
  256. codex/static_root/assets/pdf-doc-BJJ9OK87.11b34dd73a86.js.br +0 -0
  257. codex/static_root/assets/pdf-doc-BJJ9OK87.11b34dd73a86.js.gz +0 -0
  258. codex/static_root/assets/{pdf-doc-DY8a-Suh.js → pdf-doc-BJJ9OK87.js} +1 -1
  259. codex/static_root/assets/pdf-doc-BJJ9OK87.js.br +0 -0
  260. codex/static_root/assets/pdf-doc-BJJ9OK87.js.gz +0 -0
  261. codex/static_root/assets/{reader-BUEw0RYD.css → reader-CD5dUsCb.360b55e6c218.css} +1 -1
  262. codex/static_root/assets/reader-CD5dUsCb.360b55e6c218.css.br +0 -0
  263. codex/static_root/assets/{reader-BUEw0RYD.css.gz → reader-CD5dUsCb.360b55e6c218.css.gz} +0 -0
  264. codex/static_root/assets/{reader-BUEw0RYD.e084c3b621d4.css → reader-CD5dUsCb.css} +1 -1
  265. codex/static_root/assets/reader-CD5dUsCb.css.br +0 -0
  266. codex/static_root/assets/{reader-BUEw0RYD.e084c3b621d4.css.gz → reader-CD5dUsCb.css.gz} +0 -0
  267. codex/static_root/assets/{reader-Dqa95yj4.a16f078ebed6.js → reader-xFPm8370.f406b46e5e21.js} +2 -2
  268. codex/static_root/assets/reader-xFPm8370.f406b46e5e21.js.br +0 -0
  269. codex/static_root/assets/reader-xFPm8370.f406b46e5e21.js.gz +0 -0
  270. codex/static_root/assets/{reader-Dqa95yj4.js → reader-xFPm8370.js} +2 -2
  271. codex/static_root/assets/reader-xFPm8370.js.br +0 -0
  272. codex/static_root/assets/reader-xFPm8370.js.gz +0 -0
  273. codex/static_root/assets/{relation-chips-DnkUXW6y.ae4d455a85e4.js → relation-chips-CaoqjI00.d4ff4022749b.js} +1 -1
  274. codex/static_root/assets/relation-chips-CaoqjI00.d4ff4022749b.js.br +0 -0
  275. codex/static_root/assets/relation-chips-CaoqjI00.d4ff4022749b.js.gz +0 -0
  276. codex/static_root/assets/{relation-chips-DnkUXW6y.js → relation-chips-CaoqjI00.js} +1 -1
  277. codex/static_root/assets/relation-chips-CaoqjI00.js.br +0 -0
  278. codex/static_root/assets/relation-chips-CaoqjI00.js.gz +0 -0
  279. codex/static_root/assets/{settings-drawer-CrJwaDTj.0ea90e35f48a.js → settings-drawer-CfBuea69.013baf97e49e.js} +2 -2
  280. codex/static_root/assets/settings-drawer-CfBuea69.013baf97e49e.js.br +0 -0
  281. codex/static_root/assets/settings-drawer-CfBuea69.013baf97e49e.js.gz +0 -0
  282. codex/static_root/assets/{settings-drawer-CrJwaDTj.js → settings-drawer-CfBuea69.js} +2 -2
  283. codex/static_root/assets/settings-drawer-CfBuea69.js.br +0 -0
  284. codex/static_root/assets/settings-drawer-CfBuea69.js.gz +0 -0
  285. codex/static_root/assets/{settings-drawer-d-7mkVdG.15838d8ecd33.css → settings-drawer-D5PWKw08.4b34133b25a7.css} +1 -1
  286. codex/static_root/assets/settings-drawer-D5PWKw08.4b34133b25a7.css.br +0 -0
  287. codex/static_root/assets/settings-drawer-D5PWKw08.4b34133b25a7.css.gz +0 -0
  288. codex/static_root/assets/{settings-drawer-d-7mkVdG.css → settings-drawer-D5PWKw08.css} +1 -1
  289. codex/static_root/assets/settings-drawer-D5PWKw08.css.br +0 -0
  290. codex/static_root/assets/settings-drawer-D5PWKw08.css.gz +0 -0
  291. codex/static_root/assets/ssrBoot-BDUblGRH.4f2d90f894ec.js +1 -0
  292. codex/static_root/assets/ssrBoot-BDUblGRH.4f2d90f894ec.js.br +0 -0
  293. codex/static_root/assets/ssrBoot-BDUblGRH.4f2d90f894ec.js.gz +0 -0
  294. codex/static_root/assets/ssrBoot-BDUblGRH.js +1 -0
  295. codex/static_root/assets/ssrBoot-BDUblGRH.js.br +0 -0
  296. codex/static_root/assets/ssrBoot-BDUblGRH.js.gz +0 -0
  297. codex/static_root/assets/{stats-tab-R3_2S5KJ.1b8dcb544e56.js → stats-tab-CJ448hBZ.84f50d511624.js} +1 -1
  298. codex/static_root/assets/stats-tab-CJ448hBZ.84f50d511624.js.br +0 -0
  299. codex/static_root/assets/stats-tab-CJ448hBZ.84f50d511624.js.gz +0 -0
  300. codex/static_root/assets/{stats-tab-R3_2S5KJ.js → stats-tab-CJ448hBZ.js} +1 -1
  301. codex/static_root/assets/stats-tab-CJ448hBZ.js.br +0 -0
  302. codex/static_root/assets/stats-tab-CJ448hBZ.js.gz +0 -0
  303. codex/static_root/assets/{task-tab-DcwExi-z.7745f5bdd4f6.js → task-tab-cAwSMU8y.612a5c813dcd.js} +1 -1
  304. codex/static_root/assets/task-tab-cAwSMU8y.612a5c813dcd.js.br +0 -0
  305. codex/static_root/assets/task-tab-cAwSMU8y.612a5c813dcd.js.gz +0 -0
  306. codex/static_root/assets/{task-tab-DcwExi-z.js → task-tab-cAwSMU8y.js} +1 -1
  307. codex/static_root/assets/task-tab-cAwSMU8y.js.br +0 -0
  308. codex/static_root/assets/task-tab-cAwSMU8y.js.gz +0 -0
  309. codex/static_root/assets/unauthorized-B2rYLD-2.634a6b5154b7.css +1 -0
  310. codex/static_root/assets/unauthorized-B2rYLD-2.634a6b5154b7.css.br +0 -0
  311. codex/static_root/assets/unauthorized-B2rYLD-2.634a6b5154b7.css.gz +0 -0
  312. codex/static_root/assets/unauthorized-B2rYLD-2.css +1 -0
  313. codex/static_root/assets/unauthorized-B2rYLD-2.css.br +0 -0
  314. codex/static_root/assets/unauthorized-B2rYLD-2.css.gz +0 -0
  315. codex/static_root/assets/{unauthorized-DQOfB_66.153b77e5dba9.js → unauthorized-MToUu3g6.7c5b4e09d277.js} +1 -1
  316. codex/static_root/assets/unauthorized-MToUu3g6.7c5b4e09d277.js.br +0 -0
  317. codex/static_root/assets/unauthorized-MToUu3g6.7c5b4e09d277.js.gz +0 -0
  318. codex/static_root/assets/{unauthorized-DQOfB_66.js → unauthorized-MToUu3g6.js} +1 -1
  319. codex/static_root/assets/unauthorized-MToUu3g6.js.br +0 -0
  320. codex/static_root/assets/unauthorized-MToUu3g6.js.gz +0 -0
  321. codex/static_root/assets/{user-tab-BKyrq81A.7412792291c7.js → user-tab-CD2PK4F1.8c34ff50a86c.js} +1 -1
  322. codex/static_root/assets/user-tab-CD2PK4F1.8c34ff50a86c.js.br +0 -0
  323. codex/static_root/assets/user-tab-CD2PK4F1.8c34ff50a86c.js.gz +0 -0
  324. codex/static_root/assets/{user-tab-BKyrq81A.js → user-tab-CD2PK4F1.js} +1 -1
  325. codex/static_root/assets/user-tab-CD2PK4F1.js.br +0 -0
  326. codex/static_root/assets/user-tab-CD2PK4F1.js.gz +0 -0
  327. codex/static_root/manifest.a56030879046.json +760 -0
  328. codex/static_root/manifest.a56030879046.json.br +0 -0
  329. codex/static_root/manifest.a56030879046.json.gz +0 -0
  330. codex/static_root/manifest.json +327 -327
  331. codex/static_root/manifest.json.br +0 -0
  332. codex/static_root/manifest.json.gz +0 -0
  333. codex/static_root/staticfiles.json +1 -1
  334. codex/util.py +1 -1
  335. codex/views/browser/cover.py +9 -7
  336. codex/views/reader/page.py +2 -9
  337. codex/views/util.py +0 -13
  338. {codex-1.8.16.dist-info → codex-1.8.17.dist-info}/METADATA +5 -5
  339. {codex-1.8.16.dist-info → codex-1.8.17.dist-info}/RECORD +341 -341
  340. codex/static_root/assets/VCheckbox-BY6G_rgf.269e45107a7a.js.br +0 -0
  341. codex/static_root/assets/VCheckbox-BY6G_rgf.269e45107a7a.js.gz +0 -0
  342. codex/static_root/assets/VCheckbox-BY6G_rgf.js.br +0 -0
  343. codex/static_root/assets/VCheckbox-BY6G_rgf.js.gz +0 -0
  344. codex/static_root/assets/VCheckboxBtn-zhUZJChm.9761785b500b.js.br +0 -0
  345. codex/static_root/assets/VCheckboxBtn-zhUZJChm.9761785b500b.js.gz +0 -0
  346. codex/static_root/assets/VCheckboxBtn-zhUZJChm.js.br +0 -0
  347. codex/static_root/assets/VCheckboxBtn-zhUZJChm.js.gz +0 -0
  348. codex/static_root/assets/VCombobox-O2BHnDUr.88a9aab6b95b.js +0 -1
  349. codex/static_root/assets/VCombobox-O2BHnDUr.88a9aab6b95b.js.br +0 -0
  350. codex/static_root/assets/VCombobox-O2BHnDUr.88a9aab6b95b.js.gz +0 -0
  351. codex/static_root/assets/VCombobox-O2BHnDUr.js +0 -1
  352. codex/static_root/assets/VCombobox-O2BHnDUr.js.br +0 -0
  353. codex/static_root/assets/VCombobox-O2BHnDUr.js.gz +0 -0
  354. codex/static_root/assets/VDialog-BN4XvYQH.b7408d9d3262.css.br +0 -0
  355. codex/static_root/assets/VDialog-BN4XvYQH.b7408d9d3262.css.gz +0 -0
  356. codex/static_root/assets/VDialog-BN4XvYQH.css.br +0 -0
  357. codex/static_root/assets/VDialog-BN4XvYQH.css.gz +0 -0
  358. codex/static_root/assets/VDialog-mZQ1Va-c.d771d0ac6517.js +0 -1
  359. codex/static_root/assets/VDialog-mZQ1Va-c.d771d0ac6517.js.br +0 -0
  360. codex/static_root/assets/VDialog-mZQ1Va-c.d771d0ac6517.js.gz +0 -0
  361. codex/static_root/assets/VDialog-mZQ1Va-c.js +0 -1
  362. codex/static_root/assets/VDialog-mZQ1Va-c.js.br +0 -0
  363. codex/static_root/assets/VDialog-mZQ1Va-c.js.gz +0 -0
  364. codex/static_root/assets/VDivider-CHTeIL4W.13805a003963.js +0 -1
  365. codex/static_root/assets/VDivider-CHTeIL4W.13805a003963.js.br +0 -0
  366. codex/static_root/assets/VDivider-CHTeIL4W.13805a003963.js.gz +0 -0
  367. codex/static_root/assets/VDivider-CHTeIL4W.js +0 -1
  368. codex/static_root/assets/VDivider-CHTeIL4W.js.br +0 -0
  369. codex/static_root/assets/VDivider-CHTeIL4W.js.gz +0 -0
  370. codex/static_root/assets/VExpansionPanels-B8KjM0Qi.css +0 -1
  371. codex/static_root/assets/VExpansionPanels-B8KjM0Qi.css.br +0 -0
  372. codex/static_root/assets/VExpansionPanels-B8KjM0Qi.css.gz +0 -0
  373. codex/static_root/assets/VExpansionPanels-B8KjM0Qi.e4aca21014f2.css +0 -1
  374. codex/static_root/assets/VExpansionPanels-B8KjM0Qi.e4aca21014f2.css.br +0 -0
  375. codex/static_root/assets/VExpansionPanels-B8KjM0Qi.e4aca21014f2.css.gz +0 -0
  376. codex/static_root/assets/VExpansionPanels-B8bQXRWn.de33285def27.js.br +0 -0
  377. codex/static_root/assets/VExpansionPanels-B8bQXRWn.de33285def27.js.gz +0 -0
  378. codex/static_root/assets/VExpansionPanels-B8bQXRWn.js.br +0 -0
  379. codex/static_root/assets/VExpansionPanels-B8bQXRWn.js.gz +0 -0
  380. codex/static_root/assets/VForm-Dt0Uesri.5f3eb2e10d58.js.br +0 -0
  381. codex/static_root/assets/VForm-Dt0Uesri.5f3eb2e10d58.js.gz +0 -0
  382. codex/static_root/assets/VForm-Dt0Uesri.js.br +0 -0
  383. codex/static_root/assets/VForm-Dt0Uesri.js.gz +0 -0
  384. codex/static_root/assets/VRadioGroup-CU9nYUHk.a25611eb0aff.js.br +0 -0
  385. codex/static_root/assets/VRadioGroup-CU9nYUHk.a25611eb0aff.js.gz +0 -0
  386. codex/static_root/assets/VRadioGroup-CU9nYUHk.js.br +0 -0
  387. codex/static_root/assets/VRadioGroup-CU9nYUHk.js.gz +0 -0
  388. codex/static_root/assets/VSelect-BvTTr4RP.be69766e6916.css.br +0 -0
  389. codex/static_root/assets/VSelect-BvTTr4RP.css.br +0 -0
  390. codex/static_root/assets/VSelect-DpnHasju.6b0e31d58987.js +0 -1
  391. codex/static_root/assets/VSelect-DpnHasju.6b0e31d58987.js.br +0 -0
  392. codex/static_root/assets/VSelect-DpnHasju.6b0e31d58987.js.gz +0 -0
  393. codex/static_root/assets/VSelect-DpnHasju.js +0 -1
  394. codex/static_root/assets/VSelect-DpnHasju.js.br +0 -0
  395. codex/static_root/assets/VSelect-DpnHasju.js.gz +0 -0
  396. codex/static_root/assets/VSelectionControl-DFaQ_klW.4c77eed94aca.js +0 -1
  397. codex/static_root/assets/VSelectionControl-DFaQ_klW.4c77eed94aca.js.br +0 -0
  398. codex/static_root/assets/VSelectionControl-DFaQ_klW.4c77eed94aca.js.gz +0 -0
  399. codex/static_root/assets/VSelectionControl-DFaQ_klW.js +0 -1
  400. codex/static_root/assets/VSelectionControl-DFaQ_klW.js.br +0 -0
  401. codex/static_root/assets/VSelectionControl-DFaQ_klW.js.gz +0 -0
  402. codex/static_root/assets/VSelectionControl-R4GtShoa.css +0 -1
  403. codex/static_root/assets/VSelectionControl-R4GtShoa.css.br +0 -0
  404. codex/static_root/assets/VSelectionControl-R4GtShoa.css.gz +0 -0
  405. codex/static_root/assets/VSelectionControl-R4GtShoa.f3ebc2149a3a.css +0 -1
  406. codex/static_root/assets/VSelectionControl-R4GtShoa.f3ebc2149a3a.css.br +0 -0
  407. codex/static_root/assets/VSelectionControl-R4GtShoa.f3ebc2149a3a.css.gz +0 -0
  408. codex/static_root/assets/VTable-MenML-QS.8d54c08274e1.js.br +0 -0
  409. codex/static_root/assets/VTable-MenML-QS.8d54c08274e1.js.gz +0 -0
  410. codex/static_root/assets/VTable-MenML-QS.js.br +0 -0
  411. codex/static_root/assets/VTable-MenML-QS.js.gz +0 -0
  412. codex/static_root/assets/VWindowItem-62YwEvjG.b8bdaea824b5.js +0 -1
  413. codex/static_root/assets/VWindowItem-62YwEvjG.b8bdaea824b5.js.br +0 -0
  414. codex/static_root/assets/VWindowItem-62YwEvjG.b8bdaea824b5.js.gz +0 -0
  415. codex/static_root/assets/VWindowItem-62YwEvjG.js +0 -1
  416. codex/static_root/assets/VWindowItem-62YwEvjG.js.br +0 -0
  417. codex/static_root/assets/VWindowItem-62YwEvjG.js.gz +0 -0
  418. codex/static_root/assets/VWindowItem-CWv03gfN.css.br +0 -0
  419. codex/static_root/assets/VWindowItem-CWv03gfN.css.gz +0 -0
  420. codex/static_root/assets/VWindowItem-CWv03gfN.ddad20bc51ba.css.br +0 -0
  421. codex/static_root/assets/VWindowItem-CWv03gfN.ddad20bc51ba.css.gz +0 -0
  422. codex/static_root/assets/admin-BStn9kk0.b50ab54d4a08.js.br +0 -0
  423. codex/static_root/assets/admin-BStn9kk0.b50ab54d4a08.js.gz +0 -0
  424. codex/static_root/assets/admin-BStn9kk0.js.br +0 -0
  425. codex/static_root/assets/admin-BStn9kk0.js.gz +0 -0
  426. codex/static_root/assets/admin-DJCVf2PA.7ba26fd73264.css.br +0 -0
  427. codex/static_root/assets/admin-DJCVf2PA.css.br +0 -0
  428. codex/static_root/assets/admin-menu-8MqbD6SS.de80d9c3a174.js.br +0 -0
  429. codex/static_root/assets/admin-menu-8MqbD6SS.de80d9c3a174.js.gz +0 -0
  430. codex/static_root/assets/admin-menu-8MqbD6SS.js.br +0 -0
  431. codex/static_root/assets/admin-menu-8MqbD6SS.js.gz +0 -0
  432. codex/static_root/assets/admin-ri1JM4_Z.fc516b4b96f2.js.br +0 -0
  433. codex/static_root/assets/admin-ri1JM4_Z.fc516b4b96f2.js.gz +0 -0
  434. codex/static_root/assets/admin-ri1JM4_Z.js.br +0 -0
  435. codex/static_root/assets/admin-ri1JM4_Z.js.gz +0 -0
  436. codex/static_root/assets/admin-settings-button-progress-HmQvm62f.6d2798eb3429.js.br +0 -0
  437. codex/static_root/assets/admin-settings-button-progress-HmQvm62f.6d2798eb3429.js.gz +0 -0
  438. codex/static_root/assets/admin-settings-button-progress-HmQvm62f.js.br +0 -0
  439. codex/static_root/assets/admin-settings-button-progress-HmQvm62f.js.gz +0 -0
  440. codex/static_root/assets/browser-BQva2GCO.2748e733040b.js.br +0 -0
  441. codex/static_root/assets/browser-BQva2GCO.2748e733040b.js.gz +0 -0
  442. codex/static_root/assets/browser-BQva2GCO.js.br +0 -0
  443. codex/static_root/assets/browser-BQva2GCO.js.gz +0 -0
  444. codex/static_root/assets/browser-CS6VSg0_.9a6e8eda0520.css +0 -1
  445. codex/static_root/assets/browser-CS6VSg0_.9a6e8eda0520.css.br +0 -0
  446. codex/static_root/assets/browser-CS6VSg0_.9a6e8eda0520.css.gz +0 -0
  447. codex/static_root/assets/browser-CS6VSg0_.css +0 -1
  448. codex/static_root/assets/browser-CS6VSg0_.css.br +0 -0
  449. codex/static_root/assets/browser-CS6VSg0_.css.gz +0 -0
  450. codex/static_root/assets/change-password-dialog-CEdhZwC3.c41faf4b7311.js.br +0 -0
  451. codex/static_root/assets/change-password-dialog-CEdhZwC3.c41faf4b7311.js.gz +0 -0
  452. codex/static_root/assets/change-password-dialog-CEdhZwC3.js.br +0 -0
  453. codex/static_root/assets/change-password-dialog-CEdhZwC3.js.gz +0 -0
  454. codex/static_root/assets/confirm-dialog-X8W3euvh.d9b87f1eeefe.js +0 -1
  455. codex/static_root/assets/confirm-dialog-X8W3euvh.d9b87f1eeefe.js.br +0 -0
  456. codex/static_root/assets/confirm-dialog-X8W3euvh.d9b87f1eeefe.js.gz +0 -0
  457. codex/static_root/assets/confirm-dialog-X8W3euvh.js +0 -1
  458. codex/static_root/assets/confirm-dialog-X8W3euvh.js.br +0 -0
  459. codex/static_root/assets/confirm-dialog-X8W3euvh.js.gz +0 -0
  460. codex/static_root/assets/datetime-column-CzIyyJDK.f9be11efa2e2.js.br +0 -0
  461. codex/static_root/assets/datetime-column-CzIyyJDK.f9be11efa2e2.js.gz +0 -0
  462. codex/static_root/assets/datetime-column-CzIyyJDK.js.br +0 -0
  463. codex/static_root/assets/datetime-column-CzIyyJDK.js.gz +0 -0
  464. codex/static_root/assets/filter-BfEbIpVl.ec48ef2a75bc.js.br +0 -0
  465. codex/static_root/assets/filter-BfEbIpVl.ec48ef2a75bc.js.gz +0 -0
  466. codex/static_root/assets/filter-BfEbIpVl.js.br +0 -0
  467. codex/static_root/assets/filter-BfEbIpVl.js.gz +0 -0
  468. codex/static_root/assets/flag-tab-BtZ098bQ.2c417cda39c8.js.br +0 -0
  469. codex/static_root/assets/flag-tab-BtZ098bQ.2c417cda39c8.js.gz +0 -0
  470. codex/static_root/assets/flag-tab-BtZ098bQ.js.br +0 -0
  471. codex/static_root/assets/flag-tab-BtZ098bQ.js.gz +0 -0
  472. codex/static_root/assets/forwardRefs-CecUXkvN.css +0 -1
  473. codex/static_root/assets/forwardRefs-CecUXkvN.css.br +0 -0
  474. codex/static_root/assets/forwardRefs-CecUXkvN.d595d41108e3.css +0 -1
  475. codex/static_root/assets/forwardRefs-CecUXkvN.d595d41108e3.css.br +0 -0
  476. codex/static_root/assets/forwardRefs-CnxuGwpi.1c01bc84723c.js +0 -1
  477. codex/static_root/assets/forwardRefs-CnxuGwpi.1c01bc84723c.js.br +0 -0
  478. codex/static_root/assets/forwardRefs-CnxuGwpi.1c01bc84723c.js.gz +0 -0
  479. codex/static_root/assets/forwardRefs-CnxuGwpi.js +0 -1
  480. codex/static_root/assets/forwardRefs-CnxuGwpi.js.br +0 -0
  481. codex/static_root/assets/forwardRefs-CnxuGwpi.js.gz +0 -0
  482. codex/static_root/assets/group-tab-FI6afuX5.a569809fb228.js.br +0 -0
  483. codex/static_root/assets/group-tab-FI6afuX5.a569809fb228.js.gz +0 -0
  484. codex/static_root/assets/group-tab-FI6afuX5.js.br +0 -0
  485. codex/static_root/assets/group-tab-FI6afuX5.js.gz +0 -0
  486. codex/static_root/assets/http-error-BmuMBbvn.9f6b9dc6dc16.js.br +0 -0
  487. codex/static_root/assets/http-error-BmuMBbvn.9f6b9dc6dc16.js.gz +0 -0
  488. codex/static_root/assets/http-error-BmuMBbvn.js.br +0 -0
  489. codex/static_root/assets/http-error-BmuMBbvn.js.gz +0 -0
  490. codex/static_root/assets/http-error-CB3k5P-n.82d886ac81c7.css.br +0 -0
  491. codex/static_root/assets/http-error-CB3k5P-n.82d886ac81c7.css.gz +0 -0
  492. codex/static_root/assets/http-error-CB3k5P-n.css.br +0 -0
  493. codex/static_root/assets/http-error-CB3k5P-n.css.gz +0 -0
  494. codex/static_root/assets/index-DXqyJRWg.58b55c49a1ba.js.br +0 -0
  495. codex/static_root/assets/index-DXqyJRWg.58b55c49a1ba.js.gz +0 -0
  496. codex/static_root/assets/index-DXqyJRWg.js.br +0 -0
  497. codex/static_root/assets/index-DXqyJRWg.js.gz +0 -0
  498. codex/static_root/assets/library-tab-DlGRxHD-.e2e3049de8fe.js.br +0 -0
  499. codex/static_root/assets/library-tab-DlGRxHD-.e2e3049de8fe.js.gz +0 -0
  500. codex/static_root/assets/library-tab-DlGRxHD-.js.br +0 -0
  501. codex/static_root/assets/library-tab-DlGRxHD-.js.gz +0 -0
  502. codex/static_root/assets/main-CWTxsB_K.4890bf9782af.js +0 -34
  503. codex/static_root/assets/main-CWTxsB_K.4890bf9782af.js.br +0 -0
  504. codex/static_root/assets/main-CWTxsB_K.4890bf9782af.js.gz +0 -0
  505. codex/static_root/assets/main-CWTxsB_K.js +0 -34
  506. codex/static_root/assets/main-CWTxsB_K.js.br +0 -0
  507. codex/static_root/assets/main-CWTxsB_K.js.gz +0 -0
  508. codex/static_root/assets/main-CZN13qLI.12debfe1e227.css.br +0 -0
  509. codex/static_root/assets/main-CZN13qLI.css.br +0 -0
  510. codex/static_root/assets/pager-full-pdf-BPlguGsn.12749407ef31.js +0 -1
  511. codex/static_root/assets/pager-full-pdf-BPlguGsn.12749407ef31.js.br +0 -0
  512. codex/static_root/assets/pager-full-pdf-BPlguGsn.12749407ef31.js.gz +0 -0
  513. codex/static_root/assets/pager-full-pdf-BPlguGsn.js +0 -1
  514. codex/static_root/assets/pager-full-pdf-BPlguGsn.js.br +0 -0
  515. codex/static_root/assets/pager-full-pdf-BPlguGsn.js.gz +0 -0
  516. codex/static_root/assets/pagination-toolbar-BBoV7kGz.3812691bafd5.js.br +0 -0
  517. codex/static_root/assets/pagination-toolbar-BBoV7kGz.3812691bafd5.js.gz +0 -0
  518. codex/static_root/assets/pagination-toolbar-BBoV7kGz.js.br +0 -0
  519. codex/static_root/assets/pagination-toolbar-BBoV7kGz.js.gz +0 -0
  520. codex/static_root/assets/pagination-toolbar-BMm-LmG-.92cfb20daeb9.css +0 -1
  521. codex/static_root/assets/pagination-toolbar-BMm-LmG-.92cfb20daeb9.css.br +0 -0
  522. codex/static_root/assets/pagination-toolbar-BMm-LmG-.92cfb20daeb9.css.gz +0 -0
  523. codex/static_root/assets/pagination-toolbar-BMm-LmG-.css +0 -1
  524. codex/static_root/assets/pagination-toolbar-BMm-LmG-.css.br +0 -0
  525. codex/static_root/assets/pagination-toolbar-BMm-LmG-.css.gz +0 -0
  526. codex/static_root/assets/pdf-doc-DY8a-Suh.4ef483220f83.js.br +0 -0
  527. codex/static_root/assets/pdf-doc-DY8a-Suh.4ef483220f83.js.gz +0 -0
  528. codex/static_root/assets/pdf-doc-DY8a-Suh.js.br +0 -0
  529. codex/static_root/assets/pdf-doc-DY8a-Suh.js.gz +0 -0
  530. codex/static_root/assets/reader-BUEw0RYD.css.br +0 -0
  531. codex/static_root/assets/reader-BUEw0RYD.e084c3b621d4.css.br +0 -0
  532. codex/static_root/assets/reader-Dqa95yj4.a16f078ebed6.js.br +0 -0
  533. codex/static_root/assets/reader-Dqa95yj4.a16f078ebed6.js.gz +0 -0
  534. codex/static_root/assets/reader-Dqa95yj4.js.br +0 -0
  535. codex/static_root/assets/reader-Dqa95yj4.js.gz +0 -0
  536. codex/static_root/assets/relation-chips-DnkUXW6y.ae4d455a85e4.js.br +0 -0
  537. codex/static_root/assets/relation-chips-DnkUXW6y.ae4d455a85e4.js.gz +0 -0
  538. codex/static_root/assets/relation-chips-DnkUXW6y.js.br +0 -0
  539. codex/static_root/assets/relation-chips-DnkUXW6y.js.gz +0 -0
  540. codex/static_root/assets/settings-drawer-CrJwaDTj.0ea90e35f48a.js.br +0 -0
  541. codex/static_root/assets/settings-drawer-CrJwaDTj.0ea90e35f48a.js.gz +0 -0
  542. codex/static_root/assets/settings-drawer-CrJwaDTj.js.br +0 -0
  543. codex/static_root/assets/settings-drawer-CrJwaDTj.js.gz +0 -0
  544. codex/static_root/assets/settings-drawer-d-7mkVdG.15838d8ecd33.css.br +0 -0
  545. codex/static_root/assets/settings-drawer-d-7mkVdG.15838d8ecd33.css.gz +0 -0
  546. codex/static_root/assets/settings-drawer-d-7mkVdG.css.br +0 -0
  547. codex/static_root/assets/settings-drawer-d-7mkVdG.css.gz +0 -0
  548. codex/static_root/assets/ssrBoot-yM9n-WhK.33a34fb51966.js +0 -1
  549. codex/static_root/assets/ssrBoot-yM9n-WhK.33a34fb51966.js.br +0 -0
  550. codex/static_root/assets/ssrBoot-yM9n-WhK.33a34fb51966.js.gz +0 -0
  551. codex/static_root/assets/ssrBoot-yM9n-WhK.js +0 -1
  552. codex/static_root/assets/ssrBoot-yM9n-WhK.js.br +0 -0
  553. codex/static_root/assets/ssrBoot-yM9n-WhK.js.gz +0 -0
  554. codex/static_root/assets/stats-tab-R3_2S5KJ.1b8dcb544e56.js.br +0 -0
  555. codex/static_root/assets/stats-tab-R3_2S5KJ.1b8dcb544e56.js.gz +0 -0
  556. codex/static_root/assets/stats-tab-R3_2S5KJ.js.br +0 -0
  557. codex/static_root/assets/stats-tab-R3_2S5KJ.js.gz +0 -0
  558. codex/static_root/assets/task-tab-DcwExi-z.7745f5bdd4f6.js.br +0 -0
  559. codex/static_root/assets/task-tab-DcwExi-z.7745f5bdd4f6.js.gz +0 -0
  560. codex/static_root/assets/task-tab-DcwExi-z.js.br +0 -0
  561. codex/static_root/assets/task-tab-DcwExi-z.js.gz +0 -0
  562. codex/static_root/assets/unauthorized-ChdZFt-1.8a4ba062faeb.css +0 -1
  563. codex/static_root/assets/unauthorized-ChdZFt-1.8a4ba062faeb.css.br +0 -0
  564. codex/static_root/assets/unauthorized-ChdZFt-1.8a4ba062faeb.css.gz +0 -0
  565. codex/static_root/assets/unauthorized-ChdZFt-1.css +0 -1
  566. codex/static_root/assets/unauthorized-ChdZFt-1.css.br +0 -0
  567. codex/static_root/assets/unauthorized-ChdZFt-1.css.gz +0 -0
  568. codex/static_root/assets/unauthorized-DQOfB_66.153b77e5dba9.js.br +0 -0
  569. codex/static_root/assets/unauthorized-DQOfB_66.153b77e5dba9.js.gz +0 -0
  570. codex/static_root/assets/unauthorized-DQOfB_66.js.br +0 -0
  571. codex/static_root/assets/unauthorized-DQOfB_66.js.gz +0 -0
  572. codex/static_root/assets/user-tab-BKyrq81A.7412792291c7.js.br +0 -0
  573. codex/static_root/assets/user-tab-BKyrq81A.7412792291c7.js.gz +0 -0
  574. codex/static_root/assets/user-tab-BKyrq81A.js.br +0 -0
  575. codex/static_root/assets/user-tab-BKyrq81A.js.gz +0 -0
  576. codex/static_root/manifest.d1e85b766092.json +0 -760
  577. codex/static_root/manifest.d1e85b766092.json.br +0 -0
  578. codex/static_root/manifest.d1e85b766092.json.gz +0 -0
  579. {codex-1.8.16.dist-info → codex-1.8.17.dist-info}/WHEEL +0 -0
  580. {codex-1.8.16.dist-info → codex-1.8.17.dist-info}/entry_points.txt +0 -0
Binary file
Binary file
@@ -1 +1 @@
1
- {"paths": {"rest_framework/docs/img/grid.png": "rest_framework/docs/img/grid.a4b938cf382b.png", "rest_framework/docs/img/favicon.ico": "rest_framework/docs/img/favicon.5195b4d0f3eb.ico", "rest_framework/docs/css/base.css": "rest_framework/docs/css/base.e630f8f4990e.css", "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/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/js/api.js": "rest_framework/docs/js/api.18a5ba8a1bd8.js", "rest_framework/fonts/glyphicons-halflings-regular.svg": "rest_framework/fonts/glyphicons-halflings-regular.08eda92397ae.svg", "rest_framework/fonts/fontawesome-webfont.svg": "rest_framework/fonts/fontawesome-webfont.83e37a11f9d7.svg", "rest_framework/fonts/fontawesome-webfont.ttf": "rest_framework/fonts/fontawesome-webfont.dcb26c7239d8.ttf", "rest_framework/fonts/glyphicons-halflings-regular.woff": "rest_framework/fonts/glyphicons-halflings-regular.fa2772327f55.woff", "rest_framework/fonts/glyphicons-halflings-regular.woff2": "rest_framework/fonts/glyphicons-halflings-regular.448c34a56d69.woff2", "rest_framework/fonts/glyphicons-halflings-regular.ttf": "rest_framework/fonts/glyphicons-halflings-regular.e18bbf611f2a.ttf", "rest_framework/fonts/glyphicons-halflings-regular.eot": "rest_framework/fonts/glyphicons-halflings-regular.f4769f9bdb74.eot", "rest_framework/fonts/fontawesome-webfont.woff": "rest_framework/fonts/fontawesome-webfont.3293616ec0c6.woff", "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/bootstrap.min.css": "rest_framework/css/bootstrap.min.f17d4516b026.css", "rest_framework/css/prettify.css": "rest_framework/css/prettify.a987f72342ee.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": "rest_framework/css/bootstrap-theme.min.1d4b05b397c3.css", "rest_framework/css/bootstrap-theme.min.css.map": "rest_framework/css/bootstrap-theme.min.css.51806092cc05.map", "rest_framework/css/default.css": "rest_framework/css/default.789dfb5732d7.css", "rest_framework/css/bootstrap-tweaks.css": "rest_framework/css/bootstrap-tweaks.ee4ee6acf9eb.css", "rest_framework/js/bootstrap.min.js": "rest_framework/js/bootstrap.min.2f34b630ffe3.js", "rest_framework/js/jquery-3.7.1.min.js": "rest_framework/js/jquery-3.7.1.min.2c872dbe60f4.js", "rest_framework/js/load-ajax-form.js": "rest_framework/js/load-ajax-form.8cdb3a9f3466.js", "rest_framework/js/prettify-min.js": "rest_framework/js/prettify-min.709bfcc456c6.js", "rest_framework/js/default.js": "rest_framework/js/default.5b08897dbdc3.js", "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/coreapi-0.1.1.js": "rest_framework/js/coreapi-0.1.1.8851fb9336c9.js", "pwa/offline.html": "pwa/offline.7bfaf9f94bf9.html", "img/logo-maskable-180.webp": "img/logo-maskable-180.c58d966aa64e.webp", "img/logo-maskable.svg": "img/logo-maskable.aeef5c2fffc8.svg", "img/imprint.svg": "img/imprint.3ca7a779b949.svg", "img/logo-32.webp": "img/logo-32.5688944495bf.webp", "img/folder.svg": "img/folder.83168d8d3119.svg", "img/logo.svg": "img/logo.00c902973831.svg", "img/volume.svg": "img/volume.516ec0c3018d.svg", "img/missing-cover.svg": "img/missing-cover.7329518c5972.svg", "img/missing-cover-165.webp": "img/missing-cover-165.ef301b6fcf8c.webp", "img/story-arc.svg": "img/story-arc.884f7b1d95bd.svg", "img/publisher.svg": "img/publisher.82d378fcd601.svg", "img/series.svg": "img/series.b092bbac0c2a.svg", "assets/VCombobox-D3yUbBJX.css": "assets/VCombobox-D3yUbBJX.341d3f641979.css", "assets/pagination-toolbar-BMm-LmG-.css": "assets/pagination-toolbar-BMm-LmG-.92cfb20daeb9.css", "assets/admin-settings-button-progress-Cks9_KN-.css": "assets/admin-settings-button-progress-Cks9_KN-.a592809d4008.css", "assets/relation-chips-WaEhcyda.css": "assets/relation-chips-WaEhcyda.870ff99b3d8b.css", "assets/VSelectionControl-R4GtShoa.css": "assets/VSelectionControl-R4GtShoa.f3ebc2149a3a.css", "assets/task-tab-DcwExi-z.js": "assets/task-tab-DcwExi-z.7745f5bdd4f6.js", "assets/VRadioGroup-CU9nYUHk.js": "assets/VRadioGroup-CU9nYUHk.a25611eb0aff.js", "assets/admin-menu-BdgFc4sK.css": "assets/admin-menu-BdgFc4sK.3a1221757854.css", "assets/VExpansionPanels-B8KjM0Qi.css": "assets/VExpansionPanels-B8KjM0Qi.e4aca21014f2.css", "assets/admin-settings-button-progress-HmQvm62f.js": "assets/admin-settings-button-progress-HmQvm62f.6d2798eb3429.js", "assets/VWindowItem-CWv03gfN.css": "assets/VWindowItem-CWv03gfN.ddad20bc51ba.css", "assets/user-tab-BKyrq81A.js": "assets/user-tab-BKyrq81A.7412792291c7.js", "assets/VCombobox-O2BHnDUr.js": "assets/VCombobox-O2BHnDUr.88a9aab6b95b.js", "assets/task-tab-DvSJmG8K.css": "assets/task-tab-DvSJmG8K.daf7fb2dfecf.css", "assets/index-Czf-fUM7.css": "assets/index-Czf-fUM7.50a7466d956f.css", "assets/unauthorized-ChdZFt-1.css": "assets/unauthorized-ChdZFt-1.8a4ba062faeb.css", "assets/reader-Dqa95yj4.js": "assets/reader-Dqa95yj4.a16f078ebed6.js", "assets/confirm-dialog-YfC8mRQA.css": "assets/confirm-dialog-YfC8mRQA.be37e8f67e0f.css", "assets/materialdesignicons-webfont-CSr8KVlo.eot": "assets/materialdesignicons-webfont-CSr8KVlo.8ced95a05e3c.eot", "assets/pagination-toolbar-BBoV7kGz.js": "assets/pagination-toolbar-BBoV7kGz.3812691bafd5.js", "assets/main-CWTxsB_K.js": "assets/main-CWTxsB_K.4890bf9782af.js", "assets/http-error-BmuMBbvn.js": "assets/http-error-BmuMBbvn.9f6b9dc6dc16.js", "assets/datetime-column-CzIyyJDK.js": "assets/datetime-column-CzIyyJDK.f9be11efa2e2.js", "assets/materialdesignicons-webfont-B7mPwVP_.ttf": "assets/materialdesignicons-webfont-B7mPwVP_.6e435534bd35.ttf", "assets/VDialog-BN4XvYQH.css": "assets/VDialog-BN4XvYQH.b7408d9d3262.css", "assets/materialdesignicons-webfont-Dp5v-WZN.woff2": "assets/materialdesignicons-webfont-Dp5v-WZN.1d7bcee1b302.woff2", "assets/materialdesignicons-webfont-PXm3-2wK.woff": "assets/materialdesignicons-webfont-PXm3-2wK.026b7ac9c43c.woff", "assets/browser-CS6VSg0_.css": "assets/browser-CS6VSg0_.9a6e8eda0520.css", "assets/relation-chips-DnkUXW6y.js": "assets/relation-chips-DnkUXW6y.ae4d455a85e4.js", "assets/stats-tab-Dpqh5pF9.css": "assets/stats-tab-Dpqh5pF9.8dba36f90032.css", "assets/group-tab-FI6afuX5.js": "assets/group-tab-FI6afuX5.a569809fb228.js", "assets/pdf-doc-DxqOo2k2.css": "assets/pdf-doc-DxqOo2k2.42496ffbf35b.css", "assets/confirm-dialog-X8W3euvh.js": "assets/confirm-dialog-X8W3euvh.d9b87f1eeefe.js", "assets/flag-tab-BtZ098bQ.js": "assets/flag-tab-BtZ098bQ.2c417cda39c8.js", "assets/index-DXqyJRWg.js": "assets/index-DXqyJRWg.58b55c49a1ba.js", "assets/main-CZN13qLI.css": "assets/main-CZN13qLI.12debfe1e227.css", "assets/http-error-CB3k5P-n.css": "assets/http-error-CB3k5P-n.82d886ac81c7.css", "assets/VWindowItem-62YwEvjG.js": "assets/VWindowItem-62YwEvjG.b8bdaea824b5.js", "assets/VRadioGroup-Cp9mZ7cb.css": "assets/VRadioGroup-Cp9mZ7cb.8e3741381961.css", "assets/VTable-BsI6FsWH.css": "assets/VTable-BsI6FsWH.d4c54d44a5ab.css", "assets/VDialog-mZQ1Va-c.js": "assets/VDialog-mZQ1Va-c.d771d0ac6517.js", "assets/forwardRefs-CecUXkvN.css": "assets/forwardRefs-CecUXkvN.d595d41108e3.css", "assets/VSelect-BvTTr4RP.css": "assets/VSelect-BvTTr4RP.be69766e6916.css", "assets/VDivider-CCqJA_fj.css": "assets/VDivider-CCqJA_fj.b56fac1426ae.css", "assets/browser-BQva2GCO.js": "assets/browser-BQva2GCO.2748e733040b.js", "assets/VSelectionControl-DFaQ_klW.js": "assets/VSelectionControl-DFaQ_klW.4c77eed94aca.js", "assets/VDivider-CHTeIL4W.js": "assets/VDivider-CHTeIL4W.13805a003963.js", "assets/VForm-DxBt30-N.css": "assets/VForm-DxBt30-N.138c0b89b6fc.css", "assets/admin-BStn9kk0.js": "assets/admin-BStn9kk0.b50ab54d4a08.js", "assets/flag-tab-CESc_7Pq.css": "assets/flag-tab-CESc_7Pq.2260edfa4c38.css", "assets/change-password-dialog-CEdhZwC3.js": "assets/change-password-dialog-CEdhZwC3.c41faf4b7311.js", "assets/library-tab-DlGRxHD-.js": "assets/library-tab-DlGRxHD-.e2e3049de8fe.js", "assets/admin-menu-8MqbD6SS.js": "assets/admin-menu-8MqbD6SS.de80d9c3a174.js", "assets/datetime-column-Bt7J1qEf.css": "assets/datetime-column-Bt7J1qEf.d83164b4d4cb.css", "assets/VTable-MenML-QS.js": "assets/VTable-MenML-QS.8d54c08274e1.js", "assets/library-tab-DIIxAUNe.css": "assets/library-tab-DIIxAUNe.10ec98cfe11d.css", "assets/VForm-Dt0Uesri.js": "assets/VForm-Dt0Uesri.5f3eb2e10d58.js", "assets/settings-drawer-CrJwaDTj.js": "assets/settings-drawer-CrJwaDTj.0ea90e35f48a.js", "assets/filter-BfEbIpVl.js": "assets/filter-BfEbIpVl.ec48ef2a75bc.js", "assets/VExpansionPanels-B8bQXRWn.js": "assets/VExpansionPanels-B8bQXRWn.de33285def27.js", "assets/VCheckboxBtn-zhUZJChm.js": "assets/VCheckboxBtn-zhUZJChm.9761785b500b.js", "assets/admin-ri1JM4_Z.js": "assets/admin-ri1JM4_Z.fc516b4b96f2.js", "assets/copy-to-clipboard-DoUvDJVx.js": "assets/copy-to-clipboard-DoUvDJVx.bec27f144aca.js", "assets/forwardRefs-CnxuGwpi.js": "assets/forwardRefs-CnxuGwpi.1c01bc84723c.js", "assets/VSelect-DpnHasju.js": "assets/VSelect-DpnHasju.6b0e31d58987.js", "assets/VCheckbox-CvH8ekHL.css": "assets/VCheckbox-CvH8ekHL.016ed8d222c4.css", "assets/group-tab-CQ_Qw6h8.css": "assets/group-tab-CQ_Qw6h8.078d0a9225ba.css", "assets/settings-drawer-d-7mkVdG.css": "assets/settings-drawer-d-7mkVdG.15838d8ecd33.css", "assets/reader-BUEw0RYD.css": "assets/reader-BUEw0RYD.e084c3b621d4.css", "assets/stats-tab-R3_2S5KJ.js": "assets/stats-tab-R3_2S5KJ.1b8dcb544e56.js", "assets/pdf-doc-DY8a-Suh.js": "assets/pdf-doc-DY8a-Suh.4ef483220f83.js", "assets/ssrBoot-yM9n-WhK.js": "assets/ssrBoot-yM9n-WhK.33a34fb51966.js", "assets/unauthorized-DQOfB_66.js": "assets/unauthorized-DQOfB_66.153b77e5dba9.js", "assets/VCheckbox-BY6G_rgf.js": "assets/VCheckbox-BY6G_rgf.269e45107a7a.js", "assets/pager-full-pdf-BPlguGsn.js": "assets/pager-full-pdf-BPlguGsn.12749407ef31.js", "assets/change-password-dialog-DL8UMjmX.css": "assets/change-password-dialog-DL8UMjmX.526f97e577e7.css", "assets/admin-DJCVf2PA.css": "assets/admin-DJCVf2PA.7ba26fd73264.css", "robots.txt": "robots.b6216d61c03e.txt", "manifest.json": "manifest.d1e85b766092.json"}, "version": "1.1", "hash": "aea5ed73a921"}
1
+ {"paths": {"rest_framework/docs/img/grid.png": "rest_framework/docs/img/grid.a4b938cf382b.png", "rest_framework/docs/img/favicon.ico": "rest_framework/docs/img/favicon.5195b4d0f3eb.ico", "rest_framework/docs/css/base.css": "rest_framework/docs/css/base.e630f8f4990e.css", "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/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/js/api.js": "rest_framework/docs/js/api.18a5ba8a1bd8.js", "rest_framework/fonts/glyphicons-halflings-regular.svg": "rest_framework/fonts/glyphicons-halflings-regular.08eda92397ae.svg", "rest_framework/fonts/fontawesome-webfont.svg": "rest_framework/fonts/fontawesome-webfont.83e37a11f9d7.svg", "rest_framework/fonts/fontawesome-webfont.ttf": "rest_framework/fonts/fontawesome-webfont.dcb26c7239d8.ttf", "rest_framework/fonts/glyphicons-halflings-regular.woff": "rest_framework/fonts/glyphicons-halflings-regular.fa2772327f55.woff", "rest_framework/fonts/glyphicons-halflings-regular.woff2": "rest_framework/fonts/glyphicons-halflings-regular.448c34a56d69.woff2", "rest_framework/fonts/glyphicons-halflings-regular.ttf": "rest_framework/fonts/glyphicons-halflings-regular.e18bbf611f2a.ttf", "rest_framework/fonts/glyphicons-halflings-regular.eot": "rest_framework/fonts/glyphicons-halflings-regular.f4769f9bdb74.eot", "rest_framework/fonts/fontawesome-webfont.woff": "rest_framework/fonts/fontawesome-webfont.3293616ec0c6.woff", "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/bootstrap.min.css": "rest_framework/css/bootstrap.min.f17d4516b026.css", "rest_framework/css/prettify.css": "rest_framework/css/prettify.a987f72342ee.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": "rest_framework/css/bootstrap-theme.min.1d4b05b397c3.css", "rest_framework/css/bootstrap-theme.min.css.map": "rest_framework/css/bootstrap-theme.min.css.51806092cc05.map", "rest_framework/css/default.css": "rest_framework/css/default.789dfb5732d7.css", "rest_framework/css/bootstrap-tweaks.css": "rest_framework/css/bootstrap-tweaks.ee4ee6acf9eb.css", "rest_framework/js/bootstrap.min.js": "rest_framework/js/bootstrap.min.2f34b630ffe3.js", "rest_framework/js/jquery-3.7.1.min.js": "rest_framework/js/jquery-3.7.1.min.2c872dbe60f4.js", "rest_framework/js/load-ajax-form.js": "rest_framework/js/load-ajax-form.8cdb3a9f3466.js", "rest_framework/js/prettify-min.js": "rest_framework/js/prettify-min.709bfcc456c6.js", "rest_framework/js/default.js": "rest_framework/js/default.5b08897dbdc3.js", "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/coreapi-0.1.1.js": "rest_framework/js/coreapi-0.1.1.8851fb9336c9.js", "pwa/offline.html": "pwa/offline.7bfaf9f94bf9.html", "img/logo-maskable-180.webp": "img/logo-maskable-180.c58d966aa64e.webp", "img/logo-maskable.svg": "img/logo-maskable.aeef5c2fffc8.svg", "img/imprint.svg": "img/imprint.3ca7a779b949.svg", "img/logo-32.webp": "img/logo-32.5688944495bf.webp", "img/folder.svg": "img/folder.83168d8d3119.svg", "img/logo.svg": "img/logo.00c902973831.svg", "img/volume.svg": "img/volume.516ec0c3018d.svg", "img/missing-cover.svg": "img/missing-cover.7329518c5972.svg", "img/missing-cover-165.webp": "img/missing-cover-165.ef301b6fcf8c.webp", "img/story-arc.svg": "img/story-arc.884f7b1d95bd.svg", "img/publisher.svg": "img/publisher.82d378fcd601.svg", "img/series.svg": "img/series.b092bbac0c2a.svg", "assets/VCheckboxBtn-BL2_20_y.js": "assets/VCheckboxBtn-BL2_20_y.e3dea72fc366.js", "assets/VCombobox-D3yUbBJX.css": "assets/VCombobox-D3yUbBJX.341d3f641979.css", "assets/admin-settings-button-progress-Cks9_KN-.css": "assets/admin-settings-button-progress-Cks9_KN-.a592809d4008.css", "assets/relation-chips-WaEhcyda.css": "assets/relation-chips-WaEhcyda.870ff99b3d8b.css", "assets/filter-BtcXW5zO.js": "assets/filter-BtcXW5zO.75aeec1895a1.js", "assets/pdf-doc-BJJ9OK87.js": "assets/pdf-doc-BJJ9OK87.11b34dd73a86.js", "assets/confirm-dialog-DOcInEYk.js": "assets/confirm-dialog-DOcInEYk.8249b3c5e331.js", "assets/flag-tab-C2myvzRx.js": "assets/flag-tab-C2myvzRx.5659c0293fe6.js", "assets/main-CqGLcuU5.css": "assets/main-CqGLcuU5.4419befb30af.css", "assets/task-tab-cAwSMU8y.js": "assets/task-tab-cAwSMU8y.612a5c813dcd.js", "assets/admin-menu-BdgFc4sK.css": "assets/admin-menu-BdgFc4sK.3a1221757854.css", "assets/forwardRefs-BsADouR7.css": "assets/forwardRefs-BsADouR7.63a958497048.css", "assets/task-tab-DvSJmG8K.css": "assets/task-tab-DvSJmG8K.daf7fb2dfecf.css", "assets/http-error-DUBqZFpY.css": "assets/http-error-DUBqZFpY.6f8e0c765b4f.css", "assets/index-Czf-fUM7.css": "assets/index-Czf-fUM7.50a7466d956f.css", "assets/VSelect-DcgePQge.js": "assets/VSelect-DcgePQge.89929a190a04.js", "assets/confirm-dialog-YfC8mRQA.css": "assets/confirm-dialog-YfC8mRQA.be37e8f67e0f.css", "assets/materialdesignicons-webfont-CSr8KVlo.eot": "assets/materialdesignicons-webfont-CSr8KVlo.8ced95a05e3c.eot", "assets/browser-CWALWjwb.css": "assets/browser-CWALWjwb.cf58ec0ffddb.css", "assets/reader-xFPm8370.js": "assets/reader-xFPm8370.f406b46e5e21.js", "assets/stats-tab-CJ448hBZ.js": "assets/stats-tab-CJ448hBZ.84f50d511624.js", "assets/VDialog-CZkKUrky.js": "assets/VDialog-CZkKUrky.ac0451670402.js", "assets/settings-drawer-CfBuea69.js": "assets/settings-drawer-CfBuea69.013baf97e49e.js", "assets/VForm-Bz_gI_Wh.js": "assets/VForm-Bz_gI_Wh.1e32d0faee10.js", "assets/materialdesignicons-webfont-B7mPwVP_.ttf": "assets/materialdesignicons-webfont-B7mPwVP_.6e435534bd35.ttf", "assets/materialdesignicons-webfont-Dp5v-WZN.woff2": "assets/materialdesignicons-webfont-Dp5v-WZN.1d7bcee1b302.woff2", "assets/materialdesignicons-webfont-PXm3-2wK.woff": "assets/materialdesignicons-webfont-PXm3-2wK.026b7ac9c43c.woff", "assets/change-password-dialog-CsA0dV8F.js": "assets/change-password-dialog-CsA0dV8F.993dc1de7cd9.js", "assets/VTable-DwP4GgFJ.js": "assets/VTable-DwP4GgFJ.f64a953b0f46.js", "assets/VDivider-BXArtxT-.js": "assets/VDivider-BXArtxT-.e522dd8902c8.js", "assets/VSelectionControl-BmYSXANf.css": "assets/VSelectionControl-BmYSXANf.61cf72c55175.css", "assets/stats-tab-Dpqh5pF9.css": "assets/stats-tab-Dpqh5pF9.8dba36f90032.css", "assets/pdf-doc-DxqOo2k2.css": "assets/pdf-doc-DxqOo2k2.42496ffbf35b.css", "assets/ssrBoot-BDUblGRH.js": "assets/ssrBoot-BDUblGRH.4f2d90f894ec.js", "assets/unauthorized-MToUu3g6.js": "assets/unauthorized-MToUu3g6.7c5b4e09d277.js", "assets/unauthorized-B2rYLD-2.css": "assets/unauthorized-B2rYLD-2.634a6b5154b7.css", "assets/VRadioGroup-Cp9mZ7cb.css": "assets/VRadioGroup-Cp9mZ7cb.8e3741381961.css", "assets/admin-0MogMIWh.js": "assets/admin-0MogMIWh.935f3602f03c.js", "assets/datetime-column-BbSapWKr.js": "assets/datetime-column-BbSapWKr.be1674c183f8.js", "assets/VTable-BsI6FsWH.css": "assets/VTable-BsI6FsWH.d4c54d44a5ab.css", "assets/pager-full-pdf-BNEwAMUk.js": "assets/pager-full-pdf-BNEwAMUk.38c6e07e1759.js", "assets/admin-vsdk5Rss.js": "assets/admin-vsdk5Rss.c942515d69e6.js", "assets/VSelect-Bp3PUbea.css": "assets/VSelect-Bp3PUbea.a69e7f3360ec.css", "assets/VDivider-CCqJA_fj.css": "assets/VDivider-CCqJA_fj.b56fac1426ae.css", "assets/library-tab-DzW9vEih.js": "assets/library-tab-DzW9vEih.225e01869860.js", "assets/admin-settings-button-progress-BWW5U-_2.js": "assets/admin-settings-button-progress-BWW5U-_2.574a05a140cd.js", "assets/forwardRefs-8AR4cmsy.js": "assets/forwardRefs-8AR4cmsy.28c24ed68c07.js", "assets/main-Df6H3rcv.js": "assets/main-Df6H3rcv.8ad231e2da5c.js", "assets/VRadioGroup-BNlf_ga1.js": "assets/VRadioGroup-BNlf_ga1.739298534bda.js", "assets/VWindowItem-DqNaT6b1.css": "assets/VWindowItem-DqNaT6b1.d2f9460fb23b.css", "assets/admin-DEoSGrPH.css": "assets/admin-DEoSGrPH.644bc371ba3c.css", "assets/VForm-DxBt30-N.css": "assets/VForm-DxBt30-N.138c0b89b6fc.css", "assets/VExpansionPanels-Dyw0hWW-.css": "assets/VExpansionPanels-Dyw0hWW-.e3fa1db9f5b5.css", "assets/flag-tab-CESc_7Pq.css": "assets/flag-tab-CESc_7Pq.2260edfa4c38.css", "assets/browser-DL9hPskM.js": "assets/browser-DL9hPskM.0db706bb532e.js", "assets/datetime-column-Bt7J1qEf.css": "assets/datetime-column-Bt7J1qEf.d83164b4d4cb.css", "assets/library-tab-DIIxAUNe.css": "assets/library-tab-DIIxAUNe.10ec98cfe11d.css", "assets/VSelectionControl-BOfjazsp.js": "assets/VSelectionControl-BOfjazsp.a8fe60521481.js", "assets/admin-menu-CxWZ4NVB.js": "assets/admin-menu-CxWZ4NVB.1cb05f15fcfe.js", "assets/http-error-DycyYGJ1.js": "assets/http-error-DycyYGJ1.68755b67ed72.js", "assets/relation-chips-CaoqjI00.js": "assets/relation-chips-CaoqjI00.d4ff4022749b.js", "assets/copy-to-clipboard-DoUvDJVx.js": "assets/copy-to-clipboard-DoUvDJVx.bec27f144aca.js", "assets/pagination-toolbar-CXcyeTVQ.css": "assets/pagination-toolbar-CXcyeTVQ.c7e64e3c3af4.css", "assets/VExpansionPanels-Et85Xw04.js": "assets/VExpansionPanels-Et85Xw04.1a332e39be39.js", "assets/VCombobox-D4B1V7pC.js": "assets/VCombobox-D4B1V7pC.ee65a2bb85cd.js", "assets/VCheckbox-CvH8ekHL.css": "assets/VCheckbox-CvH8ekHL.016ed8d222c4.css", "assets/settings-drawer-D5PWKw08.css": "assets/settings-drawer-D5PWKw08.4b34133b25a7.css", "assets/group-tab-vFOTxxPA.js": "assets/group-tab-vFOTxxPA.d343b05fb11f.js", "assets/group-tab-CQ_Qw6h8.css": "assets/group-tab-CQ_Qw6h8.078d0a9225ba.css", "assets/VCheckbox-C85C3qG-.js": "assets/VCheckbox-C85C3qG-.aaf01232a24e.js", "assets/reader-CD5dUsCb.css": "assets/reader-CD5dUsCb.360b55e6c218.css", "assets/index-BqvRLlbQ.js": "assets/index-BqvRLlbQ.bbc93c5e1124.js", "assets/pagination-toolbar--v4Pvgn4.js": "assets/pagination-toolbar--v4Pvgn4.19d9227abe73.js", "assets/VWindowItem-D0E4VZDp.js": "assets/VWindowItem-D0E4VZDp.05007113eed6.js", "assets/VDialog-wubh7-W_.css": "assets/VDialog-wubh7-W_.db3957bfe939.css", "assets/user-tab-CD2PK4F1.js": "assets/user-tab-CD2PK4F1.8c34ff50a86c.js", "assets/change-password-dialog-DL8UMjmX.css": "assets/change-password-dialog-DL8UMjmX.526f97e577e7.css", "robots.txt": "robots.b6216d61c03e.txt", "manifest.json": "manifest.a56030879046.json"}, "version": "1.1", "hash": "5b2c45c2d565"}
codex/util.py CHANGED
@@ -5,7 +5,7 @@ from collections.abc import Mapping
5
5
 
6
6
  def max_none(*args):
7
7
  """None aware math.max."""
8
- return max(filter(None.__ne__, args), default=None) # ty: ignore[no-matching-overload]
8
+ return max(filter(lambda x: x is not None, args), default=None)
9
9
 
10
10
 
11
11
  def mapping_to_dict(data):
@@ -4,7 +4,7 @@ from collections.abc import Sequence
4
4
 
5
5
  from django.db import OperationalError
6
6
  from django.db.models.query import Q
7
- from django.http.response import StreamingHttpResponse
7
+ from django.http import FileResponse, HttpResponse
8
8
  from drf_spectacular.types import OpenApiTypes
9
9
  from drf_spectacular.utils import extend_schema
10
10
  from loguru import logger
@@ -26,7 +26,6 @@ from codex.views.const import (
26
26
  MISSING_COVER_NAME_MAP,
27
27
  STATIC_IMG_PATH,
28
28
  )
29
- from codex.views.util import chunker
30
29
 
31
30
 
32
31
  class WEBPRenderer(BaseRenderer):
@@ -127,7 +126,7 @@ class CoverView(BrowserAnnotateOrderView):
127
126
  return cover_path, content_type
128
127
 
129
128
  def _get_cover_data(self, pk, *, custom: bool):
130
- thumb_buffer = None
129
+ thumb_buffer = False
131
130
  content_type = "image/webp"
132
131
 
133
132
  cover_path = CoverPathMixin.get_cover_path(pk, custom=custom)
@@ -140,8 +139,7 @@ class CoverView(BrowserAnnotateOrderView):
140
139
  elif cover_path.stat().st_size == 0:
141
140
  cover_path, content_type = self._get_missing_cover_path()
142
141
 
143
- cover_file = thumb_buffer if thumb_buffer else cover_path.open("rb")
144
- return cover_file, content_type
142
+ return thumb_buffer, cover_path, content_type
145
143
 
146
144
  @extend_schema(
147
145
  parameters=[BrowserAnnotateOrderView.input_serializer_class],
@@ -156,7 +154,11 @@ class CoverView(BrowserAnnotateOrderView):
156
154
  self._handle_operational_error(exc)
157
155
  pk = 0
158
156
  custom = False
159
- cover_file, content_type = self._get_cover_data(pk, custom=custom)
160
- return StreamingHttpResponse(chunker(cover_file), content_type=content_type)
157
+ cover_buffer, cover_path, content_type = self._get_cover_data(
158
+ pk, custom=custom
159
+ )
160
+ if cover_buffer:
161
+ return HttpResponse(cover_buffer, content_type=content_type)
162
+ return FileResponse(cover_path.open("rb"), content_type=content_type)
161
163
  except Exception:
162
164
  logger.exception("Get cover")
@@ -1,9 +1,7 @@
1
1
  """Views for reading comic books."""
2
2
 
3
- from io import BytesIO
4
-
5
3
  from comicbox.box import Comicbox
6
- from django.http.response import StreamingHttpResponse
4
+ from django.http import HttpResponse
7
5
  from drf_spectacular.types import OpenApiTypes
8
6
  from drf_spectacular.utils import OpenApiParameter, extend_schema
9
7
  from loguru import logger
@@ -17,12 +15,8 @@ from codex.models.comic import Comic, FileType
17
15
  from codex.settings import COMICBOX_CONFIG, FALSY
18
16
  from codex.views.auth import AuthFilterAPIView
19
17
  from codex.views.bookmark import BookmarkAuthMixin
20
- from codex.views.util import chunker
21
18
 
22
19
  _PDF_MIME_TYPE = "application/pdf"
23
- # Most pages seem to be 2.5 Mb
24
- # largest pages I've seen were 9 Mb
25
- _PAGE_CHUNK_SIZE = (1024**2) * 3 # 3 Mb
26
20
 
27
21
 
28
22
  class IgnoreClientContentNegotiation(BaseContentNegotiation):
@@ -122,5 +116,4 @@ class ReaderPageView(BookmarkAuthMixin, AuthFilterAPIView):
122
116
  logger.warning(exc)
123
117
  raise NotFound(detail="comic page not found") from exc
124
118
  else:
125
- page_chunker = chunker(BytesIO(page_image), _PAGE_CHUNK_SIZE)
126
- return StreamingHttpResponse(page_chunker, content_type=content_type)
119
+ return HttpResponse(page_image, content_type=content_type)
codex/views/util.py CHANGED
@@ -5,9 +5,6 @@ from dataclasses import dataclass
5
5
 
6
6
  from typing_extensions import override
7
7
 
8
- # Maximum cover size is around 24 Kb
9
- DEFAULT_CHUNK_SIZE = 64 * 1024 # 64 Kb
10
-
11
8
 
12
9
  @dataclass
13
10
  class Route:
@@ -44,13 +41,3 @@ def pop_name(kwargs: Mapping):
44
41
  kwargs = dict(kwargs)
45
42
  kwargs.pop("name", None)
46
43
  return kwargs
47
-
48
-
49
- def chunker(open_file, chunk_size=DEFAULT_CHUNK_SIZE):
50
- """Asynchronous iterator for serving files."""
51
- with open_file:
52
- while True:
53
- if chunk := open_file.read(chunk_size):
54
- yield chunk
55
- else:
56
- break
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codex
3
- Version: 1.8.16
3
+ Version: 1.8.17
4
4
  Summary: A comic archive web server.
5
5
  Keywords: comic,cbz,cbr,cb7,cbt,pdf
6
6
  Author: AJ Slater
@@ -21,7 +21,7 @@ Requires-Dist: aioprocessing~=2.0
21
21
  Requires-Dist: ansicolors~=1.1
22
22
  Requires-Dist: bidict~=0.23
23
23
  Requires-Dist: channels~=4.2
24
- Requires-Dist: comicbox[pdf]>=2.0.4,<3.0
24
+ Requires-Dist: comicbox[pdf]>=2.0.6,<3.0
25
25
  Requires-Dist: dateparser~=1.2
26
26
  Requires-Dist: django~=5.2
27
27
  Requires-Dist: djangorestframework~=3.16
@@ -36,7 +36,7 @@ Requires-Dist: humanfriendly~=10.0
36
36
  Requires-Dist: humanize~=4.12
37
37
  Requires-Dist: hypercorn[h3]~=0.17
38
38
  Requires-Dist: nh3~=0.2
39
- Requires-Dist: psutil~=7.0.0
39
+ Requires-Dist: psutil~=7.1
40
40
  Requires-Dist: pyparsing~=3.2
41
41
  Requires-Dist: requests~=2.24
42
42
  Requires-Dist: typing-extensions~=4.14
@@ -46,9 +46,9 @@ Requires-Dist: websocket-client~=1.2
46
46
  Requires-Dist: whitenoise[brotli]~=6.0
47
47
  Requires-Dist: versio~=0.5
48
48
  Requires-Dist: zipstream-ng~=1.8
49
- Requires-Dist: pillow~=11.3
49
+ Requires-Dist: pillow~=12.0
50
50
  Requires-Dist: loguru~=0.7.3
51
- Requires-Python: >=3.10, <3.14
51
+ Requires-Python: >=3.10
52
52
  Project-URL: Demo, https://demo.codex-reader.app/
53
53
  Project-URL: Docker Image, https://hub.docker.com/r/ajslater/codex
54
54
  Project-URL: Documentation, https://codex-comic-reader.readthedocs.io