codex 1.7.11a0__py3-none-any.whl → 1.7.13__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 (652) hide show
  1. codex/choices/choices_to_json.py +1 -1
  2. codex/choices/reader.py +1 -0
  3. codex/librarian/bookmark/bookmarkd.py +46 -14
  4. codex/librarian/bookmark/tasks.py +7 -0
  5. codex/librarian/bookmark/update.py +1 -22
  6. codex/librarian/bookmark/user_active.py +37 -0
  7. codex/migrations/0013_int_issue_count_longer_charfields.py +1 -1
  8. codex/run.py +1 -1
  9. codex/serializers/reader.py +1 -0
  10. codex/serializers/route.py +3 -1
  11. codex/settings/settings.py +15 -14
  12. codex/startup.py +1 -2
  13. codex/static_root/assets/VCheckbox-CmDJN2RH.c0c8660af177.js +1 -0
  14. codex/static_root/assets/VCheckbox-CmDJN2RH.c0c8660af177.js.br +0 -0
  15. codex/static_root/assets/VCheckbox-CmDJN2RH.c0c8660af177.js.gz +0 -0
  16. codex/static_root/assets/VCheckbox-CmDJN2RH.js +1 -0
  17. codex/static_root/assets/VCheckbox-CmDJN2RH.js.br +0 -0
  18. codex/static_root/assets/VCheckbox-CmDJN2RH.js.gz +0 -0
  19. codex/static_root/assets/VCheckboxBtn-07Vspsxn.377350162ca6.js +1 -0
  20. codex/static_root/assets/VCheckboxBtn-07Vspsxn.377350162ca6.js.br +0 -0
  21. codex/static_root/assets/VCheckboxBtn-07Vspsxn.377350162ca6.js.gz +0 -0
  22. codex/static_root/assets/VCheckboxBtn-07Vspsxn.js +1 -0
  23. codex/static_root/assets/VCheckboxBtn-07Vspsxn.js.br +0 -0
  24. codex/static_root/assets/VCheckboxBtn-07Vspsxn.js.gz +0 -0
  25. codex/static_root/assets/VCombobox-CuTDA3lY.b53f8e0b7d58.js +1 -0
  26. codex/static_root/assets/VCombobox-CuTDA3lY.b53f8e0b7d58.js.br +0 -0
  27. codex/static_root/assets/VCombobox-CuTDA3lY.b53f8e0b7d58.js.gz +0 -0
  28. codex/static_root/assets/VCombobox-CuTDA3lY.js +1 -0
  29. codex/static_root/assets/VCombobox-CuTDA3lY.js.br +0 -0
  30. codex/static_root/assets/VCombobox-CuTDA3lY.js.gz +0 -0
  31. codex/static_root/assets/VCombobox-DHFthaP6.942336d23612.css +1 -0
  32. codex/static_root/assets/VCombobox-DHFthaP6.942336d23612.css.br +0 -0
  33. codex/static_root/assets/VCombobox-DHFthaP6.942336d23612.css.gz +0 -0
  34. codex/static_root/assets/VCombobox-DHFthaP6.css +1 -0
  35. codex/static_root/assets/VCombobox-DHFthaP6.css.br +0 -0
  36. codex/static_root/assets/VCombobox-DHFthaP6.css.gz +0 -0
  37. codex/static_root/assets/VDialog-DRj4eBrO.e2ce5d20029b.js +1 -0
  38. codex/static_root/assets/VDialog-DRj4eBrO.e2ce5d20029b.js.br +0 -0
  39. codex/static_root/assets/VDialog-DRj4eBrO.e2ce5d20029b.js.gz +0 -0
  40. codex/static_root/assets/VDialog-DRj4eBrO.js +1 -0
  41. codex/static_root/assets/VDialog-DRj4eBrO.js.br +0 -0
  42. codex/static_root/assets/VDialog-DRj4eBrO.js.gz +0 -0
  43. codex/static_root/assets/VDivider-D1t2hkjV.a9cd2d5b286a.js +1 -0
  44. codex/static_root/assets/VDivider-D1t2hkjV.a9cd2d5b286a.js.br +0 -0
  45. codex/static_root/assets/VDivider-D1t2hkjV.a9cd2d5b286a.js.gz +0 -0
  46. codex/static_root/assets/VDivider-D1t2hkjV.js +1 -0
  47. codex/static_root/assets/VDivider-D1t2hkjV.js.br +0 -0
  48. codex/static_root/assets/VDivider-D1t2hkjV.js.gz +0 -0
  49. codex/static_root/assets/VExpansionPanels-B-5dXRRB.b71e928c960a.js +1 -0
  50. codex/static_root/assets/VExpansionPanels-B-5dXRRB.b71e928c960a.js.br +0 -0
  51. codex/static_root/assets/VExpansionPanels-B-5dXRRB.b71e928c960a.js.gz +0 -0
  52. codex/static_root/assets/VExpansionPanels-B-5dXRRB.js +1 -0
  53. codex/static_root/assets/VExpansionPanels-B-5dXRRB.js.br +0 -0
  54. codex/static_root/assets/VExpansionPanels-B-5dXRRB.js.gz +0 -0
  55. codex/static_root/assets/VForm-Be9DdO0x.0b54c0d9e7ff.js +1 -0
  56. codex/static_root/assets/VForm-Be9DdO0x.0b54c0d9e7ff.js.br +0 -0
  57. codex/static_root/assets/VForm-Be9DdO0x.0b54c0d9e7ff.js.gz +0 -0
  58. codex/static_root/assets/VForm-Be9DdO0x.js +1 -0
  59. codex/static_root/assets/VForm-Be9DdO0x.js.br +0 -0
  60. codex/static_root/assets/VForm-Be9DdO0x.js.gz +0 -0
  61. codex/static_root/assets/VRadioGroup-_mPqHM3O.41b7c1801cfc.js +1 -0
  62. codex/static_root/assets/VRadioGroup-_mPqHM3O.41b7c1801cfc.js.br +0 -0
  63. codex/static_root/assets/VRadioGroup-_mPqHM3O.41b7c1801cfc.js.gz +0 -0
  64. codex/static_root/assets/VRadioGroup-_mPqHM3O.js +1 -0
  65. codex/static_root/assets/VRadioGroup-_mPqHM3O.js.br +0 -0
  66. codex/static_root/assets/VRadioGroup-_mPqHM3O.js.gz +0 -0
  67. codex/static_root/assets/VSelect-BbT1aJkP.ab9bbb187356.js +1 -0
  68. codex/static_root/assets/VSelect-BbT1aJkP.ab9bbb187356.js.br +0 -0
  69. codex/static_root/assets/VSelect-BbT1aJkP.ab9bbb187356.js.gz +0 -0
  70. codex/static_root/assets/VSelect-BbT1aJkP.js +1 -0
  71. codex/static_root/assets/VSelect-BbT1aJkP.js.br +0 -0
  72. codex/static_root/assets/VSelect-BbT1aJkP.js.gz +0 -0
  73. codex/static_root/assets/{VSelect-CP_CVb8s.6309f7bf17bb.css → VSelect-CKXqRkBF.a8be1e193eba.css} +1 -1
  74. codex/static_root/assets/VSelect-CKXqRkBF.a8be1e193eba.css.br +0 -0
  75. codex/static_root/assets/VSelect-CKXqRkBF.a8be1e193eba.css.gz +0 -0
  76. codex/static_root/assets/{VSelect-CP_CVb8s.css → VSelect-CKXqRkBF.css} +1 -1
  77. codex/static_root/assets/VSelect-CKXqRkBF.css.br +0 -0
  78. codex/static_root/assets/VSelect-CKXqRkBF.css.gz +0 -0
  79. codex/static_root/assets/VSelectionControl-DbdMme4i.c547026ebdce.js +1 -0
  80. codex/static_root/assets/VSelectionControl-DbdMme4i.c547026ebdce.js.br +0 -0
  81. codex/static_root/assets/VSelectionControl-DbdMme4i.c547026ebdce.js.gz +0 -0
  82. codex/static_root/assets/VSelectionControl-DbdMme4i.js +1 -0
  83. codex/static_root/assets/VSelectionControl-DbdMme4i.js.br +0 -0
  84. codex/static_root/assets/VSelectionControl-DbdMme4i.js.gz +0 -0
  85. codex/static_root/assets/VSelectionControl-RqBzwjYi.css +1 -0
  86. codex/static_root/assets/VSelectionControl-RqBzwjYi.css.br +0 -0
  87. codex/static_root/assets/VSelectionControl-RqBzwjYi.css.gz +0 -0
  88. codex/static_root/assets/VSelectionControl-RqBzwjYi.ee7425525e63.css +1 -0
  89. codex/static_root/assets/VSelectionControl-RqBzwjYi.ee7425525e63.css.br +0 -0
  90. codex/static_root/assets/VSelectionControl-RqBzwjYi.ee7425525e63.css.gz +0 -0
  91. codex/static_root/assets/VTable-C7Pj2AU0.9358b74f1ec2.js +1 -0
  92. codex/static_root/assets/VTable-C7Pj2AU0.9358b74f1ec2.js.br +0 -0
  93. codex/static_root/assets/VTable-C7Pj2AU0.9358b74f1ec2.js.gz +0 -0
  94. codex/static_root/assets/VTable-C7Pj2AU0.js +1 -0
  95. codex/static_root/assets/VTable-C7Pj2AU0.js.br +0 -0
  96. codex/static_root/assets/VTable-C7Pj2AU0.js.gz +0 -0
  97. codex/static_root/assets/{VTable-BnxSZ_W5.c36f0a6a30cf.css → VTable-CHRVGI94.0a75643f6486.css} +1 -1
  98. codex/static_root/assets/VTable-CHRVGI94.0a75643f6486.css.br +0 -0
  99. codex/static_root/assets/VTable-CHRVGI94.0a75643f6486.css.gz +0 -0
  100. codex/static_root/assets/{VTable-BnxSZ_W5.css → VTable-CHRVGI94.css} +1 -1
  101. codex/static_root/assets/VTable-CHRVGI94.css.br +0 -0
  102. codex/static_root/assets/VTable-CHRVGI94.css.gz +0 -0
  103. codex/static_root/assets/VWindowItem-B9xi23cd.ee96259ae03d.js +1 -0
  104. codex/static_root/assets/VWindowItem-B9xi23cd.ee96259ae03d.js.br +0 -0
  105. codex/static_root/assets/VWindowItem-B9xi23cd.ee96259ae03d.js.gz +0 -0
  106. codex/static_root/assets/VWindowItem-B9xi23cd.js +1 -0
  107. codex/static_root/assets/VWindowItem-B9xi23cd.js.br +0 -0
  108. codex/static_root/assets/VWindowItem-B9xi23cd.js.gz +0 -0
  109. codex/static_root/assets/{admin-Bxwc8451.b2a8c85c5c82.js → admin-C78J3iIT.e0499821711c.js} +1 -1
  110. codex/static_root/assets/admin-C78J3iIT.e0499821711c.js.br +0 -0
  111. codex/static_root/assets/admin-C78J3iIT.e0499821711c.js.gz +0 -0
  112. codex/static_root/assets/{admin-Bxwc8451.js → admin-C78J3iIT.js} +1 -1
  113. codex/static_root/assets/admin-C78J3iIT.js.br +0 -0
  114. codex/static_root/assets/admin-C78J3iIT.js.gz +0 -0
  115. codex/static_root/assets/admin-DycvhYet.33740bd797c9.js +1 -0
  116. codex/static_root/assets/admin-DycvhYet.33740bd797c9.js.br +0 -0
  117. codex/static_root/assets/admin-DycvhYet.33740bd797c9.js.gz +0 -0
  118. codex/static_root/assets/admin-DycvhYet.js +1 -0
  119. codex/static_root/assets/admin-DycvhYet.js.br +0 -0
  120. codex/static_root/assets/admin-DycvhYet.js.gz +0 -0
  121. codex/static_root/assets/{admin-C3iCIUnm.06cb213f624d.css → admin-klMr_GZK.3784e4f1d624.css} +1 -1
  122. codex/static_root/assets/admin-klMr_GZK.3784e4f1d624.css.br +0 -0
  123. codex/static_root/assets/admin-klMr_GZK.3784e4f1d624.css.gz +0 -0
  124. codex/static_root/assets/{admin-C3iCIUnm.css → admin-klMr_GZK.css} +1 -1
  125. codex/static_root/assets/admin-klMr_GZK.css.br +0 -0
  126. codex/static_root/assets/admin-klMr_GZK.css.gz +0 -0
  127. codex/static_root/assets/admin-menu-g8qk-zrV.945e67b971e8.js +1 -0
  128. codex/static_root/assets/admin-menu-g8qk-zrV.945e67b971e8.js.br +0 -0
  129. codex/static_root/assets/admin-menu-g8qk-zrV.945e67b971e8.js.gz +0 -0
  130. codex/static_root/assets/admin-menu-g8qk-zrV.js +1 -0
  131. codex/static_root/assets/admin-menu-g8qk-zrV.js.br +0 -0
  132. codex/static_root/assets/admin-menu-g8qk-zrV.js.gz +0 -0
  133. codex/static_root/assets/{admin-settings-button-progress-CLrIYn4d.cec2cfd322a1.js → admin-settings-button-progress-CPzM-FJJ.1d6d002ada95.js} +1 -1
  134. codex/static_root/assets/admin-settings-button-progress-CPzM-FJJ.1d6d002ada95.js.br +0 -0
  135. codex/static_root/assets/admin-settings-button-progress-CPzM-FJJ.1d6d002ada95.js.gz +0 -0
  136. codex/static_root/assets/{admin-settings-button-progress-CLrIYn4d.js → admin-settings-button-progress-CPzM-FJJ.js} +1 -1
  137. codex/static_root/assets/admin-settings-button-progress-CPzM-FJJ.js.br +0 -0
  138. codex/static_root/assets/admin-settings-button-progress-CPzM-FJJ.js.gz +0 -0
  139. codex/static_root/assets/browser-DJgssiJu.018d043b36a0.js +1 -0
  140. codex/static_root/assets/browser-DJgssiJu.018d043b36a0.js.br +0 -0
  141. codex/static_root/assets/browser-DJgssiJu.018d043b36a0.js.gz +0 -0
  142. codex/static_root/assets/browser-DJgssiJu.js +1 -0
  143. codex/static_root/assets/browser-DJgssiJu.js.br +0 -0
  144. codex/static_root/assets/browser-DJgssiJu.js.gz +0 -0
  145. codex/static_root/assets/{browser-Bf8JG2CE.3af978c1f766.css → browser-sNm790x9.305a6a4f38fd.css} +1 -1
  146. codex/static_root/assets/browser-sNm790x9.305a6a4f38fd.css.br +0 -0
  147. codex/static_root/assets/browser-sNm790x9.305a6a4f38fd.css.gz +0 -0
  148. codex/static_root/assets/{browser-Bf8JG2CE.css → browser-sNm790x9.css} +1 -1
  149. codex/static_root/assets/browser-sNm790x9.css.br +0 -0
  150. codex/static_root/assets/browser-sNm790x9.css.gz +0 -0
  151. codex/static_root/assets/{change-password-dialog-Bw5_buVm.d199b40591de.js → change-password-dialog-CNWUpsff.2a6249951bb6.js} +1 -1
  152. codex/static_root/assets/change-password-dialog-CNWUpsff.2a6249951bb6.js.br +0 -0
  153. codex/static_root/assets/change-password-dialog-CNWUpsff.2a6249951bb6.js.gz +0 -0
  154. codex/static_root/assets/{change-password-dialog-Bw5_buVm.js → change-password-dialog-CNWUpsff.js} +1 -1
  155. codex/static_root/assets/change-password-dialog-CNWUpsff.js.br +0 -0
  156. codex/static_root/assets/change-password-dialog-CNWUpsff.js.gz +0 -0
  157. codex/static_root/assets/confirm-dialog-B4fmqtXn.d78277f0b265.js +1 -0
  158. codex/static_root/assets/confirm-dialog-B4fmqtXn.d78277f0b265.js.br +0 -0
  159. codex/static_root/assets/confirm-dialog-B4fmqtXn.d78277f0b265.js.gz +0 -0
  160. codex/static_root/assets/confirm-dialog-B4fmqtXn.js +1 -0
  161. codex/static_root/assets/confirm-dialog-B4fmqtXn.js.br +0 -0
  162. codex/static_root/assets/confirm-dialog-B4fmqtXn.js.gz +0 -0
  163. codex/static_root/assets/datetime-column-BC6Dncpu.cdbf0b2cdc9a.js +1 -0
  164. codex/static_root/assets/datetime-column-BC6Dncpu.cdbf0b2cdc9a.js.br +0 -0
  165. codex/static_root/assets/datetime-column-BC6Dncpu.cdbf0b2cdc9a.js.gz +0 -0
  166. codex/static_root/assets/datetime-column-BC6Dncpu.js +1 -0
  167. codex/static_root/assets/datetime-column-BC6Dncpu.js.br +0 -0
  168. codex/static_root/assets/datetime-column-BC6Dncpu.js.gz +0 -0
  169. codex/static_root/assets/filter-wbh_0cB-.a2b2422906d8.js +1 -0
  170. codex/static_root/assets/filter-wbh_0cB-.a2b2422906d8.js.br +0 -0
  171. codex/static_root/assets/filter-wbh_0cB-.a2b2422906d8.js.gz +0 -0
  172. codex/static_root/assets/filter-wbh_0cB-.js +1 -0
  173. codex/static_root/assets/filter-wbh_0cB-.js.br +0 -0
  174. codex/static_root/assets/filter-wbh_0cB-.js.gz +0 -0
  175. codex/static_root/assets/{flag-tab-Bfd3wqbW.eb77780e8a45.js → flag-tab-BhehN8hQ.584e909ecdd6.js} +1 -1
  176. codex/static_root/assets/flag-tab-BhehN8hQ.584e909ecdd6.js.br +0 -0
  177. codex/static_root/assets/flag-tab-BhehN8hQ.584e909ecdd6.js.gz +0 -0
  178. codex/static_root/assets/{flag-tab-Bfd3wqbW.js → flag-tab-BhehN8hQ.js} +1 -1
  179. codex/static_root/assets/flag-tab-BhehN8hQ.js.br +0 -0
  180. codex/static_root/assets/flag-tab-BhehN8hQ.js.gz +0 -0
  181. codex/static_root/assets/forwardRefs-CXZy2GSt.0ea45a864dd0.css +1 -0
  182. codex/static_root/assets/forwardRefs-CXZy2GSt.0ea45a864dd0.css.br +0 -0
  183. codex/static_root/assets/forwardRefs-CXZy2GSt.0ea45a864dd0.css.gz +0 -0
  184. codex/static_root/assets/forwardRefs-CXZy2GSt.css +1 -0
  185. codex/static_root/assets/forwardRefs-CXZy2GSt.css.br +0 -0
  186. codex/static_root/assets/forwardRefs-CXZy2GSt.css.gz +0 -0
  187. codex/static_root/assets/forwardRefs-DG6cgrKs.63214695fc2a.js +1 -0
  188. codex/static_root/assets/forwardRefs-DG6cgrKs.63214695fc2a.js.br +0 -0
  189. codex/static_root/assets/forwardRefs-DG6cgrKs.63214695fc2a.js.gz +0 -0
  190. codex/static_root/assets/forwardRefs-DG6cgrKs.js +1 -0
  191. codex/static_root/assets/forwardRefs-DG6cgrKs.js.br +0 -0
  192. codex/static_root/assets/forwardRefs-DG6cgrKs.js.gz +0 -0
  193. codex/static_root/assets/group-tab-BZExFXC-.e99510b0aa5e.js +1 -0
  194. codex/static_root/assets/group-tab-BZExFXC-.e99510b0aa5e.js.br +0 -0
  195. codex/static_root/assets/group-tab-BZExFXC-.e99510b0aa5e.js.gz +0 -0
  196. codex/static_root/assets/group-tab-BZExFXC-.js +1 -0
  197. codex/static_root/assets/group-tab-BZExFXC-.js.br +0 -0
  198. codex/static_root/assets/group-tab-BZExFXC-.js.gz +0 -0
  199. codex/static_root/assets/group-tab-Bi681uR0.3246ac0f7cec.css +1 -0
  200. codex/static_root/assets/group-tab-Bi681uR0.3246ac0f7cec.css.br +0 -0
  201. codex/static_root/assets/group-tab-Bi681uR0.3246ac0f7cec.css.gz +0 -0
  202. codex/static_root/assets/group-tab-Bi681uR0.css +1 -0
  203. codex/static_root/assets/group-tab-Bi681uR0.css.br +0 -0
  204. codex/static_root/assets/group-tab-Bi681uR0.css.gz +0 -0
  205. codex/static_root/assets/http-error-BHy1v31U.516903532e16.js +1 -0
  206. codex/static_root/assets/http-error-BHy1v31U.516903532e16.js.br +0 -0
  207. codex/static_root/assets/http-error-BHy1v31U.516903532e16.js.gz +0 -0
  208. codex/static_root/assets/http-error-BHy1v31U.js +1 -0
  209. codex/static_root/assets/http-error-BHy1v31U.js.br +0 -0
  210. codex/static_root/assets/http-error-BHy1v31U.js.gz +0 -0
  211. codex/static_root/assets/index-BxnlX5gb.b6443a0b48e3.js +1 -0
  212. codex/static_root/assets/index-BxnlX5gb.b6443a0b48e3.js.br +0 -0
  213. codex/static_root/assets/index-BxnlX5gb.b6443a0b48e3.js.gz +0 -0
  214. codex/static_root/assets/index-BxnlX5gb.js +1 -0
  215. codex/static_root/assets/index-BxnlX5gb.js.br +0 -0
  216. codex/static_root/assets/index-BxnlX5gb.js.gz +0 -0
  217. codex/static_root/assets/index-Czf-fUM7.50a7466d956f.css +1 -0
  218. codex/static_root/assets/index-Czf-fUM7.50a7466d956f.css.br +3 -0
  219. codex/static_root/assets/index-Czf-fUM7.50a7466d956f.css.gz +0 -0
  220. codex/static_root/assets/index-Czf-fUM7.css +1 -0
  221. codex/static_root/assets/index-Czf-fUM7.css.br +3 -0
  222. codex/static_root/assets/index-Czf-fUM7.css.gz +0 -0
  223. codex/static_root/assets/library-tab-Cq-D776f.89f410e10a27.js +1 -0
  224. codex/static_root/assets/library-tab-Cq-D776f.89f410e10a27.js.br +0 -0
  225. codex/static_root/assets/library-tab-Cq-D776f.89f410e10a27.js.gz +0 -0
  226. codex/static_root/assets/library-tab-Cq-D776f.js +1 -0
  227. codex/static_root/assets/library-tab-Cq-D776f.js.br +0 -0
  228. codex/static_root/assets/library-tab-Cq-D776f.js.gz +0 -0
  229. codex/static_root/assets/main-NV7Sm4nK.ef4ca8f0fd9f.js +39 -0
  230. codex/static_root/assets/main-NV7Sm4nK.ef4ca8f0fd9f.js.br +0 -0
  231. codex/static_root/assets/main-NV7Sm4nK.ef4ca8f0fd9f.js.gz +0 -0
  232. codex/static_root/assets/main-NV7Sm4nK.js +39 -0
  233. codex/static_root/assets/main-NV7Sm4nK.js.br +0 -0
  234. codex/static_root/assets/main-NV7Sm4nK.js.gz +0 -0
  235. codex/static_root/assets/{main-K8cER0IH.d529e8b3f52a.css → main-Of3aYkZ7.91c75c4fbaa6.css} +1 -1
  236. codex/static_root/assets/main-Of3aYkZ7.91c75c4fbaa6.css.br +0 -0
  237. codex/static_root/assets/{main-K8cER0IH.d529e8b3f52a.css.gz → main-Of3aYkZ7.91c75c4fbaa6.css.gz} +0 -0
  238. codex/static_root/assets/{main-K8cER0IH.css → main-Of3aYkZ7.css} +1 -1
  239. codex/static_root/assets/main-Of3aYkZ7.css.br +0 -0
  240. codex/static_root/assets/{main-K8cER0IH.css.gz → main-Of3aYkZ7.css.gz} +0 -0
  241. codex/static_root/assets/pager-full-pdf-DOYtfHYl.55ef88bc32dd.js +1 -0
  242. codex/static_root/assets/pager-full-pdf-DOYtfHYl.55ef88bc32dd.js.br +0 -0
  243. codex/static_root/assets/pager-full-pdf-DOYtfHYl.55ef88bc32dd.js.gz +0 -0
  244. codex/static_root/assets/pager-full-pdf-DOYtfHYl.js +1 -0
  245. codex/static_root/assets/pager-full-pdf-DOYtfHYl.js.br +0 -0
  246. codex/static_root/assets/pager-full-pdf-DOYtfHYl.js.gz +0 -0
  247. codex/static_root/assets/pagination-toolbar-BpWqCTpI.eae1ff66607a.js +1 -0
  248. codex/static_root/assets/pagination-toolbar-BpWqCTpI.eae1ff66607a.js.br +0 -0
  249. codex/static_root/assets/pagination-toolbar-BpWqCTpI.eae1ff66607a.js.gz +0 -0
  250. codex/static_root/assets/pagination-toolbar-BpWqCTpI.js +1 -0
  251. codex/static_root/assets/pagination-toolbar-BpWqCTpI.js.br +0 -0
  252. codex/static_root/assets/pagination-toolbar-BpWqCTpI.js.gz +0 -0
  253. codex/static_root/assets/{pagination-toolbar-CzT9Hc3f.487e647604e2.css → pagination-toolbar-aHRrdz48.2cbd38f9256c.css} +1 -1
  254. codex/static_root/assets/pagination-toolbar-aHRrdz48.2cbd38f9256c.css.br +0 -0
  255. codex/static_root/assets/pagination-toolbar-aHRrdz48.2cbd38f9256c.css.gz +0 -0
  256. codex/static_root/assets/{pagination-toolbar-CzT9Hc3f.css → pagination-toolbar-aHRrdz48.css} +1 -1
  257. codex/static_root/assets/pagination-toolbar-aHRrdz48.css.br +0 -0
  258. codex/static_root/assets/pagination-toolbar-aHRrdz48.css.gz +0 -0
  259. codex/static_root/assets/{pdf-doc-CW06S-ga.e7c567b9d4cd.js → pdf-doc-DAUp5U7y.821d344d6401.js} +1 -1
  260. codex/static_root/assets/pdf-doc-DAUp5U7y.821d344d6401.js.br +0 -0
  261. codex/static_root/assets/pdf-doc-DAUp5U7y.821d344d6401.js.gz +0 -0
  262. codex/static_root/assets/{pdf-doc-CW06S-ga.js → pdf-doc-DAUp5U7y.js} +1 -1
  263. codex/static_root/assets/pdf-doc-DAUp5U7y.js.br +0 -0
  264. codex/static_root/assets/pdf-doc-DAUp5U7y.js.gz +0 -0
  265. codex/static_root/assets/reader-BjIgRfH2.e9fae80f3d09.js +2 -0
  266. codex/static_root/assets/reader-BjIgRfH2.e9fae80f3d09.js.br +0 -0
  267. codex/static_root/assets/reader-BjIgRfH2.e9fae80f3d09.js.gz +0 -0
  268. codex/static_root/assets/reader-BjIgRfH2.js +2 -0
  269. codex/static_root/assets/reader-BjIgRfH2.js.br +0 -0
  270. codex/static_root/assets/reader-BjIgRfH2.js.gz +0 -0
  271. codex/static_root/assets/reader-D7Bx0Vcv.34af07084fcb.css +1 -0
  272. codex/static_root/assets/reader-D7Bx0Vcv.34af07084fcb.css.br +0 -0
  273. codex/static_root/assets/reader-D7Bx0Vcv.34af07084fcb.css.gz +0 -0
  274. codex/static_root/assets/reader-D7Bx0Vcv.css +1 -0
  275. codex/static_root/assets/reader-D7Bx0Vcv.css.br +0 -0
  276. codex/static_root/assets/reader-D7Bx0Vcv.css.gz +0 -0
  277. codex/static_root/assets/relation-chips-Bp-GmsDz.fdd18ac6b6f7.js +1 -0
  278. codex/static_root/assets/relation-chips-Bp-GmsDz.fdd18ac6b6f7.js.br +0 -0
  279. codex/static_root/assets/relation-chips-Bp-GmsDz.fdd18ac6b6f7.js.gz +0 -0
  280. codex/static_root/assets/relation-chips-Bp-GmsDz.js +1 -0
  281. codex/static_root/assets/relation-chips-Bp-GmsDz.js.br +0 -0
  282. codex/static_root/assets/relation-chips-Bp-GmsDz.js.gz +0 -0
  283. codex/static_root/assets/{relation-chips-eQkZvJcT.6b52d3f66aed.css → relation-chips-DvAOMwcd.css} +1 -1
  284. codex/static_root/assets/relation-chips-DvAOMwcd.css.br +0 -0
  285. codex/static_root/assets/relation-chips-DvAOMwcd.css.gz +0 -0
  286. codex/static_root/assets/{relation-chips-eQkZvJcT.css → relation-chips-DvAOMwcd.ebc505834f81.css} +1 -1
  287. codex/static_root/assets/relation-chips-DvAOMwcd.ebc505834f81.css.br +0 -0
  288. codex/static_root/assets/relation-chips-DvAOMwcd.ebc505834f81.css.gz +0 -0
  289. codex/static_root/assets/settings-drawer-ynpXH44c.ee12b51a7b5d.js +2 -0
  290. codex/static_root/assets/settings-drawer-ynpXH44c.ee12b51a7b5d.js.br +0 -0
  291. codex/static_root/assets/settings-drawer-ynpXH44c.ee12b51a7b5d.js.gz +0 -0
  292. codex/static_root/assets/settings-drawer-ynpXH44c.js +2 -0
  293. codex/static_root/assets/settings-drawer-ynpXH44c.js.br +0 -0
  294. codex/static_root/assets/settings-drawer-ynpXH44c.js.gz +0 -0
  295. codex/static_root/assets/{ssrBoot-B6yWBylJ.27fba7483f5d.js → ssrBoot-CTyNesCO.03ec3bf85a27.js} +1 -1
  296. codex/static_root/assets/ssrBoot-CTyNesCO.03ec3bf85a27.js.br +0 -0
  297. codex/static_root/assets/ssrBoot-CTyNesCO.03ec3bf85a27.js.gz +0 -0
  298. codex/static_root/assets/{ssrBoot-B6yWBylJ.js → ssrBoot-CTyNesCO.js} +1 -1
  299. codex/static_root/assets/ssrBoot-CTyNesCO.js.br +0 -0
  300. codex/static_root/assets/ssrBoot-CTyNesCO.js.gz +0 -0
  301. codex/static_root/assets/{stats-tab-B6L711cO.b6a42655cd70.css → stats-tab-CGY8r-es.b06c55bdaeaa.css} +1 -1
  302. codex/static_root/assets/stats-tab-CGY8r-es.b06c55bdaeaa.css.br +0 -0
  303. codex/static_root/assets/stats-tab-CGY8r-es.b06c55bdaeaa.css.gz +0 -0
  304. codex/static_root/assets/{stats-tab-B6L711cO.css → stats-tab-CGY8r-es.css} +1 -1
  305. codex/static_root/assets/stats-tab-CGY8r-es.css.br +0 -0
  306. codex/static_root/assets/stats-tab-CGY8r-es.css.gz +0 -0
  307. codex/static_root/assets/{stats-tab-DC24C65C.58280bd367e1.js → stats-tab-ZfoK3F_k.7565c9bbd336.js} +1 -1
  308. codex/static_root/assets/stats-tab-ZfoK3F_k.7565c9bbd336.js.br +0 -0
  309. codex/static_root/assets/stats-tab-ZfoK3F_k.7565c9bbd336.js.gz +0 -0
  310. codex/static_root/assets/{stats-tab-DC24C65C.js → stats-tab-ZfoK3F_k.js} +1 -1
  311. codex/static_root/assets/stats-tab-ZfoK3F_k.js.br +0 -0
  312. codex/static_root/assets/stats-tab-ZfoK3F_k.js.gz +0 -0
  313. codex/static_root/assets/{task-tab-DI9bXb-m.52aad0736a2b.js → task-tab-DNGSwaO3.273261947a02.js} +1 -1
  314. codex/static_root/assets/task-tab-DNGSwaO3.273261947a02.js.br +0 -0
  315. codex/static_root/assets/task-tab-DNGSwaO3.273261947a02.js.gz +0 -0
  316. codex/static_root/assets/{task-tab-DI9bXb-m.js → task-tab-DNGSwaO3.js} +1 -1
  317. codex/static_root/assets/task-tab-DNGSwaO3.js.br +0 -0
  318. codex/static_root/assets/task-tab-DNGSwaO3.js.gz +0 -0
  319. codex/static_root/assets/unauthorized-DE63n2Pi.b0357009b13d.css +1 -0
  320. codex/static_root/assets/unauthorized-DE63n2Pi.b0357009b13d.css.br +0 -0
  321. codex/static_root/assets/unauthorized-DE63n2Pi.b0357009b13d.css.gz +0 -0
  322. codex/static_root/assets/unauthorized-DE63n2Pi.css +1 -0
  323. codex/static_root/assets/unauthorized-DE63n2Pi.css.br +0 -0
  324. codex/static_root/assets/unauthorized-DE63n2Pi.css.gz +0 -0
  325. codex/static_root/assets/unauthorized-bi5K10vQ.32373df36436.js +1 -0
  326. codex/static_root/assets/unauthorized-bi5K10vQ.32373df36436.js.br +0 -0
  327. codex/static_root/assets/unauthorized-bi5K10vQ.32373df36436.js.gz +0 -0
  328. codex/static_root/assets/unauthorized-bi5K10vQ.js +1 -0
  329. codex/static_root/assets/unauthorized-bi5K10vQ.js.br +0 -0
  330. codex/static_root/assets/unauthorized-bi5K10vQ.js.gz +0 -0
  331. codex/static_root/assets/{user-tab-B7e9oz0-.03fd3875c9e3.js → user-tab-BASy3q9X.3a7f9fc383e1.js} +1 -1
  332. codex/static_root/assets/user-tab-BASy3q9X.3a7f9fc383e1.js.br +0 -0
  333. codex/static_root/assets/user-tab-BASy3q9X.3a7f9fc383e1.js.gz +0 -0
  334. codex/static_root/assets/{user-tab-B7e9oz0-.js → user-tab-BASy3q9X.js} +1 -1
  335. codex/static_root/assets/user-tab-BASy3q9X.js.br +0 -0
  336. codex/static_root/assets/user-tab-BASy3q9X.js.gz +0 -0
  337. codex/static_root/manifest.3057b90c8c8c.json +757 -0
  338. codex/static_root/manifest.3057b90c8c8c.json.br +0 -0
  339. codex/static_root/manifest.3057b90c8c8c.json.gz +0 -0
  340. codex/static_root/manifest.json +348 -348
  341. codex/static_root/manifest.json.br +0 -0
  342. codex/static_root/manifest.json.gz +0 -0
  343. codex/static_root/staticfiles.json +1 -1
  344. codex/views/browser/bookmark.py +1 -1
  345. codex/views/browser/breadcrumbs.py +8 -3
  346. codex/views/browser/browser.py +1 -1
  347. codex/views/browser/filters/search/parse.py +1 -1
  348. codex/views/browser/paginate.py +1 -1
  349. codex/views/const.py +0 -1
  350. codex/views/download.py +1 -0
  351. codex/views/frontend.py +3 -1
  352. codex/views/mixins.py +13 -0
  353. codex/views/opds/v1/feed.py +4 -3
  354. codex/views/opds/v2/feed.py +4 -2
  355. codex/views/reader/books.py +1 -1
  356. codex/views/util.py +10 -11
  357. {codex-1.7.11a0.dist-info → codex-1.7.13.dist-info}/METADATA +8 -5
  358. {codex-1.7.11a0.dist-info → codex-1.7.13.dist-info}/RECORD +361 -360
  359. {codex-1.7.11a0.dist-info → codex-1.7.13.dist-info}/WHEEL +1 -1
  360. codex/static_root/assets/VCheckbox-t1haz9-P.38cb3995b2f3.js +0 -1
  361. codex/static_root/assets/VCheckbox-t1haz9-P.38cb3995b2f3.js.br +0 -0
  362. codex/static_root/assets/VCheckbox-t1haz9-P.38cb3995b2f3.js.gz +0 -0
  363. codex/static_root/assets/VCheckbox-t1haz9-P.js +0 -1
  364. codex/static_root/assets/VCheckbox-t1haz9-P.js.br +0 -0
  365. codex/static_root/assets/VCheckbox-t1haz9-P.js.gz +0 -0
  366. codex/static_root/assets/VCheckboxBtn-1PexCc2F.ac78c4bfe6bd.js +0 -1
  367. codex/static_root/assets/VCheckboxBtn-1PexCc2F.ac78c4bfe6bd.js.br +0 -0
  368. codex/static_root/assets/VCheckboxBtn-1PexCc2F.ac78c4bfe6bd.js.gz +0 -0
  369. codex/static_root/assets/VCheckboxBtn-1PexCc2F.js +0 -1
  370. codex/static_root/assets/VCheckboxBtn-1PexCc2F.js.br +0 -0
  371. codex/static_root/assets/VCheckboxBtn-1PexCc2F.js.gz +0 -0
  372. codex/static_root/assets/VCombobox-BQHELb_o.9f25a34994e2.css +0 -1
  373. codex/static_root/assets/VCombobox-BQHELb_o.9f25a34994e2.css.br +0 -0
  374. codex/static_root/assets/VCombobox-BQHELb_o.9f25a34994e2.css.gz +0 -0
  375. codex/static_root/assets/VCombobox-BQHELb_o.css +0 -1
  376. codex/static_root/assets/VCombobox-BQHELb_o.css.br +0 -0
  377. codex/static_root/assets/VCombobox-BQHELb_o.css.gz +0 -0
  378. codex/static_root/assets/VCombobox-DpadV2-4.ea605785117d.js +0 -1
  379. codex/static_root/assets/VCombobox-DpadV2-4.ea605785117d.js.br +0 -0
  380. codex/static_root/assets/VCombobox-DpadV2-4.ea605785117d.js.gz +0 -0
  381. codex/static_root/assets/VCombobox-DpadV2-4.js +0 -1
  382. codex/static_root/assets/VCombobox-DpadV2-4.js.br +0 -0
  383. codex/static_root/assets/VCombobox-DpadV2-4.js.gz +0 -0
  384. codex/static_root/assets/VDialog-BR4MrJeK.a2c876dbfac0.js +0 -1
  385. codex/static_root/assets/VDialog-BR4MrJeK.a2c876dbfac0.js.br +0 -0
  386. codex/static_root/assets/VDialog-BR4MrJeK.a2c876dbfac0.js.gz +0 -0
  387. codex/static_root/assets/VDialog-BR4MrJeK.js +0 -1
  388. codex/static_root/assets/VDialog-BR4MrJeK.js.br +0 -0
  389. codex/static_root/assets/VDialog-BR4MrJeK.js.gz +0 -0
  390. codex/static_root/assets/VDivider-CGYMLgJf.fbcb910c5e2b.js +0 -1
  391. codex/static_root/assets/VDivider-CGYMLgJf.fbcb910c5e2b.js.br +0 -0
  392. codex/static_root/assets/VDivider-CGYMLgJf.fbcb910c5e2b.js.gz +0 -0
  393. codex/static_root/assets/VDivider-CGYMLgJf.js +0 -1
  394. codex/static_root/assets/VDivider-CGYMLgJf.js.br +0 -0
  395. codex/static_root/assets/VDivider-CGYMLgJf.js.gz +0 -0
  396. codex/static_root/assets/VExpansionPanels-ape8k2o6.235735bba3cc.js +0 -1
  397. codex/static_root/assets/VExpansionPanels-ape8k2o6.235735bba3cc.js.br +0 -0
  398. codex/static_root/assets/VExpansionPanels-ape8k2o6.235735bba3cc.js.gz +0 -0
  399. codex/static_root/assets/VExpansionPanels-ape8k2o6.js +0 -1
  400. codex/static_root/assets/VExpansionPanels-ape8k2o6.js.br +0 -0
  401. codex/static_root/assets/VExpansionPanels-ape8k2o6.js.gz +0 -0
  402. codex/static_root/assets/VForm-ZManiwIB.a4ee873a7650.js +0 -1
  403. codex/static_root/assets/VForm-ZManiwIB.a4ee873a7650.js.br +0 -0
  404. codex/static_root/assets/VForm-ZManiwIB.a4ee873a7650.js.gz +0 -0
  405. codex/static_root/assets/VForm-ZManiwIB.js +0 -1
  406. codex/static_root/assets/VForm-ZManiwIB.js.br +0 -0
  407. codex/static_root/assets/VForm-ZManiwIB.js.gz +0 -0
  408. codex/static_root/assets/VRadioGroup-BqJIH3Pa.22a036a63862.js +0 -1
  409. codex/static_root/assets/VRadioGroup-BqJIH3Pa.22a036a63862.js.br +0 -0
  410. codex/static_root/assets/VRadioGroup-BqJIH3Pa.22a036a63862.js.gz +0 -0
  411. codex/static_root/assets/VRadioGroup-BqJIH3Pa.js +0 -1
  412. codex/static_root/assets/VRadioGroup-BqJIH3Pa.js.br +0 -0
  413. codex/static_root/assets/VRadioGroup-BqJIH3Pa.js.gz +0 -0
  414. codex/static_root/assets/VSelect-Bi5KABMc.1268bafd6469.js +0 -1
  415. codex/static_root/assets/VSelect-Bi5KABMc.1268bafd6469.js.br +0 -0
  416. codex/static_root/assets/VSelect-Bi5KABMc.1268bafd6469.js.gz +0 -0
  417. codex/static_root/assets/VSelect-Bi5KABMc.js +0 -1
  418. codex/static_root/assets/VSelect-Bi5KABMc.js.br +0 -0
  419. codex/static_root/assets/VSelect-Bi5KABMc.js.gz +0 -0
  420. codex/static_root/assets/VSelect-CP_CVb8s.6309f7bf17bb.css.br +0 -0
  421. codex/static_root/assets/VSelect-CP_CVb8s.6309f7bf17bb.css.gz +0 -0
  422. codex/static_root/assets/VSelect-CP_CVb8s.css.br +0 -0
  423. codex/static_root/assets/VSelect-CP_CVb8s.css.gz +0 -0
  424. codex/static_root/assets/VSelectionControl-CRVWANOr.bac2136c7c25.js +0 -1
  425. codex/static_root/assets/VSelectionControl-CRVWANOr.bac2136c7c25.js.br +0 -0
  426. codex/static_root/assets/VSelectionControl-CRVWANOr.bac2136c7c25.js.gz +0 -0
  427. codex/static_root/assets/VSelectionControl-CRVWANOr.js +0 -1
  428. codex/static_root/assets/VSelectionControl-CRVWANOr.js.br +0 -0
  429. codex/static_root/assets/VSelectionControl-CRVWANOr.js.gz +0 -0
  430. codex/static_root/assets/VSelectionControl-DtEh26JD.css +0 -1
  431. codex/static_root/assets/VSelectionControl-DtEh26JD.css.br +0 -0
  432. codex/static_root/assets/VSelectionControl-DtEh26JD.css.gz +0 -0
  433. codex/static_root/assets/VSelectionControl-DtEh26JD.eec621947209.css +0 -1
  434. codex/static_root/assets/VSelectionControl-DtEh26JD.eec621947209.css.br +0 -0
  435. codex/static_root/assets/VSelectionControl-DtEh26JD.eec621947209.css.gz +0 -0
  436. codex/static_root/assets/VTable-BnxSZ_W5.c36f0a6a30cf.css.br +0 -0
  437. codex/static_root/assets/VTable-BnxSZ_W5.c36f0a6a30cf.css.gz +0 -0
  438. codex/static_root/assets/VTable-BnxSZ_W5.css.br +0 -0
  439. codex/static_root/assets/VTable-BnxSZ_W5.css.gz +0 -0
  440. codex/static_root/assets/VTable-DWCA1lvG.1562d6d70dbe.js +0 -1
  441. codex/static_root/assets/VTable-DWCA1lvG.1562d6d70dbe.js.br +0 -0
  442. codex/static_root/assets/VTable-DWCA1lvG.1562d6d70dbe.js.gz +0 -0
  443. codex/static_root/assets/VTable-DWCA1lvG.js +0 -1
  444. codex/static_root/assets/VTable-DWCA1lvG.js.br +0 -0
  445. codex/static_root/assets/VTable-DWCA1lvG.js.gz +0 -0
  446. codex/static_root/assets/VWindowItem-DSXaWHkP.89ac2ece629a.js +0 -1
  447. codex/static_root/assets/VWindowItem-DSXaWHkP.89ac2ece629a.js.br +0 -0
  448. codex/static_root/assets/VWindowItem-DSXaWHkP.89ac2ece629a.js.gz +0 -0
  449. codex/static_root/assets/VWindowItem-DSXaWHkP.js +0 -1
  450. codex/static_root/assets/VWindowItem-DSXaWHkP.js.br +0 -0
  451. codex/static_root/assets/VWindowItem-DSXaWHkP.js.gz +0 -0
  452. codex/static_root/assets/admin-Bxwc8451.b2a8c85c5c82.js.br +0 -0
  453. codex/static_root/assets/admin-Bxwc8451.b2a8c85c5c82.js.gz +0 -0
  454. codex/static_root/assets/admin-Bxwc8451.js.br +0 -0
  455. codex/static_root/assets/admin-Bxwc8451.js.gz +0 -0
  456. codex/static_root/assets/admin-C3iCIUnm.06cb213f624d.css.br +0 -0
  457. codex/static_root/assets/admin-C3iCIUnm.06cb213f624d.css.gz +0 -0
  458. codex/static_root/assets/admin-C3iCIUnm.css.br +0 -0
  459. codex/static_root/assets/admin-C3iCIUnm.css.gz +0 -0
  460. codex/static_root/assets/admin-C81J8xOG.772d05753583.js +0 -1
  461. codex/static_root/assets/admin-C81J8xOG.772d05753583.js.br +0 -0
  462. codex/static_root/assets/admin-C81J8xOG.772d05753583.js.gz +0 -0
  463. codex/static_root/assets/admin-C81J8xOG.js +0 -1
  464. codex/static_root/assets/admin-C81J8xOG.js.br +0 -0
  465. codex/static_root/assets/admin-C81J8xOG.js.gz +0 -0
  466. codex/static_root/assets/admin-menu-Bts5DypF.83389408d5df.js +0 -1
  467. codex/static_root/assets/admin-menu-Bts5DypF.83389408d5df.js.br +0 -0
  468. codex/static_root/assets/admin-menu-Bts5DypF.83389408d5df.js.gz +0 -0
  469. codex/static_root/assets/admin-menu-Bts5DypF.js +0 -1
  470. codex/static_root/assets/admin-menu-Bts5DypF.js.br +0 -0
  471. codex/static_root/assets/admin-menu-Bts5DypF.js.gz +0 -0
  472. codex/static_root/assets/admin-settings-button-progress-CLrIYn4d.cec2cfd322a1.js.br +0 -0
  473. codex/static_root/assets/admin-settings-button-progress-CLrIYn4d.cec2cfd322a1.js.gz +0 -0
  474. codex/static_root/assets/admin-settings-button-progress-CLrIYn4d.js.br +0 -0
  475. codex/static_root/assets/admin-settings-button-progress-CLrIYn4d.js.gz +0 -0
  476. codex/static_root/assets/browser-Bf8JG2CE.3af978c1f766.css.br +0 -0
  477. codex/static_root/assets/browser-Bf8JG2CE.3af978c1f766.css.gz +0 -0
  478. codex/static_root/assets/browser-Bf8JG2CE.css.br +0 -0
  479. codex/static_root/assets/browser-Bf8JG2CE.css.gz +0 -0
  480. codex/static_root/assets/browser-yJ6Noi8Y.624ef6fbd20b.js +0 -1
  481. codex/static_root/assets/browser-yJ6Noi8Y.624ef6fbd20b.js.br +0 -0
  482. codex/static_root/assets/browser-yJ6Noi8Y.624ef6fbd20b.js.gz +0 -0
  483. codex/static_root/assets/browser-yJ6Noi8Y.js +0 -1
  484. codex/static_root/assets/browser-yJ6Noi8Y.js.br +0 -0
  485. codex/static_root/assets/browser-yJ6Noi8Y.js.gz +0 -0
  486. codex/static_root/assets/change-password-dialog-Bw5_buVm.d199b40591de.js.br +0 -0
  487. codex/static_root/assets/change-password-dialog-Bw5_buVm.d199b40591de.js.gz +0 -0
  488. codex/static_root/assets/change-password-dialog-Bw5_buVm.js.br +0 -0
  489. codex/static_root/assets/change-password-dialog-Bw5_buVm.js.gz +0 -0
  490. codex/static_root/assets/confirm-dialog-CDmsC-9_.cb51658bfb81.js +0 -1
  491. codex/static_root/assets/confirm-dialog-CDmsC-9_.cb51658bfb81.js.br +0 -0
  492. codex/static_root/assets/confirm-dialog-CDmsC-9_.cb51658bfb81.js.gz +0 -0
  493. codex/static_root/assets/confirm-dialog-CDmsC-9_.js +0 -1
  494. codex/static_root/assets/confirm-dialog-CDmsC-9_.js.br +0 -0
  495. codex/static_root/assets/confirm-dialog-CDmsC-9_.js.gz +0 -0
  496. codex/static_root/assets/datetime-column-PBwaoZso.4b7946b97468.js +0 -1
  497. codex/static_root/assets/datetime-column-PBwaoZso.4b7946b97468.js.br +0 -1
  498. codex/static_root/assets/datetime-column-PBwaoZso.4b7946b97468.js.gz +0 -0
  499. codex/static_root/assets/datetime-column-PBwaoZso.js +0 -1
  500. codex/static_root/assets/datetime-column-PBwaoZso.js.br +0 -1
  501. codex/static_root/assets/datetime-column-PBwaoZso.js.gz +0 -0
  502. codex/static_root/assets/filter-D2ELuNq3.2b1c1f24a6b4.js +0 -1
  503. codex/static_root/assets/filter-D2ELuNq3.2b1c1f24a6b4.js.br +0 -0
  504. codex/static_root/assets/filter-D2ELuNq3.2b1c1f24a6b4.js.gz +0 -0
  505. codex/static_root/assets/filter-D2ELuNq3.js +0 -1
  506. codex/static_root/assets/filter-D2ELuNq3.js.br +0 -0
  507. codex/static_root/assets/filter-D2ELuNq3.js.gz +0 -0
  508. codex/static_root/assets/flag-tab-Bfd3wqbW.eb77780e8a45.js.br +0 -0
  509. codex/static_root/assets/flag-tab-Bfd3wqbW.eb77780e8a45.js.gz +0 -0
  510. codex/static_root/assets/flag-tab-Bfd3wqbW.js.br +0 -0
  511. codex/static_root/assets/flag-tab-Bfd3wqbW.js.gz +0 -0
  512. codex/static_root/assets/forwardRefs-Cvn3Vptr.26250646de8c.js +0 -1
  513. codex/static_root/assets/forwardRefs-Cvn3Vptr.26250646de8c.js.br +0 -0
  514. codex/static_root/assets/forwardRefs-Cvn3Vptr.26250646de8c.js.gz +0 -0
  515. codex/static_root/assets/forwardRefs-Cvn3Vptr.js +0 -1
  516. codex/static_root/assets/forwardRefs-Cvn3Vptr.js.br +0 -0
  517. codex/static_root/assets/forwardRefs-Cvn3Vptr.js.gz +0 -0
  518. codex/static_root/assets/forwardRefs-Dyi06MPF.601ab1fd99b1.css +0 -1
  519. codex/static_root/assets/forwardRefs-Dyi06MPF.601ab1fd99b1.css.br +0 -0
  520. codex/static_root/assets/forwardRefs-Dyi06MPF.601ab1fd99b1.css.gz +0 -0
  521. codex/static_root/assets/forwardRefs-Dyi06MPF.css +0 -1
  522. codex/static_root/assets/forwardRefs-Dyi06MPF.css.br +0 -0
  523. codex/static_root/assets/forwardRefs-Dyi06MPF.css.gz +0 -0
  524. codex/static_root/assets/group-tab-J2MqClVb.ff59e8269756.js +0 -1
  525. codex/static_root/assets/group-tab-J2MqClVb.ff59e8269756.js.br +0 -0
  526. codex/static_root/assets/group-tab-J2MqClVb.ff59e8269756.js.gz +0 -0
  527. codex/static_root/assets/group-tab-J2MqClVb.js +0 -1
  528. codex/static_root/assets/group-tab-J2MqClVb.js.br +0 -0
  529. codex/static_root/assets/group-tab-J2MqClVb.js.gz +0 -0
  530. codex/static_root/assets/group-tab-_vKWzoyd.948e907b1e6b.css +0 -1
  531. codex/static_root/assets/group-tab-_vKWzoyd.948e907b1e6b.css.br +0 -0
  532. codex/static_root/assets/group-tab-_vKWzoyd.948e907b1e6b.css.gz +0 -0
  533. codex/static_root/assets/group-tab-_vKWzoyd.css +0 -1
  534. codex/static_root/assets/group-tab-_vKWzoyd.css.br +0 -0
  535. codex/static_root/assets/group-tab-_vKWzoyd.css.gz +0 -0
  536. codex/static_root/assets/http-error-BYu6Kcz7.9e6d6753260e.js +0 -1
  537. codex/static_root/assets/http-error-BYu6Kcz7.9e6d6753260e.js.br +0 -0
  538. codex/static_root/assets/http-error-BYu6Kcz7.9e6d6753260e.js.gz +0 -0
  539. codex/static_root/assets/http-error-BYu6Kcz7.js +0 -1
  540. codex/static_root/assets/http-error-BYu6Kcz7.js.br +0 -0
  541. codex/static_root/assets/http-error-BYu6Kcz7.js.gz +0 -0
  542. codex/static_root/assets/index-70Ak1yZF.6341f252a26f.js +0 -1
  543. codex/static_root/assets/index-70Ak1yZF.6341f252a26f.js.br +0 -0
  544. codex/static_root/assets/index-70Ak1yZF.6341f252a26f.js.gz +0 -0
  545. codex/static_root/assets/index-70Ak1yZF.js +0 -1
  546. codex/static_root/assets/index-70Ak1yZF.js.br +0 -0
  547. codex/static_root/assets/index-70Ak1yZF.js.gz +0 -0
  548. codex/static_root/assets/index-BHXJTQ4V.523d7b3d350f.css +0 -1
  549. codex/static_root/assets/index-BHXJTQ4V.523d7b3d350f.css.br +0 -0
  550. codex/static_root/assets/index-BHXJTQ4V.523d7b3d350f.css.gz +0 -0
  551. codex/static_root/assets/index-BHXJTQ4V.css +0 -1
  552. codex/static_root/assets/index-BHXJTQ4V.css.br +0 -0
  553. codex/static_root/assets/index-BHXJTQ4V.css.gz +0 -0
  554. codex/static_root/assets/library-tab-B5EpvS2Z.ce7f598b989c.js +0 -1
  555. codex/static_root/assets/library-tab-B5EpvS2Z.ce7f598b989c.js.br +0 -0
  556. codex/static_root/assets/library-tab-B5EpvS2Z.ce7f598b989c.js.gz +0 -0
  557. codex/static_root/assets/library-tab-B5EpvS2Z.js +0 -1
  558. codex/static_root/assets/library-tab-B5EpvS2Z.js.br +0 -0
  559. codex/static_root/assets/library-tab-B5EpvS2Z.js.gz +0 -0
  560. codex/static_root/assets/main-K8cER0IH.css.br +0 -0
  561. codex/static_root/assets/main-K8cER0IH.d529e8b3f52a.css.br +0 -0
  562. codex/static_root/assets/main-nb_FhQoD.5279ea775ff6.js +0 -35
  563. codex/static_root/assets/main-nb_FhQoD.5279ea775ff6.js.br +0 -0
  564. codex/static_root/assets/main-nb_FhQoD.5279ea775ff6.js.gz +0 -0
  565. codex/static_root/assets/main-nb_FhQoD.js +0 -35
  566. codex/static_root/assets/main-nb_FhQoD.js.br +0 -0
  567. codex/static_root/assets/main-nb_FhQoD.js.gz +0 -0
  568. codex/static_root/assets/pager-full-pdf-vSb0Gv-4.015647f33ab1.js +0 -1
  569. codex/static_root/assets/pager-full-pdf-vSb0Gv-4.015647f33ab1.js.br +0 -0
  570. codex/static_root/assets/pager-full-pdf-vSb0Gv-4.015647f33ab1.js.gz +0 -0
  571. codex/static_root/assets/pager-full-pdf-vSb0Gv-4.js +0 -1
  572. codex/static_root/assets/pager-full-pdf-vSb0Gv-4.js.br +0 -0
  573. codex/static_root/assets/pager-full-pdf-vSb0Gv-4.js.gz +0 -0
  574. codex/static_root/assets/pagination-toolbar-2endB3w1.f94e6a3535e4.js +0 -1
  575. codex/static_root/assets/pagination-toolbar-2endB3w1.f94e6a3535e4.js.br +0 -0
  576. codex/static_root/assets/pagination-toolbar-2endB3w1.f94e6a3535e4.js.gz +0 -0
  577. codex/static_root/assets/pagination-toolbar-2endB3w1.js +0 -1
  578. codex/static_root/assets/pagination-toolbar-2endB3w1.js.br +0 -0
  579. codex/static_root/assets/pagination-toolbar-2endB3w1.js.gz +0 -0
  580. codex/static_root/assets/pagination-toolbar-CzT9Hc3f.487e647604e2.css.br +0 -0
  581. codex/static_root/assets/pagination-toolbar-CzT9Hc3f.487e647604e2.css.gz +0 -0
  582. codex/static_root/assets/pagination-toolbar-CzT9Hc3f.css.br +0 -0
  583. codex/static_root/assets/pagination-toolbar-CzT9Hc3f.css.gz +0 -0
  584. codex/static_root/assets/pdf-doc-CW06S-ga.e7c567b9d4cd.js.br +0 -0
  585. codex/static_root/assets/pdf-doc-CW06S-ga.e7c567b9d4cd.js.gz +0 -0
  586. codex/static_root/assets/pdf-doc-CW06S-ga.js.br +0 -0
  587. codex/static_root/assets/pdf-doc-CW06S-ga.js.gz +0 -0
  588. codex/static_root/assets/reader-DdWNjEED.97c15f661faf.css +0 -1
  589. codex/static_root/assets/reader-DdWNjEED.97c15f661faf.css.br +0 -0
  590. codex/static_root/assets/reader-DdWNjEED.97c15f661faf.css.gz +0 -0
  591. codex/static_root/assets/reader-DdWNjEED.css +0 -1
  592. codex/static_root/assets/reader-DdWNjEED.css.br +0 -0
  593. codex/static_root/assets/reader-DdWNjEED.css.gz +0 -0
  594. codex/static_root/assets/reader-myd-70jV.2a363255ca47.js +0 -2
  595. codex/static_root/assets/reader-myd-70jV.2a363255ca47.js.br +0 -0
  596. codex/static_root/assets/reader-myd-70jV.2a363255ca47.js.gz +0 -0
  597. codex/static_root/assets/reader-myd-70jV.js +0 -2
  598. codex/static_root/assets/reader-myd-70jV.js.br +0 -0
  599. codex/static_root/assets/reader-myd-70jV.js.gz +0 -0
  600. codex/static_root/assets/relation-chips-Bd8Jicbj.35d8fe15b532.js +0 -1
  601. codex/static_root/assets/relation-chips-Bd8Jicbj.35d8fe15b532.js.br +0 -0
  602. codex/static_root/assets/relation-chips-Bd8Jicbj.35d8fe15b532.js.gz +0 -0
  603. codex/static_root/assets/relation-chips-Bd8Jicbj.js +0 -1
  604. codex/static_root/assets/relation-chips-Bd8Jicbj.js.br +0 -0
  605. codex/static_root/assets/relation-chips-Bd8Jicbj.js.gz +0 -0
  606. codex/static_root/assets/relation-chips-eQkZvJcT.6b52d3f66aed.css.br +0 -0
  607. codex/static_root/assets/relation-chips-eQkZvJcT.6b52d3f66aed.css.gz +0 -0
  608. codex/static_root/assets/relation-chips-eQkZvJcT.css.br +0 -0
  609. codex/static_root/assets/relation-chips-eQkZvJcT.css.gz +0 -0
  610. codex/static_root/assets/settings-drawer-DBftv9u0.afd25184f6d8.js +0 -2
  611. codex/static_root/assets/settings-drawer-DBftv9u0.afd25184f6d8.js.br +0 -0
  612. codex/static_root/assets/settings-drawer-DBftv9u0.afd25184f6d8.js.gz +0 -0
  613. codex/static_root/assets/settings-drawer-DBftv9u0.js +0 -2
  614. codex/static_root/assets/settings-drawer-DBftv9u0.js.br +0 -0
  615. codex/static_root/assets/settings-drawer-DBftv9u0.js.gz +0 -0
  616. codex/static_root/assets/ssrBoot-B6yWBylJ.27fba7483f5d.js.br +0 -0
  617. codex/static_root/assets/ssrBoot-B6yWBylJ.27fba7483f5d.js.gz +0 -0
  618. codex/static_root/assets/ssrBoot-B6yWBylJ.js.br +0 -0
  619. codex/static_root/assets/ssrBoot-B6yWBylJ.js.gz +0 -0
  620. codex/static_root/assets/stats-tab-B6L711cO.b6a42655cd70.css.br +0 -2
  621. codex/static_root/assets/stats-tab-B6L711cO.b6a42655cd70.css.gz +0 -0
  622. codex/static_root/assets/stats-tab-B6L711cO.css.br +0 -2
  623. codex/static_root/assets/stats-tab-B6L711cO.css.gz +0 -0
  624. codex/static_root/assets/stats-tab-DC24C65C.58280bd367e1.js.br +0 -0
  625. codex/static_root/assets/stats-tab-DC24C65C.58280bd367e1.js.gz +0 -0
  626. codex/static_root/assets/stats-tab-DC24C65C.js.br +0 -0
  627. codex/static_root/assets/stats-tab-DC24C65C.js.gz +0 -0
  628. codex/static_root/assets/task-tab-DI9bXb-m.52aad0736a2b.js.br +0 -0
  629. codex/static_root/assets/task-tab-DI9bXb-m.52aad0736a2b.js.gz +0 -0
  630. codex/static_root/assets/task-tab-DI9bXb-m.js.br +0 -0
  631. codex/static_root/assets/task-tab-DI9bXb-m.js.gz +0 -0
  632. codex/static_root/assets/unauthorized-C0p00au3.983dc96cbe2b.js +0 -1
  633. codex/static_root/assets/unauthorized-C0p00au3.983dc96cbe2b.js.br +0 -0
  634. codex/static_root/assets/unauthorized-C0p00au3.983dc96cbe2b.js.gz +0 -0
  635. codex/static_root/assets/unauthorized-C0p00au3.js +0 -1
  636. codex/static_root/assets/unauthorized-C0p00au3.js.br +0 -0
  637. codex/static_root/assets/unauthorized-C0p00au3.js.gz +0 -0
  638. codex/static_root/assets/unauthorized-CtkV01lw.8668ffe7b306.css +0 -1
  639. codex/static_root/assets/unauthorized-CtkV01lw.8668ffe7b306.css.br +0 -0
  640. codex/static_root/assets/unauthorized-CtkV01lw.8668ffe7b306.css.gz +0 -0
  641. codex/static_root/assets/unauthorized-CtkV01lw.css +0 -1
  642. codex/static_root/assets/unauthorized-CtkV01lw.css.br +0 -0
  643. codex/static_root/assets/unauthorized-CtkV01lw.css.gz +0 -0
  644. codex/static_root/assets/user-tab-B7e9oz0-.03fd3875c9e3.js.br +0 -0
  645. codex/static_root/assets/user-tab-B7e9oz0-.03fd3875c9e3.js.gz +0 -0
  646. codex/static_root/assets/user-tab-B7e9oz0-.js.br +0 -0
  647. codex/static_root/assets/user-tab-B7e9oz0-.js.gz +0 -0
  648. codex/static_root/manifest.fd580176863a.json +0 -757
  649. codex/static_root/manifest.fd580176863a.json.br +0 -0
  650. codex/static_root/manifest.fd580176863a.json.gz +0 -0
  651. {codex-1.7.11a0.dist-info → codex-1.7.13.dist-info}/LICENSE +0 -0
  652. {codex-1.7.11a0.dist-info → codex-1.7.13.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/highlight.css": "rest_framework/docs/css/highlight.e0e4d973c6d7.css", "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/js/highlight.pack.js": "rest_framework/docs/js/highlight.pack.479b5f21dcba.js", "rest_framework/docs/js/jquery.json-view.min.js": "rest_framework/docs/js/jquery.json-view.min.b7c2d6981377.js", "rest_framework/docs/js/api.js": "rest_framework/docs/js/api.18a5ba8a1bd8.js", "rest_framework/img/grid.png": "rest_framework/img/grid.a4b938cf382b.png", "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/css/bootstrap.min.css": "rest_framework/css/bootstrap.min.f17d4516b026.css", "rest_framework/css/bootstrap.min.css.map": "rest_framework/css/bootstrap.min.css.cafbda9c0e9e.map", "rest_framework/css/font-awesome-4.0.3.css": "rest_framework/css/font-awesome-4.0.3.c1e1ea213abf.css", "rest_framework/css/bootstrap-tweaks.css": "rest_framework/css/bootstrap-tweaks.ee4ee6acf9eb.css", "rest_framework/css/bootstrap-theme.min.css": "rest_framework/css/bootstrap-theme.min.1d4b05b397c3.css", "rest_framework/css/default.css": "rest_framework/css/default.789dfb5732d7.css", "rest_framework/css/bootstrap-theme.min.css.map": "rest_framework/css/bootstrap-theme.min.css.51806092cc05.map", "rest_framework/css/prettify.css": "rest_framework/css/prettify.a987f72342ee.css", "rest_framework/js/default.js": "rest_framework/js/default.5b08897dbdc3.js", "rest_framework/js/csrf.js": "rest_framework/js/csrf.455080a7b2ce.js", "rest_framework/js/ajax-form.js": "rest_framework/js/ajax-form.4e1cdcb7acab.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/js/jquery-3.7.1.min.js": "rest_framework/js/jquery-3.7.1.min.2c872dbe60f4.js", "rest_framework/js/prettify-min.js": "rest_framework/js/prettify-min.709bfcc456c6.js", "rest_framework/js/bootstrap.min.js": "rest_framework/js/bootstrap.min.2f34b630ffe3.js", "rest_framework/fonts/fontawesome-webfont.woff": "rest_framework/fonts/fontawesome-webfont.3293616ec0c6.woff", "rest_framework/fonts/glyphicons-halflings-regular.woff": "rest_framework/fonts/glyphicons-halflings-regular.fa2772327f55.woff", "rest_framework/fonts/glyphicons-halflings-regular.eot": "rest_framework/fonts/glyphicons-halflings-regular.f4769f9bdb74.eot", "rest_framework/fonts/glyphicons-halflings-regular.svg": "rest_framework/fonts/glyphicons-halflings-regular.08eda92397ae.svg", "rest_framework/fonts/glyphicons-halflings-regular.ttf": "rest_framework/fonts/glyphicons-halflings-regular.e18bbf611f2a.ttf", "rest_framework/fonts/fontawesome-webfont.svg": "rest_framework/fonts/fontawesome-webfont.83e37a11f9d7.svg", "rest_framework/fonts/fontawesome-webfont.eot": "rest_framework/fonts/fontawesome-webfont.8b27bc96115c.eot", "rest_framework/fonts/glyphicons-halflings-regular.woff2": "rest_framework/fonts/glyphicons-halflings-regular.448c34a56d69.woff2", "rest_framework/fonts/fontawesome-webfont.ttf": "rest_framework/fonts/fontawesome-webfont.dcb26c7239d8.ttf", "img/logo-maskable-180.webp": "img/logo-maskable-180.c58d966aa64e.webp", "img/imprint.svg": "img/imprint.7c2adebb76d6.svg", "img/publisher.svg": "img/publisher.82d378fcd601.svg", "img/missing-cover.svg": "img/missing-cover.ddb038cc2c56.svg", "img/series.svg": "img/series.ec8a889b8f95.svg", "img/volume.svg": "img/volume.814e4c79461a.svg", "img/missing-cover-165.webp": "img/missing-cover-165.0743171f2148.webp", "img/logo-maskable.svg": "img/logo-maskable.8f7de7f1c6a8.svg", "img/story-arc.svg": "img/story-arc.ca10014355ef.svg", "img/logo.svg": "img/logo.0f5344a028ca.svg", "img/logo-32.webp": "img/logo-32.5688944495bf.webp", "img/folder.svg": "img/folder.f28936a3701d.svg", "pwa/offline.html": "pwa/offline.7bfaf9f94bf9.html", "assets/copy-to-clipboard-DoUvDJVx.js": "assets/copy-to-clipboard-DoUvDJVx.bec27f144aca.js", "assets/change-password-dialog-Bw5_buVm.js": "assets/change-password-dialog-Bw5_buVm.d199b40591de.js", "assets/VCombobox-DpadV2-4.js": "assets/VCombobox-DpadV2-4.ea605785117d.js", "assets/http-error-BYu6Kcz7.js": "assets/http-error-BYu6Kcz7.9e6d6753260e.js", "assets/pdf-doc-DxqOo2k2.css": "assets/pdf-doc-DxqOo2k2.42496ffbf35b.css", "assets/VExpansionPanels-ape8k2o6.js": "assets/VExpansionPanels-ape8k2o6.235735bba3cc.js", "assets/VWindowItem-DSXaWHkP.js": "assets/VWindowItem-DSXaWHkP.89ac2ece629a.js", "assets/materialdesignicons-webfont-Dp5v-WZN.woff2": "assets/materialdesignicons-webfont-Dp5v-WZN.1d7bcee1b302.woff2", "assets/VRadioGroup-BqJIH3Pa.js": "assets/VRadioGroup-BqJIH3Pa.22a036a63862.js", "assets/VDialog-DYkXmPin.css": "assets/VDialog-DYkXmPin.3991696c6a81.css", "assets/VForm-DxBt30-N.css": "assets/VForm-DxBt30-N.138c0b89b6fc.css", "assets/pagination-toolbar-CzT9Hc3f.css": "assets/pagination-toolbar-CzT9Hc3f.487e647604e2.css", "assets/VSelectionControl-DtEh26JD.css": "assets/VSelectionControl-DtEh26JD.eec621947209.css", "assets/VCombobox-BQHELb_o.css": "assets/VCombobox-BQHELb_o.9f25a34994e2.css", "assets/filter-D2ELuNq3.js": "assets/filter-D2ELuNq3.2b1c1f24a6b4.js", "assets/http-error-CODU7jcH.css": "assets/http-error-CODU7jcH.8c13689ae574.css", "assets/task-tab-CW4DQ3KN.css": "assets/task-tab-CW4DQ3KN.81812f9208e5.css", "assets/group-tab-_vKWzoyd.css": "assets/group-tab-_vKWzoyd.948e907b1e6b.css", "assets/datetime-column-BavtvLnf.css": "assets/datetime-column-BavtvLnf.1f3bf499e063.css", "assets/change-password-dialog-DL8UMjmX.css": "assets/change-password-dialog-DL8UMjmX.526f97e577e7.css", "assets/materialdesignicons-webfont-B7mPwVP_.ttf": "assets/materialdesignicons-webfont-B7mPwVP_.6e435534bd35.ttf", "assets/forwardRefs-Dyi06MPF.css": "assets/forwardRefs-Dyi06MPF.601ab1fd99b1.css", "assets/browser-yJ6Noi8Y.js": "assets/browser-yJ6Noi8Y.624ef6fbd20b.js", "assets/library-tab-B5EpvS2Z.js": "assets/library-tab-B5EpvS2Z.ce7f598b989c.js", "assets/VCheckboxBtn-1PexCc2F.js": "assets/VCheckboxBtn-1PexCc2F.ac78c4bfe6bd.js", "assets/VCheckbox-t1haz9-P.js": "assets/VCheckbox-t1haz9-P.38cb3995b2f3.js", "assets/stats-tab-DC24C65C.js": "assets/stats-tab-DC24C65C.58280bd367e1.js", "assets/user-tab-B7e9oz0-.js": "assets/user-tab-B7e9oz0-.03fd3875c9e3.js", "assets/task-tab-DI9bXb-m.js": "assets/task-tab-DI9bXb-m.52aad0736a2b.js", "assets/relation-chips-eQkZvJcT.css": "assets/relation-chips-eQkZvJcT.6b52d3f66aed.css", "assets/group-tab-J2MqClVb.js": "assets/group-tab-J2MqClVb.ff59e8269756.js", "assets/reader-myd-70jV.js": "assets/reader-myd-70jV.2a363255ca47.js", "assets/pdf-doc-CW06S-ga.js": "assets/pdf-doc-CW06S-ga.e7c567b9d4cd.js", "assets/VRadioGroup-Cp9mZ7cb.css": "assets/VRadioGroup-Cp9mZ7cb.8e3741381961.css", "assets/unauthorized-CtkV01lw.css": "assets/unauthorized-CtkV01lw.8668ffe7b306.css", "assets/confirm-dialog-BI5kQLy_.css": "assets/confirm-dialog-BI5kQLy_.1b5309ad95ec.css", "assets/browser-Bf8JG2CE.css": "assets/browser-Bf8JG2CE.3af978c1f766.css", "assets/library-tab-DLpvMqPW.css": "assets/library-tab-DLpvMqPW.2989f610950b.css", "assets/VDivider-DU47sRrT.css": "assets/VDivider-DU47sRrT.3d2e17799e5c.css", "assets/VSelect-Bi5KABMc.js": "assets/VSelect-Bi5KABMc.1268bafd6469.js", "assets/admin-settings-button-progress-XVi7SeHr.css": "assets/admin-settings-button-progress-XVi7SeHr.435dc945daf1.css", "assets/pagination-toolbar-2endB3w1.js": "assets/pagination-toolbar-2endB3w1.f94e6a3535e4.js", "assets/index-BHXJTQ4V.css": "assets/index-BHXJTQ4V.523d7b3d350f.css", "assets/VDialog-BR4MrJeK.js": "assets/VDialog-BR4MrJeK.a2c876dbfac0.js", "assets/ssrBoot-B6yWBylJ.js": "assets/ssrBoot-B6yWBylJ.27fba7483f5d.js", "assets/admin-settings-button-progress-CLrIYn4d.js": "assets/admin-settings-button-progress-CLrIYn4d.cec2cfd322a1.js", "assets/VTable-BnxSZ_W5.css": "assets/VTable-BnxSZ_W5.c36f0a6a30cf.css", "assets/pager-full-pdf-vSb0Gv-4.js": "assets/pager-full-pdf-vSb0Gv-4.015647f33ab1.js", "assets/admin-menu-Bts5DypF.js": "assets/admin-menu-Bts5DypF.83389408d5df.js", "assets/main-K8cER0IH.css": "assets/main-K8cER0IH.d529e8b3f52a.css", "assets/admin-menu-CKlcsy9S.css": "assets/admin-menu-CKlcsy9S.41b2cf82b873.css", "assets/flag-tab-CESc_7Pq.css": "assets/flag-tab-CESc_7Pq.2260edfa4c38.css", "assets/relation-chips-Bd8Jicbj.js": "assets/relation-chips-Bd8Jicbj.35d8fe15b532.js", "assets/VExpansionPanels-RsCANmDP.css": "assets/VExpansionPanels-RsCANmDP.5b17872981df.css", "assets/main-nb_FhQoD.js": "assets/main-nb_FhQoD.5279ea775ff6.js", "assets/VTable-DWCA1lvG.js": "assets/VTable-DWCA1lvG.1562d6d70dbe.js", "assets/settings-drawer-DBftv9u0.js": "assets/settings-drawer-DBftv9u0.afd25184f6d8.js", "assets/forwardRefs-Cvn3Vptr.js": "assets/forwardRefs-Cvn3Vptr.26250646de8c.js", "assets/settings-drawer-WyG6HLH-.css": "assets/settings-drawer-WyG6HLH-.fe251f6d0a75.css", "assets/VSelectionControl-CRVWANOr.js": "assets/VSelectionControl-CRVWANOr.bac2136c7c25.js", "assets/admin-Bxwc8451.js": "assets/admin-Bxwc8451.b2a8c85c5c82.js", "assets/admin-C3iCIUnm.css": "assets/admin-C3iCIUnm.06cb213f624d.css", "assets/VWindowItem-CWBhiE_Y.css": "assets/VWindowItem-CWBhiE_Y.f7fb19752bf3.css", "assets/reader-DdWNjEED.css": "assets/reader-DdWNjEED.97c15f661faf.css", "assets/VCheckbox-CvH8ekHL.css": "assets/VCheckbox-CvH8ekHL.016ed8d222c4.css", "assets/datetime-column-PBwaoZso.js": "assets/datetime-column-PBwaoZso.4b7946b97468.js", "assets/stats-tab-B6L711cO.css": "assets/stats-tab-B6L711cO.b6a42655cd70.css", "assets/VForm-ZManiwIB.js": "assets/VForm-ZManiwIB.a4ee873a7650.js", "assets/admin-C81J8xOG.js": "assets/admin-C81J8xOG.772d05753583.js", "assets/unauthorized-C0p00au3.js": "assets/unauthorized-C0p00au3.983dc96cbe2b.js", "assets/index-70Ak1yZF.js": "assets/index-70Ak1yZF.6341f252a26f.js", "assets/flag-tab-Bfd3wqbW.js": "assets/flag-tab-Bfd3wqbW.eb77780e8a45.js", "assets/materialdesignicons-webfont-PXm3-2wK.woff": "assets/materialdesignicons-webfont-PXm3-2wK.026b7ac9c43c.woff", "assets/VSelect-CP_CVb8s.css": "assets/VSelect-CP_CVb8s.6309f7bf17bb.css", "assets/VDivider-CGYMLgJf.js": "assets/VDivider-CGYMLgJf.fbcb910c5e2b.js", "assets/materialdesignicons-webfont-CSr8KVlo.eot": "assets/materialdesignicons-webfont-CSr8KVlo.8ced95a05e3c.eot", "assets/confirm-dialog-CDmsC-9_.js": "assets/confirm-dialog-CDmsC-9_.cb51658bfb81.js", "robots.txt": "robots.b6216d61c03e.txt", "manifest.json": "manifest.fd580176863a.json"}, "version": "1.1", "hash": "100be693344d"}
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/highlight.css": "rest_framework/docs/css/highlight.e0e4d973c6d7.css", "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/js/highlight.pack.js": "rest_framework/docs/js/highlight.pack.479b5f21dcba.js", "rest_framework/docs/js/jquery.json-view.min.js": "rest_framework/docs/js/jquery.json-view.min.b7c2d6981377.js", "rest_framework/docs/js/api.js": "rest_framework/docs/js/api.18a5ba8a1bd8.js", "rest_framework/img/grid.png": "rest_framework/img/grid.a4b938cf382b.png", "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/css/bootstrap.min.css": "rest_framework/css/bootstrap.min.f17d4516b026.css", "rest_framework/css/bootstrap.min.css.map": "rest_framework/css/bootstrap.min.css.cafbda9c0e9e.map", "rest_framework/css/font-awesome-4.0.3.css": "rest_framework/css/font-awesome-4.0.3.c1e1ea213abf.css", "rest_framework/css/bootstrap-tweaks.css": "rest_framework/css/bootstrap-tweaks.ee4ee6acf9eb.css", "rest_framework/css/bootstrap-theme.min.css": "rest_framework/css/bootstrap-theme.min.1d4b05b397c3.css", "rest_framework/css/default.css": "rest_framework/css/default.789dfb5732d7.css", "rest_framework/css/bootstrap-theme.min.css.map": "rest_framework/css/bootstrap-theme.min.css.51806092cc05.map", "rest_framework/css/prettify.css": "rest_framework/css/prettify.a987f72342ee.css", "rest_framework/js/default.js": "rest_framework/js/default.5b08897dbdc3.js", "rest_framework/js/csrf.js": "rest_framework/js/csrf.455080a7b2ce.js", "rest_framework/js/ajax-form.js": "rest_framework/js/ajax-form.4e1cdcb7acab.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/js/jquery-3.7.1.min.js": "rest_framework/js/jquery-3.7.1.min.2c872dbe60f4.js", "rest_framework/js/prettify-min.js": "rest_framework/js/prettify-min.709bfcc456c6.js", "rest_framework/js/bootstrap.min.js": "rest_framework/js/bootstrap.min.2f34b630ffe3.js", "rest_framework/fonts/fontawesome-webfont.woff": "rest_framework/fonts/fontawesome-webfont.3293616ec0c6.woff", "rest_framework/fonts/glyphicons-halflings-regular.woff": "rest_framework/fonts/glyphicons-halflings-regular.fa2772327f55.woff", "rest_framework/fonts/glyphicons-halflings-regular.eot": "rest_framework/fonts/glyphicons-halflings-regular.f4769f9bdb74.eot", "rest_framework/fonts/glyphicons-halflings-regular.svg": "rest_framework/fonts/glyphicons-halflings-regular.08eda92397ae.svg", "rest_framework/fonts/glyphicons-halflings-regular.ttf": "rest_framework/fonts/glyphicons-halflings-regular.e18bbf611f2a.ttf", "rest_framework/fonts/fontawesome-webfont.svg": "rest_framework/fonts/fontawesome-webfont.83e37a11f9d7.svg", "rest_framework/fonts/fontawesome-webfont.eot": "rest_framework/fonts/fontawesome-webfont.8b27bc96115c.eot", "rest_framework/fonts/glyphicons-halflings-regular.woff2": "rest_framework/fonts/glyphicons-halflings-regular.448c34a56d69.woff2", "rest_framework/fonts/fontawesome-webfont.ttf": "rest_framework/fonts/fontawesome-webfont.dcb26c7239d8.ttf", "img/logo-maskable-180.webp": "img/logo-maskable-180.c58d966aa64e.webp", "img/imprint.svg": "img/imprint.7c2adebb76d6.svg", "img/publisher.svg": "img/publisher.82d378fcd601.svg", "img/missing-cover.svg": "img/missing-cover.ddb038cc2c56.svg", "img/series.svg": "img/series.ec8a889b8f95.svg", "img/volume.svg": "img/volume.814e4c79461a.svg", "img/missing-cover-165.webp": "img/missing-cover-165.0743171f2148.webp", "img/logo-maskable.svg": "img/logo-maskable.8f7de7f1c6a8.svg", "img/story-arc.svg": "img/story-arc.ca10014355ef.svg", "img/logo.svg": "img/logo.0f5344a028ca.svg", "img/logo-32.webp": "img/logo-32.5688944495bf.webp", "img/folder.svg": "img/folder.f28936a3701d.svg", "pwa/offline.html": "pwa/offline.7bfaf9f94bf9.html", "assets/copy-to-clipboard-DoUvDJVx.js": "assets/copy-to-clipboard-DoUvDJVx.bec27f144aca.js", "assets/index-BxnlX5gb.js": "assets/index-BxnlX5gb.b6443a0b48e3.js", "assets/VWindowItem-B9xi23cd.js": "assets/VWindowItem-B9xi23cd.ee96259ae03d.js", "assets/pdf-doc-DxqOo2k2.css": "assets/pdf-doc-DxqOo2k2.42496ffbf35b.css", "assets/admin-klMr_GZK.css": "assets/admin-klMr_GZK.3784e4f1d624.css", "assets/VSelectionControl-DbdMme4i.js": "assets/VSelectionControl-DbdMme4i.c547026ebdce.js", "assets/VForm-Be9DdO0x.js": "assets/VForm-Be9DdO0x.0b54c0d9e7ff.js", "assets/flag-tab-BhehN8hQ.js": "assets/flag-tab-BhehN8hQ.584e909ecdd6.js", "assets/materialdesignicons-webfont-Dp5v-WZN.woff2": "assets/materialdesignicons-webfont-Dp5v-WZN.1d7bcee1b302.woff2", "assets/VDialog-DYkXmPin.css": "assets/VDialog-DYkXmPin.3991696c6a81.css", "assets/change-password-dialog-CNWUpsff.js": "assets/change-password-dialog-CNWUpsff.2a6249951bb6.js", "assets/VForm-DxBt30-N.css": "assets/VForm-DxBt30-N.138c0b89b6fc.css", "assets/pagination-toolbar-aHRrdz48.css": "assets/pagination-toolbar-aHRrdz48.2cbd38f9256c.css", "assets/filter-wbh_0cB-.js": "assets/filter-wbh_0cB-.a2b2422906d8.js", "assets/library-tab-Cq-D776f.js": "assets/library-tab-Cq-D776f.89f410e10a27.js", "assets/group-tab-Bi681uR0.css": "assets/group-tab-Bi681uR0.3246ac0f7cec.css", "assets/http-error-CODU7jcH.css": "assets/http-error-CODU7jcH.8c13689ae574.css", "assets/browser-sNm790x9.css": "assets/browser-sNm790x9.305a6a4f38fd.css", "assets/http-error-BHy1v31U.js": "assets/http-error-BHy1v31U.516903532e16.js", "assets/task-tab-CW4DQ3KN.css": "assets/task-tab-CW4DQ3KN.81812f9208e5.css", "assets/datetime-column-BavtvLnf.css": "assets/datetime-column-BavtvLnf.1f3bf499e063.css", "assets/main-NV7Sm4nK.js": "assets/main-NV7Sm4nK.ef4ca8f0fd9f.js", "assets/VRadioGroup-_mPqHM3O.js": "assets/VRadioGroup-_mPqHM3O.41b7c1801cfc.js", "assets/change-password-dialog-DL8UMjmX.css": "assets/change-password-dialog-DL8UMjmX.526f97e577e7.css", "assets/materialdesignicons-webfont-B7mPwVP_.ttf": "assets/materialdesignicons-webfont-B7mPwVP_.6e435534bd35.ttf", "assets/VTable-CHRVGI94.css": "assets/VTable-CHRVGI94.0a75643f6486.css", "assets/VExpansionPanels-B-5dXRRB.js": "assets/VExpansionPanels-B-5dXRRB.b71e928c960a.js", "assets/reader-BjIgRfH2.js": "assets/reader-BjIgRfH2.e9fae80f3d09.js", "assets/VSelect-BbT1aJkP.js": "assets/VSelect-BbT1aJkP.ab9bbb187356.js", "assets/index-Czf-fUM7.css": "assets/index-Czf-fUM7.50a7466d956f.css", "assets/datetime-column-BC6Dncpu.js": "assets/datetime-column-BC6Dncpu.cdbf0b2cdc9a.js", "assets/forwardRefs-CXZy2GSt.css": "assets/forwardRefs-CXZy2GSt.0ea45a864dd0.css", "assets/ssrBoot-CTyNesCO.js": "assets/ssrBoot-CTyNesCO.03ec3bf85a27.js", "assets/pagination-toolbar-BpWqCTpI.js": "assets/pagination-toolbar-BpWqCTpI.eae1ff66607a.js", "assets/admin-settings-button-progress-CPzM-FJJ.js": "assets/admin-settings-button-progress-CPzM-FJJ.1d6d002ada95.js", "assets/VRadioGroup-Cp9mZ7cb.css": "assets/VRadioGroup-Cp9mZ7cb.8e3741381961.css", "assets/VDialog-DRj4eBrO.js": "assets/VDialog-DRj4eBrO.e2ce5d20029b.js", "assets/confirm-dialog-BI5kQLy_.css": "assets/confirm-dialog-BI5kQLy_.1b5309ad95ec.css", "assets/unauthorized-bi5K10vQ.js": "assets/unauthorized-bi5K10vQ.32373df36436.js", "assets/library-tab-DLpvMqPW.css": "assets/library-tab-DLpvMqPW.2989f610950b.css", "assets/admin-C78J3iIT.js": "assets/admin-C78J3iIT.e0499821711c.js", "assets/VDivider-DU47sRrT.css": "assets/VDivider-DU47sRrT.3d2e17799e5c.css", "assets/forwardRefs-DG6cgrKs.js": "assets/forwardRefs-DG6cgrKs.63214695fc2a.js", "assets/admin-settings-button-progress-XVi7SeHr.css": "assets/admin-settings-button-progress-XVi7SeHr.435dc945daf1.css", "assets/browser-DJgssiJu.js": "assets/browser-DJgssiJu.018d043b36a0.js", "assets/user-tab-BASy3q9X.js": "assets/user-tab-BASy3q9X.3a7f9fc383e1.js", "assets/VSelectionControl-RqBzwjYi.css": "assets/VSelectionControl-RqBzwjYi.ee7425525e63.css", "assets/admin-menu-CKlcsy9S.css": "assets/admin-menu-CKlcsy9S.41b2cf82b873.css", "assets/VCheckboxBtn-07Vspsxn.js": "assets/VCheckboxBtn-07Vspsxn.377350162ca6.js", "assets/flag-tab-CESc_7Pq.css": "assets/flag-tab-CESc_7Pq.2260edfa4c38.css", "assets/VExpansionPanels-RsCANmDP.css": "assets/VExpansionPanels-RsCANmDP.5b17872981df.css", "assets/settings-drawer-ynpXH44c.js": "assets/settings-drawer-ynpXH44c.ee12b51a7b5d.js", "assets/VCombobox-CuTDA3lY.js": "assets/VCombobox-CuTDA3lY.b53f8e0b7d58.js", "assets/pager-full-pdf-DOYtfHYl.js": "assets/pager-full-pdf-DOYtfHYl.55ef88bc32dd.js", "assets/VTable-C7Pj2AU0.js": "assets/VTable-C7Pj2AU0.9358b74f1ec2.js", "assets/VCombobox-DHFthaP6.css": "assets/VCombobox-DHFthaP6.942336d23612.css", "assets/stats-tab-CGY8r-es.css": "assets/stats-tab-CGY8r-es.b06c55bdaeaa.css", "assets/confirm-dialog-B4fmqtXn.js": "assets/confirm-dialog-B4fmqtXn.d78277f0b265.js", "assets/settings-drawer-WyG6HLH-.css": "assets/settings-drawer-WyG6HLH-.fe251f6d0a75.css", "assets/reader-D7Bx0Vcv.css": "assets/reader-D7Bx0Vcv.34af07084fcb.css", "assets/VWindowItem-CWBhiE_Y.css": "assets/VWindowItem-CWBhiE_Y.f7fb19752bf3.css", "assets/VCheckbox-CvH8ekHL.css": "assets/VCheckbox-CvH8ekHL.016ed8d222c4.css", "assets/unauthorized-DE63n2Pi.css": "assets/unauthorized-DE63n2Pi.b0357009b13d.css", "assets/task-tab-DNGSwaO3.js": "assets/task-tab-DNGSwaO3.273261947a02.js", "assets/VSelect-CKXqRkBF.css": "assets/VSelect-CKXqRkBF.a8be1e193eba.css", "assets/admin-menu-g8qk-zrV.js": "assets/admin-menu-g8qk-zrV.945e67b971e8.js", "assets/relation-chips-Bp-GmsDz.js": "assets/relation-chips-Bp-GmsDz.fdd18ac6b6f7.js", "assets/VDivider-D1t2hkjV.js": "assets/VDivider-D1t2hkjV.a9cd2d5b286a.js", "assets/group-tab-BZExFXC-.js": "assets/group-tab-BZExFXC-.e99510b0aa5e.js", "assets/stats-tab-ZfoK3F_k.js": "assets/stats-tab-ZfoK3F_k.7565c9bbd336.js", "assets/admin-DycvhYet.js": "assets/admin-DycvhYet.33740bd797c9.js", "assets/pdf-doc-DAUp5U7y.js": "assets/pdf-doc-DAUp5U7y.821d344d6401.js", "assets/materialdesignicons-webfont-PXm3-2wK.woff": "assets/materialdesignicons-webfont-PXm3-2wK.026b7ac9c43c.woff", "assets/relation-chips-DvAOMwcd.css": "assets/relation-chips-DvAOMwcd.ebc505834f81.css", "assets/materialdesignicons-webfont-CSr8KVlo.eot": "assets/materialdesignicons-webfont-CSr8KVlo.8ced95a05e3c.eot", "assets/VCheckbox-CmDJN2RH.js": "assets/VCheckbox-CmDJN2RH.c0c8660af177.js", "assets/main-Of3aYkZ7.css": "assets/main-Of3aYkZ7.91c75c4fbaa6.css", "robots.txt": "robots.b6216d61c03e.txt", "manifest.json": "manifest.3057b90c8c8c.json"}, "version": "1.1", "hash": "4a113430ec0c"}
@@ -51,5 +51,5 @@ class BookmarkView(BookmarkUpdate, BookmarkAuthMixin, BrowserFilterView):
51
51
  auth_filter = self.get_bookmark_auth_filter()
52
52
  comic_qs = self._get_comic_query()
53
53
 
54
- self.update_bookmarks(auth_filter, comic_qs, updates, LOG)
54
+ self.update_bookmarks(auth_filter, comic_qs, updates)
55
55
  return Response()
@@ -1,6 +1,7 @@
1
1
  """Browser breadcrumbs calculations."""
2
2
 
3
3
  from contextlib import suppress
4
+ from dataclasses import asdict
4
5
  from types import MappingProxyType
5
6
  from typing import TYPE_CHECKING
6
7
 
@@ -23,6 +24,8 @@ from codex.views.const import (
23
24
  from codex.views.util import Route
24
25
 
25
26
  if TYPE_CHECKING:
27
+ from collections.abc import Mapping
28
+
26
29
  from codex.models.groups import Folder
27
30
 
28
31
  LOG = get_logger(__name__)
@@ -89,11 +92,13 @@ class BrowserBreadcrumbsView(BrowserPaginateView):
89
92
  group_query = model.objects.none()
90
93
  group_instance: BrowserGroupModel | None = group_query.first()
91
94
  self._group_instance = group_instance
92
- return self._group_instance # type: ignore[reportReturnType]
95
+ return self._group_instance # pyright: ignore[reportReturnType]
93
96
 
94
97
  def _init_breadcrumbs(self, valid_groups):
95
98
  """Load breadcrumbs and determine if they should be searched for a graft."""
96
- breadcrumbs: list[Route] = list(self.params.get("breadcrumbs", []))
99
+ breadcrumbs: tuple[Mapping[str, str | tuple[int, ...] | int], ...] = tuple(
100
+ self.params.get("breadcrumbs", ())
101
+ )
97
102
  old_breadcrumbs = [Route(**crumb) for crumb in breadcrumbs]
98
103
  invalid = not old_breadcrumbs or old_breadcrumbs[-1].group not in valid_groups
99
104
  if invalid:
@@ -103,7 +108,7 @@ class BrowserBreadcrumbsView(BrowserPaginateView):
103
108
  def _breadcrumbs_save(self, breadcrumbs):
104
109
  """Save the breadcrumbs to params."""
105
110
  params = dict(self.params)
106
- params["breadcrumbs"] = tuple(crumb.dict() for crumb in breadcrumbs)
111
+ params["breadcrumbs"] = tuple(asdict(crumb) for crumb in breadcrumbs)
107
112
  # The only place I rewrite params
108
113
  self._params = MappingProxyType(params)
109
114
 
@@ -16,11 +16,11 @@ from codex.models import (
16
16
  Library,
17
17
  )
18
18
  from codex.serializers.browser.page import BrowserPageSerializer
19
+ from codex.settings.settings import MAX_OBJ_PER_PAGE
19
20
  from codex.views.browser.title import BrowserTitleView
20
21
  from codex.views.const import (
21
22
  COMIC_GROUP,
22
23
  FOLDER_GROUP,
23
- MAX_OBJ_PER_PAGE,
24
24
  STORY_ARC_GROUP,
25
25
  )
26
26
 
@@ -8,9 +8,9 @@ from django.db.models.query import Q
8
8
  from codex.logger.logger import get_logger
9
9
  from codex.models import AdminFlag
10
10
  from codex.models.comic import ComicFTS
11
+ from codex.settings.settings import MAX_OBJ_PER_PAGE
11
12
  from codex.views.browser.filters.search.aliases import ALIAS_FIELD_MAP
12
13
  from codex.views.browser.filters.search.fts import BrowserFTSFilter
13
- from codex.views.const import MAX_OBJ_PER_PAGE
14
14
 
15
15
  LOG = get_logger(__name__)
16
16
  _FTS_COLUMNS = frozenset(
@@ -5,8 +5,8 @@ from math import ceil
5
5
  from django.core.paginator import EmptyPage, Paginator
6
6
 
7
7
  from codex.logger.logger import get_logger
8
+ from codex.settings.settings import MAX_OBJ_PER_PAGE
8
9
  from codex.views.browser.page_in_bounds import BrowserPageInBoundsView
9
- from codex.views.const import MAX_OBJ_PER_PAGE
10
10
 
11
11
  LOG = get_logger(__name__)
12
12
 
codex/views/const.py CHANGED
@@ -147,7 +147,6 @@ CONFIG_MODELS = (
147
147
  Group,
148
148
  Session,
149
149
  )
150
- MAX_OBJ_PER_PAGE = 100
151
150
  GROUP_MTIME_MODEL_MAP = MappingProxyType({"r": Publisher, "a": StoryArc, "f": Folder})
152
151
  EPOCH_START = datetime.fromtimestamp(0, tz=timezone.utc)
153
152
  ONE_INTEGERFIELD = Value(1, PositiveSmallIntegerField())
codex/views/download.py CHANGED
@@ -25,6 +25,7 @@ class DownloadView(AuthFilterAPIView):
25
25
  group_acl_filter = self.get_group_acl_filter(Comic, self.request.user)
26
26
  comic = (
27
27
  Comic.objects.filter(group_acl_filter)
28
+ .distinct()
28
29
  .only("path", "file_type")
29
30
  .get(pk=pk)
30
31
  )
codex/views/frontend.py CHANGED
@@ -8,10 +8,11 @@ from rest_framework.response import Response
8
8
 
9
9
  from codex.models.admin import AdminFlag
10
10
  from codex.serializers.route import RouteSerializer
11
+ from codex.views.mixins import UserActiveViewMixin
11
12
  from codex.views.session import SessionView
12
13
 
13
14
 
14
- class IndexView(SessionView):
15
+ class IndexView(SessionView, UserActiveViewMixin):
15
16
  """The main app."""
16
17
 
17
18
  SESSION_KEY = SessionView.BROWSER_SESSION_KEY
@@ -40,4 +41,5 @@ class IndexView(SessionView):
40
41
  "last_route": self._get_last_route(),
41
42
  "title": self._get_title(),
42
43
  }
44
+ self.mark_user_active()
43
45
  return Response(extra_context)
codex/views/mixins.py CHANGED
@@ -1,7 +1,10 @@
1
1
  """Cross view annotation methods."""
2
2
 
3
3
  from django.db.models.expressions import F
4
+ from rest_framework.views import APIView
4
5
 
6
+ from codex.librarian.bookmark.tasks import UserActiveTask
7
+ from codex.librarian.mp_queue import LIBRARIAN_QUEUE
5
8
  from codex.logger.logger import get_logger
6
9
  from codex.models.comic import Comic, Imprint, Volume
7
10
  from codex.views.browser.filters.filter import BrowserFilterView
@@ -75,3 +78,13 @@ class SharedAnnotationsMixin(BrowserFilterView):
75
78
  elif qs.model is Imprint:
76
79
  group_names["publisher_name"] = F("publisher__name")
77
80
  return qs.annotate(**group_names)
81
+
82
+
83
+ class UserActiveViewMixin(APIView):
84
+ """View that records user activity."""
85
+
86
+ def mark_user_active(self):
87
+ """Get the app index page."""
88
+ if self.request.user and self.request.user.pk:
89
+ task = UserActiveTask(pk=self.request.user.pk)
90
+ LIBRARIAN_QUEUE.put(task)
@@ -13,8 +13,8 @@ from codex.serializers.browser.settings import OPDSSettingsSerializer
13
13
  from codex.serializers.opds.v1 import (
14
14
  OPDS1TemplateSerializer,
15
15
  )
16
- from codex.settings.settings import FALSY
17
- from codex.views.const import MAX_OBJ_PER_PAGE
16
+ from codex.settings.settings import FALSY, MAX_OBJ_PER_PAGE
17
+ from codex.views.mixins import UserActiveViewMixin
18
18
  from codex.views.opds.auth import OPDSTemplateView
19
19
  from codex.views.opds.const import BLANK_TITLE
20
20
  from codex.views.opds.v1.entry.data import OPDS1EntryData
@@ -39,7 +39,7 @@ class OpdsNs:
39
39
  ACQUISITION = "http://opds-spec.org/2010/acquisition"
40
40
 
41
41
 
42
- class OPDS1FeedView(OPDS1LinksView, OPDSTemplateView):
42
+ class OPDS1FeedView(OPDS1LinksView, OPDSTemplateView, UserActiveViewMixin):
43
43
  """OPDS 1 Feed."""
44
44
 
45
45
  template_name = "opds_v1/index.xml"
@@ -168,4 +168,5 @@ class OPDS1FeedView(OPDS1LinksView, OPDSTemplateView):
168
168
  def get(self, *_args, **_kwargs):
169
169
  """Get the feed."""
170
170
  serializer = self.get_serializer(self)
171
+ self.mark_user_active()
171
172
  return Response(serializer.data, content_type=self.content_type)
@@ -9,7 +9,8 @@ from codex.logger.logger import get_logger
9
9
  from codex.models import AdminFlag
10
10
  from codex.serializers.browser.settings import OPDSSettingsSerializer
11
11
  from codex.serializers.opds.v2.feed import OPDS2FeedSerializer
12
- from codex.views.const import MAX_OBJ_PER_PAGE
12
+ from codex.settings.settings import MAX_OBJ_PER_PAGE
13
+ from codex.views.mixins import UserActiveViewMixin
13
14
  from codex.views.opds.auth import OPDSAuthMixin
14
15
  from codex.views.opds.const import BLANK_TITLE
15
16
  from codex.views.opds.v2.const import (
@@ -27,7 +28,7 @@ from codex.views.opds.v2.publications import OPDS2PublicationView
27
28
  LOG = get_logger(__name__)
28
29
 
29
30
 
30
- class OPDS2FeedView(OPDSAuthMixin, OPDS2PublicationView):
31
+ class OPDS2FeedView(OPDSAuthMixin, OPDS2PublicationView, UserActiveViewMixin):
31
32
  """OPDS 2.0 Feed."""
32
33
 
33
34
  DEFAULT_ROUTE = MappingProxyType(
@@ -216,4 +217,5 @@ class OPDS2FeedView(OPDSAuthMixin, OPDS2PublicationView):
216
217
  """Get the feed."""
217
218
  obj = self.get_object()
218
219
  serializer = self.get_serializer(obj)
220
+ self.mark_user_active()
219
221
  return Response(serializer.data)
@@ -34,7 +34,7 @@ _COMIC_FIELDS = (
34
34
  )
35
35
 
36
36
 
37
- class ReaderBooksView(SharedAnnotationsMixin, BookmarkAuthMixin, ReaderParamsView):
37
+ class ReaderBooksView(ReaderParamsView, SharedAnnotationsMixin, BookmarkAuthMixin):
38
38
  """Get Books methods."""
39
39
 
40
40
  def _get_reader_arc_pks(
codex/views/util.py CHANGED
@@ -3,7 +3,7 @@
3
3
  import json
4
4
  from collections.abc import Mapping
5
5
  from contextlib import suppress
6
- from dataclasses import asdict, dataclass
6
+ from dataclasses import dataclass
7
7
  from json.decoder import JSONDecodeError
8
8
  from typing import Any
9
9
  from urllib.parse import unquote_plus
@@ -15,8 +15,8 @@ from djangorestframework_camel_case.util import underscoreize
15
15
  DEFAULT_CHUNK_SIZE = 64 * 1024 # 64 Kb
16
16
 
17
17
 
18
- @dataclass()
19
- class Route(dict):
18
+ @dataclass
19
+ class Route:
20
20
  """Breadcrumb, like a route."""
21
21
 
22
22
  group: str
@@ -24,14 +24,15 @@ class Route(dict):
24
24
  page: int = 1
25
25
  name: str = ""
26
26
 
27
+ def __hash__(self):
28
+ """Breadcrumb hash."""
29
+ pk_parts = tuple(sorted(set(self.pks)))
30
+ parts = (self.group, pk_parts, self.page)
31
+ return hash(parts)
32
+
27
33
  def __eq__(self, cmp):
28
34
  """Breadcrumb equality."""
29
- return (
30
- bool(cmp is not None)
31
- and (self.group == cmp.group)
32
- and (set(self.pks) == set(cmp.pks))
33
- and (self.page == cmp.page)
34
- )
35
+ return cmp and hash(self) == hash(cmp)
35
36
 
36
37
  def __and__(self, cmp):
37
38
  """Breadcrumb intersection."""
@@ -41,8 +42,6 @@ class Route(dict):
41
42
  and (self.pks == cmp.pks or (set(self.pks) & set(cmp.pks)))
42
43
  )
43
44
 
44
- dict = asdict
45
-
46
45
 
47
46
  def reparse_json_query_params(query_params, keys) -> dict[str, Any]:
48
47
  """Reparse JSON encoded query_params."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: codex
3
- Version: 1.7.11a0
3
+ Version: 1.7.13
4
4
  Summary: A comic archive web server.
5
5
  License: GPL-3.0-only
6
6
  Keywords: comic,cbz,cbr,cbt,pdf
@@ -39,7 +39,7 @@ Requires-Dist: django-vite (>=3.0.1,<4.0.0)
39
39
  Requires-Dist: djangorestframework (>=3.15.1,<4.0.0)
40
40
  Requires-Dist: djangorestframework-camel-case (>=1.4.2,<2.0.0)
41
41
  Requires-Dist: drf-spectacular (>=0.28.0,<0.29.0)
42
- Requires-Dist: fnvhash (>=0.1,<0.2)
42
+ Requires-Dist: fnvhash (>=0.2.1,<0.3.0)
43
43
  Requires-Dist: humanfriendly (>=10.0,<11.0)
44
44
  Requires-Dist: humanize (>=4.0.0,<5.0.0)
45
45
  Requires-Dist: hypercorn[h3] (>=0.17.3,<0.18.0)
@@ -146,7 +146,7 @@ before installing Codex.
146
146
  ...and Ubuntu, Mint, MX, Window Subsystem for Linux, and others.
147
147
 
148
148
  ```sh
149
- apt install build-essential libimagequant0 libjpeg-turbo8 libopenjp2-7 libssl libyaml-0-2 libtiff6 libwebp7 python3-dev python3-pip mupdf sqlite3 unrar zlib1g
149
+ apt install build-essential libimagequant0 libjpeg-turbo8 libopenjp2-7 libssl libyaml-0-2 libtiff6 libwebp7 python3-dev python3-pip sqlite3 unrar zlib1g
150
150
  ```
151
151
 
152
152
  Versions of packages like libjpeg, libssl, libtiff may differ between flavors
@@ -161,7 +161,7 @@ apt-cache search libjpeg-turbo
161
161
  ###### <a href="alpine">Alpine</a> Dependencies
162
162
 
163
163
  ```sh
164
- apk add bsd-compat-headers build-base jpeg-dev libffi-dev libwebp mupdf openssl-dev sqlite yaml-dev zlib-dev
164
+ apk add bsd-compat-headers build-base jpeg-dev libffi-dev libwebp openssl-dev sqlite yaml-dev zlib-dev
165
165
  ```
166
166
 
167
167
  ##### Install unrar Runtime Dependency on non-debian Linux
@@ -188,7 +188,7 @@ natively on the Windows Subsystem for Linux.
188
188
  Installation instructions are in the <a href="/WINDOWS.md">Native Windows
189
189
  Dependencies Installation Document</a>.
190
190
 
191
- #### Installing Codex on ARM (AARCH64) with Python 3.13
191
+ #### Installing Codex on Linux on ARM (AARCH64) with Python 3.13
192
192
 
193
193
  Pymupdf has no pre-built wheels for AARCH64 so pip must build it and the build
194
194
  fails on Python 3.13 without this environment variable set:
@@ -197,6 +197,9 @@ fails on Python 3.13 without this environment variable set:
197
197
  PYMUPDF_SETUP_PY_LIMITED_API=0 pip install codex
198
198
  ```
199
199
 
200
+ You will also have to have the `build-essential` and `python3-dev` or equivalent
201
+ packages installed on on your Linux.
202
+
200
203
  #### <a href="#run">Run</a> Codex Natively
201
204
 
202
205
  Once you have installed codex, the codex binary should be on your path. To start