codex 1.6.18__py3-none-any.whl → 1.7.0__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 (849) hide show
  1. codex/choices.py +419 -0
  2. codex/choices_to_json.py +122 -0
  3. codex/db.py +134 -0
  4. codex/exceptions.py +2 -3
  5. codex/librarian/bookmark/__init__.py +1 -0
  6. codex/librarian/bookmark/bookmarkd.py +38 -0
  7. codex/librarian/bookmark/tasks.py +19 -0
  8. codex/librarian/bookmark/update.py +154 -0
  9. codex/librarian/covers/coverd.py +3 -4
  10. codex/librarian/covers/create.py +8 -7
  11. codex/librarian/covers/path.py +1 -2
  12. codex/librarian/covers/purge.py +3 -3
  13. codex/librarian/importer/const.py +7 -1
  14. codex/librarian/importer/create_fks.py +5 -2
  15. codex/librarian/importer/importerd.py +17 -12
  16. codex/librarian/importer/moved.py +44 -13
  17. codex/librarian/importer/tasks.py +2 -0
  18. codex/librarian/janitor/cleanup.py +21 -8
  19. codex/librarian/janitor/integrity.py +371 -0
  20. codex/librarian/janitor/janitor.py +50 -15
  21. codex/librarian/janitor/latest_version.py +2 -1
  22. codex/librarian/janitor/status.py +5 -0
  23. codex/librarian/janitor/tasks.py +37 -0
  24. codex/librarian/janitor/update.py +1 -1
  25. codex/librarian/librariand.py +37 -24
  26. codex/librarian/search/optimize.py +43 -0
  27. codex/librarian/search/remove.py +18 -46
  28. codex/librarian/search/searchd.py +14 -17
  29. codex/librarian/search/status.py +2 -1
  30. codex/librarian/search/tasks.py +4 -9
  31. codex/librarian/search/update.py +223 -301
  32. codex/librarian/watchdog/emitter.py +21 -19
  33. codex/librarian/watchdog/event_batcherd.py +0 -1
  34. codex/librarian/watchdog/events.py +4 -1
  35. codex/librarian/watchdog/observers.py +2 -1
  36. codex/migrations/0029_comicfts.py +58 -0
  37. codex/migrations/0030_nocase_collation_day_month_indexes_status_types.py +202 -0
  38. codex/models/admin.py +15 -11
  39. codex/models/base.py +9 -0
  40. codex/models/bookmark.py +3 -3
  41. codex/models/comic.py +68 -16
  42. codex/models/functions.py +60 -2
  43. codex/models/groups.py +6 -1
  44. codex/models/library.py +1 -3
  45. codex/models/paths.py +9 -3
  46. codex/models/query.py +6 -0
  47. codex/run.py +11 -9
  48. codex/serializers/admin/tasks.py +2 -2
  49. codex/serializers/browser/mixins.py +18 -14
  50. codex/serializers/browser/page.py +2 -0
  51. codex/serializers/browser/settings.py +4 -4
  52. codex/serializers/fields.py +9 -5
  53. codex/settings/settings.py +16 -17
  54. codex/signals/django_signals.py +4 -10
  55. codex/startup.py +7 -39
  56. codex/static_root/assets/VCheckbox-D_CWEmqR.84f2b49311e8.js +1 -0
  57. codex/static_root/assets/VCheckbox-D_CWEmqR.84f2b49311e8.js.br +0 -0
  58. codex/static_root/assets/VCheckbox-D_CWEmqR.84f2b49311e8.js.gz +0 -0
  59. codex/static_root/assets/VCheckbox-D_CWEmqR.js +1 -0
  60. codex/static_root/assets/VCheckbox-D_CWEmqR.js.br +0 -0
  61. codex/static_root/assets/VCheckbox-D_CWEmqR.js.gz +0 -0
  62. codex/static_root/assets/VCheckboxBtn-B1BhcFvi.0eaf3c516474.js +1 -0
  63. codex/static_root/assets/VCheckboxBtn-B1BhcFvi.0eaf3c516474.js.br +0 -0
  64. codex/static_root/assets/VCheckboxBtn-B1BhcFvi.0eaf3c516474.js.gz +0 -0
  65. codex/static_root/assets/VCheckboxBtn-B1BhcFvi.js +1 -0
  66. codex/static_root/assets/VCheckboxBtn-B1BhcFvi.js.br +0 -0
  67. codex/static_root/assets/VCheckboxBtn-B1BhcFvi.js.gz +0 -0
  68. codex/static_root/assets/VCombobox-CZAW6_3Q.0e2401e819a5.js +1 -0
  69. codex/static_root/assets/VCombobox-CZAW6_3Q.0e2401e819a5.js.br +0 -0
  70. codex/static_root/assets/VCombobox-CZAW6_3Q.0e2401e819a5.js.gz +0 -0
  71. codex/static_root/assets/VCombobox-CZAW6_3Q.js +1 -0
  72. codex/static_root/assets/VCombobox-CZAW6_3Q.js.br +0 -0
  73. codex/static_root/assets/VCombobox-CZAW6_3Q.js.gz +0 -0
  74. codex/static_root/assets/VDialog-CSHgHIlG.a0bcd336cb7b.js +1 -0
  75. codex/static_root/assets/VDialog-CSHgHIlG.a0bcd336cb7b.js.br +0 -0
  76. codex/static_root/assets/VDialog-CSHgHIlG.a0bcd336cb7b.js.gz +0 -0
  77. codex/static_root/assets/VDialog-CSHgHIlG.js +1 -0
  78. codex/static_root/assets/VDialog-CSHgHIlG.js.br +0 -0
  79. codex/static_root/assets/VDialog-CSHgHIlG.js.gz +0 -0
  80. codex/static_root/assets/VDialog-CSvrKKb2.css +1 -0
  81. codex/static_root/assets/VDialog-CSvrKKb2.css.br +0 -0
  82. codex/static_root/assets/VDialog-CSvrKKb2.css.gz +0 -0
  83. codex/static_root/assets/VDialog-CSvrKKb2.fd4d50904b17.css +1 -0
  84. codex/static_root/assets/VDialog-CSvrKKb2.fd4d50904b17.css.br +0 -0
  85. codex/static_root/assets/VDialog-CSvrKKb2.fd4d50904b17.css.gz +0 -0
  86. codex/static_root/assets/VExpansionPanels-CG6MpdMC.e96ae8afad97.js +1 -0
  87. codex/static_root/assets/VExpansionPanels-CG6MpdMC.e96ae8afad97.js.br +0 -0
  88. codex/static_root/assets/VExpansionPanels-CG6MpdMC.e96ae8afad97.js.gz +0 -0
  89. codex/static_root/assets/VExpansionPanels-CG6MpdMC.js +1 -0
  90. codex/static_root/assets/VExpansionPanels-CG6MpdMC.js.br +0 -0
  91. codex/static_root/assets/VExpansionPanels-CG6MpdMC.js.gz +0 -0
  92. codex/static_root/assets/VRadioGroup-CAgQxkiU.f26ecb0c3e34.js +1 -0
  93. codex/static_root/assets/VRadioGroup-CAgQxkiU.f26ecb0c3e34.js.br +0 -0
  94. codex/static_root/assets/VRadioGroup-CAgQxkiU.f26ecb0c3e34.js.gz +0 -0
  95. codex/static_root/assets/VRadioGroup-CAgQxkiU.js +1 -0
  96. codex/static_root/assets/VRadioGroup-CAgQxkiU.js.br +0 -0
  97. codex/static_root/assets/VRadioGroup-CAgQxkiU.js.gz +0 -0
  98. codex/static_root/assets/VSelect-C1gez8rl.9b11d2f00faf.js +1 -0
  99. codex/static_root/assets/VSelect-C1gez8rl.9b11d2f00faf.js.br +0 -0
  100. codex/static_root/assets/VSelect-C1gez8rl.9b11d2f00faf.js.gz +0 -0
  101. codex/static_root/assets/VSelect-C1gez8rl.js +1 -0
  102. codex/static_root/assets/VSelect-C1gez8rl.js.br +0 -0
  103. codex/static_root/assets/VSelect-C1gez8rl.js.gz +0 -0
  104. codex/static_root/assets/VSelect-DLu8bpcs.98bdcf35411c.css +1 -0
  105. codex/static_root/assets/VSelect-DLu8bpcs.98bdcf35411c.css.br +0 -0
  106. codex/static_root/assets/VSelect-DLu8bpcs.98bdcf35411c.css.gz +0 -0
  107. codex/static_root/assets/VSelect-DLu8bpcs.css +1 -0
  108. codex/static_root/assets/VSelect-DLu8bpcs.css.br +0 -0
  109. codex/static_root/assets/VSelect-DLu8bpcs.css.gz +0 -0
  110. codex/static_root/assets/VSelectionControl-DBqDlKjK.160beaa1b56c.js +1 -0
  111. codex/static_root/assets/VSelectionControl-DBqDlKjK.160beaa1b56c.js.br +0 -0
  112. codex/static_root/assets/VSelectionControl-DBqDlKjK.160beaa1b56c.js.gz +0 -0
  113. codex/static_root/assets/VSelectionControl-DBqDlKjK.js +1 -0
  114. codex/static_root/assets/VSelectionControl-DBqDlKjK.js.br +0 -0
  115. codex/static_root/assets/VSelectionControl-DBqDlKjK.js.gz +0 -0
  116. codex/static_root/assets/VSlideGroup-BtXPhMOT.830f136ffd41.css +1 -0
  117. codex/static_root/assets/VSlideGroup-BtXPhMOT.830f136ffd41.css.br +0 -0
  118. codex/static_root/assets/VSlideGroup-BtXPhMOT.830f136ffd41.css.gz +0 -0
  119. codex/static_root/assets/VSlideGroup-BtXPhMOT.css +1 -0
  120. codex/static_root/assets/VSlideGroup-BtXPhMOT.css.br +0 -0
  121. codex/static_root/assets/VSlideGroup-BtXPhMOT.css.gz +0 -0
  122. codex/static_root/assets/VSlideGroup-SqR_NAL1.40ba1d838a6e.js +1 -0
  123. codex/static_root/assets/VSlideGroup-SqR_NAL1.40ba1d838a6e.js.br +0 -0
  124. codex/static_root/assets/VSlideGroup-SqR_NAL1.40ba1d838a6e.js.gz +0 -0
  125. codex/static_root/assets/VSlideGroup-SqR_NAL1.js +1 -0
  126. codex/static_root/assets/VSlideGroup-SqR_NAL1.js.br +0 -0
  127. codex/static_root/assets/VSlideGroup-SqR_NAL1.js.gz +0 -0
  128. codex/static_root/assets/VTable-CYC-wMpk.8f15d66044da.js +1 -0
  129. codex/static_root/assets/VTable-CYC-wMpk.8f15d66044da.js.br +0 -0
  130. codex/static_root/assets/VTable-CYC-wMpk.8f15d66044da.js.gz +0 -0
  131. codex/static_root/assets/VTable-CYC-wMpk.js +1 -0
  132. codex/static_root/assets/VTable-CYC-wMpk.js.br +0 -0
  133. codex/static_root/assets/VTable-CYC-wMpk.js.gz +0 -0
  134. codex/static_root/assets/VTextField-BnCEPZIq.b0c32b2c0b14.css +1 -0
  135. codex/static_root/assets/VTextField-BnCEPZIq.b0c32b2c0b14.css.br +0 -0
  136. codex/static_root/assets/VTextField-BnCEPZIq.b0c32b2c0b14.css.gz +0 -0
  137. codex/static_root/assets/VTextField-BnCEPZIq.css +1 -0
  138. codex/static_root/assets/VTextField-BnCEPZIq.css.br +0 -0
  139. codex/static_root/assets/VTextField-BnCEPZIq.css.gz +0 -0
  140. codex/static_root/assets/VTextField-DMRKRbbT.911ac84d8c9d.js +1 -0
  141. codex/static_root/assets/VTextField-DMRKRbbT.911ac84d8c9d.js.br +0 -0
  142. codex/static_root/assets/VTextField-DMRKRbbT.911ac84d8c9d.js.gz +0 -0
  143. codex/static_root/assets/VTextField-DMRKRbbT.js +1 -0
  144. codex/static_root/assets/VTextField-DMRKRbbT.js.br +0 -0
  145. codex/static_root/assets/VTextField-DMRKRbbT.js.gz +0 -0
  146. codex/static_root/assets/VWindowItem-D0P2xNJl.6a10e3f3a153.js +1 -0
  147. codex/static_root/assets/VWindowItem-D0P2xNJl.6a10e3f3a153.js.br +0 -0
  148. codex/static_root/assets/VWindowItem-D0P2xNJl.6a10e3f3a153.js.gz +0 -0
  149. codex/static_root/assets/VWindowItem-D0P2xNJl.js +1 -0
  150. codex/static_root/assets/VWindowItem-D0P2xNJl.js.br +0 -0
  151. codex/static_root/assets/VWindowItem-D0P2xNJl.js.gz +0 -0
  152. codex/static_root/assets/admin-CD90VMen.4c2b6f2a5111.js +1 -0
  153. codex/static_root/assets/admin-CD90VMen.4c2b6f2a5111.js.br +0 -0
  154. codex/static_root/assets/admin-CD90VMen.4c2b6f2a5111.js.gz +0 -0
  155. codex/static_root/assets/admin-CD90VMen.js +1 -0
  156. codex/static_root/assets/admin-CD90VMen.js.br +0 -0
  157. codex/static_root/assets/admin-CD90VMen.js.gz +0 -0
  158. codex/static_root/assets/{admin-CWEjaFr5.7d4523387384.css → admin-DJ7pIXDQ.css} +1 -1
  159. codex/static_root/assets/admin-DJ7pIXDQ.css.br +0 -0
  160. codex/static_root/assets/admin-DJ7pIXDQ.css.gz +0 -0
  161. codex/static_root/assets/{admin-CWEjaFr5.css → admin-DJ7pIXDQ.e2a77af73ef2.css} +1 -1
  162. codex/static_root/assets/admin-DJ7pIXDQ.e2a77af73ef2.css.br +0 -0
  163. codex/static_root/assets/admin-DJ7pIXDQ.e2a77af73ef2.css.gz +0 -0
  164. codex/static_root/assets/admin-menu-B9bzD6hV.c13b7df2ff57.css +1 -0
  165. codex/static_root/assets/admin-menu-B9bzD6hV.c13b7df2ff57.css.br +0 -0
  166. codex/static_root/assets/admin-menu-B9bzD6hV.c13b7df2ff57.css.gz +0 -0
  167. codex/static_root/assets/admin-menu-B9bzD6hV.css +1 -0
  168. codex/static_root/assets/admin-menu-B9bzD6hV.css.br +0 -0
  169. codex/static_root/assets/admin-menu-B9bzD6hV.css.gz +0 -0
  170. codex/static_root/assets/admin-menu-BpEPGKr_.c9f9178c5a82.js +1 -0
  171. codex/static_root/assets/admin-menu-BpEPGKr_.c9f9178c5a82.js.br +0 -0
  172. codex/static_root/assets/admin-menu-BpEPGKr_.c9f9178c5a82.js.gz +0 -0
  173. codex/static_root/assets/admin-menu-BpEPGKr_.js +1 -0
  174. codex/static_root/assets/admin-menu-BpEPGKr_.js.br +0 -0
  175. codex/static_root/assets/admin-menu-BpEPGKr_.js.gz +0 -0
  176. codex/static_root/assets/admin-settings-button-progress-DDF4rY07.4f1158b650ab.js +1 -0
  177. codex/static_root/assets/admin-settings-button-progress-DDF4rY07.4f1158b650ab.js.br +0 -0
  178. codex/static_root/assets/admin-settings-button-progress-DDF4rY07.4f1158b650ab.js.gz +0 -0
  179. codex/static_root/assets/admin-settings-button-progress-DDF4rY07.js +1 -0
  180. codex/static_root/assets/admin-settings-button-progress-DDF4rY07.js.br +0 -0
  181. codex/static_root/assets/admin-settings-button-progress-DDF4rY07.js.gz +0 -0
  182. codex/static_root/assets/admin-settings-button-progress-DUUQfVsZ.2548c49a853e.css +1 -0
  183. codex/static_root/assets/admin-settings-button-progress-DUUQfVsZ.css +1 -0
  184. codex/static_root/assets/browser-C0KS3g2E.0bf1c9c6319c.js +1 -0
  185. codex/static_root/assets/browser-C0KS3g2E.0bf1c9c6319c.js.br +0 -0
  186. codex/static_root/assets/browser-C0KS3g2E.0bf1c9c6319c.js.gz +0 -0
  187. codex/static_root/assets/browser-C0KS3g2E.js +1 -0
  188. codex/static_root/assets/browser-C0KS3g2E.js.br +0 -0
  189. codex/static_root/assets/browser-C0KS3g2E.js.gz +0 -0
  190. codex/static_root/assets/browser-JFL2hLjt.21cb2f7335f7.css +1 -0
  191. codex/static_root/assets/browser-JFL2hLjt.21cb2f7335f7.css.br +0 -0
  192. codex/static_root/assets/browser-JFL2hLjt.21cb2f7335f7.css.gz +0 -0
  193. codex/static_root/assets/browser-JFL2hLjt.css +1 -0
  194. codex/static_root/assets/browser-JFL2hLjt.css.br +0 -0
  195. codex/static_root/assets/browser-JFL2hLjt.css.gz +0 -0
  196. codex/static_root/assets/change-password-dialog-DXJalgW4.a9f34729599d.js +1 -0
  197. codex/static_root/assets/change-password-dialog-DXJalgW4.a9f34729599d.js.br +0 -0
  198. codex/static_root/assets/change-password-dialog-DXJalgW4.a9f34729599d.js.gz +0 -0
  199. codex/static_root/assets/change-password-dialog-DXJalgW4.js +1 -0
  200. codex/static_root/assets/change-password-dialog-DXJalgW4.js.br +0 -0
  201. codex/static_root/assets/change-password-dialog-DXJalgW4.js.gz +0 -0
  202. codex/static_root/assets/change-password-dialog-DrIXdKUC.217574b45b02.css +1 -0
  203. codex/static_root/assets/change-password-dialog-DrIXdKUC.217574b45b02.css.br +0 -0
  204. codex/static_root/assets/change-password-dialog-DrIXdKUC.217574b45b02.css.gz +0 -0
  205. codex/static_root/assets/change-password-dialog-DrIXdKUC.css +1 -0
  206. codex/static_root/assets/change-password-dialog-DrIXdKUC.css.br +0 -0
  207. codex/static_root/assets/change-password-dialog-DrIXdKUC.css.gz +0 -0
  208. codex/static_root/assets/confirm-dialog-B7w6z2rf.472011c06253.css +1 -0
  209. codex/static_root/assets/confirm-dialog-B7w6z2rf.css +1 -0
  210. codex/static_root/assets/confirm-dialog-CqDEpU9k.e1811488121d.js +1 -0
  211. codex/static_root/assets/confirm-dialog-CqDEpU9k.e1811488121d.js.br +0 -0
  212. codex/static_root/assets/confirm-dialog-CqDEpU9k.e1811488121d.js.gz +0 -0
  213. codex/static_root/assets/confirm-dialog-CqDEpU9k.js +1 -0
  214. codex/static_root/assets/confirm-dialog-CqDEpU9k.js.br +0 -0
  215. codex/static_root/assets/confirm-dialog-CqDEpU9k.js.gz +0 -0
  216. codex/static_root/assets/datetime-column-UxNaJr8b.c06a11531af3.js +1 -0
  217. codex/static_root/assets/datetime-column-UxNaJr8b.c06a11531af3.js.br +0 -0
  218. codex/static_root/assets/datetime-column-UxNaJr8b.c06a11531af3.js.gz +0 -0
  219. codex/static_root/assets/datetime-column-UxNaJr8b.js +1 -0
  220. codex/static_root/assets/datetime-column-UxNaJr8b.js.br +0 -0
  221. codex/static_root/assets/datetime-column-UxNaJr8b.js.gz +0 -0
  222. codex/static_root/assets/filter-DskcqZHA.e707b5a05b4b.js +1 -0
  223. codex/static_root/assets/filter-DskcqZHA.e707b5a05b4b.js.br +0 -0
  224. codex/static_root/assets/filter-DskcqZHA.e707b5a05b4b.js.gz +0 -0
  225. codex/static_root/assets/filter-DskcqZHA.js +1 -0
  226. codex/static_root/assets/filter-DskcqZHA.js.br +0 -0
  227. codex/static_root/assets/filter-DskcqZHA.js.gz +0 -0
  228. codex/static_root/assets/flag-tab-CqWovuBu.4dfc6b251e85.css +1 -0
  229. codex/static_root/assets/flag-tab-CqWovuBu.4dfc6b251e85.css.br +0 -0
  230. codex/static_root/assets/flag-tab-CqWovuBu.4dfc6b251e85.css.gz +0 -0
  231. codex/static_root/assets/flag-tab-CqWovuBu.css +1 -0
  232. codex/static_root/assets/flag-tab-CqWovuBu.css.br +0 -0
  233. codex/static_root/assets/flag-tab-CqWovuBu.css.gz +0 -0
  234. codex/static_root/assets/flag-tab-xBeWEQ0w.582e77d9e885.js +1 -0
  235. codex/static_root/assets/flag-tab-xBeWEQ0w.582e77d9e885.js.br +0 -0
  236. codex/static_root/assets/flag-tab-xBeWEQ0w.582e77d9e885.js.gz +0 -0
  237. codex/static_root/assets/flag-tab-xBeWEQ0w.js +1 -0
  238. codex/static_root/assets/flag-tab-xBeWEQ0w.js.br +0 -0
  239. codex/static_root/assets/flag-tab-xBeWEQ0w.js.gz +0 -0
  240. codex/static_root/assets/group-tab-Czt2x61x.56e2886b1bac.js +1 -0
  241. codex/static_root/assets/group-tab-Czt2x61x.56e2886b1bac.js.br +0 -0
  242. codex/static_root/assets/group-tab-Czt2x61x.56e2886b1bac.js.gz +0 -0
  243. codex/static_root/assets/group-tab-Czt2x61x.js +1 -0
  244. codex/static_root/assets/group-tab-Czt2x61x.js.br +0 -0
  245. codex/static_root/assets/group-tab-Czt2x61x.js.gz +0 -0
  246. codex/static_root/assets/group-tab-DkIN1Heu.948e907b1e6b.css +1 -0
  247. codex/static_root/assets/group-tab-DkIN1Heu.948e907b1e6b.css.br +0 -0
  248. codex/static_root/assets/group-tab-DkIN1Heu.948e907b1e6b.css.gz +0 -0
  249. codex/static_root/assets/group-tab-DkIN1Heu.css +1 -0
  250. codex/static_root/assets/group-tab-DkIN1Heu.css.br +0 -0
  251. codex/static_root/assets/group-tab-DkIN1Heu.css.gz +0 -0
  252. codex/static_root/assets/http-error-NHcwE5e_.d49089e40589.js +1 -0
  253. codex/static_root/assets/http-error-NHcwE5e_.d49089e40589.js.br +0 -0
  254. codex/static_root/assets/http-error-NHcwE5e_.d49089e40589.js.gz +0 -0
  255. codex/static_root/assets/http-error-NHcwE5e_.js +1 -0
  256. codex/static_root/assets/http-error-NHcwE5e_.js.br +0 -0
  257. codex/static_root/assets/http-error-NHcwE5e_.js.gz +0 -0
  258. codex/static_root/assets/index-CL_6g4tJ.523d7b3d350f.css +1 -0
  259. codex/static_root/assets/index-CL_6g4tJ.523d7b3d350f.css.br +0 -0
  260. codex/static_root/assets/index-CL_6g4tJ.523d7b3d350f.css.gz +0 -0
  261. codex/static_root/assets/index-CL_6g4tJ.css +1 -0
  262. codex/static_root/assets/index-CL_6g4tJ.css.br +0 -0
  263. codex/static_root/assets/index-CL_6g4tJ.css.gz +0 -0
  264. codex/static_root/assets/index-DYNNO5kn.24a2d270253a.js +1 -0
  265. codex/static_root/assets/index-DYNNO5kn.24a2d270253a.js.br +0 -0
  266. codex/static_root/assets/index-DYNNO5kn.24a2d270253a.js.gz +0 -0
  267. codex/static_root/assets/index-DYNNO5kn.js +1 -0
  268. codex/static_root/assets/index-DYNNO5kn.js.br +0 -0
  269. codex/static_root/assets/index-DYNNO5kn.js.gz +0 -0
  270. codex/static_root/assets/library-tab-CgIqcjvj.60327dfa8ecb.js +1 -0
  271. codex/static_root/assets/library-tab-CgIqcjvj.60327dfa8ecb.js.br +0 -0
  272. codex/static_root/assets/library-tab-CgIqcjvj.60327dfa8ecb.js.gz +0 -0
  273. codex/static_root/assets/library-tab-CgIqcjvj.js +1 -0
  274. codex/static_root/assets/library-tab-CgIqcjvj.js.br +0 -0
  275. codex/static_root/assets/library-tab-CgIqcjvj.js.gz +0 -0
  276. codex/static_root/assets/{library-tab-Bh7ErAk7.7c44200ee727.css → library-tab-Wew8YOLv.0c1780a6b68e.css} +1 -1
  277. codex/static_root/assets/library-tab-Wew8YOLv.0c1780a6b68e.css.br +0 -0
  278. codex/static_root/assets/library-tab-Wew8YOLv.0c1780a6b68e.css.gz +0 -0
  279. codex/static_root/assets/{library-tab-Bh7ErAk7.css → library-tab-Wew8YOLv.css} +1 -1
  280. codex/static_root/assets/library-tab-Wew8YOLv.css.br +0 -0
  281. codex/static_root/assets/library-tab-Wew8YOLv.css.gz +0 -0
  282. codex/static_root/assets/main-B3EwXQ3Q.14dfc21e272c.js +35 -0
  283. codex/static_root/assets/main-B3EwXQ3Q.14dfc21e272c.js.br +0 -0
  284. codex/static_root/assets/main-B3EwXQ3Q.14dfc21e272c.js.gz +0 -0
  285. codex/static_root/assets/main-B3EwXQ3Q.js +35 -0
  286. codex/static_root/assets/main-B3EwXQ3Q.js.br +0 -0
  287. codex/static_root/assets/main-B3EwXQ3Q.js.gz +0 -0
  288. codex/static_root/assets/pager-full-pdf-YkzUXx0B.f39d84e2380a.js +1 -0
  289. codex/static_root/assets/pager-full-pdf-YkzUXx0B.f39d84e2380a.js.br +0 -0
  290. codex/static_root/assets/pager-full-pdf-YkzUXx0B.f39d84e2380a.js.gz +0 -0
  291. codex/static_root/assets/pager-full-pdf-YkzUXx0B.js +1 -0
  292. codex/static_root/assets/pager-full-pdf-YkzUXx0B.js.br +0 -0
  293. codex/static_root/assets/pager-full-pdf-YkzUXx0B.js.gz +0 -0
  294. codex/static_root/assets/pagination-toolbar-CrruiVov.3bf9b795350d.js +1 -0
  295. codex/static_root/assets/pagination-toolbar-CrruiVov.3bf9b795350d.js.br +0 -0
  296. codex/static_root/assets/pagination-toolbar-CrruiVov.3bf9b795350d.js.gz +0 -0
  297. codex/static_root/assets/pagination-toolbar-CrruiVov.js +1 -0
  298. codex/static_root/assets/pagination-toolbar-CrruiVov.js.br +0 -0
  299. codex/static_root/assets/pagination-toolbar-CrruiVov.js.gz +0 -0
  300. codex/static_root/assets/{pagination-toolbar-BzruZPpu.css → pagination-toolbar-DGrxp2OD.css} +1 -1
  301. codex/static_root/assets/pagination-toolbar-DGrxp2OD.css.br +0 -0
  302. codex/static_root/assets/pagination-toolbar-DGrxp2OD.css.gz +0 -0
  303. codex/static_root/assets/{pagination-toolbar-BzruZPpu.397ad4e3d029.css → pagination-toolbar-DGrxp2OD.f960a624f04f.css} +1 -1
  304. codex/static_root/assets/pagination-toolbar-DGrxp2OD.f960a624f04f.css.br +0 -0
  305. codex/static_root/assets/pagination-toolbar-DGrxp2OD.f960a624f04f.css.gz +0 -0
  306. codex/static_root/assets/pdf-doc-CG5-AZ2M.b94aac7e3313.css +1 -0
  307. codex/static_root/assets/pdf-doc-CG5-AZ2M.b94aac7e3313.css.br +1 -0
  308. codex/static_root/assets/pdf-doc-CG5-AZ2M.b94aac7e3313.css.gz +0 -0
  309. codex/static_root/assets/pdf-doc-CG5-AZ2M.css +1 -0
  310. codex/static_root/assets/pdf-doc-CG5-AZ2M.css.br +1 -0
  311. codex/static_root/assets/pdf-doc-CG5-AZ2M.css.gz +0 -0
  312. codex/static_root/assets/{pdf-doc-C_RhfgHE.3d82cd502628.js → pdf-doc-ctqZIwOP.7e7b2c815ea4.js} +14 -14
  313. codex/static_root/assets/pdf-doc-ctqZIwOP.7e7b2c815ea4.js.br +0 -0
  314. codex/static_root/assets/pdf-doc-ctqZIwOP.7e7b2c815ea4.js.gz +0 -0
  315. codex/static_root/assets/{pdf-doc-C_RhfgHE.js → pdf-doc-ctqZIwOP.js} +14 -14
  316. codex/static_root/assets/pdf-doc-ctqZIwOP.js.br +0 -0
  317. codex/static_root/assets/pdf-doc-ctqZIwOP.js.gz +0 -0
  318. codex/static_root/assets/reader-DPLhdrJD.268417c618c5.js +2 -0
  319. codex/static_root/assets/reader-DPLhdrJD.268417c618c5.js.br +0 -0
  320. codex/static_root/assets/reader-DPLhdrJD.268417c618c5.js.gz +0 -0
  321. codex/static_root/assets/reader-DPLhdrJD.js +2 -0
  322. codex/static_root/assets/reader-DPLhdrJD.js.br +0 -0
  323. codex/static_root/assets/reader-DPLhdrJD.js.gz +0 -0
  324. codex/static_root/assets/reader-nD70BeEz.06e85e73c391.css +1 -0
  325. codex/static_root/assets/reader-nD70BeEz.06e85e73c391.css.br +0 -0
  326. codex/static_root/assets/reader-nD70BeEz.06e85e73c391.css.gz +0 -0
  327. codex/static_root/assets/reader-nD70BeEz.css +1 -0
  328. codex/static_root/assets/reader-nD70BeEz.css.br +0 -0
  329. codex/static_root/assets/reader-nD70BeEz.css.gz +0 -0
  330. codex/static_root/assets/relation-chips-DOALMcWL.5d3b8100ba03.js +1 -0
  331. codex/static_root/assets/relation-chips-DOALMcWL.5d3b8100ba03.js.br +0 -0
  332. codex/static_root/assets/relation-chips-DOALMcWL.5d3b8100ba03.js.gz +0 -0
  333. codex/static_root/assets/relation-chips-DOALMcWL.js +1 -0
  334. codex/static_root/assets/relation-chips-DOALMcWL.js.br +0 -0
  335. codex/static_root/assets/relation-chips-DOALMcWL.js.gz +0 -0
  336. codex/static_root/assets/settings-drawer-BVj1U_LC.c68369e0c2de.js +2 -0
  337. codex/static_root/assets/settings-drawer-BVj1U_LC.c68369e0c2de.js.br +0 -0
  338. codex/static_root/assets/settings-drawer-BVj1U_LC.c68369e0c2de.js.gz +0 -0
  339. codex/static_root/assets/settings-drawer-BVj1U_LC.js +2 -0
  340. codex/static_root/assets/settings-drawer-BVj1U_LC.js.br +0 -0
  341. codex/static_root/assets/settings-drawer-BVj1U_LC.js.gz +0 -0
  342. codex/static_root/assets/{stats-tab-BXGisn5N.9b7a71e7fe28.css → stats-tab-BAYTqQNg.5f715428c394.css} +1 -1
  343. codex/static_root/assets/stats-tab-BAYTqQNg.5f715428c394.css.br +0 -0
  344. codex/static_root/assets/stats-tab-BAYTqQNg.5f715428c394.css.gz +0 -0
  345. codex/static_root/assets/{stats-tab-BXGisn5N.css → stats-tab-BAYTqQNg.css} +1 -1
  346. codex/static_root/assets/stats-tab-BAYTqQNg.css.br +0 -0
  347. codex/static_root/assets/stats-tab-BAYTqQNg.css.gz +0 -0
  348. codex/static_root/assets/stats-tab-DDLwwwnP.35305258097b.js +1 -0
  349. codex/static_root/assets/stats-tab-DDLwwwnP.35305258097b.js.br +0 -0
  350. codex/static_root/assets/stats-tab-DDLwwwnP.35305258097b.js.gz +0 -0
  351. codex/static_root/assets/stats-tab-DDLwwwnP.js +1 -0
  352. codex/static_root/assets/stats-tab-DDLwwwnP.js.br +0 -0
  353. codex/static_root/assets/stats-tab-DDLwwwnP.js.gz +0 -0
  354. codex/static_root/assets/task-tab--cXi48kg.5dfd6890a1c2.css +1 -0
  355. codex/static_root/assets/{task-tab-1XiWn9xP.06cb8e1b794d.css.br → task-tab--cXi48kg.5dfd6890a1c2.css.br} +1 -1
  356. codex/static_root/assets/task-tab--cXi48kg.5dfd6890a1c2.css.gz +0 -0
  357. codex/static_root/assets/task-tab--cXi48kg.css +1 -0
  358. codex/static_root/assets/{task-tab-1XiWn9xP.css.br → task-tab--cXi48kg.css.br} +1 -1
  359. codex/static_root/assets/task-tab--cXi48kg.css.gz +0 -0
  360. codex/static_root/assets/task-tab-BpP3n2dO.c853eb565200.js +1 -0
  361. codex/static_root/assets/task-tab-BpP3n2dO.c853eb565200.js.br +0 -0
  362. codex/static_root/assets/task-tab-BpP3n2dO.c853eb565200.js.gz +0 -0
  363. codex/static_root/assets/task-tab-BpP3n2dO.js +1 -0
  364. codex/static_root/assets/task-tab-BpP3n2dO.js.br +0 -0
  365. codex/static_root/assets/task-tab-BpP3n2dO.js.gz +0 -0
  366. codex/static_root/assets/transition-3g2arGgl.c6e6f91b7978.js +1 -0
  367. codex/static_root/assets/transition-3g2arGgl.c6e6f91b7978.js.br +0 -0
  368. codex/static_root/assets/transition-3g2arGgl.c6e6f91b7978.js.gz +0 -0
  369. codex/static_root/assets/transition-3g2arGgl.js +1 -0
  370. codex/static_root/assets/transition-3g2arGgl.js.br +0 -0
  371. codex/static_root/assets/transition-3g2arGgl.js.gz +0 -0
  372. codex/static_root/assets/transition-5LRFTPo5.3d726f9bbcb0.css +1 -0
  373. codex/static_root/assets/transition-5LRFTPo5.3d726f9bbcb0.css.br +4 -0
  374. codex/static_root/assets/transition-5LRFTPo5.3d726f9bbcb0.css.gz +0 -0
  375. codex/static_root/assets/transition-5LRFTPo5.css +1 -0
  376. codex/static_root/assets/transition-5LRFTPo5.css.br +4 -0
  377. codex/static_root/assets/transition-5LRFTPo5.css.gz +0 -0
  378. codex/static_root/assets/{unauthorized-muDsv-rC.2166ec8b3a32.css → unauthorized-BjhIc97q.728511c92cd0.css} +1 -1
  379. codex/static_root/assets/unauthorized-BjhIc97q.728511c92cd0.css.br +0 -0
  380. codex/static_root/assets/unauthorized-BjhIc97q.728511c92cd0.css.gz +0 -0
  381. codex/static_root/assets/{unauthorized-muDsv-rC.css → unauthorized-BjhIc97q.css} +1 -1
  382. codex/static_root/assets/unauthorized-BjhIc97q.css.br +0 -0
  383. codex/static_root/assets/unauthorized-BjhIc97q.css.gz +0 -0
  384. codex/static_root/assets/unauthorized-CdumQ1Vf.79d9a61eb572.js +1 -0
  385. codex/static_root/assets/unauthorized-CdumQ1Vf.79d9a61eb572.js.br +0 -0
  386. codex/static_root/assets/unauthorized-CdumQ1Vf.79d9a61eb572.js.gz +0 -0
  387. codex/static_root/assets/unauthorized-CdumQ1Vf.js +1 -0
  388. codex/static_root/assets/unauthorized-CdumQ1Vf.js.br +0 -0
  389. codex/static_root/assets/unauthorized-CdumQ1Vf.js.gz +0 -0
  390. codex/static_root/assets/user-tab-D6oOKZTP.05944b00c700.js +1 -0
  391. codex/static_root/assets/user-tab-D6oOKZTP.05944b00c700.js.br +0 -0
  392. codex/static_root/assets/user-tab-D6oOKZTP.05944b00c700.js.gz +0 -0
  393. codex/static_root/assets/user-tab-D6oOKZTP.js +1 -0
  394. codex/static_root/assets/user-tab-D6oOKZTP.js.br +0 -0
  395. codex/static_root/assets/user-tab-D6oOKZTP.js.gz +0 -0
  396. codex/static_root/manifest.c5f1de88b1ac.json +712 -0
  397. codex/static_root/manifest.c5f1de88b1ac.json.br +0 -0
  398. codex/static_root/manifest.c5f1de88b1ac.json.gz +0 -0
  399. codex/static_root/manifest.json +395 -294
  400. codex/static_root/manifest.json.br +0 -0
  401. codex/static_root/manifest.json.gz +0 -0
  402. codex/static_root/staticfiles.json +1 -1
  403. codex/status_controller.py +15 -10
  404. codex/threads.py +1 -1
  405. codex/urls/api/auth.py +1 -1
  406. codex/urls/api/browser.py +1 -1
  407. codex/views/admin/library.py +18 -13
  408. codex/views/admin/stats.py +23 -16
  409. codex/views/admin/tasks.py +45 -40
  410. codex/views/auth.py +50 -74
  411. codex/views/bookmark.py +16 -153
  412. codex/views/browser/annotate/__init__.py +1 -0
  413. codex/views/browser/annotate/bookmark.py +112 -0
  414. codex/views/browser/annotate/card.py +61 -0
  415. codex/views/browser/annotate/order.py +247 -0
  416. codex/views/browser/breadcrumbs.py +90 -11
  417. codex/views/browser/browser.py +82 -117
  418. codex/views/browser/choices.py +15 -18
  419. codex/views/browser/cover.py +18 -24
  420. codex/views/browser/filters/bookmark.py +18 -19
  421. codex/views/browser/filters/field.py +8 -3
  422. codex/views/browser/filters/filter.py +69 -0
  423. codex/views/browser/filters/group.py +9 -6
  424. codex/views/browser/filters/search/__init__.py +1 -0
  425. codex/views/browser/filters/search/aliases.py +81 -0
  426. codex/views/browser/filters/search/field/__init__.py +1 -0
  427. codex/views/browser/filters/search/field/column.py +53 -0
  428. codex/views/browser/filters/search/field/expression.py +177 -0
  429. codex/views/browser/filters/search/field/filter.py +70 -0
  430. codex/views/browser/filters/search/field/optimize.py +71 -0
  431. codex/views/browser/filters/search/field/parse.py +187 -0
  432. codex/views/browser/filters/search/fts.py +24 -0
  433. codex/views/browser/filters/search/parse.py +250 -0
  434. codex/views/browser/group_mtime.py +83 -0
  435. codex/views/browser/metadata/__init__.py +1 -0
  436. codex/views/browser/metadata/annotate.py +109 -0
  437. codex/views/browser/metadata/copy_intersections.py +90 -0
  438. codex/views/browser/metadata/metadata.py +83 -0
  439. codex/views/browser/metadata/query_intersections.py +112 -0
  440. codex/views/browser/mtime.py +2 -10
  441. codex/views/browser/order_by.py +22 -16
  442. codex/views/browser/page_in_bounds.py +88 -0
  443. codex/views/browser/paginate.py +32 -123
  444. codex/views/browser/params.py +64 -0
  445. codex/views/browser/title.py +1 -6
  446. codex/views/browser/validate.py +68 -33
  447. codex/views/const.py +0 -1
  448. codex/views/download.py +1 -1
  449. codex/views/mixins.py +27 -15
  450. codex/views/opds/const.py +2 -3
  451. codex/views/opds/urls.py +2 -2
  452. codex/views/opds/util.py +2 -3
  453. codex/views/opds/v1/entry/links.py +3 -1
  454. codex/views/opds/v1/facets.py +65 -12
  455. codex/views/opds/v1/feed.py +7 -65
  456. codex/views/opds/v1/links.py +5 -4
  457. codex/views/opds/v2/feed.py +2 -28
  458. codex/views/opds/v2/links.py +27 -2
  459. codex/views/opds/v2/publications.py +5 -6
  460. codex/views/opds/v2/top_links.py +3 -6
  461. codex/views/public.py +2 -2
  462. codex/views/reader/arcs.py +0 -3
  463. codex/views/reader/books.py +57 -41
  464. codex/views/reader/page.py +13 -7
  465. codex/views/reader/{init.py → params.py} +38 -32
  466. codex/views/reader/reader.py +1 -2
  467. codex/views/session.py +43 -54
  468. codex/views/timezone.py +54 -0
  469. codex/views/version.py +1 -1
  470. {codex-1.6.18.dist-info → codex-1.7.0.dist-info}/METADATA +15 -10
  471. {codex-1.6.18.dist-info → codex-1.7.0.dist-info}/RECORD +474 -485
  472. codex/_vendor/__init__.py +0 -0
  473. codex/_vendor/django_haystack-3.2.1.dist-info/AUTHORS +0 -127
  474. codex/_vendor/django_haystack-3.2.1.dist-info/INSTALLER +0 -1
  475. codex/_vendor/django_haystack-3.2.1.dist-info/LICENSE +0 -31
  476. codex/_vendor/django_haystack-3.2.1.dist-info/METADATA +0 -98
  477. codex/_vendor/django_haystack-3.2.1.dist-info/RECORD +0 -97
  478. codex/_vendor/django_haystack-3.2.1.dist-info/REQUESTED +0 -0
  479. codex/_vendor/django_haystack-3.2.1.dist-info/WHEEL +0 -5
  480. codex/_vendor/django_haystack-3.2.1.dist-info/top_level.txt +0 -1
  481. codex/_vendor/haystack/__init__.py +0 -80
  482. codex/_vendor/haystack/admin.py +0 -163
  483. codex/_vendor/haystack/apps.py +0 -31
  484. codex/_vendor/haystack/backends/__init__.py +0 -1109
  485. codex/_vendor/haystack/backends/elasticsearch2_backend.py +0 -390
  486. codex/_vendor/haystack/backends/elasticsearch5_backend.py +0 -483
  487. codex/_vendor/haystack/backends/elasticsearch7_backend.py +0 -586
  488. codex/_vendor/haystack/backends/elasticsearch_backend.py +0 -1141
  489. codex/_vendor/haystack/backends/simple_backend.py +0 -132
  490. codex/_vendor/haystack/backends/solr_backend.py +0 -991
  491. codex/_vendor/haystack/backends/whoosh_backend.py +0 -1104
  492. codex/_vendor/haystack/constants.py +0 -57
  493. codex/_vendor/haystack/exceptions.py +0 -57
  494. codex/_vendor/haystack/fields.py +0 -562
  495. codex/_vendor/haystack/forms.py +0 -135
  496. codex/_vendor/haystack/generic_views.py +0 -141
  497. codex/_vendor/haystack/indexes.py +0 -548
  498. codex/_vendor/haystack/inputs.py +0 -169
  499. codex/_vendor/haystack/management/__init__.py +0 -0
  500. codex/_vendor/haystack/management/commands/__init__.py +0 -0
  501. codex/_vendor/haystack/management/commands/build_solr_schema.py +0 -187
  502. codex/_vendor/haystack/management/commands/clear_index.py +0 -67
  503. codex/_vendor/haystack/management/commands/haystack_info.py +0 -22
  504. codex/_vendor/haystack/management/commands/rebuild_index.py +0 -65
  505. codex/_vendor/haystack/management/commands/update_index.py +0 -438
  506. codex/_vendor/haystack/manager.py +0 -105
  507. codex/_vendor/haystack/models.py +0 -257
  508. codex/_vendor/haystack/panels.py +0 -89
  509. codex/_vendor/haystack/query.py +0 -771
  510. codex/_vendor/haystack/routers.py +0 -14
  511. codex/_vendor/haystack/signals.py +0 -88
  512. codex/_vendor/haystack/templates/panels/haystack.html +0 -33
  513. codex/_vendor/haystack/templates/search_configuration/schema.xml +0 -1056
  514. codex/_vendor/haystack/templates/search_configuration/solrconfig.xml +0 -1446
  515. codex/_vendor/haystack/templatetags/__init__.py +0 -0
  516. codex/_vendor/haystack/templatetags/highlight.py +0 -131
  517. codex/_vendor/haystack/templatetags/more_like_this.py +0 -119
  518. codex/_vendor/haystack/urls.py +0 -5
  519. codex/_vendor/haystack/utils/__init__.py +0 -84
  520. codex/_vendor/haystack/utils/app_loading.py +0 -34
  521. codex/_vendor/haystack/utils/geo.py +0 -71
  522. codex/_vendor/haystack/utils/highlighting.py +0 -165
  523. codex/_vendor/haystack/utils/loading.py +0 -374
  524. codex/_vendor/haystack/utils/log.py +0 -21
  525. codex/_vendor/haystack/version.py +0 -16
  526. codex/_vendor/haystack/views.py +0 -253
  527. codex/integrity.py +0 -492
  528. codex/librarian/search/merge.py +0 -86
  529. codex/librarian/search/version.py +0 -63
  530. codex/search/__init__.py +0 -1
  531. codex/search/backend.py +0 -524
  532. codex/search/backend_search.py +0 -229
  533. codex/search/engine.py +0 -33
  534. codex/search/indexes.py +0 -79
  535. codex/search/query.py +0 -67
  536. codex/search/writing.py +0 -180
  537. codex/serializers/choices.py +0 -196
  538. codex/static_root/assets/VCheckbox-D_kRyvnz.981ece08698f.js +0 -1
  539. codex/static_root/assets/VCheckbox-D_kRyvnz.981ece08698f.js.br +0 -0
  540. codex/static_root/assets/VCheckbox-D_kRyvnz.981ece08698f.js.gz +0 -0
  541. codex/static_root/assets/VCheckbox-D_kRyvnz.js +0 -1
  542. codex/static_root/assets/VCheckbox-D_kRyvnz.js.br +0 -0
  543. codex/static_root/assets/VCheckbox-D_kRyvnz.js.gz +0 -0
  544. codex/static_root/assets/VCheckboxBtn-CasNFNDK.3c20f8d4f5d9.js +0 -1
  545. codex/static_root/assets/VCheckboxBtn-CasNFNDK.3c20f8d4f5d9.js.br +0 -0
  546. codex/static_root/assets/VCheckboxBtn-CasNFNDK.3c20f8d4f5d9.js.gz +0 -0
  547. codex/static_root/assets/VCheckboxBtn-CasNFNDK.js +0 -1
  548. codex/static_root/assets/VCheckboxBtn-CasNFNDK.js.br +0 -0
  549. codex/static_root/assets/VCheckboxBtn-CasNFNDK.js.gz +0 -0
  550. codex/static_root/assets/VCombobox-BemG8ph3.afde3fec668d.js +0 -1
  551. codex/static_root/assets/VCombobox-BemG8ph3.afde3fec668d.js.br +0 -0
  552. codex/static_root/assets/VCombobox-BemG8ph3.afde3fec668d.js.gz +0 -0
  553. codex/static_root/assets/VCombobox-BemG8ph3.js +0 -1
  554. codex/static_root/assets/VCombobox-BemG8ph3.js.br +0 -0
  555. codex/static_root/assets/VCombobox-BemG8ph3.js.gz +0 -0
  556. codex/static_root/assets/VDialog-38np3TSA.5a0cb7a9e56d.css +0 -1
  557. codex/static_root/assets/VDialog-38np3TSA.5a0cb7a9e56d.css.br +0 -0
  558. codex/static_root/assets/VDialog-38np3TSA.5a0cb7a9e56d.css.gz +0 -0
  559. codex/static_root/assets/VDialog-38np3TSA.css +0 -1
  560. codex/static_root/assets/VDialog-38np3TSA.css.br +0 -0
  561. codex/static_root/assets/VDialog-38np3TSA.css.gz +0 -0
  562. codex/static_root/assets/VDialog-DOm1w6bL.3a8bac3e555f.js +0 -1
  563. codex/static_root/assets/VDialog-DOm1w6bL.3a8bac3e555f.js.br +0 -0
  564. codex/static_root/assets/VDialog-DOm1w6bL.3a8bac3e555f.js.gz +0 -0
  565. codex/static_root/assets/VDialog-DOm1w6bL.js +0 -1
  566. codex/static_root/assets/VDialog-DOm1w6bL.js.br +0 -0
  567. codex/static_root/assets/VDialog-DOm1w6bL.js.gz +0 -0
  568. codex/static_root/assets/VExpansionPanels-BIAAQEIk.536cfca15bf5.js +0 -1
  569. codex/static_root/assets/VExpansionPanels-BIAAQEIk.536cfca15bf5.js.br +0 -0
  570. codex/static_root/assets/VExpansionPanels-BIAAQEIk.536cfca15bf5.js.gz +0 -0
  571. codex/static_root/assets/VExpansionPanels-BIAAQEIk.js +0 -1
  572. codex/static_root/assets/VExpansionPanels-BIAAQEIk.js.br +0 -0
  573. codex/static_root/assets/VExpansionPanels-BIAAQEIk.js.gz +0 -0
  574. codex/static_root/assets/VRadioGroup-CQd2B2cC.5484da094948.js +0 -1
  575. codex/static_root/assets/VRadioGroup-CQd2B2cC.5484da094948.js.br +0 -0
  576. codex/static_root/assets/VRadioGroup-CQd2B2cC.5484da094948.js.gz +0 -0
  577. codex/static_root/assets/VRadioGroup-CQd2B2cC.js +0 -1
  578. codex/static_root/assets/VRadioGroup-CQd2B2cC.js.br +0 -0
  579. codex/static_root/assets/VRadioGroup-CQd2B2cC.js.gz +0 -0
  580. codex/static_root/assets/VSelect-Ca2bIOso.6613989e4c45.css +0 -1
  581. codex/static_root/assets/VSelect-Ca2bIOso.6613989e4c45.css.br +0 -0
  582. codex/static_root/assets/VSelect-Ca2bIOso.6613989e4c45.css.gz +0 -0
  583. codex/static_root/assets/VSelect-Ca2bIOso.css +0 -1
  584. codex/static_root/assets/VSelect-Ca2bIOso.css.br +0 -0
  585. codex/static_root/assets/VSelect-Ca2bIOso.css.gz +0 -0
  586. codex/static_root/assets/VSelect-DhYHkIlU.fcb6b4997b19.js +0 -1
  587. codex/static_root/assets/VSelect-DhYHkIlU.fcb6b4997b19.js.br +0 -0
  588. codex/static_root/assets/VSelect-DhYHkIlU.fcb6b4997b19.js.gz +0 -0
  589. codex/static_root/assets/VSelect-DhYHkIlU.js +0 -1
  590. codex/static_root/assets/VSelect-DhYHkIlU.js.br +0 -0
  591. codex/static_root/assets/VSelect-DhYHkIlU.js.gz +0 -0
  592. codex/static_root/assets/VSelectionControl-DZ7Z3QaY.753a2564123a.js +0 -1
  593. codex/static_root/assets/VSelectionControl-DZ7Z3QaY.753a2564123a.js.br +0 -0
  594. codex/static_root/assets/VSelectionControl-DZ7Z3QaY.753a2564123a.js.gz +0 -0
  595. codex/static_root/assets/VSelectionControl-DZ7Z3QaY.js +0 -1
  596. codex/static_root/assets/VSelectionControl-DZ7Z3QaY.js.br +0 -0
  597. codex/static_root/assets/VSelectionControl-DZ7Z3QaY.js.gz +0 -0
  598. codex/static_root/assets/VSlideGroup-BfZo3lM5.0ffb08d15ccd.js +0 -1
  599. codex/static_root/assets/VSlideGroup-BfZo3lM5.0ffb08d15ccd.js.br +0 -0
  600. codex/static_root/assets/VSlideGroup-BfZo3lM5.0ffb08d15ccd.js.gz +0 -0
  601. codex/static_root/assets/VSlideGroup-BfZo3lM5.js +0 -1
  602. codex/static_root/assets/VSlideGroup-BfZo3lM5.js.br +0 -0
  603. codex/static_root/assets/VSlideGroup-BfZo3lM5.js.gz +0 -0
  604. codex/static_root/assets/VSlideGroup-Dk_1upHt.2c836070ec75.css +0 -1
  605. codex/static_root/assets/VSlideGroup-Dk_1upHt.2c836070ec75.css.br +0 -0
  606. codex/static_root/assets/VSlideGroup-Dk_1upHt.2c836070ec75.css.gz +0 -0
  607. codex/static_root/assets/VSlideGroup-Dk_1upHt.css +0 -1
  608. codex/static_root/assets/VSlideGroup-Dk_1upHt.css.br +0 -0
  609. codex/static_root/assets/VSlideGroup-Dk_1upHt.css.gz +0 -0
  610. codex/static_root/assets/VTable-xJS8rtC3.456750dc5d3f.js +0 -1
  611. codex/static_root/assets/VTable-xJS8rtC3.456750dc5d3f.js.br +0 -0
  612. codex/static_root/assets/VTable-xJS8rtC3.456750dc5d3f.js.gz +0 -0
  613. codex/static_root/assets/VTable-xJS8rtC3.js +0 -1
  614. codex/static_root/assets/VTable-xJS8rtC3.js.br +0 -0
  615. codex/static_root/assets/VTable-xJS8rtC3.js.gz +0 -0
  616. codex/static_root/assets/VTextField-CWKnATIB.7e07951afd27.js +0 -1
  617. codex/static_root/assets/VTextField-CWKnATIB.7e07951afd27.js.br +0 -0
  618. codex/static_root/assets/VTextField-CWKnATIB.7e07951afd27.js.gz +0 -0
  619. codex/static_root/assets/VTextField-CWKnATIB.js +0 -1
  620. codex/static_root/assets/VTextField-CWKnATIB.js.br +0 -0
  621. codex/static_root/assets/VTextField-CWKnATIB.js.gz +0 -0
  622. codex/static_root/assets/VTextField-Crc3gdNh.39995ccf4d52.css +0 -1
  623. codex/static_root/assets/VTextField-Crc3gdNh.39995ccf4d52.css.br +0 -0
  624. codex/static_root/assets/VTextField-Crc3gdNh.39995ccf4d52.css.gz +0 -0
  625. codex/static_root/assets/VTextField-Crc3gdNh.css +0 -1
  626. codex/static_root/assets/VTextField-Crc3gdNh.css.br +0 -0
  627. codex/static_root/assets/VTextField-Crc3gdNh.css.gz +0 -0
  628. codex/static_root/assets/VWindowItem-COG2FuUz.12a198f11fe7.js +0 -1
  629. codex/static_root/assets/VWindowItem-COG2FuUz.12a198f11fe7.js.br +0 -0
  630. codex/static_root/assets/VWindowItem-COG2FuUz.12a198f11fe7.js.gz +0 -0
  631. codex/static_root/assets/VWindowItem-COG2FuUz.js +0 -1
  632. codex/static_root/assets/VWindowItem-COG2FuUz.js.br +0 -0
  633. codex/static_root/assets/VWindowItem-COG2FuUz.js.gz +0 -0
  634. codex/static_root/assets/admin-CWEjaFr5.7d4523387384.css.br +0 -0
  635. codex/static_root/assets/admin-CWEjaFr5.7d4523387384.css.gz +0 -0
  636. codex/static_root/assets/admin-CWEjaFr5.css.br +0 -0
  637. codex/static_root/assets/admin-CWEjaFr5.css.gz +0 -0
  638. codex/static_root/assets/admin-Dl2A7cx-.5fbd345dbc05.js +0 -1
  639. codex/static_root/assets/admin-Dl2A7cx-.5fbd345dbc05.js.br +0 -0
  640. codex/static_root/assets/admin-Dl2A7cx-.5fbd345dbc05.js.gz +0 -0
  641. codex/static_root/assets/admin-Dl2A7cx-.js +0 -1
  642. codex/static_root/assets/admin-Dl2A7cx-.js.br +0 -0
  643. codex/static_root/assets/admin-Dl2A7cx-.js.gz +0 -0
  644. codex/static_root/assets/admin-drawer-panel-Bs2wgKj3.3cb33056e994.css +0 -1
  645. codex/static_root/assets/admin-drawer-panel-Bs2wgKj3.3cb33056e994.css.br +0 -0
  646. codex/static_root/assets/admin-drawer-panel-Bs2wgKj3.3cb33056e994.css.gz +0 -0
  647. codex/static_root/assets/admin-drawer-panel-Bs2wgKj3.css +0 -1
  648. codex/static_root/assets/admin-drawer-panel-Bs2wgKj3.css.br +0 -0
  649. codex/static_root/assets/admin-drawer-panel-Bs2wgKj3.css.gz +0 -0
  650. codex/static_root/assets/admin-drawer-panel-D4CYCd_H.fd8dcc769daf.js +0 -30
  651. codex/static_root/assets/admin-drawer-panel-D4CYCd_H.fd8dcc769daf.js.br +0 -0
  652. codex/static_root/assets/admin-drawer-panel-D4CYCd_H.fd8dcc769daf.js.gz +0 -0
  653. codex/static_root/assets/admin-drawer-panel-D4CYCd_H.js +0 -30
  654. codex/static_root/assets/admin-drawer-panel-D4CYCd_H.js.br +0 -0
  655. codex/static_root/assets/admin-drawer-panel-D4CYCd_H.js.gz +0 -0
  656. codex/static_root/assets/browser-Binc3n9H.313722d27ca3.css +0 -1
  657. codex/static_root/assets/browser-Binc3n9H.313722d27ca3.css.br +0 -0
  658. codex/static_root/assets/browser-Binc3n9H.313722d27ca3.css.gz +0 -0
  659. codex/static_root/assets/browser-Binc3n9H.css +0 -1
  660. codex/static_root/assets/browser-Binc3n9H.css.br +0 -0
  661. codex/static_root/assets/browser-Binc3n9H.css.gz +0 -0
  662. codex/static_root/assets/browser-DOhldfGx.43465be961b0.js +0 -1
  663. codex/static_root/assets/browser-DOhldfGx.43465be961b0.js.br +0 -0
  664. codex/static_root/assets/browser-DOhldfGx.43465be961b0.js.gz +0 -0
  665. codex/static_root/assets/browser-DOhldfGx.js +0 -1
  666. codex/static_root/assets/browser-DOhldfGx.js.br +0 -0
  667. codex/static_root/assets/browser-DOhldfGx.js.gz +0 -0
  668. codex/static_root/assets/change-password-dialog-Cebek1-c.aff2975e31f8.css +0 -1
  669. codex/static_root/assets/change-password-dialog-Cebek1-c.aff2975e31f8.css.br +0 -0
  670. codex/static_root/assets/change-password-dialog-Cebek1-c.aff2975e31f8.css.gz +0 -0
  671. codex/static_root/assets/change-password-dialog-Cebek1-c.css +0 -1
  672. codex/static_root/assets/change-password-dialog-Cebek1-c.css.br +0 -0
  673. codex/static_root/assets/change-password-dialog-Cebek1-c.css.gz +0 -0
  674. codex/static_root/assets/change-password-dialog-CrIdNi1F.9451b8d8e301.js +0 -1
  675. codex/static_root/assets/change-password-dialog-CrIdNi1F.9451b8d8e301.js.br +0 -0
  676. codex/static_root/assets/change-password-dialog-CrIdNi1F.9451b8d8e301.js.gz +0 -0
  677. codex/static_root/assets/change-password-dialog-CrIdNi1F.js +0 -1
  678. codex/static_root/assets/change-password-dialog-CrIdNi1F.js.br +0 -0
  679. codex/static_root/assets/change-password-dialog-CrIdNi1F.js.gz +0 -0
  680. codex/static_root/assets/confirm-dialog-B8T3Aamf.5d5b5715840a.js +0 -1
  681. codex/static_root/assets/confirm-dialog-B8T3Aamf.5d5b5715840a.js.br +0 -0
  682. codex/static_root/assets/confirm-dialog-B8T3Aamf.5d5b5715840a.js.gz +0 -0
  683. codex/static_root/assets/confirm-dialog-B8T3Aamf.js +0 -1
  684. codex/static_root/assets/confirm-dialog-B8T3Aamf.js.br +0 -0
  685. codex/static_root/assets/confirm-dialog-B8T3Aamf.js.gz +0 -0
  686. codex/static_root/assets/confirm-dialog-BmhedLCx.7c2103d319d4.css +0 -1
  687. codex/static_root/assets/confirm-dialog-BmhedLCx.css +0 -1
  688. codex/static_root/assets/datetime-column-DJjaMFv9.d281fe18446a.js +0 -1
  689. codex/static_root/assets/datetime-column-DJjaMFv9.d281fe18446a.js.br +0 -0
  690. codex/static_root/assets/datetime-column-DJjaMFv9.d281fe18446a.js.gz +0 -0
  691. codex/static_root/assets/datetime-column-DJjaMFv9.js +0 -1
  692. codex/static_root/assets/datetime-column-DJjaMFv9.js.br +0 -0
  693. codex/static_root/assets/datetime-column-DJjaMFv9.js.gz +0 -0
  694. codex/static_root/assets/filter-DMpQdE_u.8d88bbf01ae8.js +0 -1
  695. codex/static_root/assets/filter-DMpQdE_u.8d88bbf01ae8.js.br +0 -0
  696. codex/static_root/assets/filter-DMpQdE_u.8d88bbf01ae8.js.gz +0 -0
  697. codex/static_root/assets/filter-DMpQdE_u.js +0 -1
  698. codex/static_root/assets/filter-DMpQdE_u.js.br +0 -0
  699. codex/static_root/assets/filter-DMpQdE_u.js.gz +0 -0
  700. codex/static_root/assets/flag-tab-C2TvU4CO.7b424d4fedb2.js +0 -1
  701. codex/static_root/assets/flag-tab-C2TvU4CO.7b424d4fedb2.js.br +0 -0
  702. codex/static_root/assets/flag-tab-C2TvU4CO.7b424d4fedb2.js.gz +0 -0
  703. codex/static_root/assets/flag-tab-C2TvU4CO.js +0 -1
  704. codex/static_root/assets/flag-tab-C2TvU4CO.js.br +0 -0
  705. codex/static_root/assets/flag-tab-C2TvU4CO.js.gz +0 -0
  706. codex/static_root/assets/flag-tab-DBqpLKi7.css +0 -1
  707. codex/static_root/assets/flag-tab-DBqpLKi7.css.br +0 -0
  708. codex/static_root/assets/flag-tab-DBqpLKi7.css.gz +0 -0
  709. codex/static_root/assets/flag-tab-DBqpLKi7.dcfef39f541e.css +0 -1
  710. codex/static_root/assets/flag-tab-DBqpLKi7.dcfef39f541e.css.br +0 -0
  711. codex/static_root/assets/flag-tab-DBqpLKi7.dcfef39f541e.css.gz +0 -0
  712. codex/static_root/assets/group-tab-BOX6rJuK.58304d7d9f28.js +0 -1
  713. codex/static_root/assets/group-tab-BOX6rJuK.58304d7d9f28.js.br +0 -0
  714. codex/static_root/assets/group-tab-BOX6rJuK.58304d7d9f28.js.gz +0 -0
  715. codex/static_root/assets/group-tab-BOX6rJuK.js +0 -1
  716. codex/static_root/assets/group-tab-BOX6rJuK.js.br +0 -0
  717. codex/static_root/assets/group-tab-BOX6rJuK.js.gz +0 -0
  718. codex/static_root/assets/group-tab-CBKuS3Iv.7e4746634782.css +0 -1
  719. codex/static_root/assets/group-tab-CBKuS3Iv.7e4746634782.css.br +0 -0
  720. codex/static_root/assets/group-tab-CBKuS3Iv.7e4746634782.css.gz +0 -0
  721. codex/static_root/assets/group-tab-CBKuS3Iv.css +0 -1
  722. codex/static_root/assets/group-tab-CBKuS3Iv.css.br +0 -0
  723. codex/static_root/assets/group-tab-CBKuS3Iv.css.gz +0 -0
  724. codex/static_root/assets/http-error-E90fvnsx.103df54057a6.js +0 -1
  725. codex/static_root/assets/http-error-E90fvnsx.103df54057a6.js.br +0 -0
  726. codex/static_root/assets/http-error-E90fvnsx.103df54057a6.js.gz +0 -0
  727. codex/static_root/assets/http-error-E90fvnsx.js +0 -1
  728. codex/static_root/assets/http-error-E90fvnsx.js.br +0 -0
  729. codex/static_root/assets/http-error-E90fvnsx.js.gz +0 -0
  730. codex/static_root/assets/library-tab-Bh7ErAk7.7c44200ee727.css.br +0 -2
  731. codex/static_root/assets/library-tab-Bh7ErAk7.7c44200ee727.css.gz +0 -0
  732. codex/static_root/assets/library-tab-Bh7ErAk7.css.br +0 -2
  733. codex/static_root/assets/library-tab-Bh7ErAk7.css.gz +0 -0
  734. codex/static_root/assets/library-tab-DoLAFv6A.e504e9181e22.js +0 -1
  735. codex/static_root/assets/library-tab-DoLAFv6A.e504e9181e22.js.br +0 -0
  736. codex/static_root/assets/library-tab-DoLAFv6A.e504e9181e22.js.gz +0 -0
  737. codex/static_root/assets/library-tab-DoLAFv6A.js +0 -1
  738. codex/static_root/assets/library-tab-DoLAFv6A.js.br +0 -0
  739. codex/static_root/assets/library-tab-DoLAFv6A.js.gz +0 -0
  740. codex/static_root/assets/main-BnyyRHtu.383bd5bdf135.js +0 -6
  741. codex/static_root/assets/main-BnyyRHtu.383bd5bdf135.js.br +0 -0
  742. codex/static_root/assets/main-BnyyRHtu.383bd5bdf135.js.gz +0 -0
  743. codex/static_root/assets/main-BnyyRHtu.js +0 -6
  744. codex/static_root/assets/main-BnyyRHtu.js.br +0 -0
  745. codex/static_root/assets/main-BnyyRHtu.js.gz +0 -0
  746. codex/static_root/assets/pagination-toolbar-B-H-BgUh.0485a41335d7.js +0 -1
  747. codex/static_root/assets/pagination-toolbar-B-H-BgUh.0485a41335d7.js.br +0 -0
  748. codex/static_root/assets/pagination-toolbar-B-H-BgUh.0485a41335d7.js.gz +0 -0
  749. codex/static_root/assets/pagination-toolbar-B-H-BgUh.js +0 -1
  750. codex/static_root/assets/pagination-toolbar-B-H-BgUh.js.br +0 -0
  751. codex/static_root/assets/pagination-toolbar-B-H-BgUh.js.gz +0 -0
  752. codex/static_root/assets/pagination-toolbar-BzruZPpu.397ad4e3d029.css.br +0 -0
  753. codex/static_root/assets/pagination-toolbar-BzruZPpu.397ad4e3d029.css.gz +0 -0
  754. codex/static_root/assets/pagination-toolbar-BzruZPpu.css.br +0 -0
  755. codex/static_root/assets/pagination-toolbar-BzruZPpu.css.gz +0 -0
  756. codex/static_root/assets/pdf-doc-C_RhfgHE.3d82cd502628.js.br +0 -0
  757. codex/static_root/assets/pdf-doc-C_RhfgHE.3d82cd502628.js.gz +0 -0
  758. codex/static_root/assets/pdf-doc-C_RhfgHE.js.br +0 -0
  759. codex/static_root/assets/pdf-doc-C_RhfgHE.js.gz +0 -0
  760. codex/static_root/assets/pdf-doc-CkC2e3rI.css +0 -1
  761. codex/static_root/assets/pdf-doc-CkC2e3rI.css.br +0 -0
  762. codex/static_root/assets/pdf-doc-CkC2e3rI.css.gz +0 -0
  763. codex/static_root/assets/pdf-doc-CkC2e3rI.da75c385ebd0.css +0 -1
  764. codex/static_root/assets/pdf-doc-CkC2e3rI.da75c385ebd0.css.br +0 -0
  765. codex/static_root/assets/pdf-doc-CkC2e3rI.da75c385ebd0.css.gz +0 -0
  766. codex/static_root/assets/reader-DkEfQBw-.5e7781a737e6.css +0 -1
  767. codex/static_root/assets/reader-DkEfQBw-.5e7781a737e6.css.br +0 -0
  768. codex/static_root/assets/reader-DkEfQBw-.5e7781a737e6.css.gz +0 -0
  769. codex/static_root/assets/reader-DkEfQBw-.css +0 -1
  770. codex/static_root/assets/reader-DkEfQBw-.css.br +0 -0
  771. codex/static_root/assets/reader-DkEfQBw-.css.gz +0 -0
  772. codex/static_root/assets/reader-K27K1JrT.faa6edbda846.js +0 -2
  773. codex/static_root/assets/reader-K27K1JrT.faa6edbda846.js.br +0 -0
  774. codex/static_root/assets/reader-K27K1JrT.faa6edbda846.js.gz +0 -0
  775. codex/static_root/assets/reader-K27K1JrT.js +0 -2
  776. codex/static_root/assets/reader-K27K1JrT.js.br +0 -0
  777. codex/static_root/assets/reader-K27K1JrT.js.gz +0 -0
  778. codex/static_root/assets/relation-chips-CfHz9Cgt.ce0ab88180d5.js +0 -1
  779. codex/static_root/assets/relation-chips-CfHz9Cgt.ce0ab88180d5.js.br +0 -0
  780. codex/static_root/assets/relation-chips-CfHz9Cgt.ce0ab88180d5.js.gz +0 -0
  781. codex/static_root/assets/relation-chips-CfHz9Cgt.js +0 -1
  782. codex/static_root/assets/relation-chips-CfHz9Cgt.js.br +0 -0
  783. codex/static_root/assets/relation-chips-CfHz9Cgt.js.gz +0 -0
  784. codex/static_root/assets/settings-drawer-CF0z39tG.bb0427409b01.js +0 -2
  785. codex/static_root/assets/settings-drawer-CF0z39tG.bb0427409b01.js.br +0 -0
  786. codex/static_root/assets/settings-drawer-CF0z39tG.bb0427409b01.js.gz +0 -0
  787. codex/static_root/assets/settings-drawer-CF0z39tG.js +0 -2
  788. codex/static_root/assets/settings-drawer-CF0z39tG.js.br +0 -0
  789. codex/static_root/assets/settings-drawer-CF0z39tG.js.gz +0 -0
  790. codex/static_root/assets/stats-tab-BXGisn5N.9b7a71e7fe28.css.br +0 -0
  791. codex/static_root/assets/stats-tab-BXGisn5N.9b7a71e7fe28.css.gz +0 -0
  792. codex/static_root/assets/stats-tab-BXGisn5N.css.br +0 -0
  793. codex/static_root/assets/stats-tab-BXGisn5N.css.gz +0 -0
  794. codex/static_root/assets/stats-tab-m4jtc5tB.fe5a865d950f.js +0 -1
  795. codex/static_root/assets/stats-tab-m4jtc5tB.fe5a865d950f.js.br +0 -0
  796. codex/static_root/assets/stats-tab-m4jtc5tB.fe5a865d950f.js.gz +0 -0
  797. codex/static_root/assets/stats-tab-m4jtc5tB.js +0 -1
  798. codex/static_root/assets/stats-tab-m4jtc5tB.js.br +0 -0
  799. codex/static_root/assets/stats-tab-m4jtc5tB.js.gz +0 -0
  800. codex/static_root/assets/task-tab-1XiWn9xP.06cb8e1b794d.css +0 -1
  801. codex/static_root/assets/task-tab-1XiWn9xP.06cb8e1b794d.css.gz +0 -0
  802. codex/static_root/assets/task-tab-1XiWn9xP.css +0 -1
  803. codex/static_root/assets/task-tab-1XiWn9xP.css.gz +0 -0
  804. codex/static_root/assets/task-tab-Bn04U_1c.3b343f42f0a9.js +0 -1
  805. codex/static_root/assets/task-tab-Bn04U_1c.3b343f42f0a9.js.br +0 -0
  806. codex/static_root/assets/task-tab-Bn04U_1c.3b343f42f0a9.js.gz +0 -0
  807. codex/static_root/assets/task-tab-Bn04U_1c.js +0 -1
  808. codex/static_root/assets/task-tab-Bn04U_1c.js.br +0 -0
  809. codex/static_root/assets/task-tab-Bn04U_1c.js.gz +0 -0
  810. codex/static_root/assets/unauthorized-CFFrmehB.25307184f821.js +0 -1
  811. codex/static_root/assets/unauthorized-CFFrmehB.25307184f821.js.br +0 -0
  812. codex/static_root/assets/unauthorized-CFFrmehB.25307184f821.js.gz +0 -0
  813. codex/static_root/assets/unauthorized-CFFrmehB.js +0 -1
  814. codex/static_root/assets/unauthorized-CFFrmehB.js.br +0 -0
  815. codex/static_root/assets/unauthorized-CFFrmehB.js.gz +0 -0
  816. codex/static_root/assets/unauthorized-muDsv-rC.2166ec8b3a32.css.br +0 -0
  817. codex/static_root/assets/unauthorized-muDsv-rC.2166ec8b3a32.css.gz +0 -0
  818. codex/static_root/assets/unauthorized-muDsv-rC.css.br +0 -0
  819. codex/static_root/assets/unauthorized-muDsv-rC.css.gz +0 -0
  820. codex/static_root/assets/user-tab-Bc0BOX75.96057d32f1e9.js +0 -1
  821. codex/static_root/assets/user-tab-Bc0BOX75.96057d32f1e9.js.br +0 -0
  822. codex/static_root/assets/user-tab-Bc0BOX75.96057d32f1e9.js.gz +0 -0
  823. codex/static_root/assets/user-tab-Bc0BOX75.js +0 -1
  824. codex/static_root/assets/user-tab-Bc0BOX75.js.br +0 -0
  825. codex/static_root/assets/user-tab-Bc0BOX75.js.gz +0 -0
  826. codex/static_root/js/choices-admin.1a20a5648f20.json +0 -1
  827. codex/static_root/js/choices-admin.1a20a5648f20.json.br +0 -0
  828. codex/static_root/js/choices-admin.1a20a5648f20.json.gz +0 -0
  829. codex/static_root/js/choices-admin.json +0 -1
  830. codex/static_root/js/choices-admin.json.br +0 -0
  831. codex/static_root/js/choices-admin.json.gz +0 -0
  832. codex/static_root/js/choices.2f6b0359e1ef.json +0 -1
  833. codex/static_root/js/choices.2f6b0359e1ef.json.br +0 -0
  834. codex/static_root/js/choices.2f6b0359e1ef.json.gz +0 -0
  835. codex/static_root/js/choices.json +0 -1
  836. codex/static_root/js/choices.json.br +0 -0
  837. codex/static_root/js/choices.json.gz +0 -0
  838. codex/static_root/manifest.5127f11299cc.json +0 -611
  839. codex/static_root/manifest.5127f11299cc.json.br +0 -0
  840. codex/static_root/manifest.5127f11299cc.json.gz +0 -0
  841. codex/templates/search/indexes/codex/comic_text.txt +0 -47
  842. codex/views/browser/annotations.py +0 -296
  843. codex/views/browser/base.py +0 -140
  844. codex/views/browser/filters/annotations.py +0 -103
  845. codex/views/browser/filters/search.py +0 -196
  846. codex/views/browser/metadata.py +0 -332
  847. {codex-1.6.18.dist-info → codex-1.7.0.dist-info}/LICENSE +0 -0
  848. {codex-1.6.18.dist-info → codex-1.7.0.dist-info}/WHEEL +0 -0
  849. {codex-1.6.18.dist-info → codex-1.7.0.dist-info}/entry_points.txt +0 -0
File without changes
@@ -1,131 +0,0 @@
1
- from django import template
2
- from django.conf import settings
3
- from django.core.exceptions import ImproperlyConfigured
4
-
5
- from ...haystack.utils import importlib
6
-
7
- register = template.Library()
8
-
9
-
10
- class HighlightNode(template.Node):
11
- def __init__(
12
- self, text_block, query, html_tag=None, css_class=None, max_length=None
13
- ):
14
- self.text_block = template.Variable(text_block)
15
- self.query = template.Variable(query)
16
- self.html_tag = html_tag
17
- self.css_class = css_class
18
- self.max_length = max_length
19
-
20
- if html_tag is not None:
21
- self.html_tag = template.Variable(html_tag)
22
-
23
- if css_class is not None:
24
- self.css_class = template.Variable(css_class)
25
-
26
- if max_length is not None:
27
- self.max_length = template.Variable(max_length)
28
-
29
- def render(self, context):
30
- text_block = self.text_block.resolve(context)
31
- query = self.query.resolve(context)
32
- kwargs = {}
33
-
34
- if self.html_tag is not None:
35
- kwargs["html_tag"] = self.html_tag.resolve(context)
36
-
37
- if self.css_class is not None:
38
- kwargs["css_class"] = self.css_class.resolve(context)
39
-
40
- if self.max_length is not None:
41
- kwargs["max_length"] = self.max_length.resolve(context)
42
-
43
- # Handle a user-defined highlighting function.
44
- if (
45
- hasattr(settings, "HAYSTACK_CUSTOM_HIGHLIGHTER")
46
- and settings.HAYSTACK_CUSTOM_HIGHLIGHTER
47
- ):
48
- # Do the import dance.
49
- try:
50
- path_bits = settings.HAYSTACK_CUSTOM_HIGHLIGHTER.split(".")
51
- highlighter_path, highlighter_classname = (
52
- ".".join(path_bits[:-1]),
53
- path_bits[-1],
54
- )
55
- highlighter_module = importlib.import_module(highlighter_path)
56
- highlighter_class = getattr(highlighter_module, highlighter_classname)
57
- except (ImportError, AttributeError) as e:
58
- raise ImproperlyConfigured(
59
- "The highlighter '%s' could not be imported: %s"
60
- % (settings.HAYSTACK_CUSTOM_HIGHLIGHTER, e)
61
- )
62
- else:
63
- from ...haystack.utils.highlighting import Highlighter
64
-
65
- highlighter_class = Highlighter
66
-
67
- highlighter = highlighter_class(query, **kwargs)
68
- highlighted_text = highlighter.highlight(text_block)
69
- return highlighted_text
70
-
71
-
72
- @register.tag
73
- def highlight(parser, token):
74
- """
75
- Takes a block of text and highlights words from a provided query within that
76
- block of text. Optionally accepts arguments to provide the HTML tag to wrap
77
- highlighted word in, a CSS class to use with the tag and a maximum length of
78
- the blurb in characters.
79
-
80
- Syntax::
81
-
82
- {% highlight <text_block> with <query> [css_class "class_name"] [html_tag "span"] [max_length 200] %}
83
-
84
- Example::
85
-
86
- # Highlight summary with default behavior.
87
- {% highlight result.summary with request.query %}
88
-
89
- # Highlight summary but wrap highlighted words with a div and the
90
- # following CSS class.
91
- {% highlight result.summary with request.query html_tag "div" css_class "highlight_me_please" %}
92
-
93
- # Highlight summary but only show 40 characters.
94
- {% highlight result.summary with request.query max_length 40 %}
95
- """
96
- bits = token.split_contents()
97
- tag_name = bits[0]
98
-
99
- if not len(bits) % 2 == 0:
100
- raise template.TemplateSyntaxError(
101
- "'%s' tag requires valid pairings arguments." % tag_name
102
- )
103
-
104
- text_block = bits[1]
105
-
106
- if len(bits) < 4:
107
- raise template.TemplateSyntaxError(
108
- "'%s' tag requires an object and a query provided by 'with'." % tag_name
109
- )
110
-
111
- if bits[2] != "with":
112
- raise template.TemplateSyntaxError(
113
- "'%s' tag's second argument should be 'with'." % tag_name
114
- )
115
-
116
- query = bits[3]
117
-
118
- arg_bits = iter(bits[4:])
119
- kwargs = {}
120
-
121
- for bit in arg_bits:
122
- if bit == "css_class":
123
- kwargs["css_class"] = next(arg_bits)
124
-
125
- if bit == "html_tag":
126
- kwargs["html_tag"] = next(arg_bits)
127
-
128
- if bit == "max_length":
129
- kwargs["max_length"] = next(arg_bits)
130
-
131
- return HighlightNode(text_block, query, **kwargs)
@@ -1,119 +0,0 @@
1
- import logging
2
-
3
- from django import template
4
-
5
- from ...haystack.query import SearchQuerySet
6
- from ...haystack.utils.app_loading import haystack_get_model
7
-
8
- register = template.Library()
9
-
10
-
11
- class MoreLikeThisNode(template.Node):
12
- def __init__(self, model, varname, for_types=None, limit=None):
13
- self.model = template.Variable(model)
14
- self.varname = varname
15
- self.for_types = for_types
16
- self.limit = limit
17
-
18
- if self.limit is not None:
19
- self.limit = int(self.limit)
20
-
21
- def render(self, context):
22
- try:
23
- model_instance = self.model.resolve(context)
24
- sqs = SearchQuerySet()
25
-
26
- if self.for_types is not None:
27
- intermediate = template.Variable(self.for_types)
28
- for_types = intermediate.resolve(context).split(",")
29
- search_models = []
30
-
31
- for model in for_types:
32
- model_class = haystack_get_model(*model.split("."))
33
-
34
- if model_class:
35
- search_models.append(model_class)
36
-
37
- sqs = sqs.models(*search_models)
38
-
39
- sqs = sqs.more_like_this(model_instance)
40
-
41
- if self.limit is not None:
42
- sqs = sqs[: self.limit]
43
-
44
- context[self.varname] = sqs
45
- except Exception as exc:
46
- logging.warning(
47
- "Unhandled exception rendering %r: %s", self, exc, exc_info=True
48
- )
49
-
50
- return ""
51
-
52
-
53
- @register.tag
54
- def more_like_this(parser, token):
55
- """
56
- Fetches similar items from the search index to find content that is similar
57
- to the provided model's content.
58
-
59
- Syntax::
60
-
61
- {% more_like_this model_instance as varname [for app_label.model_name,app_label.model_name,...] [limit n] %}
62
-
63
- Example::
64
-
65
- # Pull a full SearchQuerySet (lazy loaded) of similar content.
66
- {% more_like_this entry as related_content %}
67
-
68
- # Pull just the top 5 similar pieces of content.
69
- {% more_like_this entry as related_content limit 5 %}
70
-
71
- # Pull just the top 5 similar entries or comments.
72
- {% more_like_this entry as related_content for "blog.entry,comments.comment" limit 5 %}
73
- """
74
- bits = token.split_contents()
75
-
76
- if not len(bits) in (4, 6, 8):
77
- raise template.TemplateSyntaxError(
78
- "'%s' tag requires either 3, 5 or 7 arguments." % bits[0]
79
- )
80
-
81
- model = bits[1]
82
-
83
- if bits[2] != "as":
84
- raise template.TemplateSyntaxError(
85
- "'%s' tag's second argument should be 'as'." % bits[0]
86
- )
87
-
88
- varname = bits[3]
89
- limit = None
90
- for_types = None
91
-
92
- if len(bits) == 6:
93
- if bits[4] != "limit" and bits[4] != "for":
94
- raise template.TemplateSyntaxError(
95
- "'%s' tag's fourth argument should be either 'limit' or 'for'."
96
- % bits[0]
97
- )
98
-
99
- if bits[4] == "limit":
100
- limit = bits[5]
101
- else:
102
- for_types = bits[5]
103
-
104
- if len(bits) == 8:
105
- if bits[4] != "for":
106
- raise template.TemplateSyntaxError(
107
- "'%s' tag's fourth argument should be 'for'." % bits[0]
108
- )
109
-
110
- for_types = bits[5]
111
-
112
- if bits[6] != "limit":
113
- raise template.TemplateSyntaxError(
114
- "'%s' tag's sixth argument should be 'limit'." % bits[0]
115
- )
116
-
117
- limit = bits[7]
118
-
119
- return MoreLikeThisNode(model, varname, for_types, limit)
@@ -1,5 +0,0 @@
1
- from django.urls import path
2
-
3
- from ..haystack.views import SearchView
4
-
5
- urlpatterns = [path("", SearchView(), name="haystack_search")]
@@ -1,84 +0,0 @@
1
- import importlib
2
- import re
3
-
4
- from django.conf import settings
5
-
6
- from ...haystack.constants import DJANGO_CT, DJANGO_ID, ID
7
- from ...haystack.utils.highlighting import Highlighter # noqa=F401
8
-
9
- IDENTIFIER_REGEX = re.compile(r"^[\w\d_]+\.[\w\d_]+\.[\w\d-]+$")
10
-
11
-
12
- def default_get_identifier(obj_or_string):
13
- """
14
- Get an unique identifier for the object or a string representing the
15
- object.
16
-
17
- If not overridden, uses <app_label>.<object_name>.<pk>.
18
- """
19
- if isinstance(obj_or_string, str):
20
- if not IDENTIFIER_REGEX.match(obj_or_string):
21
- raise AttributeError(
22
- "Provided string '%s' is not a valid identifier." % obj_or_string
23
- )
24
-
25
- return obj_or_string
26
-
27
- return "%s.%s" % (get_model_ct(obj_or_string), obj_or_string._get_pk_val())
28
-
29
-
30
- def _lookup_identifier_method():
31
- """
32
- If the user has set HAYSTACK_IDENTIFIER_METHOD, import it and return the method uncalled.
33
- If HAYSTACK_IDENTIFIER_METHOD is not defined, return haystack.utils.default_get_identifier.
34
-
35
- This always runs at module import time. We keep the code in a function
36
- so that it can be called from unit tests, in order to simulate the re-loading
37
- of this module.
38
- """
39
- if not hasattr(settings, "HAYSTACK_IDENTIFIER_METHOD"):
40
- return default_get_identifier
41
-
42
- module_path, method_name = settings.HAYSTACK_IDENTIFIER_METHOD.rsplit(".", 1)
43
-
44
- try:
45
- module = importlib.import_module(module_path)
46
- except ImportError:
47
- raise ImportError(
48
- "Unable to import module '%s' provided for HAYSTACK_IDENTIFIER_METHOD."
49
- % module_path
50
- )
51
-
52
- identifier_method = getattr(module, method_name, None)
53
-
54
- if not identifier_method:
55
- raise AttributeError(
56
- "Provided method '%s' for HAYSTACK_IDENTIFIER_METHOD does not exist in '%s'."
57
- % (method_name, module_path)
58
- )
59
-
60
- return identifier_method
61
-
62
-
63
- get_identifier = _lookup_identifier_method()
64
-
65
-
66
- def get_model_ct_tuple(model):
67
- # Deferred models should be identified as if they were the underlying model.
68
- model_name = (
69
- model._meta.concrete_model._meta.model_name
70
- if hasattr(model, "_deferred") and model._deferred
71
- else model._meta.model_name
72
- )
73
- return (model._meta.app_label, model_name)
74
-
75
-
76
- def get_model_ct(model):
77
- return "%s.%s" % get_model_ct_tuple(model)
78
-
79
-
80
- def get_facet_field_name(fieldname):
81
- if fieldname in [ID, DJANGO_ID, DJANGO_CT]:
82
- return fieldname
83
-
84
- return "%s_exact" % fieldname
@@ -1,34 +0,0 @@
1
- from django.apps import apps
2
- from django.core.exceptions import ImproperlyConfigured
3
-
4
- __all__ = ["haystack_get_models", "haystack_load_apps"]
5
-
6
- APP = "app"
7
- MODEL = "model"
8
-
9
-
10
- def haystack_get_app_modules():
11
- """Return the Python module for each installed app"""
12
- return [i.module for i in apps.get_app_configs()]
13
-
14
-
15
- def haystack_load_apps():
16
- """Return a list of app labels for all installed applications which have models"""
17
- return [i.label for i in apps.get_app_configs() if i.models_module is not None]
18
-
19
-
20
- def haystack_get_models(label):
21
- try:
22
- app_mod = apps.get_app_config(label)
23
- return app_mod.get_models()
24
- except LookupError:
25
- if "." not in label:
26
- raise ImproperlyConfigured("Unknown application label {}".format(label))
27
- app_label, model_name = label.rsplit(".", 1)
28
- return [apps.get_model(app_label, model_name)]
29
- except ImproperlyConfigured:
30
- pass
31
-
32
-
33
- def haystack_get_model(app_label, model_name):
34
- return apps.get_model(app_label, model_name)
@@ -1,71 +0,0 @@
1
- from ...haystack.constants import WGS_84_SRID
2
- from ...haystack.exceptions import SpatialError
3
-
4
-
5
- def ensure_geometry(geom):
6
- """
7
- Makes sure the parameter passed in looks like a GEOS ``GEOSGeometry``.
8
- """
9
- if not hasattr(geom, "geom_type"):
10
- raise SpatialError("Point '%s' doesn't appear to be a GEOS geometry." % geom)
11
-
12
- return geom
13
-
14
-
15
- def ensure_point(geom):
16
- """
17
- Makes sure the parameter passed in looks like a GEOS ``Point``.
18
- """
19
- ensure_geometry(geom)
20
-
21
- if geom.geom_type != "Point":
22
- raise SpatialError("Provided geometry '%s' is not a 'Point'." % geom)
23
-
24
- return geom
25
-
26
-
27
- def ensure_wgs84(point):
28
- """
29
- Ensures the point passed in is a GEOS ``Point`` & returns that point's
30
- data is in the WGS-84 spatial reference.
31
- """
32
- ensure_point(point)
33
- # Clone it so we don't alter the original, in case they're using it for
34
- # something else.
35
- new_point = point.clone()
36
-
37
- if not new_point.srid:
38
- # It has no spatial reference id. Assume WGS-84.
39
- new_point.srid = WGS_84_SRID
40
- elif new_point.srid != WGS_84_SRID:
41
- # Transform it to get to the right system.
42
- new_point.transform(WGS_84_SRID)
43
-
44
- return new_point
45
-
46
-
47
- def ensure_distance(dist):
48
- """
49
- Makes sure the parameter passed in is a 'Distance' object.
50
- """
51
- try:
52
- # Since we mostly only care about the ``.km`` attribute, make sure
53
- # it's there.
54
- dist.km
55
- except AttributeError:
56
- raise SpatialError("'%s' does not appear to be a 'Distance' object." % dist)
57
-
58
- return dist
59
-
60
-
61
- def generate_bounding_box(bottom_left, top_right):
62
- """
63
- Takes two opposite corners of a bounding box (order matters!) & generates
64
- a two-tuple of the correct coordinates for the bounding box.
65
-
66
- The two-tuple is in the form ``((min_lat, min_lng), (max_lat, max_lng))``.
67
- """
68
- west, lat_1 = bottom_left.coords
69
- east, lat_2 = top_right.coords
70
- min_lat, max_lat = min(lat_1, lat_2), max(lat_1, lat_2)
71
- return ((min_lat, west), (max_lat, east))
@@ -1,165 +0,0 @@
1
- from django.utils.html import strip_tags
2
-
3
-
4
- class Highlighter:
5
- css_class = "highlighted"
6
- html_tag = "span"
7
- max_length = 200
8
- text_block = ""
9
-
10
- def __init__(self, query, **kwargs):
11
- self.query = query
12
-
13
- if "max_length" in kwargs:
14
- self.max_length = int(kwargs["max_length"])
15
-
16
- if "html_tag" in kwargs:
17
- self.html_tag = kwargs["html_tag"]
18
-
19
- if "css_class" in kwargs:
20
- self.css_class = kwargs["css_class"]
21
-
22
- self.query_words = {
23
- word.lower() for word in self.query.split() if not word.startswith("-")
24
- }
25
-
26
- def highlight(self, text_block):
27
- self.text_block = strip_tags(text_block)
28
- highlight_locations = self.find_highlightable_words()
29
- start_offset, end_offset = self.find_window(highlight_locations)
30
- return self.render_html(highlight_locations, start_offset, end_offset)
31
-
32
- def find_highlightable_words(self):
33
- # Use a set so we only do this once per unique word.
34
- word_positions = {}
35
-
36
- # Pre-compute the length.
37
- end_offset = len(self.text_block)
38
- lower_text_block = self.text_block.lower()
39
-
40
- for word in self.query_words:
41
- if word not in word_positions:
42
- word_positions[word] = []
43
-
44
- start_offset = 0
45
-
46
- while start_offset < end_offset:
47
- next_offset = lower_text_block.find(word, start_offset, end_offset)
48
-
49
- # If we get a -1 out of find, it wasn't found. Bomb out and
50
- # start the next word.
51
- if next_offset == -1:
52
- break
53
-
54
- word_positions[word].append(next_offset)
55
- start_offset = next_offset + len(word)
56
-
57
- return word_positions
58
-
59
- def find_window(self, highlight_locations):
60
- best_start = 0
61
- best_end = self.max_length
62
-
63
- # First, make sure we have words.
64
- if not len(highlight_locations):
65
- return (best_start, best_end)
66
-
67
- words_found = []
68
-
69
- # Next, make sure we found any words at all.
70
- for _, offset_list in highlight_locations.items():
71
- if len(offset_list):
72
- # Add all of the locations to the list.
73
- words_found.extend(offset_list)
74
-
75
- if not len(words_found):
76
- return (best_start, best_end)
77
-
78
- if len(words_found) == 1:
79
- return (words_found[0], words_found[0] + self.max_length)
80
-
81
- # Sort the list so it's in ascending order.
82
- words_found = sorted(words_found)
83
-
84
- # We now have a denormalized list of all positions were a word was
85
- # found. We'll iterate through and find the densest window we can by
86
- # counting the number of found offsets (-1 to fit in the window).
87
- highest_density = 0
88
-
89
- if words_found[:-1][0] > self.max_length:
90
- best_start = words_found[:-1][0]
91
- best_end = best_start + self.max_length
92
-
93
- for count, start in enumerate(words_found[:-1]):
94
- current_density = 1
95
-
96
- for end in words_found[count + 1 :]:
97
- if end - start < self.max_length:
98
- current_density += 1
99
- else:
100
- current_density = 0
101
-
102
- # Only replace if we have a bigger (not equal density) so we
103
- # give deference to windows earlier in the document.
104
- if current_density > highest_density:
105
- best_start = start
106
- best_end = start + self.max_length
107
- highest_density = current_density
108
-
109
- return (best_start, best_end)
110
-
111
- def render_html(self, highlight_locations=None, start_offset=None, end_offset=None):
112
- # Start by chopping the block down to the proper window.
113
- text = self.text_block[start_offset:end_offset]
114
-
115
- # Invert highlight_locations to a location -> term list
116
- term_list = []
117
-
118
- for term, locations in highlight_locations.items():
119
- term_list += [(loc - start_offset, term) for loc in locations]
120
-
121
- loc_to_term = sorted(term_list)
122
-
123
- # Prepare the highlight template
124
- if self.css_class:
125
- hl_start = '<%s class="%s">' % (self.html_tag, self.css_class)
126
- else:
127
- hl_start = "<%s>" % (self.html_tag)
128
-
129
- hl_end = "</%s>" % self.html_tag
130
-
131
- # Copy the part from the start of the string to the first match,
132
- # and there replace the match with a highlighted version.
133
- highlighted_chunk = ""
134
- matched_so_far = 0
135
- prev = 0
136
- prev_str = ""
137
-
138
- for cur, cur_str in loc_to_term:
139
- # This can be in a different case than cur_str
140
- actual_term = text[cur : cur + len(cur_str)]
141
-
142
- # Handle incorrect highlight_locations by first checking for the term
143
- if actual_term.lower() == cur_str:
144
- if cur < prev + len(prev_str):
145
- continue
146
-
147
- highlighted_chunk += (
148
- text[prev + len(prev_str) : cur] + hl_start + actual_term + hl_end
149
- )
150
- prev = cur
151
- prev_str = cur_str
152
-
153
- # Keep track of how far we've copied so far, for the last step
154
- matched_so_far = cur + len(actual_term)
155
-
156
- # Don't forget the chunk after the last term
157
- highlighted_chunk += text[matched_so_far:]
158
-
159
- if start_offset > 0:
160
- highlighted_chunk = "...%s" % highlighted_chunk
161
-
162
- if end_offset < len(self.text_block):
163
- highlighted_chunk = "%s..." % highlighted_chunk
164
-
165
- return highlighted_chunk