codex 1.7.1__py3-none-any.whl → 1.7.2__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 (562) hide show
  1. codex/choices.py +0 -10
  2. codex/serializers/browser/choices.py +9 -11
  3. codex/serializers/browser/metadata.py +1 -1
  4. codex/static_root/assets/VCheckbox-DLMzIII1.1ff8fc2d9a21.js +1 -0
  5. codex/static_root/assets/VCheckbox-DLMzIII1.1ff8fc2d9a21.js.br +0 -0
  6. codex/static_root/assets/VCheckbox-DLMzIII1.1ff8fc2d9a21.js.gz +0 -0
  7. codex/static_root/assets/VCheckbox-DLMzIII1.js +1 -0
  8. codex/static_root/assets/VCheckbox-DLMzIII1.js.br +0 -0
  9. codex/static_root/assets/VCheckbox-DLMzIII1.js.gz +0 -0
  10. codex/static_root/assets/{VCheckboxBtn-D5jbIiqO.921713d268ba.js → VCheckboxBtn-BzoQl8XC.094679a3624b.js} +1 -1
  11. codex/static_root/assets/VCheckboxBtn-BzoQl8XC.094679a3624b.js.br +0 -0
  12. codex/static_root/assets/VCheckboxBtn-BzoQl8XC.094679a3624b.js.gz +0 -0
  13. codex/static_root/assets/{VCheckboxBtn-D5jbIiqO.js → VCheckboxBtn-BzoQl8XC.js} +1 -1
  14. codex/static_root/assets/VCheckboxBtn-BzoQl8XC.js.br +0 -0
  15. codex/static_root/assets/VCheckboxBtn-BzoQl8XC.js.gz +0 -0
  16. codex/static_root/assets/VCombobox-CBY8K5CP.fcf2221a9edd.js +1 -0
  17. codex/static_root/assets/VCombobox-CBY8K5CP.fcf2221a9edd.js.br +0 -0
  18. codex/static_root/assets/VCombobox-CBY8K5CP.fcf2221a9edd.js.gz +0 -0
  19. codex/static_root/assets/VCombobox-CBY8K5CP.js +1 -0
  20. codex/static_root/assets/VCombobox-CBY8K5CP.js.br +0 -0
  21. codex/static_root/assets/VCombobox-CBY8K5CP.js.gz +0 -0
  22. codex/static_root/assets/VDialog-DXQz0Ylp.7b23d86dbd0d.css +1 -0
  23. codex/static_root/assets/VDialog-DXQz0Ylp.7b23d86dbd0d.css.br +0 -0
  24. codex/static_root/assets/VDialog-DXQz0Ylp.7b23d86dbd0d.css.gz +0 -0
  25. codex/static_root/assets/VDialog-DXQz0Ylp.css +1 -0
  26. codex/static_root/assets/VDialog-DXQz0Ylp.css.br +0 -0
  27. codex/static_root/assets/VDialog-DXQz0Ylp.css.gz +0 -0
  28. codex/static_root/assets/VDialog-Db4tJYqR.e21a79a5030e.js +1 -0
  29. codex/static_root/assets/VDialog-Db4tJYqR.e21a79a5030e.js.br +0 -0
  30. codex/static_root/assets/VDialog-Db4tJYqR.e21a79a5030e.js.gz +0 -0
  31. codex/static_root/assets/VDialog-Db4tJYqR.js +1 -0
  32. codex/static_root/assets/VDialog-Db4tJYqR.js.br +0 -0
  33. codex/static_root/assets/VDialog-Db4tJYqR.js.gz +0 -0
  34. codex/static_root/assets/{VExpansionPanels-BLAGU-dj.e244f3902cf9.js → VExpansionPanels-DN4yGbOt.163e59e38865.js} +1 -1
  35. codex/static_root/assets/VExpansionPanels-DN4yGbOt.163e59e38865.js.br +0 -0
  36. codex/static_root/assets/VExpansionPanels-DN4yGbOt.163e59e38865.js.gz +0 -0
  37. codex/static_root/assets/{VExpansionPanels-BLAGU-dj.js → VExpansionPanels-DN4yGbOt.js} +1 -1
  38. codex/static_root/assets/VExpansionPanels-DN4yGbOt.js.br +0 -0
  39. codex/static_root/assets/VExpansionPanels-DN4yGbOt.js.gz +0 -0
  40. codex/static_root/assets/{VRadioGroup-Bnt5BbmK.826e1c2d9134.js → VRadioGroup-D2-PWEfs.ce7644863c25.js} +1 -1
  41. codex/static_root/assets/VRadioGroup-D2-PWEfs.ce7644863c25.js.br +0 -0
  42. codex/static_root/assets/VRadioGroup-D2-PWEfs.ce7644863c25.js.gz +0 -0
  43. codex/static_root/assets/{VRadioGroup-Bnt5BbmK.js → VRadioGroup-D2-PWEfs.js} +1 -1
  44. codex/static_root/assets/VRadioGroup-D2-PWEfs.js.br +0 -0
  45. codex/static_root/assets/VRadioGroup-D2-PWEfs.js.gz +0 -0
  46. codex/static_root/assets/VSelect-DqXJ23Pc.a1360cbed050.js +1 -0
  47. codex/static_root/assets/VSelect-DqXJ23Pc.a1360cbed050.js.br +0 -0
  48. codex/static_root/assets/VSelect-DqXJ23Pc.a1360cbed050.js.gz +0 -0
  49. codex/static_root/assets/VSelect-DqXJ23Pc.js +1 -0
  50. codex/static_root/assets/VSelect-DqXJ23Pc.js.br +0 -0
  51. codex/static_root/assets/VSelect-DqXJ23Pc.js.gz +0 -0
  52. codex/static_root/assets/{VSelectionControl-CrzLF2bD.965af5336c62.js → VSelectionControl-CxhDNufT.dd7ca99567fc.js} +1 -1
  53. codex/static_root/assets/VSelectionControl-CxhDNufT.dd7ca99567fc.js.br +0 -0
  54. codex/static_root/assets/VSelectionControl-CxhDNufT.dd7ca99567fc.js.gz +0 -0
  55. codex/static_root/assets/{VSelectionControl-CrzLF2bD.js → VSelectionControl-CxhDNufT.js} +1 -1
  56. codex/static_root/assets/VSelectionControl-CxhDNufT.js.br +0 -0
  57. codex/static_root/assets/VSelectionControl-CxhDNufT.js.gz +0 -0
  58. codex/static_root/assets/{VSlideGroup-ZRALPG67.9807cdc6b330.js → VSlideGroup-DRbthp6q.7365c5542d47.js} +1 -1
  59. codex/static_root/assets/VSlideGroup-DRbthp6q.7365c5542d47.js.br +0 -0
  60. codex/static_root/assets/VSlideGroup-DRbthp6q.7365c5542d47.js.gz +0 -0
  61. codex/static_root/assets/{VSlideGroup-ZRALPG67.js → VSlideGroup-DRbthp6q.js} +1 -1
  62. codex/static_root/assets/VSlideGroup-DRbthp6q.js.br +0 -0
  63. codex/static_root/assets/VSlideGroup-DRbthp6q.js.gz +0 -0
  64. codex/static_root/assets/{VTable-Ci8_04Au.1382ab272e40.js → VTable-Cbq-yJos.c884706cac21.js} +1 -1
  65. codex/static_root/assets/VTable-Cbq-yJos.c884706cac21.js.br +0 -0
  66. codex/static_root/assets/VTable-Cbq-yJos.c884706cac21.js.gz +0 -0
  67. codex/static_root/assets/{VTable-Ci8_04Au.js → VTable-Cbq-yJos.js} +1 -1
  68. codex/static_root/assets/VTable-Cbq-yJos.js.br +0 -0
  69. codex/static_root/assets/VTable-Cbq-yJos.js.gz +0 -0
  70. codex/static_root/assets/VTextField-Crc3gdNh.39995ccf4d52.css +1 -0
  71. codex/static_root/assets/VTextField-Crc3gdNh.39995ccf4d52.css.br +0 -0
  72. codex/static_root/assets/VTextField-Crc3gdNh.39995ccf4d52.css.gz +0 -0
  73. codex/static_root/assets/VTextField-Crc3gdNh.css +1 -0
  74. codex/static_root/assets/VTextField-Crc3gdNh.css.br +0 -0
  75. codex/static_root/assets/VTextField-Crc3gdNh.css.gz +0 -0
  76. codex/static_root/assets/VTextField-X5yAw35c.155e276dd747.js +1 -0
  77. codex/static_root/assets/VTextField-X5yAw35c.155e276dd747.js.br +0 -0
  78. codex/static_root/assets/VTextField-X5yAw35c.155e276dd747.js.gz +0 -0
  79. codex/static_root/assets/VTextField-X5yAw35c.js +1 -0
  80. codex/static_root/assets/VTextField-X5yAw35c.js.br +0 -0
  81. codex/static_root/assets/VTextField-X5yAw35c.js.gz +0 -0
  82. codex/static_root/assets/{VWindowItem-CGBsUHpV.7c57d79cf74a.js → VWindowItem-CRqhVh-9.cd73d01e0591.js} +1 -1
  83. codex/static_root/assets/VWindowItem-CRqhVh-9.cd73d01e0591.js.br +0 -0
  84. codex/static_root/assets/VWindowItem-CRqhVh-9.cd73d01e0591.js.gz +0 -0
  85. codex/static_root/assets/{VWindowItem-CGBsUHpV.js → VWindowItem-CRqhVh-9.js} +1 -1
  86. codex/static_root/assets/VWindowItem-CRqhVh-9.js.br +0 -0
  87. codex/static_root/assets/VWindowItem-CRqhVh-9.js.gz +0 -0
  88. codex/static_root/assets/{admin-BTXUbxw5.23e0d3602f29.js → admin-BFvQwinN.6cfff21f780a.js} +1 -1
  89. codex/static_root/assets/admin-BFvQwinN.6cfff21f780a.js.br +0 -0
  90. codex/static_root/assets/admin-BFvQwinN.6cfff21f780a.js.gz +0 -0
  91. codex/static_root/assets/{admin-BTXUbxw5.js → admin-BFvQwinN.js} +1 -1
  92. codex/static_root/assets/admin-BFvQwinN.js.br +0 -0
  93. codex/static_root/assets/admin-BFvQwinN.js.gz +0 -0
  94. codex/static_root/assets/admin-menu-Jfmp_Yd8.39fa7a18b3b4.js +1 -0
  95. codex/static_root/assets/admin-menu-Jfmp_Yd8.39fa7a18b3b4.js.br +0 -0
  96. codex/static_root/assets/admin-menu-Jfmp_Yd8.39fa7a18b3b4.js.gz +0 -0
  97. codex/static_root/assets/admin-menu-Jfmp_Yd8.js +1 -0
  98. codex/static_root/assets/admin-menu-Jfmp_Yd8.js.br +0 -0
  99. codex/static_root/assets/admin-menu-Jfmp_Yd8.js.gz +0 -0
  100. codex/static_root/assets/{admin-settings-button-progress-DSOZWzf1.fad596375b9b.js → admin-settings-button-progress-BAk-B1sR.cbf73c71330d.js} +1 -1
  101. codex/static_root/assets/admin-settings-button-progress-BAk-B1sR.cbf73c71330d.js.br +0 -0
  102. codex/static_root/assets/admin-settings-button-progress-BAk-B1sR.cbf73c71330d.js.gz +0 -0
  103. codex/static_root/assets/{admin-settings-button-progress-DSOZWzf1.js → admin-settings-button-progress-BAk-B1sR.js} +1 -1
  104. codex/static_root/assets/admin-settings-button-progress-BAk-B1sR.js.br +0 -0
  105. codex/static_root/assets/admin-settings-button-progress-BAk-B1sR.js.gz +0 -0
  106. codex/static_root/assets/browser-CctlSJji.css +1 -0
  107. codex/static_root/assets/browser-CctlSJji.css.br +0 -0
  108. codex/static_root/assets/browser-CctlSJji.css.gz +0 -0
  109. codex/static_root/assets/browser-CctlSJji.d42d796476d2.css +1 -0
  110. codex/static_root/assets/browser-CctlSJji.d42d796476d2.css.br +0 -0
  111. codex/static_root/assets/browser-CctlSJji.d42d796476d2.css.gz +0 -0
  112. codex/static_root/assets/browser-DJnEeVHz.a78c47516b08.js +1 -0
  113. codex/static_root/assets/browser-DJnEeVHz.a78c47516b08.js.br +0 -0
  114. codex/static_root/assets/browser-DJnEeVHz.a78c47516b08.js.gz +0 -0
  115. codex/static_root/assets/browser-DJnEeVHz.js +1 -0
  116. codex/static_root/assets/browser-DJnEeVHz.js.br +0 -0
  117. codex/static_root/assets/browser-DJnEeVHz.js.gz +0 -0
  118. codex/static_root/assets/change-password-dialog-C_EOKOn9.a30e68c6e303.css +1 -0
  119. codex/static_root/assets/change-password-dialog-C_EOKOn9.a30e68c6e303.css.br +0 -0
  120. codex/static_root/assets/change-password-dialog-C_EOKOn9.a30e68c6e303.css.gz +0 -0
  121. codex/static_root/assets/change-password-dialog-C_EOKOn9.css +1 -0
  122. codex/static_root/assets/change-password-dialog-C_EOKOn9.css.br +0 -0
  123. codex/static_root/assets/change-password-dialog-C_EOKOn9.css.gz +0 -0
  124. codex/static_root/assets/change-password-dialog-DJtOQw7K.be7fa5ec653d.js +1 -0
  125. codex/static_root/assets/change-password-dialog-DJtOQw7K.be7fa5ec653d.js.br +0 -0
  126. codex/static_root/assets/change-password-dialog-DJtOQw7K.be7fa5ec653d.js.gz +0 -0
  127. codex/static_root/assets/change-password-dialog-DJtOQw7K.js +1 -0
  128. codex/static_root/assets/change-password-dialog-DJtOQw7K.js.br +0 -0
  129. codex/static_root/assets/change-password-dialog-DJtOQw7K.js.gz +0 -0
  130. codex/static_root/assets/confirm-dialog-54rblwf7.9b5915b112c0.css +1 -0
  131. codex/static_root/assets/confirm-dialog-54rblwf7.9b5915b112c0.css.br +0 -0
  132. codex/static_root/assets/confirm-dialog-54rblwf7.css +1 -0
  133. codex/static_root/assets/confirm-dialog-54rblwf7.css.br +0 -0
  134. codex/static_root/assets/confirm-dialog-CME4gKSZ.1606233e784c.js +1 -0
  135. codex/static_root/assets/confirm-dialog-CME4gKSZ.1606233e784c.js.br +0 -0
  136. codex/static_root/assets/confirm-dialog-CME4gKSZ.1606233e784c.js.gz +0 -0
  137. codex/static_root/assets/confirm-dialog-CME4gKSZ.js +1 -0
  138. codex/static_root/assets/confirm-dialog-CME4gKSZ.js.br +0 -0
  139. codex/static_root/assets/confirm-dialog-CME4gKSZ.js.gz +0 -0
  140. codex/static_root/assets/{datetime-column-BN2Ulei5.a31061d3729c.js → datetime-column-D_F30OLW.09cdce0ef96e.js} +1 -1
  141. codex/static_root/assets/datetime-column-D_F30OLW.09cdce0ef96e.js.br +2 -0
  142. codex/static_root/assets/datetime-column-D_F30OLW.09cdce0ef96e.js.gz +0 -0
  143. codex/static_root/assets/{datetime-column-BN2Ulei5.js → datetime-column-D_F30OLW.js} +1 -1
  144. codex/static_root/assets/datetime-column-D_F30OLW.js.br +2 -0
  145. codex/static_root/assets/datetime-column-D_F30OLW.js.gz +0 -0
  146. codex/static_root/assets/{filter-CnO_WiBE.4044b9091aae.js → filter-ud5mPZpn.0f0a537959aa.js} +1 -1
  147. codex/static_root/assets/filter-ud5mPZpn.0f0a537959aa.js.br +0 -0
  148. codex/static_root/assets/filter-ud5mPZpn.0f0a537959aa.js.gz +0 -0
  149. codex/static_root/assets/{filter-CnO_WiBE.js → filter-ud5mPZpn.js} +1 -1
  150. codex/static_root/assets/filter-ud5mPZpn.js.br +0 -0
  151. codex/static_root/assets/filter-ud5mPZpn.js.gz +0 -0
  152. codex/static_root/assets/{flag-tab-C5NP3j6O.1c692a00884d.js → flag-tab-k2g6u_vi.3e1da9318af9.js} +1 -1
  153. codex/static_root/assets/flag-tab-k2g6u_vi.3e1da9318af9.js.br +0 -0
  154. codex/static_root/assets/flag-tab-k2g6u_vi.3e1da9318af9.js.gz +0 -0
  155. codex/static_root/assets/{flag-tab-C5NP3j6O.js → flag-tab-k2g6u_vi.js} +1 -1
  156. codex/static_root/assets/flag-tab-k2g6u_vi.js.br +0 -0
  157. codex/static_root/assets/flag-tab-k2g6u_vi.js.gz +0 -0
  158. codex/static_root/assets/{group-tab-Cq4QjmHS.a9d15dac0289.js → group-tab-C6Ykf03Z.ff0cc204013a.js} +1 -1
  159. codex/static_root/assets/group-tab-C6Ykf03Z.ff0cc204013a.js.br +0 -0
  160. codex/static_root/assets/group-tab-C6Ykf03Z.ff0cc204013a.js.gz +0 -0
  161. codex/static_root/assets/{group-tab-Cq4QjmHS.js → group-tab-C6Ykf03Z.js} +1 -1
  162. codex/static_root/assets/group-tab-C6Ykf03Z.js.br +0 -0
  163. codex/static_root/assets/group-tab-C6Ykf03Z.js.gz +0 -0
  164. codex/static_root/assets/http-error-Ctcws1xe.cfd378a792d2.css +1 -0
  165. codex/static_root/assets/{http-error-DKulXuTl.95e42988d5d5.css.br → http-error-Ctcws1xe.cfd378a792d2.css.br} +0 -0
  166. codex/static_root/assets/http-error-Ctcws1xe.cfd378a792d2.css.gz +0 -0
  167. codex/static_root/assets/http-error-Ctcws1xe.css +1 -0
  168. codex/static_root/assets/{http-error-DKulXuTl.css.br → http-error-Ctcws1xe.css.br} +0 -0
  169. codex/static_root/assets/http-error-Ctcws1xe.css.gz +0 -0
  170. codex/static_root/assets/{http-error-DGFbgQC5.da17e7b6d980.js → http-error-DQBHK8v5.aea50b1327fd.js} +1 -1
  171. codex/static_root/assets/http-error-DQBHK8v5.aea50b1327fd.js.br +0 -0
  172. codex/static_root/assets/http-error-DQBHK8v5.aea50b1327fd.js.gz +0 -0
  173. codex/static_root/assets/{http-error-DGFbgQC5.js → http-error-DQBHK8v5.js} +1 -1
  174. codex/static_root/assets/http-error-DQBHK8v5.js.br +0 -0
  175. codex/static_root/assets/http-error-DQBHK8v5.js.gz +0 -0
  176. codex/static_root/assets/index-ClGiHwWc.0717bacf5135.js +1 -0
  177. codex/static_root/assets/index-ClGiHwWc.0717bacf5135.js.br +0 -0
  178. codex/static_root/assets/index-ClGiHwWc.0717bacf5135.js.gz +0 -0
  179. codex/static_root/assets/index-ClGiHwWc.js +1 -0
  180. codex/static_root/assets/index-ClGiHwWc.js.br +0 -0
  181. codex/static_root/assets/index-ClGiHwWc.js.gz +0 -0
  182. codex/static_root/assets/library-tab-BpinbqAu.53fa2625e727.js +1 -0
  183. codex/static_root/assets/library-tab-BpinbqAu.53fa2625e727.js.br +0 -0
  184. codex/static_root/assets/library-tab-BpinbqAu.53fa2625e727.js.gz +0 -0
  185. codex/static_root/assets/library-tab-BpinbqAu.js +1 -0
  186. codex/static_root/assets/library-tab-BpinbqAu.js.br +0 -0
  187. codex/static_root/assets/library-tab-BpinbqAu.js.gz +0 -0
  188. codex/static_root/assets/library-tab-Cat0MAK5.5911f022188e.css +1 -0
  189. codex/static_root/assets/library-tab-Cat0MAK5.5911f022188e.css.br +0 -0
  190. codex/static_root/assets/library-tab-Cat0MAK5.5911f022188e.css.gz +0 -0
  191. codex/static_root/assets/library-tab-Cat0MAK5.css +1 -0
  192. codex/static_root/assets/library-tab-Cat0MAK5.css.br +0 -0
  193. codex/static_root/assets/library-tab-Cat0MAK5.css.gz +0 -0
  194. codex/static_root/assets/main-BVKrDunc.1c6f8cdc3afb.js +35 -0
  195. codex/static_root/assets/main-BVKrDunc.1c6f8cdc3afb.js.br +0 -0
  196. codex/static_root/assets/main-BVKrDunc.1c6f8cdc3afb.js.gz +0 -0
  197. codex/static_root/assets/main-BVKrDunc.js +35 -0
  198. codex/static_root/assets/main-BVKrDunc.js.br +0 -0
  199. codex/static_root/assets/main-BVKrDunc.js.gz +0 -0
  200. codex/static_root/assets/pager-full-pdf-C1ZSyXfG.f2e95b19621c.js +1 -0
  201. codex/static_root/assets/pager-full-pdf-C1ZSyXfG.f2e95b19621c.js.br +0 -0
  202. codex/static_root/assets/pager-full-pdf-C1ZSyXfG.f2e95b19621c.js.gz +0 -0
  203. codex/static_root/assets/pager-full-pdf-C1ZSyXfG.js +1 -0
  204. codex/static_root/assets/pager-full-pdf-C1ZSyXfG.js.br +0 -0
  205. codex/static_root/assets/pager-full-pdf-C1ZSyXfG.js.gz +0 -0
  206. codex/static_root/assets/pagination-toolbar-Cx_9nh6D.546121fa7a0d.css +1 -0
  207. codex/static_root/assets/pagination-toolbar-Cx_9nh6D.546121fa7a0d.css.br +0 -0
  208. codex/static_root/assets/pagination-toolbar-Cx_9nh6D.546121fa7a0d.css.gz +0 -0
  209. codex/static_root/assets/pagination-toolbar-Cx_9nh6D.css +1 -0
  210. codex/static_root/assets/pagination-toolbar-Cx_9nh6D.css.br +0 -0
  211. codex/static_root/assets/pagination-toolbar-Cx_9nh6D.css.gz +0 -0
  212. codex/static_root/assets/pagination-toolbar-Diad0EdD.140911bf86af.js +1 -0
  213. codex/static_root/assets/pagination-toolbar-Diad0EdD.140911bf86af.js.br +0 -0
  214. codex/static_root/assets/pagination-toolbar-Diad0EdD.140911bf86af.js.gz +0 -0
  215. codex/static_root/assets/pagination-toolbar-Diad0EdD.js +1 -0
  216. codex/static_root/assets/pagination-toolbar-Diad0EdD.js.br +0 -0
  217. codex/static_root/assets/pagination-toolbar-Diad0EdD.js.gz +0 -0
  218. codex/static_root/assets/{pdf-doc-6j4uJzw7.59963079f1ec.js → pdf-doc-b-GyNR6z.c9d18f0d36ed.js} +1 -1
  219. codex/static_root/assets/pdf-doc-b-GyNR6z.c9d18f0d36ed.js.br +0 -0
  220. codex/static_root/assets/pdf-doc-b-GyNR6z.c9d18f0d36ed.js.gz +0 -0
  221. codex/static_root/assets/{pdf-doc-6j4uJzw7.js → pdf-doc-b-GyNR6z.js} +1 -1
  222. codex/static_root/assets/pdf-doc-b-GyNR6z.js.br +0 -0
  223. codex/static_root/assets/pdf-doc-b-GyNR6z.js.gz +0 -0
  224. codex/static_root/assets/reader-2up6WEuE.c56ad81d14c6.js +2 -0
  225. codex/static_root/assets/reader-2up6WEuE.c56ad81d14c6.js.br +0 -0
  226. codex/static_root/assets/reader-2up6WEuE.c56ad81d14c6.js.gz +0 -0
  227. codex/static_root/assets/reader-2up6WEuE.js +2 -0
  228. codex/static_root/assets/reader-2up6WEuE.js.br +0 -0
  229. codex/static_root/assets/reader-2up6WEuE.js.gz +0 -0
  230. codex/static_root/assets/reader-Dd2KmdCN.115d4bfe9280.css +1 -0
  231. codex/static_root/assets/reader-Dd2KmdCN.115d4bfe9280.css.br +0 -0
  232. codex/static_root/assets/reader-Dd2KmdCN.115d4bfe9280.css.gz +0 -0
  233. codex/static_root/assets/reader-Dd2KmdCN.css +1 -0
  234. codex/static_root/assets/reader-Dd2KmdCN.css.br +0 -0
  235. codex/static_root/assets/reader-Dd2KmdCN.css.gz +0 -0
  236. codex/static_root/assets/relation-chips-piYv1IcD.f8a2ae79de89.js +1 -0
  237. codex/static_root/assets/relation-chips-piYv1IcD.f8a2ae79de89.js.br +0 -0
  238. codex/static_root/assets/relation-chips-piYv1IcD.f8a2ae79de89.js.gz +0 -0
  239. codex/static_root/assets/relation-chips-piYv1IcD.js +1 -0
  240. codex/static_root/assets/relation-chips-piYv1IcD.js.br +0 -0
  241. codex/static_root/assets/relation-chips-piYv1IcD.js.gz +0 -0
  242. codex/static_root/assets/{settings-drawer-lRimDTyf.054f1f057cee.js → settings-drawer-yVoY-WCS.1240cc47a246.js} +2 -2
  243. codex/static_root/assets/settings-drawer-yVoY-WCS.1240cc47a246.js.br +0 -0
  244. codex/static_root/assets/settings-drawer-yVoY-WCS.1240cc47a246.js.gz +0 -0
  245. codex/static_root/assets/{settings-drawer-lRimDTyf.js → settings-drawer-yVoY-WCS.js} +2 -2
  246. codex/static_root/assets/settings-drawer-yVoY-WCS.js.br +0 -0
  247. codex/static_root/assets/settings-drawer-yVoY-WCS.js.gz +0 -0
  248. codex/static_root/assets/{stats-tab-BAYTqQNg.5f715428c394.css → stats-tab-BlXGStge.9fdb0106124d.css} +1 -1
  249. codex/static_root/assets/stats-tab-BlXGStge.9fdb0106124d.css.br +0 -0
  250. codex/static_root/assets/stats-tab-BlXGStge.9fdb0106124d.css.gz +0 -0
  251. codex/static_root/assets/{stats-tab-BAYTqQNg.css → stats-tab-BlXGStge.css} +1 -1
  252. codex/static_root/assets/stats-tab-BlXGStge.css.br +0 -0
  253. codex/static_root/assets/stats-tab-BlXGStge.css.gz +0 -0
  254. codex/static_root/assets/{stats-tab-Cyli0TxY.f9af7d3387d9.js → stats-tab-bqSPLvTp.05106cb03ef0.js} +1 -1
  255. codex/static_root/assets/stats-tab-bqSPLvTp.05106cb03ef0.js.br +0 -0
  256. codex/static_root/assets/stats-tab-bqSPLvTp.05106cb03ef0.js.gz +0 -0
  257. codex/static_root/assets/{stats-tab-Cyli0TxY.js → stats-tab-bqSPLvTp.js} +1 -1
  258. codex/static_root/assets/stats-tab-bqSPLvTp.js.br +0 -0
  259. codex/static_root/assets/stats-tab-bqSPLvTp.js.gz +0 -0
  260. codex/static_root/assets/{task-tab-CrRRKMNo.52cc73a5889d.js → task-tab-DWPKaGPT.da4df28dde5c.js} +1 -1
  261. codex/static_root/assets/task-tab-DWPKaGPT.da4df28dde5c.js.br +0 -0
  262. codex/static_root/assets/task-tab-DWPKaGPT.da4df28dde5c.js.gz +0 -0
  263. codex/static_root/assets/{task-tab-CrRRKMNo.js → task-tab-DWPKaGPT.js} +1 -1
  264. codex/static_root/assets/task-tab-DWPKaGPT.js.br +0 -0
  265. codex/static_root/assets/task-tab-DWPKaGPT.js.gz +0 -0
  266. codex/static_root/assets/task-tab-EGlhcKTH.478e74041f80.css +1 -0
  267. codex/static_root/assets/{task-tab--cXi48kg.5dfd6890a1c2.css.br → task-tab-EGlhcKTH.478e74041f80.css.br} +1 -1
  268. codex/static_root/assets/task-tab-EGlhcKTH.478e74041f80.css.gz +0 -0
  269. codex/static_root/assets/task-tab-EGlhcKTH.css +1 -0
  270. codex/static_root/assets/{task-tab--cXi48kg.css.br → task-tab-EGlhcKTH.css.br} +1 -1
  271. codex/static_root/assets/task-tab-EGlhcKTH.css.gz +0 -0
  272. codex/static_root/assets/{transition-CyIqQdeu.7496bae455dc.js → transition-DWVQ2EZ3.0bdfaa37b937.js} +1 -1
  273. codex/static_root/assets/transition-DWVQ2EZ3.0bdfaa37b937.js.br +0 -0
  274. codex/static_root/assets/transition-DWVQ2EZ3.0bdfaa37b937.js.gz +0 -0
  275. codex/static_root/assets/{transition-CyIqQdeu.js → transition-DWVQ2EZ3.js} +1 -1
  276. codex/static_root/assets/transition-DWVQ2EZ3.js.br +0 -0
  277. codex/static_root/assets/transition-DWVQ2EZ3.js.gz +0 -0
  278. codex/static_root/assets/unauthorized-CEGD20tR.064b0993a944.js +1 -0
  279. codex/static_root/assets/unauthorized-CEGD20tR.064b0993a944.js.br +0 -0
  280. codex/static_root/assets/unauthorized-CEGD20tR.064b0993a944.js.gz +0 -0
  281. codex/static_root/assets/unauthorized-CEGD20tR.js +1 -0
  282. codex/static_root/assets/unauthorized-CEGD20tR.js.br +0 -0
  283. codex/static_root/assets/unauthorized-CEGD20tR.js.gz +0 -0
  284. codex/static_root/assets/{unauthorized-BjhIc97q.728511c92cd0.css → unauthorized-DyojW2ic.css} +1 -1
  285. codex/static_root/assets/unauthorized-DyojW2ic.css.br +0 -0
  286. codex/static_root/assets/unauthorized-DyojW2ic.css.gz +0 -0
  287. codex/static_root/assets/{unauthorized-BjhIc97q.css → unauthorized-DyojW2ic.feefa7628a23.css} +1 -1
  288. codex/static_root/assets/unauthorized-DyojW2ic.feefa7628a23.css.br +0 -0
  289. codex/static_root/assets/unauthorized-DyojW2ic.feefa7628a23.css.gz +0 -0
  290. codex/static_root/assets/{user-tab-Bt7BG8Ih.8f797a19b7ae.js → user-tab-EsokzMCB.b0acc46b56a3.js} +1 -1
  291. codex/static_root/assets/user-tab-EsokzMCB.b0acc46b56a3.js.br +0 -0
  292. codex/static_root/assets/user-tab-EsokzMCB.b0acc46b56a3.js.gz +0 -0
  293. codex/static_root/assets/{user-tab-Bt7BG8Ih.js → user-tab-EsokzMCB.js} +1 -1
  294. codex/static_root/assets/user-tab-EsokzMCB.js.br +0 -0
  295. codex/static_root/assets/user-tab-EsokzMCB.js.gz +0 -0
  296. codex/static_root/{manifest.dbf5ed7a4b40.json → manifest.4a38de3db1c5.json} +275 -275
  297. codex/static_root/manifest.4a38de3db1c5.json.br +0 -0
  298. codex/static_root/manifest.4a38de3db1c5.json.gz +0 -0
  299. codex/static_root/manifest.json +275 -275
  300. codex/static_root/manifest.json.br +0 -0
  301. codex/static_root/manifest.json.gz +0 -0
  302. codex/static_root/staticfiles.json +1 -1
  303. codex/urls/api/browser.py +9 -0
  304. codex/urls/api/reader.py +8 -4
  305. codex/util.py +11 -0
  306. codex/views/browser/annotate/card.py +1 -3
  307. codex/views/browser/download.py +64 -0
  308. codex/views/browser/filters/group.py +2 -0
  309. codex/views/browser/validate.py +7 -3
  310. codex/views/download.py +5 -5
  311. codex/views/reader/page.py +11 -6
  312. codex/views/reader/params.py +1 -1
  313. codex/views/session.py +2 -1
  314. {codex-1.7.1.dist-info → codex-1.7.2.dist-info}/METADATA +3 -2
  315. {codex-1.7.1.dist-info → codex-1.7.2.dist-info}/RECORD +318 -315
  316. codex/static_root/assets/VCheckbox-Cf74Jfrq.2fbb5106ef5a.js +0 -1
  317. codex/static_root/assets/VCheckbox-Cf74Jfrq.2fbb5106ef5a.js.br +0 -0
  318. codex/static_root/assets/VCheckbox-Cf74Jfrq.2fbb5106ef5a.js.gz +0 -0
  319. codex/static_root/assets/VCheckbox-Cf74Jfrq.js +0 -1
  320. codex/static_root/assets/VCheckbox-Cf74Jfrq.js.br +0 -0
  321. codex/static_root/assets/VCheckbox-Cf74Jfrq.js.gz +0 -0
  322. codex/static_root/assets/VCheckboxBtn-D5jbIiqO.921713d268ba.js.br +0 -0
  323. codex/static_root/assets/VCheckboxBtn-D5jbIiqO.921713d268ba.js.gz +0 -0
  324. codex/static_root/assets/VCheckboxBtn-D5jbIiqO.js.br +0 -0
  325. codex/static_root/assets/VCheckboxBtn-D5jbIiqO.js.gz +0 -0
  326. codex/static_root/assets/VCombobox-Dq3Y5j2w.8f4884677e5a.js +0 -1
  327. codex/static_root/assets/VCombobox-Dq3Y5j2w.8f4884677e5a.js.br +0 -0
  328. codex/static_root/assets/VCombobox-Dq3Y5j2w.8f4884677e5a.js.gz +0 -0
  329. codex/static_root/assets/VCombobox-Dq3Y5j2w.js +0 -1
  330. codex/static_root/assets/VCombobox-Dq3Y5j2w.js.br +0 -0
  331. codex/static_root/assets/VCombobox-Dq3Y5j2w.js.gz +0 -0
  332. codex/static_root/assets/VDialog-BVHV10WD.993b98f2be7f.js +0 -1
  333. codex/static_root/assets/VDialog-BVHV10WD.993b98f2be7f.js.br +0 -0
  334. codex/static_root/assets/VDialog-BVHV10WD.993b98f2be7f.js.gz +0 -0
  335. codex/static_root/assets/VDialog-BVHV10WD.js +0 -1
  336. codex/static_root/assets/VDialog-BVHV10WD.js.br +0 -0
  337. codex/static_root/assets/VDialog-BVHV10WD.js.gz +0 -0
  338. codex/static_root/assets/VDialog-CSvrKKb2.css +0 -1
  339. codex/static_root/assets/VDialog-CSvrKKb2.css.br +0 -0
  340. codex/static_root/assets/VDialog-CSvrKKb2.css.gz +0 -0
  341. codex/static_root/assets/VDialog-CSvrKKb2.fd4d50904b17.css +0 -1
  342. codex/static_root/assets/VDialog-CSvrKKb2.fd4d50904b17.css.br +0 -0
  343. codex/static_root/assets/VDialog-CSvrKKb2.fd4d50904b17.css.gz +0 -0
  344. codex/static_root/assets/VExpansionPanels-BLAGU-dj.e244f3902cf9.js.br +0 -0
  345. codex/static_root/assets/VExpansionPanels-BLAGU-dj.e244f3902cf9.js.gz +0 -0
  346. codex/static_root/assets/VExpansionPanels-BLAGU-dj.js.br +0 -0
  347. codex/static_root/assets/VExpansionPanels-BLAGU-dj.js.gz +0 -0
  348. codex/static_root/assets/VRadioGroup-Bnt5BbmK.826e1c2d9134.js.br +0 -0
  349. codex/static_root/assets/VRadioGroup-Bnt5BbmK.826e1c2d9134.js.gz +0 -0
  350. codex/static_root/assets/VRadioGroup-Bnt5BbmK.js.br +0 -0
  351. codex/static_root/assets/VRadioGroup-Bnt5BbmK.js.gz +0 -0
  352. codex/static_root/assets/VSelect-BTo1ZM8U.ea4a7a7bbce9.js +0 -1
  353. codex/static_root/assets/VSelect-BTo1ZM8U.ea4a7a7bbce9.js.br +0 -0
  354. codex/static_root/assets/VSelect-BTo1ZM8U.ea4a7a7bbce9.js.gz +0 -0
  355. codex/static_root/assets/VSelect-BTo1ZM8U.js +0 -1
  356. codex/static_root/assets/VSelect-BTo1ZM8U.js.br +0 -0
  357. codex/static_root/assets/VSelect-BTo1ZM8U.js.gz +0 -0
  358. codex/static_root/assets/VSelectionControl-CrzLF2bD.965af5336c62.js.br +0 -0
  359. codex/static_root/assets/VSelectionControl-CrzLF2bD.965af5336c62.js.gz +0 -0
  360. codex/static_root/assets/VSelectionControl-CrzLF2bD.js.br +0 -0
  361. codex/static_root/assets/VSelectionControl-CrzLF2bD.js.gz +0 -0
  362. codex/static_root/assets/VSlideGroup-ZRALPG67.9807cdc6b330.js.br +0 -0
  363. codex/static_root/assets/VSlideGroup-ZRALPG67.9807cdc6b330.js.gz +0 -0
  364. codex/static_root/assets/VSlideGroup-ZRALPG67.js.br +0 -0
  365. codex/static_root/assets/VSlideGroup-ZRALPG67.js.gz +0 -0
  366. codex/static_root/assets/VTable-Ci8_04Au.1382ab272e40.js.br +0 -0
  367. codex/static_root/assets/VTable-Ci8_04Au.1382ab272e40.js.gz +0 -0
  368. codex/static_root/assets/VTable-Ci8_04Au.js.br +0 -0
  369. codex/static_root/assets/VTable-Ci8_04Au.js.gz +0 -0
  370. codex/static_root/assets/VTextField-BnCEPZIq.b0c32b2c0b14.css +0 -1
  371. codex/static_root/assets/VTextField-BnCEPZIq.b0c32b2c0b14.css.br +0 -0
  372. codex/static_root/assets/VTextField-BnCEPZIq.b0c32b2c0b14.css.gz +0 -0
  373. codex/static_root/assets/VTextField-BnCEPZIq.css +0 -1
  374. codex/static_root/assets/VTextField-BnCEPZIq.css.br +0 -0
  375. codex/static_root/assets/VTextField-BnCEPZIq.css.gz +0 -0
  376. codex/static_root/assets/VTextField-D7pt5iJ3.c020691495b7.js +0 -1
  377. codex/static_root/assets/VTextField-D7pt5iJ3.c020691495b7.js.br +0 -0
  378. codex/static_root/assets/VTextField-D7pt5iJ3.c020691495b7.js.gz +0 -0
  379. codex/static_root/assets/VTextField-D7pt5iJ3.js +0 -1
  380. codex/static_root/assets/VTextField-D7pt5iJ3.js.br +0 -0
  381. codex/static_root/assets/VTextField-D7pt5iJ3.js.gz +0 -0
  382. codex/static_root/assets/VWindowItem-CGBsUHpV.7c57d79cf74a.js.br +0 -0
  383. codex/static_root/assets/VWindowItem-CGBsUHpV.7c57d79cf74a.js.gz +0 -0
  384. codex/static_root/assets/VWindowItem-CGBsUHpV.js.br +0 -0
  385. codex/static_root/assets/VWindowItem-CGBsUHpV.js.gz +0 -0
  386. codex/static_root/assets/admin-BTXUbxw5.23e0d3602f29.js.br +0 -0
  387. codex/static_root/assets/admin-BTXUbxw5.23e0d3602f29.js.gz +0 -0
  388. codex/static_root/assets/admin-BTXUbxw5.js.br +0 -0
  389. codex/static_root/assets/admin-BTXUbxw5.js.gz +0 -0
  390. codex/static_root/assets/admin-menu-Dbt1Rajw.043fb778ba6c.js +0 -1
  391. codex/static_root/assets/admin-menu-Dbt1Rajw.043fb778ba6c.js.br +0 -0
  392. codex/static_root/assets/admin-menu-Dbt1Rajw.043fb778ba6c.js.gz +0 -0
  393. codex/static_root/assets/admin-menu-Dbt1Rajw.js +0 -1
  394. codex/static_root/assets/admin-menu-Dbt1Rajw.js.br +0 -0
  395. codex/static_root/assets/admin-menu-Dbt1Rajw.js.gz +0 -0
  396. codex/static_root/assets/admin-settings-button-progress-DSOZWzf1.fad596375b9b.js.br +0 -0
  397. codex/static_root/assets/admin-settings-button-progress-DSOZWzf1.fad596375b9b.js.gz +0 -0
  398. codex/static_root/assets/admin-settings-button-progress-DSOZWzf1.js.br +0 -0
  399. codex/static_root/assets/admin-settings-button-progress-DSOZWzf1.js.gz +0 -0
  400. codex/static_root/assets/browser-3Sm5qvA_.188da1350ec3.css +0 -1
  401. codex/static_root/assets/browser-3Sm5qvA_.188da1350ec3.css.br +0 -0
  402. codex/static_root/assets/browser-3Sm5qvA_.188da1350ec3.css.gz +0 -0
  403. codex/static_root/assets/browser-3Sm5qvA_.css +0 -1
  404. codex/static_root/assets/browser-3Sm5qvA_.css.br +0 -0
  405. codex/static_root/assets/browser-3Sm5qvA_.css.gz +0 -0
  406. codex/static_root/assets/browser-Dq-fQLJF.2e88354a9574.js +0 -1
  407. codex/static_root/assets/browser-Dq-fQLJF.2e88354a9574.js.br +0 -0
  408. codex/static_root/assets/browser-Dq-fQLJF.2e88354a9574.js.gz +0 -0
  409. codex/static_root/assets/browser-Dq-fQLJF.js +0 -1
  410. codex/static_root/assets/browser-Dq-fQLJF.js.br +0 -0
  411. codex/static_root/assets/browser-Dq-fQLJF.js.gz +0 -0
  412. codex/static_root/assets/change-password-dialog-BaGA_bnX.af8ea11b1579.js +0 -1
  413. codex/static_root/assets/change-password-dialog-BaGA_bnX.af8ea11b1579.js.br +0 -0
  414. codex/static_root/assets/change-password-dialog-BaGA_bnX.af8ea11b1579.js.gz +0 -0
  415. codex/static_root/assets/change-password-dialog-BaGA_bnX.js +0 -1
  416. codex/static_root/assets/change-password-dialog-BaGA_bnX.js.br +0 -0
  417. codex/static_root/assets/change-password-dialog-BaGA_bnX.js.gz +0 -0
  418. codex/static_root/assets/change-password-dialog-DrIXdKUC.217574b45b02.css +0 -1
  419. codex/static_root/assets/change-password-dialog-DrIXdKUC.217574b45b02.css.br +0 -0
  420. codex/static_root/assets/change-password-dialog-DrIXdKUC.217574b45b02.css.gz +0 -0
  421. codex/static_root/assets/change-password-dialog-DrIXdKUC.css +0 -1
  422. codex/static_root/assets/change-password-dialog-DrIXdKUC.css.br +0 -0
  423. codex/static_root/assets/change-password-dialog-DrIXdKUC.css.gz +0 -0
  424. codex/static_root/assets/confirm-dialog-B7w6z2rf.472011c06253.css +0 -1
  425. codex/static_root/assets/confirm-dialog-B7w6z2rf.css +0 -1
  426. codex/static_root/assets/confirm-dialog-X14gSw1w.21504f7c1db4.js +0 -1
  427. codex/static_root/assets/confirm-dialog-X14gSw1w.21504f7c1db4.js.br +0 -0
  428. codex/static_root/assets/confirm-dialog-X14gSw1w.21504f7c1db4.js.gz +0 -0
  429. codex/static_root/assets/confirm-dialog-X14gSw1w.js +0 -1
  430. codex/static_root/assets/confirm-dialog-X14gSw1w.js.br +0 -0
  431. codex/static_root/assets/confirm-dialog-X14gSw1w.js.gz +0 -0
  432. codex/static_root/assets/datetime-column-BN2Ulei5.a31061d3729c.js.br +0 -0
  433. codex/static_root/assets/datetime-column-BN2Ulei5.a31061d3729c.js.gz +0 -0
  434. codex/static_root/assets/datetime-column-BN2Ulei5.js.br +0 -0
  435. codex/static_root/assets/datetime-column-BN2Ulei5.js.gz +0 -0
  436. codex/static_root/assets/filter-CnO_WiBE.4044b9091aae.js.br +0 -0
  437. codex/static_root/assets/filter-CnO_WiBE.4044b9091aae.js.gz +0 -0
  438. codex/static_root/assets/filter-CnO_WiBE.js.br +0 -0
  439. codex/static_root/assets/filter-CnO_WiBE.js.gz +0 -0
  440. codex/static_root/assets/flag-tab-C5NP3j6O.1c692a00884d.js.br +0 -0
  441. codex/static_root/assets/flag-tab-C5NP3j6O.1c692a00884d.js.gz +0 -0
  442. codex/static_root/assets/flag-tab-C5NP3j6O.js.br +0 -0
  443. codex/static_root/assets/flag-tab-C5NP3j6O.js.gz +0 -0
  444. codex/static_root/assets/group-tab-Cq4QjmHS.a9d15dac0289.js.br +0 -0
  445. codex/static_root/assets/group-tab-Cq4QjmHS.a9d15dac0289.js.gz +0 -0
  446. codex/static_root/assets/group-tab-Cq4QjmHS.js.br +0 -0
  447. codex/static_root/assets/group-tab-Cq4QjmHS.js.gz +0 -0
  448. codex/static_root/assets/http-error-DGFbgQC5.da17e7b6d980.js.br +0 -0
  449. codex/static_root/assets/http-error-DGFbgQC5.da17e7b6d980.js.gz +0 -0
  450. codex/static_root/assets/http-error-DGFbgQC5.js.br +0 -0
  451. codex/static_root/assets/http-error-DGFbgQC5.js.gz +0 -0
  452. codex/static_root/assets/http-error-DKulXuTl.95e42988d5d5.css +0 -1
  453. codex/static_root/assets/http-error-DKulXuTl.95e42988d5d5.css.gz +0 -0
  454. codex/static_root/assets/http-error-DKulXuTl.css +0 -1
  455. codex/static_root/assets/http-error-DKulXuTl.css.gz +0 -0
  456. codex/static_root/assets/index-BI-1EK3Q.51e5dd220639.js +0 -1
  457. codex/static_root/assets/index-BI-1EK3Q.51e5dd220639.js.br +0 -0
  458. codex/static_root/assets/index-BI-1EK3Q.51e5dd220639.js.gz +0 -0
  459. codex/static_root/assets/index-BI-1EK3Q.js +0 -1
  460. codex/static_root/assets/index-BI-1EK3Q.js.br +0 -0
  461. codex/static_root/assets/index-BI-1EK3Q.js.gz +0 -0
  462. codex/static_root/assets/library-tab-Wew8YOLv.0c1780a6b68e.css +0 -1
  463. codex/static_root/assets/library-tab-Wew8YOLv.0c1780a6b68e.css.br +0 -0
  464. codex/static_root/assets/library-tab-Wew8YOLv.0c1780a6b68e.css.gz +0 -0
  465. codex/static_root/assets/library-tab-Wew8YOLv.css +0 -1
  466. codex/static_root/assets/library-tab-Wew8YOLv.css.br +0 -0
  467. codex/static_root/assets/library-tab-Wew8YOLv.css.gz +0 -0
  468. codex/static_root/assets/library-tab-woA1HyfN.acfc4f327913.js +0 -1
  469. codex/static_root/assets/library-tab-woA1HyfN.acfc4f327913.js.br +0 -0
  470. codex/static_root/assets/library-tab-woA1HyfN.acfc4f327913.js.gz +0 -0
  471. codex/static_root/assets/library-tab-woA1HyfN.js +0 -1
  472. codex/static_root/assets/library-tab-woA1HyfN.js.br +0 -0
  473. codex/static_root/assets/library-tab-woA1HyfN.js.gz +0 -0
  474. codex/static_root/assets/main-Ed96tESk.7777498eb960.js +0 -35
  475. codex/static_root/assets/main-Ed96tESk.7777498eb960.js.br +0 -0
  476. codex/static_root/assets/main-Ed96tESk.7777498eb960.js.gz +0 -0
  477. codex/static_root/assets/main-Ed96tESk.js +0 -35
  478. codex/static_root/assets/main-Ed96tESk.js.br +0 -0
  479. codex/static_root/assets/main-Ed96tESk.js.gz +0 -0
  480. codex/static_root/assets/pager-full-pdf-DpxPZAZR.ec23b0e50b95.js +0 -1
  481. codex/static_root/assets/pager-full-pdf-DpxPZAZR.ec23b0e50b95.js.br +0 -0
  482. codex/static_root/assets/pager-full-pdf-DpxPZAZR.ec23b0e50b95.js.gz +0 -0
  483. codex/static_root/assets/pager-full-pdf-DpxPZAZR.js +0 -1
  484. codex/static_root/assets/pager-full-pdf-DpxPZAZR.js.br +0 -0
  485. codex/static_root/assets/pager-full-pdf-DpxPZAZR.js.gz +0 -0
  486. codex/static_root/assets/pagination-toolbar-Bz5nEUwa.d01b9cf3ab5e.js +0 -1
  487. codex/static_root/assets/pagination-toolbar-Bz5nEUwa.d01b9cf3ab5e.js.br +0 -0
  488. codex/static_root/assets/pagination-toolbar-Bz5nEUwa.d01b9cf3ab5e.js.gz +0 -0
  489. codex/static_root/assets/pagination-toolbar-Bz5nEUwa.js +0 -1
  490. codex/static_root/assets/pagination-toolbar-Bz5nEUwa.js.br +0 -0
  491. codex/static_root/assets/pagination-toolbar-Bz5nEUwa.js.gz +0 -0
  492. codex/static_root/assets/pagination-toolbar-DGrxp2OD.css +0 -1
  493. codex/static_root/assets/pagination-toolbar-DGrxp2OD.css.br +0 -0
  494. codex/static_root/assets/pagination-toolbar-DGrxp2OD.css.gz +0 -0
  495. codex/static_root/assets/pagination-toolbar-DGrxp2OD.f960a624f04f.css +0 -1
  496. codex/static_root/assets/pagination-toolbar-DGrxp2OD.f960a624f04f.css.br +0 -0
  497. codex/static_root/assets/pagination-toolbar-DGrxp2OD.f960a624f04f.css.gz +0 -0
  498. codex/static_root/assets/pdf-doc-6j4uJzw7.59963079f1ec.js.br +0 -0
  499. codex/static_root/assets/pdf-doc-6j4uJzw7.59963079f1ec.js.gz +0 -0
  500. codex/static_root/assets/pdf-doc-6j4uJzw7.js.br +0 -0
  501. codex/static_root/assets/pdf-doc-6j4uJzw7.js.gz +0 -0
  502. codex/static_root/assets/reader-DAyPkkSs.0f54806aed4b.js +0 -2
  503. codex/static_root/assets/reader-DAyPkkSs.0f54806aed4b.js.br +0 -0
  504. codex/static_root/assets/reader-DAyPkkSs.0f54806aed4b.js.gz +0 -0
  505. codex/static_root/assets/reader-DAyPkkSs.js +0 -2
  506. codex/static_root/assets/reader-DAyPkkSs.js.br +0 -0
  507. codex/static_root/assets/reader-DAyPkkSs.js.gz +0 -0
  508. codex/static_root/assets/reader-nD70BeEz.06e85e73c391.css +0 -1
  509. codex/static_root/assets/reader-nD70BeEz.06e85e73c391.css.br +0 -0
  510. codex/static_root/assets/reader-nD70BeEz.06e85e73c391.css.gz +0 -0
  511. codex/static_root/assets/reader-nD70BeEz.css +0 -1
  512. codex/static_root/assets/reader-nD70BeEz.css.br +0 -0
  513. codex/static_root/assets/reader-nD70BeEz.css.gz +0 -0
  514. codex/static_root/assets/relation-chips-DUOduJmS.8b39d35f8503.js +0 -1
  515. codex/static_root/assets/relation-chips-DUOduJmS.8b39d35f8503.js.br +0 -0
  516. codex/static_root/assets/relation-chips-DUOduJmS.8b39d35f8503.js.gz +0 -0
  517. codex/static_root/assets/relation-chips-DUOduJmS.js +0 -1
  518. codex/static_root/assets/relation-chips-DUOduJmS.js.br +0 -0
  519. codex/static_root/assets/relation-chips-DUOduJmS.js.gz +0 -0
  520. codex/static_root/assets/settings-drawer-lRimDTyf.054f1f057cee.js.br +0 -0
  521. codex/static_root/assets/settings-drawer-lRimDTyf.054f1f057cee.js.gz +0 -0
  522. codex/static_root/assets/settings-drawer-lRimDTyf.js.br +0 -0
  523. codex/static_root/assets/settings-drawer-lRimDTyf.js.gz +0 -0
  524. codex/static_root/assets/stats-tab-BAYTqQNg.5f715428c394.css.br +0 -0
  525. codex/static_root/assets/stats-tab-BAYTqQNg.5f715428c394.css.gz +0 -0
  526. codex/static_root/assets/stats-tab-BAYTqQNg.css.br +0 -0
  527. codex/static_root/assets/stats-tab-BAYTqQNg.css.gz +0 -0
  528. codex/static_root/assets/stats-tab-Cyli0TxY.f9af7d3387d9.js.br +0 -0
  529. codex/static_root/assets/stats-tab-Cyli0TxY.f9af7d3387d9.js.gz +0 -0
  530. codex/static_root/assets/stats-tab-Cyli0TxY.js.br +0 -0
  531. codex/static_root/assets/stats-tab-Cyli0TxY.js.gz +0 -0
  532. codex/static_root/assets/task-tab--cXi48kg.5dfd6890a1c2.css +0 -1
  533. codex/static_root/assets/task-tab--cXi48kg.5dfd6890a1c2.css.gz +0 -0
  534. codex/static_root/assets/task-tab--cXi48kg.css +0 -1
  535. codex/static_root/assets/task-tab--cXi48kg.css.gz +0 -0
  536. codex/static_root/assets/task-tab-CrRRKMNo.52cc73a5889d.js.br +0 -0
  537. codex/static_root/assets/task-tab-CrRRKMNo.52cc73a5889d.js.gz +0 -0
  538. codex/static_root/assets/task-tab-CrRRKMNo.js.br +0 -0
  539. codex/static_root/assets/task-tab-CrRRKMNo.js.gz +0 -0
  540. codex/static_root/assets/transition-CyIqQdeu.7496bae455dc.js.br +0 -0
  541. codex/static_root/assets/transition-CyIqQdeu.7496bae455dc.js.gz +0 -0
  542. codex/static_root/assets/transition-CyIqQdeu.js.br +0 -0
  543. codex/static_root/assets/transition-CyIqQdeu.js.gz +0 -0
  544. codex/static_root/assets/unauthorized-BjhIc97q.728511c92cd0.css.br +0 -0
  545. codex/static_root/assets/unauthorized-BjhIc97q.728511c92cd0.css.gz +0 -0
  546. codex/static_root/assets/unauthorized-BjhIc97q.css.br +0 -0
  547. codex/static_root/assets/unauthorized-BjhIc97q.css.gz +0 -0
  548. codex/static_root/assets/unauthorized-IWC3QdqX.1d5d2dafa046.js +0 -1
  549. codex/static_root/assets/unauthorized-IWC3QdqX.1d5d2dafa046.js.br +0 -0
  550. codex/static_root/assets/unauthorized-IWC3QdqX.1d5d2dafa046.js.gz +0 -0
  551. codex/static_root/assets/unauthorized-IWC3QdqX.js +0 -1
  552. codex/static_root/assets/unauthorized-IWC3QdqX.js.br +0 -0
  553. codex/static_root/assets/unauthorized-IWC3QdqX.js.gz +0 -0
  554. codex/static_root/assets/user-tab-Bt7BG8Ih.8f797a19b7ae.js.br +0 -0
  555. codex/static_root/assets/user-tab-Bt7BG8Ih.8f797a19b7ae.js.gz +0 -0
  556. codex/static_root/assets/user-tab-Bt7BG8Ih.js.br +0 -0
  557. codex/static_root/assets/user-tab-Bt7BG8Ih.js.gz +0 -0
  558. codex/static_root/manifest.dbf5ed7a4b40.json.br +0 -0
  559. codex/static_root/manifest.dbf5ed7a4b40.json.gz +0 -0
  560. {codex-1.7.1.dist-info → codex-1.7.2.dist-info}/LICENSE +0 -0
  561. {codex-1.7.1.dist-info → codex-1.7.2.dist-info}/WHEEL +0 -0
  562. {codex-1.7.1.dist-info → codex-1.7.2.dist-info}/entry_points.txt +0 -0
Binary file
Binary file
@@ -1 +1 @@
1
- {"paths": {"rest_framework/docs/img/favicon.ico": "rest_framework/docs/img/favicon.5195b4d0f3eb.ico", "rest_framework/docs/img/grid.png": "rest_framework/docs/img/grid.a4b938cf382b.png", "rest_framework/docs/css/jquery.json-view.min.css": "rest_framework/docs/css/jquery.json-view.min.a2e6beeb6710.css", "rest_framework/docs/css/highlight.css": "rest_framework/docs/css/highlight.e0e4d973c6d7.css", "rest_framework/docs/css/base.css": "rest_framework/docs/css/base.e630f8f4990e.css", "rest_framework/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/docs/js/jquery.json-view.min.js": "rest_framework/docs/js/jquery.json-view.min.b7c2d6981377.js", "rest_framework/fonts/glyphicons-halflings-regular.svg": "rest_framework/fonts/glyphicons-halflings-regular.08eda92397ae.svg", "rest_framework/fonts/glyphicons-halflings-regular.woff": "rest_framework/fonts/glyphicons-halflings-regular.fa2772327f55.woff", "rest_framework/fonts/fontawesome-webfont.ttf": "rest_framework/fonts/fontawesome-webfont.dcb26c7239d8.ttf", "rest_framework/fonts/glyphicons-halflings-regular.eot": "rest_framework/fonts/glyphicons-halflings-regular.f4769f9bdb74.eot", "rest_framework/fonts/fontawesome-webfont.svg": "rest_framework/fonts/fontawesome-webfont.83e37a11f9d7.svg", "rest_framework/fonts/glyphicons-halflings-regular.ttf": "rest_framework/fonts/glyphicons-halflings-regular.e18bbf611f2a.ttf", "rest_framework/fonts/fontawesome-webfont.eot": "rest_framework/fonts/fontawesome-webfont.8b27bc96115c.eot", "rest_framework/fonts/fontawesome-webfont.woff": "rest_framework/fonts/fontawesome-webfont.3293616ec0c6.woff", "rest_framework/fonts/glyphicons-halflings-regular.woff2": "rest_framework/fonts/glyphicons-halflings-regular.448c34a56d69.woff2", "rest_framework/img/glyphicons-halflings.png": "rest_framework/img/glyphicons-halflings.90233c9067e9.png", "rest_framework/img/glyphicons-halflings-white.png": "rest_framework/img/glyphicons-halflings-white.9bbc6e960299.png", "rest_framework/img/grid.png": "rest_framework/img/grid.a4b938cf382b.png", "rest_framework/css/bootstrap.min.css": "rest_framework/css/bootstrap.min.f17d4516b026.css", "rest_framework/css/prettify.css": "rest_framework/css/prettify.a987f72342ee.css", "rest_framework/css/bootstrap-theme.min.css": "rest_framework/css/bootstrap-theme.min.1d4b05b397c3.css", "rest_framework/css/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/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/bootstrap.min.css.map": "rest_framework/css/bootstrap.min.css.cafbda9c0e9e.map", "rest_framework/js/ajax-form.js": "rest_framework/js/ajax-form.4e1cdcb7acab.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/load-ajax-form.js": "rest_framework/js/load-ajax-form.8cdb3a9f3466.js", "rest_framework/js/coreapi-0.1.1.js": "rest_framework/js/coreapi-0.1.1.8851fb9336c9.js", "rest_framework/js/csrf.js": "rest_framework/js/csrf.455080a7b2ce.js", "rest_framework/js/jquery-3.7.1.min.js": "rest_framework/js/jquery-3.7.1.min.2c872dbe60f4.js", "rest_framework/js/bootstrap.min.js": "rest_framework/js/bootstrap.min.2f34b630ffe3.js", "img/story-arc.svg": "img/story-arc.ca10014355ef.svg", "img/logo-maskable.svg": "img/logo-maskable.8f7de7f1c6a8.svg", "img/folder.svg": "img/folder.f28936a3701d.svg", "img/missing-cover-165.webp": "img/missing-cover-165.0743171f2148.webp", "img/missing-cover.svg": "img/missing-cover.ddb038cc2c56.svg", "img/publisher.svg": "img/publisher.82d378fcd601.svg", "img/logo-32.webp": "img/logo-32.5688944495bf.webp", "img/imprint.svg": "img/imprint.7c2adebb76d6.svg", "img/logo.svg": "img/logo.0f5344a028ca.svg", "img/volume.svg": "img/volume.814e4c79461a.svg", "img/logo-maskable-180.webp": "img/logo-maskable-180.c58d966aa64e.webp", "img/series.svg": "img/series.ec8a889b8f95.svg", "pwa/offline.html": "pwa/offline.7bfaf9f94bf9.html", "assets/pager-full-pdf-DpxPZAZR.js": "assets/pager-full-pdf-DpxPZAZR.ec23b0e50b95.js", "assets/main-BZ73p_WW.css": "assets/main-BZ73p_WW.d529e8b3f52a.css", "assets/VSelect-DLu8bpcs.css": "assets/VSelect-DLu8bpcs.98bdcf35411c.css", "assets/transition-5LRFTPo5.css": "assets/transition-5LRFTPo5.3d726f9bbcb0.css", "assets/http-error-DGFbgQC5.js": "assets/http-error-DGFbgQC5.da17e7b6d980.js", "assets/admin-settings-button-progress-DSOZWzf1.js": "assets/admin-settings-button-progress-DSOZWzf1.fad596375b9b.js", "assets/VDialog-BVHV10WD.js": "assets/VDialog-BVHV10WD.993b98f2be7f.js", "assets/VTextField-D7pt5iJ3.js": "assets/VTextField-D7pt5iJ3.c020691495b7.js", "assets/index-BI-1EK3Q.js": "assets/index-BI-1EK3Q.51e5dd220639.js", "assets/datetime-column-DeCthByU.css": "assets/datetime-column-DeCthByU.1f3bf499e063.css", "assets/unauthorized-BjhIc97q.css": "assets/unauthorized-BjhIc97q.728511c92cd0.css", "assets/VTextField-BnCEPZIq.css": "assets/VTextField-BnCEPZIq.b0c32b2c0b14.css", "assets/browser-Dq-fQLJF.js": "assets/browser-Dq-fQLJF.2e88354a9574.js", "assets/task-tab--cXi48kg.css": "assets/task-tab--cXi48kg.5dfd6890a1c2.css", "assets/settings-drawer-DKncO_vX.css": "assets/settings-drawer-DKncO_vX.0a2cd24cd904.css", "assets/library-tab-Wew8YOLv.css": "assets/library-tab-Wew8YOLv.0c1780a6b68e.css", "assets/admin-settings-button-progress-DUUQfVsZ.css": "assets/admin-settings-button-progress-DUUQfVsZ.2548c49a853e.css", "assets/admin-menu-B9bzD6hV.css": "assets/admin-menu-B9bzD6hV.c13b7df2ff57.css", "assets/flag-tab-CqWovuBu.css": "assets/flag-tab-CqWovuBu.4dfc6b251e85.css", "assets/VWindowItem-CGBsUHpV.js": "assets/VWindowItem-CGBsUHpV.7c57d79cf74a.js", "assets/VCheckbox-Cf74Jfrq.js": "assets/VCheckbox-Cf74Jfrq.2fbb5106ef5a.js", "assets/index-CL_6g4tJ.css": "assets/index-CL_6g4tJ.523d7b3d350f.css", "assets/relation-chips-ByfWwuQc.css": "assets/relation-chips-ByfWwuQc.01269a188e01.css", "assets/pdf-doc-6j4uJzw7.js": "assets/pdf-doc-6j4uJzw7.59963079f1ec.js", "assets/VSlideGroup-ZRALPG67.js": "assets/VSlideGroup-ZRALPG67.9807cdc6b330.js", "assets/materialdesignicons-webfont-PXm3-2wK.woff": "assets/materialdesignicons-webfont-PXm3-2wK.026b7ac9c43c.woff", "assets/confirm-dialog-B7w6z2rf.css": "assets/confirm-dialog-B7w6z2rf.472011c06253.css", "assets/admin-menu-Dbt1Rajw.js": "assets/admin-menu-Dbt1Rajw.043fb778ba6c.js", "assets/group-tab-Cq4QjmHS.js": "assets/group-tab-Cq4QjmHS.a9d15dac0289.js", "assets/reader-DAyPkkSs.js": "assets/reader-DAyPkkSs.0f54806aed4b.js", "assets/datetime-column-BN2Ulei5.js": "assets/datetime-column-BN2Ulei5.a31061d3729c.js", "assets/group-tab-DkIN1Heu.css": "assets/group-tab-DkIN1Heu.948e907b1e6b.css", "assets/pagination-toolbar-Bz5nEUwa.js": "assets/pagination-toolbar-Bz5nEUwa.d01b9cf3ab5e.js", "assets/VCheckboxBtn-D5jbIiqO.js": "assets/VCheckboxBtn-D5jbIiqO.921713d268ba.js", "assets/pagination-toolbar-DGrxp2OD.css": "assets/pagination-toolbar-DGrxp2OD.f960a624f04f.css", "assets/stats-tab-BAYTqQNg.css": "assets/stats-tab-BAYTqQNg.5f715428c394.css", "assets/materialdesignicons-webfont-B7mPwVP_.ttf": "assets/materialdesignicons-webfont-B7mPwVP_.6e435534bd35.ttf", "assets/VCombobox-bwEYrXCg.css": "assets/VCombobox-bwEYrXCg.9f25a34994e2.css", "assets/VDialog-CSvrKKb2.css": "assets/VDialog-CSvrKKb2.fd4d50904b17.css", "assets/VSlideGroup-BtXPhMOT.css": "assets/VSlideGroup-BtXPhMOT.830f136ffd41.css", "assets/VTable-Y5Sc3hJd.css": "assets/VTable-Y5Sc3hJd.c36f0a6a30cf.css", "assets/VExpansionPanels-6G1AUajL.css": "assets/VExpansionPanels-6G1AUajL.5b17872981df.css", "assets/main-Ed96tESk.js": "assets/main-Ed96tESk.7777498eb960.js", "assets/browser-3Sm5qvA_.css": "assets/browser-3Sm5qvA_.188da1350ec3.css", "assets/materialdesignicons-webfont-CSr8KVlo.eot": "assets/materialdesignicons-webfont-CSr8KVlo.8ced95a05e3c.eot", "assets/VSelectionControl-CiViEYoC.css": "assets/VSelectionControl-CiViEYoC.c77bb19a4a06.css", "assets/copy-to-clipboard-DoUvDJVx.js": "assets/copy-to-clipboard-DoUvDJVx.bec27f144aca.js", "assets/VExpansionPanels-BLAGU-dj.js": "assets/VExpansionPanels-BLAGU-dj.e244f3902cf9.js", "assets/change-password-dialog-BaGA_bnX.js": "assets/change-password-dialog-BaGA_bnX.af8ea11b1579.js", "assets/reader-nD70BeEz.css": "assets/reader-nD70BeEz.06e85e73c391.css", "assets/http-error-DKulXuTl.css": "assets/http-error-DKulXuTl.95e42988d5d5.css", "assets/VTable-Ci8_04Au.js": "assets/VTable-Ci8_04Au.1382ab272e40.js", "assets/VRadioGroup-i2qP9Wu9.css": "assets/VRadioGroup-i2qP9Wu9.8e3741381961.css", "assets/VSelect-BTo1ZM8U.js": "assets/VSelect-BTo1ZM8U.ea4a7a7bbce9.js", "assets/settings-drawer-lRimDTyf.js": "assets/settings-drawer-lRimDTyf.054f1f057cee.js", "assets/VWindowItem-ByIod57Y.css": "assets/VWindowItem-ByIod57Y.f7fb19752bf3.css", "assets/VRadioGroup-Bnt5BbmK.js": "assets/VRadioGroup-Bnt5BbmK.826e1c2d9134.js", "assets/materialdesignicons-webfont-Dp5v-WZN.woff2": "assets/materialdesignicons-webfont-Dp5v-WZN.1d7bcee1b302.woff2", "assets/user-tab-Bt7BG8Ih.js": "assets/user-tab-Bt7BG8Ih.8f797a19b7ae.js", "assets/admin-BTXUbxw5.js": "assets/admin-BTXUbxw5.23e0d3602f29.js", "assets/VCheckbox-CMKdyl0R.css": "assets/VCheckbox-CMKdyl0R.016ed8d222c4.css", "assets/task-tab-CrRRKMNo.js": "assets/task-tab-CrRRKMNo.52cc73a5889d.js", "assets/change-password-dialog-DrIXdKUC.css": "assets/change-password-dialog-DrIXdKUC.217574b45b02.css", "assets/stats-tab-Cyli0TxY.js": "assets/stats-tab-Cyli0TxY.f9af7d3387d9.js", "assets/library-tab-woA1HyfN.js": "assets/library-tab-woA1HyfN.acfc4f327913.js", "assets/VSelectionControl-CrzLF2bD.js": "assets/VSelectionControl-CrzLF2bD.965af5336c62.js", "assets/flag-tab-C5NP3j6O.js": "assets/flag-tab-C5NP3j6O.1c692a00884d.js", "assets/admin-DJ7pIXDQ.css": "assets/admin-DJ7pIXDQ.e2a77af73ef2.css", "assets/unauthorized-IWC3QdqX.js": "assets/unauthorized-IWC3QdqX.1d5d2dafa046.js", "assets/relation-chips-DUOduJmS.js": "assets/relation-chips-DUOduJmS.8b39d35f8503.js", "assets/filter-CnO_WiBE.js": "assets/filter-CnO_WiBE.4044b9091aae.js", "assets/transition-CyIqQdeu.js": "assets/transition-CyIqQdeu.7496bae455dc.js", "assets/pdf-doc-CG5-AZ2M.css": "assets/pdf-doc-CG5-AZ2M.b94aac7e3313.css", "assets/VCombobox-Dq3Y5j2w.js": "assets/VCombobox-Dq3Y5j2w.8f4884677e5a.js", "assets/confirm-dialog-X14gSw1w.js": "assets/confirm-dialog-X14gSw1w.21504f7c1db4.js", "robots.txt": "robots.b6216d61c03e.txt", "manifest.json": "manifest.dbf5ed7a4b40.json"}, "version": "1.1", "hash": "4be480ae8526"}
1
+ {"paths": {"rest_framework/docs/img/favicon.ico": "rest_framework/docs/img/favicon.5195b4d0f3eb.ico", "rest_framework/docs/img/grid.png": "rest_framework/docs/img/grid.a4b938cf382b.png", "rest_framework/docs/css/jquery.json-view.min.css": "rest_framework/docs/css/jquery.json-view.min.a2e6beeb6710.css", "rest_framework/docs/css/highlight.css": "rest_framework/docs/css/highlight.e0e4d973c6d7.css", "rest_framework/docs/css/base.css": "rest_framework/docs/css/base.e630f8f4990e.css", "rest_framework/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/docs/js/jquery.json-view.min.js": "rest_framework/docs/js/jquery.json-view.min.b7c2d6981377.js", "rest_framework/fonts/glyphicons-halflings-regular.svg": "rest_framework/fonts/glyphicons-halflings-regular.08eda92397ae.svg", "rest_framework/fonts/glyphicons-halflings-regular.woff": "rest_framework/fonts/glyphicons-halflings-regular.fa2772327f55.woff", "rest_framework/fonts/fontawesome-webfont.ttf": "rest_framework/fonts/fontawesome-webfont.dcb26c7239d8.ttf", "rest_framework/fonts/glyphicons-halflings-regular.eot": "rest_framework/fonts/glyphicons-halflings-regular.f4769f9bdb74.eot", "rest_framework/fonts/fontawesome-webfont.svg": "rest_framework/fonts/fontawesome-webfont.83e37a11f9d7.svg", "rest_framework/fonts/glyphicons-halflings-regular.ttf": "rest_framework/fonts/glyphicons-halflings-regular.e18bbf611f2a.ttf", "rest_framework/fonts/fontawesome-webfont.eot": "rest_framework/fonts/fontawesome-webfont.8b27bc96115c.eot", "rest_framework/fonts/fontawesome-webfont.woff": "rest_framework/fonts/fontawesome-webfont.3293616ec0c6.woff", "rest_framework/fonts/glyphicons-halflings-regular.woff2": "rest_framework/fonts/glyphicons-halflings-regular.448c34a56d69.woff2", "rest_framework/img/glyphicons-halflings.png": "rest_framework/img/glyphicons-halflings.90233c9067e9.png", "rest_framework/img/glyphicons-halflings-white.png": "rest_framework/img/glyphicons-halflings-white.9bbc6e960299.png", "rest_framework/img/grid.png": "rest_framework/img/grid.a4b938cf382b.png", "rest_framework/css/bootstrap.min.css": "rest_framework/css/bootstrap.min.f17d4516b026.css", "rest_framework/css/prettify.css": "rest_framework/css/prettify.a987f72342ee.css", "rest_framework/css/bootstrap-theme.min.css": "rest_framework/css/bootstrap-theme.min.1d4b05b397c3.css", "rest_framework/css/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/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/bootstrap.min.css.map": "rest_framework/css/bootstrap.min.css.cafbda9c0e9e.map", "rest_framework/js/ajax-form.js": "rest_framework/js/ajax-form.4e1cdcb7acab.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/load-ajax-form.js": "rest_framework/js/load-ajax-form.8cdb3a9f3466.js", "rest_framework/js/coreapi-0.1.1.js": "rest_framework/js/coreapi-0.1.1.8851fb9336c9.js", "rest_framework/js/csrf.js": "rest_framework/js/csrf.455080a7b2ce.js", "rest_framework/js/jquery-3.7.1.min.js": "rest_framework/js/jquery-3.7.1.min.2c872dbe60f4.js", "rest_framework/js/bootstrap.min.js": "rest_framework/js/bootstrap.min.2f34b630ffe3.js", "img/story-arc.svg": "img/story-arc.ca10014355ef.svg", "img/logo-maskable.svg": "img/logo-maskable.8f7de7f1c6a8.svg", "img/folder.svg": "img/folder.f28936a3701d.svg", "img/missing-cover-165.webp": "img/missing-cover-165.0743171f2148.webp", "img/missing-cover.svg": "img/missing-cover.ddb038cc2c56.svg", "img/publisher.svg": "img/publisher.82d378fcd601.svg", "img/logo-32.webp": "img/logo-32.5688944495bf.webp", "img/imprint.svg": "img/imprint.7c2adebb76d6.svg", "img/logo.svg": "img/logo.0f5344a028ca.svg", "img/volume.svg": "img/volume.814e4c79461a.svg", "img/logo-maskable-180.webp": "img/logo-maskable-180.c58d966aa64e.webp", "img/series.svg": "img/series.ec8a889b8f95.svg", "pwa/offline.html": "pwa/offline.7bfaf9f94bf9.html", "assets/transition-DWVQ2EZ3.js": "assets/transition-DWVQ2EZ3.0bdfaa37b937.js", "assets/change-password-dialog-C_EOKOn9.css": "assets/change-password-dialog-C_EOKOn9.a30e68c6e303.css", "assets/VCheckbox-DLMzIII1.js": "assets/VCheckbox-DLMzIII1.1ff8fc2d9a21.js", "assets/admin-settings-button-progress-BAk-B1sR.js": "assets/admin-settings-button-progress-BAk-B1sR.cbf73c71330d.js", "assets/reader-2up6WEuE.js": "assets/reader-2up6WEuE.c56ad81d14c6.js", "assets/main-BZ73p_WW.css": "assets/main-BZ73p_WW.d529e8b3f52a.css", "assets/VTextField-X5yAw35c.js": "assets/VTextField-X5yAw35c.155e276dd747.js", "assets/VSelect-DLu8bpcs.css": "assets/VSelect-DLu8bpcs.98bdcf35411c.css", "assets/transition-5LRFTPo5.css": "assets/transition-5LRFTPo5.3d726f9bbcb0.css", "assets/VCheckboxBtn-BzoQl8XC.js": "assets/VCheckboxBtn-BzoQl8XC.094679a3624b.js", "assets/stats-tab-BlXGStge.css": "assets/stats-tab-BlXGStge.9fdb0106124d.css", "assets/datetime-column-DeCthByU.css": "assets/datetime-column-DeCthByU.1f3bf499e063.css", "assets/browser-CctlSJji.css": "assets/browser-CctlSJji.d42d796476d2.css", "assets/VCombobox-CBY8K5CP.js": "assets/VCombobox-CBY8K5CP.fcf2221a9edd.js", "assets/flag-tab-k2g6u_vi.js": "assets/flag-tab-k2g6u_vi.3e1da9318af9.js", "assets/settings-drawer-DKncO_vX.css": "assets/settings-drawer-DKncO_vX.0a2cd24cd904.css", "assets/VSelect-DqXJ23Pc.js": "assets/VSelect-DqXJ23Pc.a1360cbed050.js", "assets/admin-settings-button-progress-DUUQfVsZ.css": "assets/admin-settings-button-progress-DUUQfVsZ.2548c49a853e.css", "assets/admin-menu-B9bzD6hV.css": "assets/admin-menu-B9bzD6hV.c13b7df2ff57.css", "assets/flag-tab-CqWovuBu.css": "assets/flag-tab-CqWovuBu.4dfc6b251e85.css", "assets/stats-tab-bqSPLvTp.js": "assets/stats-tab-bqSPLvTp.05106cb03ef0.js", "assets/admin-BFvQwinN.js": "assets/admin-BFvQwinN.6cfff21f780a.js", "assets/index-CL_6g4tJ.css": "assets/index-CL_6g4tJ.523d7b3d350f.css", "assets/relation-chips-ByfWwuQc.css": "assets/relation-chips-ByfWwuQc.01269a188e01.css", "assets/pager-full-pdf-C1ZSyXfG.js": "assets/pager-full-pdf-C1ZSyXfG.f2e95b19621c.js", "assets/materialdesignicons-webfont-PXm3-2wK.woff": "assets/materialdesignicons-webfont-PXm3-2wK.026b7ac9c43c.woff", "assets/VDialog-DXQz0Ylp.css": "assets/VDialog-DXQz0Ylp.7b23d86dbd0d.css", "assets/user-tab-EsokzMCB.js": "assets/user-tab-EsokzMCB.b0acc46b56a3.js", "assets/VTable-Cbq-yJos.js": "assets/VTable-Cbq-yJos.c884706cac21.js", "assets/group-tab-DkIN1Heu.css": "assets/group-tab-DkIN1Heu.948e907b1e6b.css", "assets/VSelectionControl-CxhDNufT.js": "assets/VSelectionControl-CxhDNufT.dd7ca99567fc.js", "assets/library-tab-BpinbqAu.js": "assets/library-tab-BpinbqAu.53fa2625e727.js", "assets/materialdesignicons-webfont-B7mPwVP_.ttf": "assets/materialdesignicons-webfont-B7mPwVP_.6e435534bd35.ttf", "assets/group-tab-C6Ykf03Z.js": "assets/group-tab-C6Ykf03Z.ff0cc204013a.js", "assets/VCombobox-bwEYrXCg.css": "assets/VCombobox-bwEYrXCg.9f25a34994e2.css", "assets/unauthorized-CEGD20tR.js": "assets/unauthorized-CEGD20tR.064b0993a944.js", "assets/VSlideGroup-BtXPhMOT.css": "assets/VSlideGroup-BtXPhMOT.830f136ffd41.css", "assets/filter-ud5mPZpn.js": "assets/filter-ud5mPZpn.0f0a537959aa.js", "assets/datetime-column-D_F30OLW.js": "assets/datetime-column-D_F30OLW.09cdce0ef96e.js", "assets/VTextField-Crc3gdNh.css": "assets/VTextField-Crc3gdNh.39995ccf4d52.css", "assets/confirm-dialog-54rblwf7.css": "assets/confirm-dialog-54rblwf7.9b5915b112c0.css", "assets/VTable-Y5Sc3hJd.css": "assets/VTable-Y5Sc3hJd.c36f0a6a30cf.css", "assets/VExpansionPanels-6G1AUajL.css": "assets/VExpansionPanels-6G1AUajL.5b17872981df.css", "assets/VSlideGroup-DRbthp6q.js": "assets/VSlideGroup-DRbthp6q.7365c5542d47.js", "assets/task-tab-EGlhcKTH.css": "assets/task-tab-EGlhcKTH.478e74041f80.css", "assets/materialdesignicons-webfont-CSr8KVlo.eot": "assets/materialdesignicons-webfont-CSr8KVlo.8ced95a05e3c.eot", "assets/VSelectionControl-CiViEYoC.css": "assets/VSelectionControl-CiViEYoC.c77bb19a4a06.css", "assets/copy-to-clipboard-DoUvDJVx.js": "assets/copy-to-clipboard-DoUvDJVx.bec27f144aca.js", "assets/VWindowItem-CRqhVh-9.js": "assets/VWindowItem-CRqhVh-9.cd73d01e0591.js", "assets/VRadioGroup-i2qP9Wu9.css": "assets/VRadioGroup-i2qP9Wu9.8e3741381961.css", "assets/VDialog-Db4tJYqR.js": "assets/VDialog-Db4tJYqR.e21a79a5030e.js", "assets/reader-Dd2KmdCN.css": "assets/reader-Dd2KmdCN.115d4bfe9280.css", "assets/change-password-dialog-DJtOQw7K.js": "assets/change-password-dialog-DJtOQw7K.be7fa5ec653d.js", "assets/library-tab-Cat0MAK5.css": "assets/library-tab-Cat0MAK5.5911f022188e.css", "assets/VWindowItem-ByIod57Y.css": "assets/VWindowItem-ByIod57Y.f7fb19752bf3.css", "assets/settings-drawer-yVoY-WCS.js": "assets/settings-drawer-yVoY-WCS.1240cc47a246.js", "assets/browser-DJnEeVHz.js": "assets/browser-DJnEeVHz.a78c47516b08.js", "assets/materialdesignicons-webfont-Dp5v-WZN.woff2": "assets/materialdesignicons-webfont-Dp5v-WZN.1d7bcee1b302.woff2", "assets/VExpansionPanels-DN4yGbOt.js": "assets/VExpansionPanels-DN4yGbOt.163e59e38865.js", "assets/index-ClGiHwWc.js": "assets/index-ClGiHwWc.0717bacf5135.js", "assets/VCheckbox-CMKdyl0R.css": "assets/VCheckbox-CMKdyl0R.016ed8d222c4.css", "assets/http-error-Ctcws1xe.css": "assets/http-error-Ctcws1xe.cfd378a792d2.css", "assets/admin-menu-Jfmp_Yd8.js": "assets/admin-menu-Jfmp_Yd8.39fa7a18b3b4.js", "assets/confirm-dialog-CME4gKSZ.js": "assets/confirm-dialog-CME4gKSZ.1606233e784c.js", "assets/pdf-doc-b-GyNR6z.js": "assets/pdf-doc-b-GyNR6z.c9d18f0d36ed.js", "assets/unauthorized-DyojW2ic.css": "assets/unauthorized-DyojW2ic.feefa7628a23.css", "assets/http-error-DQBHK8v5.js": "assets/http-error-DQBHK8v5.aea50b1327fd.js", "assets/admin-DJ7pIXDQ.css": "assets/admin-DJ7pIXDQ.e2a77af73ef2.css", "assets/pagination-toolbar-Cx_9nh6D.css": "assets/pagination-toolbar-Cx_9nh6D.546121fa7a0d.css", "assets/VRadioGroup-D2-PWEfs.js": "assets/VRadioGroup-D2-PWEfs.ce7644863c25.js", "assets/pagination-toolbar-Diad0EdD.js": "assets/pagination-toolbar-Diad0EdD.140911bf86af.js", "assets/relation-chips-piYv1IcD.js": "assets/relation-chips-piYv1IcD.f8a2ae79de89.js", "assets/main-BVKrDunc.js": "assets/main-BVKrDunc.1c6f8cdc3afb.js", "assets/task-tab-DWPKaGPT.js": "assets/task-tab-DWPKaGPT.da4df28dde5c.js", "assets/pdf-doc-CG5-AZ2M.css": "assets/pdf-doc-CG5-AZ2M.b94aac7e3313.css", "robots.txt": "robots.b6216d61c03e.txt", "manifest.json": "manifest.4a38de3db1c5.json"}, "version": "1.1", "hash": "3d42fa5855cb"}
codex/urls/api/browser.py CHANGED
@@ -8,6 +8,7 @@ from codex.views.bookmark import BookmarkView
8
8
  from codex.views.browser.browser import BrowserView
9
9
  from codex.views.browser.choices import BrowserChoicesAvailableView, BrowserChoicesView
10
10
  from codex.views.browser.cover import CoverView
11
+ from codex.views.browser.download import GroupDownloadView
11
12
  from codex.views.browser.metadata.metadata import MetadataView
12
13
  from codex.views.browser.settings import BrowserSettingsView
13
14
 
@@ -55,4 +56,12 @@ urlpatterns = [
55
56
  cache_control(max_age=COVER_MAX_AGE, public=True)(CoverView.as_view()),
56
57
  name="cover",
57
58
  ),
59
+ #
60
+ #
61
+ # Download
62
+ path(
63
+ "<int_list:pks>/download/<str:filename>",
64
+ GroupDownloadView.as_view(),
65
+ name="download",
66
+ ),
58
67
  ]
codex/urls/api/reader.py CHANGED
@@ -11,10 +11,6 @@ from codex.views.reader.settings import ReaderSettingsView
11
11
 
12
12
  app_name = "issue"
13
13
  urlpatterns = [
14
- #
15
- #
16
- # Comic
17
- path("<int:pk>/download/<str:filename>", DownloadView.as_view(), name="download"),
18
14
  #
19
15
  #
20
16
  # Reader
@@ -25,4 +21,12 @@ urlpatterns = [
25
21
  name="page",
26
22
  ),
27
23
  path("settings", ReaderSettingsView.as_view(), name="settings"),
24
+ #
25
+ #
26
+ # Download
27
+ path(
28
+ "<int:pk>/download/<str:filename>",
29
+ DownloadView.as_view(),
30
+ name="download",
31
+ ),
28
32
  ]
codex/util.py CHANGED
@@ -1,5 +1,7 @@
1
1
  """Utility functions."""
2
2
 
3
+ from collections.abc import Mapping
4
+
3
5
 
4
6
  def max_none(*args):
5
7
  """None aware math.max."""
@@ -10,3 +12,12 @@ def max_none(*args):
10
12
  elif arg is not None:
11
13
  max_arg = max(max_arg, arg)
12
14
  return max_arg
15
+
16
+
17
+ def mapping_to_dict(data):
18
+ """Convert nested Mapping objects to dicts."""
19
+ if isinstance(data, Mapping):
20
+ return {key: mapping_to_dict(value) for key, value in data.items()}
21
+ if isinstance(data, list | tuple | frozenset | set):
22
+ return [mapping_to_dict(item) for item in data]
23
+ return data
@@ -14,7 +14,6 @@ from codex.models.comic import Comic
14
14
  from codex.models.functions import JsonGroupArray
15
15
  from codex.models.groups import BrowserGroupModel, Imprint, Publisher, Series, Volume
16
16
  from codex.views.browser.annotate.bookmark import BrowserAnnotateBookmarkView
17
- from codex.views.const import FOLDER_GROUP
18
17
 
19
18
  _GROUP_BY: MappingProxyType[type[BrowserGroupModel], str] = MappingProxyType(
20
19
  {Publisher: "sort_name", Imprint: "sort_name", Series: "sort_name", Volume: "name"}
@@ -52,8 +51,7 @@ class BrowserAnnotateCardView(BrowserAnnotateBookmarkView):
52
51
 
53
52
  def _annotate_file_name(self, qs):
54
53
  """Annotate the file name for folder view."""
55
- group = self.kwargs.get("group")
56
- if group != FOLDER_GROUP or qs.model is not Comic:
54
+ if qs.model is not Comic:
57
55
  return qs
58
56
  if self.order_key == "filename":
59
57
  file_name = F("filename")
@@ -0,0 +1,64 @@
1
+ """Download a group of comics in a zipfile."""
2
+
3
+ from django.http import HttpResponseBadRequest
4
+ from django.http.response import FileResponse, Http404
5
+ from drf_spectacular.types import OpenApiTypes
6
+ from drf_spectacular.utils import extend_schema
7
+ from zipstream import ZipStream
8
+
9
+ from codex.logger.logging import get_logger
10
+ from codex.views.browser.filters.filter import BrowserFilterView
11
+
12
+ LOG = get_logger()
13
+
14
+
15
+ class GroupDownloadView(BrowserFilterView):
16
+ """Return a group of comic archives as a streaming zipfile."""
17
+
18
+ content_type = "application/zip"
19
+ AS_ATTACHMENT = True
20
+ TARGET = "download"
21
+
22
+ def get_object(self):
23
+ """Get comic paths for a browse group."""
24
+ group = self.kwargs.get("group")
25
+ pks = self.kwargs.get("pks")
26
+ if not self.model:
27
+ reason = f"Could not find model for group {group}"
28
+ return HttpResponseBadRequest(reason)
29
+
30
+ try:
31
+ qs = self.get_filtered_queryset(self.model, group=group, pks=pks)
32
+ path_rel = self.rel_prefix + "path"
33
+ paths = qs.values_list(path_rel, flat=True)
34
+ except Exception as exc:
35
+ LOG.warning(f"Error with download query for {group}:{pks} {exc}")
36
+ raise
37
+
38
+ if not paths:
39
+ reason = f"Comics from {group}:{pks} not not found."
40
+ raise Http404(reason)
41
+
42
+ return sorted(set(paths))
43
+
44
+ @extend_schema(responses={(200, content_type): OpenApiTypes.BINARY})
45
+ def get(self, *_args, **kwargs):
46
+ """Stream a zip archive of many comics."""
47
+ paths = self.get_object()
48
+
49
+ zs = ZipStream(sized=True)
50
+ for path in paths:
51
+ zs.add_path(path)
52
+ download_file = zs
53
+
54
+ filename = kwargs.get("filename")
55
+ if not filename:
56
+ pks = self.kwargs.get("pks")
57
+ filename = f"{self.model.__name__} {pks} Comics.zip" # type: ignore
58
+
59
+ return FileResponse(
60
+ download_file,
61
+ as_attachment=self.AS_ATTACHMENT,
62
+ content_type=self.content_type,
63
+ filename=filename,
64
+ )
@@ -27,6 +27,8 @@ class GroupFilterView(BrowserParamsView):
27
27
  elif target in _PK_REL_TARGETS or page_mtime:
28
28
  # metadata, mtime, browser.page_mtime
29
29
  rel = "pk"
30
+ elif target == "download":
31
+ rel = "comic__folders" if group == "f" else "pk"
30
32
  else:
31
33
  # browser.group, opds
32
34
  rel = GROUP_RELATION[group]
@@ -1,14 +1,16 @@
1
1
  """Browser Settings and URL Validation."""
2
2
 
3
+ from collections.abc import Mapping
3
4
  from copy import deepcopy
4
5
  from types import MappingProxyType
5
6
 
6
7
  from rest_framework.exceptions import NotFound
7
8
 
8
- from codex.choices import DEFAULT_BROWSER_ROUTE, mapping_to_dict
9
+ from codex.choices import DEFAULT_BROWSER_ROUTE
9
10
  from codex.exceptions import SeeOtherRedirectError
10
11
  from codex.logger.logging import get_logger
11
12
  from codex.models.groups import BrowserGroupModel
13
+ from codex.util import mapping_to_dict
12
14
  from codex.views.browser.filters.search.parse import SearchFilterView
13
15
  from codex.views.const import (
14
16
  COMIC_GROUP,
@@ -67,12 +69,14 @@ class BrowserValidateView(SearchFilterView):
67
69
  self._rel_prefix = self.get_rel_prefix(self.model)
68
70
  return self._rel_prefix
69
71
 
70
- def raise_redirect(self, reason, route_mask=None, settings_mask=None):
72
+ def raise_redirect(
73
+ self, reason, route_mask=None, settings_mask: Mapping | None = None
74
+ ):
71
75
  """Redirect the client to a valid group url."""
72
76
  route = mapping_to_dict(self.DEFAULT_ROUTE)
73
77
  if route_mask:
74
78
  route["params"].update(route_mask) # type: ignore
75
- settings = deepcopy(dict(self.params))
79
+ settings: dict = deepcopy(mapping_to_dict(self.params)) # type: ignore
76
80
  if settings_mask:
77
81
  settings.update(settings_mask)
78
82
  detail = {"route": route, "settings": settings, "reason": reason}
codex/views/download.py CHANGED
@@ -6,7 +6,7 @@ from django.http import FileResponse, Http404
6
6
  from drf_spectacular.types import OpenApiTypes
7
7
  from drf_spectacular.utils import extend_schema
8
8
 
9
- from codex.models import Comic
9
+ from codex.models.comic import Comic
10
10
  from codex.views.auth import AuthFilterAPIView
11
11
 
12
12
 
@@ -15,7 +15,7 @@ class DownloadView(AuthFilterAPIView):
15
15
 
16
16
  content_type = "application/vnd.comicbook+zip"
17
17
 
18
- _AS_ATTACHMENT = True
18
+ AS_ATTACHMENT = True
19
19
 
20
20
  @extend_schema(responses={(200, content_type): OpenApiTypes.BINARY})
21
21
  def get(self, *_args, **kwargs):
@@ -45,13 +45,13 @@ class DownloadView(AuthFilterAPIView):
45
45
  filename = comic.get_filename()
46
46
  return FileResponse(
47
47
  comic_file,
48
- as_attachment=self._AS_ATTACHMENT,
48
+ as_attachment=self.AS_ATTACHMENT,
49
49
  content_type=content_type,
50
50
  filename=filename,
51
51
  )
52
52
 
53
53
 
54
54
  class FileView(DownloadView):
55
- """View a comic in the browser."""
55
+ """View a single comic in the browser."""
56
56
 
57
- _AS_ATTACHMENT = False
57
+ AS_ATTACHMENT = False
@@ -69,21 +69,26 @@ class ReaderPageView(BookmarkBaseView):
69
69
 
70
70
  def _get_page_image(self):
71
71
  """Get the image data and content type."""
72
+ # Get comic - Distinct is important
72
73
  group_acl_filter = self.get_group_acl_filter(Comic, self.request.user)
74
+ qs = Comic.objects.filter(group_acl_filter).only("path", "file_type").distinct()
73
75
  pk = self.kwargs.get("pk")
74
- comic = Comic.objects.filter(group_acl_filter).only("path").get(pk=pk)
76
+ comic = qs.get(pk=pk)
77
+
78
+ # page_image
75
79
  page = self.kwargs.get("page")
76
80
  to_pixmap = self.request.GET.get("pixmap", "").lower() not in FALSY
77
- if comic.file_type == FileType.PDF.value and not to_pixmap:
78
- content_type = _PDF_MIME_TYPE
79
- else:
80
- content_type = self.content_type
81
-
82
81
  with Comicbox(comic.path) as cb:
83
82
  page_image = cb.get_page_by_index(page, to_pixmap=to_pixmap)
84
83
  if not page_image:
85
84
  page_image = b""
86
85
 
86
+ # content type
87
+ if comic.file_type == FileType.PDF.value and not to_pixmap:
88
+ content_type = _PDF_MIME_TYPE
89
+ else:
90
+ content_type = self.content_type
91
+
87
92
  return page_image, content_type
88
93
 
89
94
  @extend_schema(
@@ -3,12 +3,12 @@
3
3
  from types import MappingProxyType
4
4
  from typing import Any
5
5
 
6
- from codex.choices import mapping_to_dict
7
6
  from codex.logger.logging import get_logger
8
7
  from codex.models import Comic
9
8
  from codex.serializers.reader import (
10
9
  ReaderViewInputSerializer,
11
10
  )
11
+ from codex.util import mapping_to_dict
12
12
  from codex.views.const import FOLDER_GROUP, GROUP_RELATION, STORY_ARC_GROUP
13
13
  from codex.views.session import SessionView
14
14
  from codex.views.util import reparse_json_query_params
codex/views/session.py CHANGED
@@ -4,8 +4,9 @@ from abc import ABC
4
4
  from copy import deepcopy
5
5
  from types import MappingProxyType
6
6
 
7
- from codex.choices import BROWSER_DEFAULTS, READER_DEFAULTS, mapping_to_dict
7
+ from codex.choices import BROWSER_DEFAULTS, READER_DEFAULTS
8
8
  from codex.logger.logging import get_logger
9
+ from codex.util import mapping_to_dict
9
10
  from codex.views.auth import AuthFilterGenericAPIView
10
11
  from codex.views.util import pop_name
11
12
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: codex
3
- Version: 1.7.1
3
+ Version: 1.7.2
4
4
  Summary: A comic archive web server.
5
5
  Home-page: https://github.com/ajslater/codex
6
6
  License: GPL-3.0-only
@@ -23,7 +23,7 @@ Classifier: Programming Language :: Python :: 3.12
23
23
  Classifier: Programming Language :: Python :: 3 :: Only
24
24
  Classifier: Topic :: Internet :: WWW/HTTP
25
25
  Classifier: Topic :: Multimedia :: Graphics :: Viewers
26
- Requires-Dist: Pillow (>=10.0.0,<11.0.0)
26
+ Requires-Dist: Pillow (>=11.0.0,<12.0.0)
27
27
  Requires-Dist: aioprocessing (>=2.0.1,<3.0.0)
28
28
  Requires-Dist: ansicolors (>=1.1,<2.0)
29
29
  Requires-Dist: bidict (>=0.23.1,<0.24.0)
@@ -52,6 +52,7 @@ Requires-Dist: versio (>=0.5.0,<0.6.0)
52
52
  Requires-Dist: watchdog (>=5.0.2,<6.0.0)
53
53
  Requires-Dist: websocket_client (>=1.2,<2.0)
54
54
  Requires-Dist: whitenoise[brotli] (>=6.0,<7.0)
55
+ Requires-Dist: zipstream-ng (>=1.8.0,<2.0.0)
55
56
  Project-URL: Documentation, https://github.com/ajslater/codex
56
57
  Project-URL: Docker Image, https://hub.docker.com/r/ajslater/codex
57
58
  Project-URL: News, https://github.com/ajslater/codex/blob/main/NEWS.md