codex 1.6.19__py3-none-any.whl → 1.7.0a0__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 (576) hide show
  1. codex/db.py +119 -0
  2. codex/librarian/covers/purge.py +1 -1
  3. codex/librarian/importer/const.py +7 -1
  4. codex/librarian/importer/create_fks.py +5 -2
  5. codex/librarian/importer/importerd.py +17 -12
  6. codex/librarian/importer/moved.py +44 -13
  7. codex/librarian/importer/tasks.py +2 -0
  8. codex/librarian/janitor/cleanup.py +21 -8
  9. codex/librarian/janitor/integrity.py +369 -0
  10. codex/librarian/janitor/janitor.py +50 -15
  11. codex/librarian/janitor/latest_version.py +2 -1
  12. codex/librarian/janitor/status.py +5 -0
  13. codex/librarian/janitor/tasks.py +37 -0
  14. codex/librarian/janitor/update.py +1 -1
  15. codex/librarian/librariand.py +32 -24
  16. codex/librarian/search/optimize.py +43 -0
  17. codex/librarian/search/remove.py +18 -46
  18. codex/librarian/search/searchd.py +14 -17
  19. codex/librarian/search/status.py +2 -1
  20. codex/librarian/search/tasks.py +4 -9
  21. codex/librarian/search/update.py +223 -301
  22. codex/librarian/watchdog/observers.py +2 -1
  23. codex/migrations/0029_comicfts.py +58 -0
  24. codex/migrations/0030_nocase_collation_day_month_indexes_status_types.py +198 -0
  25. codex/models/admin.py +15 -6
  26. codex/models/base.py +9 -0
  27. codex/models/bookmark.py +3 -3
  28. codex/models/comic.py +68 -16
  29. codex/models/functions.py +59 -2
  30. codex/models/groups.py +6 -1
  31. codex/models/library.py +1 -3
  32. codex/models/paths.py +9 -3
  33. codex/serializers/browser/page.py +2 -0
  34. codex/settings/settings.py +16 -17
  35. codex/signals/django_signals.py +4 -10
  36. codex/startup.py +1 -35
  37. codex/static_root/assets/{VCheckbox-Cko1sQK-.170726b3b8a1.js → VCheckbox-CWiqcZ7a.3feebd47daab.js} +1 -1
  38. codex/static_root/assets/VCheckbox-CWiqcZ7a.3feebd47daab.js.br +0 -0
  39. codex/static_root/assets/VCheckbox-CWiqcZ7a.3feebd47daab.js.gz +0 -0
  40. codex/static_root/assets/{VCheckbox-Cko1sQK-.js → VCheckbox-CWiqcZ7a.js} +1 -1
  41. codex/static_root/assets/VCheckbox-CWiqcZ7a.js.br +0 -0
  42. codex/static_root/assets/VCheckbox-CWiqcZ7a.js.gz +0 -0
  43. codex/static_root/assets/{VCheckboxBtn-CO3-aqQL.c9b8062fd66f.js → VCheckboxBtn-Dk3iB62X.bc66d5351baa.js} +1 -1
  44. codex/static_root/assets/VCheckboxBtn-Dk3iB62X.bc66d5351baa.js.br +0 -0
  45. codex/static_root/assets/VCheckboxBtn-Dk3iB62X.bc66d5351baa.js.gz +0 -0
  46. codex/static_root/assets/{VCheckboxBtn-CO3-aqQL.js → VCheckboxBtn-Dk3iB62X.js} +1 -1
  47. codex/static_root/assets/VCheckboxBtn-Dk3iB62X.js.br +0 -0
  48. codex/static_root/assets/VCheckboxBtn-Dk3iB62X.js.gz +0 -0
  49. codex/static_root/assets/{VCombobox-Bjp6lffE.js → VCombobox-D1_KU27A.b1d30587a973.js} +1 -1
  50. codex/static_root/assets/VCombobox-D1_KU27A.b1d30587a973.js.br +0 -0
  51. codex/static_root/assets/VCombobox-D1_KU27A.b1d30587a973.js.gz +0 -0
  52. codex/static_root/assets/{VCombobox-Bjp6lffE.caf59fba486e.js → VCombobox-D1_KU27A.js} +1 -1
  53. codex/static_root/assets/VCombobox-D1_KU27A.js.br +0 -0
  54. codex/static_root/assets/VCombobox-D1_KU27A.js.gz +0 -0
  55. codex/static_root/assets/{VDialog-BkpVGB70.6eea3ca762a5.js → VDialog-GbxvFMMN.594fb3a39ced.js} +1 -1
  56. codex/static_root/assets/VDialog-GbxvFMMN.594fb3a39ced.js.br +0 -0
  57. codex/static_root/assets/VDialog-GbxvFMMN.594fb3a39ced.js.gz +0 -0
  58. codex/static_root/assets/{VDialog-BkpVGB70.js → VDialog-GbxvFMMN.js} +1 -1
  59. codex/static_root/assets/VDialog-GbxvFMMN.js.br +0 -0
  60. codex/static_root/assets/VDialog-GbxvFMMN.js.gz +0 -0
  61. codex/static_root/assets/{VExpansionPanels-Ci2-j8XX.9c55db4ef49e.js → VExpansionPanels-Cywv_bEj.a762e63858e5.js} +1 -1
  62. codex/static_root/assets/VExpansionPanels-Cywv_bEj.a762e63858e5.js.br +0 -0
  63. codex/static_root/assets/VExpansionPanels-Cywv_bEj.a762e63858e5.js.gz +0 -0
  64. codex/static_root/assets/{VExpansionPanels-Ci2-j8XX.js → VExpansionPanels-Cywv_bEj.js} +1 -1
  65. codex/static_root/assets/VExpansionPanels-Cywv_bEj.js.br +0 -0
  66. codex/static_root/assets/VExpansionPanels-Cywv_bEj.js.gz +0 -0
  67. codex/static_root/assets/{VRadioGroup-D3Py5BfQ.a4f25edb86d3.js → VRadioGroup-C0etmxpZ.0eb3009a6300.js} +1 -1
  68. codex/static_root/assets/VRadioGroup-C0etmxpZ.0eb3009a6300.js.br +0 -0
  69. codex/static_root/assets/VRadioGroup-C0etmxpZ.0eb3009a6300.js.gz +0 -0
  70. codex/static_root/assets/{VRadioGroup-D3Py5BfQ.js → VRadioGroup-C0etmxpZ.js} +1 -1
  71. codex/static_root/assets/VRadioGroup-C0etmxpZ.js.br +0 -0
  72. codex/static_root/assets/VRadioGroup-C0etmxpZ.js.gz +0 -0
  73. codex/static_root/assets/{VSelect-DtvZsYZz.e98745d858eb.js → VSelect-txrnRiNJ.a5625760018c.js} +1 -1
  74. codex/static_root/assets/VSelect-txrnRiNJ.a5625760018c.js.br +0 -0
  75. codex/static_root/assets/VSelect-txrnRiNJ.a5625760018c.js.gz +0 -0
  76. codex/static_root/assets/{VSelect-DtvZsYZz.js → VSelect-txrnRiNJ.js} +1 -1
  77. codex/static_root/assets/VSelect-txrnRiNJ.js.br +0 -0
  78. codex/static_root/assets/VSelect-txrnRiNJ.js.gz +0 -0
  79. codex/static_root/assets/{VSelectionControl-D6kmykQW.1e1fda62ceba.js → VSelectionControl-CY6RmcvW.7e8824224f6c.js} +1 -1
  80. codex/static_root/assets/VSelectionControl-CY6RmcvW.7e8824224f6c.js.br +0 -0
  81. codex/static_root/assets/VSelectionControl-CY6RmcvW.7e8824224f6c.js.gz +0 -0
  82. codex/static_root/assets/{VSelectionControl-D6kmykQW.js → VSelectionControl-CY6RmcvW.js} +1 -1
  83. codex/static_root/assets/VSelectionControl-CY6RmcvW.js.br +0 -0
  84. codex/static_root/assets/VSelectionControl-CY6RmcvW.js.gz +0 -0
  85. codex/static_root/assets/{VSlideGroup-UGZWxpF5.360bdefcd215.js → VSlideGroup-DtEQMwY1.6c72325635ed.js} +1 -1
  86. codex/static_root/assets/VSlideGroup-DtEQMwY1.6c72325635ed.js.br +0 -0
  87. codex/static_root/assets/VSlideGroup-DtEQMwY1.6c72325635ed.js.gz +0 -0
  88. codex/static_root/assets/{VSlideGroup-UGZWxpF5.js → VSlideGroup-DtEQMwY1.js} +1 -1
  89. codex/static_root/assets/VSlideGroup-DtEQMwY1.js.br +0 -0
  90. codex/static_root/assets/VSlideGroup-DtEQMwY1.js.gz +0 -0
  91. codex/static_root/assets/{VTable-DXH_yQ0o.1149f56ad566.js → VTable-2af995xo.6c5bf36631b2.js} +1 -1
  92. codex/static_root/assets/VTable-2af995xo.6c5bf36631b2.js.br +0 -0
  93. codex/static_root/assets/VTable-2af995xo.6c5bf36631b2.js.gz +0 -0
  94. codex/static_root/assets/{VTable-DXH_yQ0o.js → VTable-2af995xo.js} +1 -1
  95. codex/static_root/assets/VTable-2af995xo.js.br +0 -0
  96. codex/static_root/assets/VTable-2af995xo.js.gz +0 -0
  97. codex/static_root/assets/{VTextField-Blqy56_L.26d8761e0155.js → VTextField-G6CMj7yO.657a130dd302.js} +1 -1
  98. codex/static_root/assets/VTextField-G6CMj7yO.657a130dd302.js.br +0 -0
  99. codex/static_root/assets/VTextField-G6CMj7yO.657a130dd302.js.gz +0 -0
  100. codex/static_root/assets/{VTextField-Blqy56_L.js → VTextField-G6CMj7yO.js} +1 -1
  101. codex/static_root/assets/VTextField-G6CMj7yO.js.br +0 -0
  102. codex/static_root/assets/VTextField-G6CMj7yO.js.gz +0 -0
  103. codex/static_root/assets/{VWindowItem-C8_ovV7e.afbc08414765.js → VWindowItem-CzoGd6Ul.721e5da11ad4.js} +1 -1
  104. codex/static_root/assets/VWindowItem-CzoGd6Ul.721e5da11ad4.js.br +0 -0
  105. codex/static_root/assets/VWindowItem-CzoGd6Ul.721e5da11ad4.js.gz +0 -0
  106. codex/static_root/assets/{VWindowItem-C8_ovV7e.js → VWindowItem-CzoGd6Ul.js} +1 -1
  107. codex/static_root/assets/VWindowItem-CzoGd6Ul.js.br +0 -0
  108. codex/static_root/assets/VWindowItem-CzoGd6Ul.js.gz +0 -0
  109. codex/static_root/assets/{admin-DTRn8bBs.d031ea42d8d0.js → admin-CsPAIQeG.5175467148a3.js} +1 -1
  110. codex/static_root/assets/admin-CsPAIQeG.5175467148a3.js.br +0 -0
  111. codex/static_root/assets/admin-CsPAIQeG.5175467148a3.js.gz +0 -0
  112. codex/static_root/assets/{admin-DTRn8bBs.js → admin-CsPAIQeG.js} +1 -1
  113. codex/static_root/assets/admin-CsPAIQeG.js.br +0 -0
  114. codex/static_root/assets/admin-CsPAIQeG.js.gz +0 -0
  115. codex/static_root/assets/{admin-drawer-panel-BaXFOcru.b1a44b05f482.js → admin-drawer-panel-BAT7GA64.73a064628c19.js} +11 -11
  116. codex/static_root/assets/admin-drawer-panel-BAT7GA64.73a064628c19.js.br +0 -0
  117. codex/static_root/assets/admin-drawer-panel-BAT7GA64.73a064628c19.js.gz +0 -0
  118. codex/static_root/assets/{admin-drawer-panel-BaXFOcru.js → admin-drawer-panel-BAT7GA64.js} +11 -11
  119. codex/static_root/assets/admin-drawer-panel-BAT7GA64.js.br +0 -0
  120. codex/static_root/assets/admin-drawer-panel-BAT7GA64.js.gz +0 -0
  121. codex/static_root/assets/browser-C18l93yc.923860009ef4.js +1 -0
  122. codex/static_root/assets/browser-C18l93yc.923860009ef4.js.br +0 -0
  123. codex/static_root/assets/browser-C18l93yc.923860009ef4.js.gz +0 -0
  124. codex/static_root/assets/browser-C18l93yc.js +1 -0
  125. codex/static_root/assets/browser-C18l93yc.js.br +0 -0
  126. codex/static_root/assets/browser-C18l93yc.js.gz +0 -0
  127. codex/static_root/assets/browser-DaAqlBYO.708ecf0904bb.css +1 -0
  128. codex/static_root/assets/browser-DaAqlBYO.708ecf0904bb.css.br +0 -0
  129. codex/static_root/assets/browser-DaAqlBYO.708ecf0904bb.css.gz +0 -0
  130. codex/static_root/assets/browser-DaAqlBYO.css +1 -0
  131. codex/static_root/assets/browser-DaAqlBYO.css.br +0 -0
  132. codex/static_root/assets/browser-DaAqlBYO.css.gz +0 -0
  133. codex/static_root/assets/change-password-dialog-BazJdNs9.0a4e02656a35.js +1 -0
  134. codex/static_root/assets/change-password-dialog-BazJdNs9.0a4e02656a35.js.br +0 -0
  135. codex/static_root/assets/change-password-dialog-BazJdNs9.0a4e02656a35.js.gz +0 -0
  136. codex/static_root/assets/change-password-dialog-BazJdNs9.js +1 -0
  137. codex/static_root/assets/change-password-dialog-BazJdNs9.js.br +0 -0
  138. codex/static_root/assets/change-password-dialog-BazJdNs9.js.gz +0 -0
  139. codex/static_root/assets/change-password-dialog-Mlmvz8_4.111421f51e79.css +1 -0
  140. codex/static_root/assets/change-password-dialog-Mlmvz8_4.111421f51e79.css.br +0 -0
  141. codex/static_root/assets/change-password-dialog-Mlmvz8_4.111421f51e79.css.gz +0 -0
  142. codex/static_root/assets/change-password-dialog-Mlmvz8_4.css +1 -0
  143. codex/static_root/assets/change-password-dialog-Mlmvz8_4.css.br +0 -0
  144. codex/static_root/assets/change-password-dialog-Mlmvz8_4.css.gz +0 -0
  145. codex/static_root/assets/{confirm-dialog-D3_s2DQy.9dde66036c72.js → confirm-dialog-CbW3hlOp.9dd39b443c31.js} +1 -1
  146. codex/static_root/assets/confirm-dialog-CbW3hlOp.9dd39b443c31.js.br +0 -0
  147. codex/static_root/assets/confirm-dialog-CbW3hlOp.9dd39b443c31.js.gz +0 -0
  148. codex/static_root/assets/{confirm-dialog-D3_s2DQy.js → confirm-dialog-CbW3hlOp.js} +1 -1
  149. codex/static_root/assets/confirm-dialog-CbW3hlOp.js.br +0 -0
  150. codex/static_root/assets/confirm-dialog-CbW3hlOp.js.gz +0 -0
  151. codex/static_root/assets/{datetime-column-BxC1Li9e.3dc314b3295d.js → datetime-column-uSqKZU37.b157b0743db5.js} +1 -1
  152. codex/static_root/assets/datetime-column-uSqKZU37.b157b0743db5.js.br +0 -0
  153. codex/static_root/assets/datetime-column-uSqKZU37.b157b0743db5.js.gz +0 -0
  154. codex/static_root/assets/{datetime-column-BxC1Li9e.js → datetime-column-uSqKZU37.js} +1 -1
  155. codex/static_root/assets/datetime-column-uSqKZU37.js.br +0 -0
  156. codex/static_root/assets/datetime-column-uSqKZU37.js.gz +0 -0
  157. codex/static_root/assets/{filter-Bzk7x841.d0c3b602e62d.js → filter-CBl5KEsB.845a81573c2e.js} +1 -1
  158. codex/static_root/assets/filter-CBl5KEsB.845a81573c2e.js.br +0 -0
  159. codex/static_root/assets/filter-CBl5KEsB.845a81573c2e.js.gz +0 -0
  160. codex/static_root/assets/{filter-Bzk7x841.js → filter-CBl5KEsB.js} +1 -1
  161. codex/static_root/assets/filter-CBl5KEsB.js.br +0 -0
  162. codex/static_root/assets/filter-CBl5KEsB.js.gz +0 -0
  163. codex/static_root/assets/flag-tab-CT8pqM4r.ecb6eee2e7a0.js +1 -0
  164. codex/static_root/assets/flag-tab-CT8pqM4r.ecb6eee2e7a0.js.br +0 -0
  165. codex/static_root/assets/flag-tab-CT8pqM4r.ecb6eee2e7a0.js.gz +0 -0
  166. codex/static_root/assets/flag-tab-CT8pqM4r.js +1 -0
  167. codex/static_root/assets/flag-tab-CT8pqM4r.js.br +0 -0
  168. codex/static_root/assets/flag-tab-CT8pqM4r.js.gz +0 -0
  169. codex/static_root/assets/{group-tab-5esH4lwX.a81fdd258117.js → group-tab-BOW9kigw.7e5007596367.js} +1 -1
  170. codex/static_root/assets/group-tab-BOW9kigw.7e5007596367.js.br +0 -0
  171. codex/static_root/assets/group-tab-BOW9kigw.7e5007596367.js.gz +0 -0
  172. codex/static_root/assets/{group-tab-5esH4lwX.js → group-tab-BOW9kigw.js} +1 -1
  173. codex/static_root/assets/group-tab-BOW9kigw.js.br +0 -0
  174. codex/static_root/assets/group-tab-BOW9kigw.js.gz +0 -0
  175. codex/static_root/assets/{http-error-BTOBfcGY.52ced6f28420.js → http-error-C6yuLApo.45cf99eb7a70.js} +1 -1
  176. codex/static_root/assets/http-error-C6yuLApo.45cf99eb7a70.js.br +4 -0
  177. codex/static_root/assets/http-error-C6yuLApo.45cf99eb7a70.js.gz +0 -0
  178. codex/static_root/assets/{http-error-BTOBfcGY.js → http-error-C6yuLApo.js} +1 -1
  179. codex/static_root/assets/http-error-C6yuLApo.js.br +4 -0
  180. codex/static_root/assets/http-error-C6yuLApo.js.gz +0 -0
  181. codex/static_root/assets/{library-tab-DiPEdOF7.ece2d642a9dc.js → library-tab-D3WOtpE0.9af34e6e7235.js} +1 -1
  182. codex/static_root/assets/library-tab-D3WOtpE0.9af34e6e7235.js.br +0 -0
  183. codex/static_root/assets/library-tab-D3WOtpE0.9af34e6e7235.js.gz +0 -0
  184. codex/static_root/assets/{library-tab-DiPEdOF7.js → library-tab-D3WOtpE0.js} +1 -1
  185. codex/static_root/assets/library-tab-D3WOtpE0.js.br +0 -0
  186. codex/static_root/assets/library-tab-D3WOtpE0.js.gz +0 -0
  187. codex/static_root/assets/main-CmjU2oTp.6a471f6900e5.js +6 -0
  188. codex/static_root/assets/main-CmjU2oTp.6a471f6900e5.js.br +0 -0
  189. codex/static_root/assets/main-CmjU2oTp.6a471f6900e5.js.gz +0 -0
  190. codex/static_root/assets/main-CmjU2oTp.js +6 -0
  191. codex/static_root/assets/main-CmjU2oTp.js.br +0 -0
  192. codex/static_root/assets/main-CmjU2oTp.js.gz +0 -0
  193. codex/static_root/assets/pager-full-pdf-BH54_5f6.6e92d0555cd7.js +1 -0
  194. codex/static_root/assets/pager-full-pdf-BH54_5f6.6e92d0555cd7.js.br +0 -0
  195. codex/static_root/assets/pager-full-pdf-BH54_5f6.6e92d0555cd7.js.gz +0 -0
  196. codex/static_root/assets/pager-full-pdf-BH54_5f6.js +1 -0
  197. codex/static_root/assets/pager-full-pdf-BH54_5f6.js.br +0 -0
  198. codex/static_root/assets/pager-full-pdf-BH54_5f6.js.gz +0 -0
  199. codex/static_root/assets/{pagination-toolbar-C45-onwe.4722195bb60b.css → pagination-toolbar-DGrxp2OD.css} +1 -1
  200. codex/static_root/assets/pagination-toolbar-DGrxp2OD.css.br +0 -0
  201. codex/static_root/assets/pagination-toolbar-DGrxp2OD.css.gz +0 -0
  202. codex/static_root/assets/{pagination-toolbar-C45-onwe.css → pagination-toolbar-DGrxp2OD.f960a624f04f.css} +1 -1
  203. codex/static_root/assets/pagination-toolbar-DGrxp2OD.f960a624f04f.css.br +0 -0
  204. codex/static_root/assets/pagination-toolbar-DGrxp2OD.f960a624f04f.css.gz +0 -0
  205. codex/static_root/assets/{pagination-toolbar-CkIzuyx1.00c354a82e6e.js → pagination-toolbar-JH3Kbffr.451171f7ac33.js} +1 -1
  206. codex/static_root/assets/pagination-toolbar-JH3Kbffr.451171f7ac33.js.br +0 -0
  207. codex/static_root/assets/pagination-toolbar-JH3Kbffr.451171f7ac33.js.gz +0 -0
  208. codex/static_root/assets/{pagination-toolbar-CkIzuyx1.js → pagination-toolbar-JH3Kbffr.js} +1 -1
  209. codex/static_root/assets/pagination-toolbar-JH3Kbffr.js.br +0 -0
  210. codex/static_root/assets/pagination-toolbar-JH3Kbffr.js.gz +0 -0
  211. codex/static_root/assets/{pdf-doc-BjlRPuf4.0f056fa321b6.js → pdf-doc-BcRNpoaW.882f6e967869.js} +1 -1
  212. codex/static_root/assets/pdf-doc-BcRNpoaW.882f6e967869.js.br +0 -0
  213. codex/static_root/assets/pdf-doc-BcRNpoaW.882f6e967869.js.gz +0 -0
  214. codex/static_root/assets/{pdf-doc-BjlRPuf4.js → pdf-doc-BcRNpoaW.js} +1 -1
  215. codex/static_root/assets/pdf-doc-BcRNpoaW.js.br +0 -0
  216. codex/static_root/assets/pdf-doc-BcRNpoaW.js.gz +0 -0
  217. codex/static_root/assets/reader-DIPRg2VB.900370e097aa.js +2 -0
  218. codex/static_root/assets/reader-DIPRg2VB.900370e097aa.js.br +0 -0
  219. codex/static_root/assets/reader-DIPRg2VB.900370e097aa.js.gz +0 -0
  220. codex/static_root/assets/reader-DIPRg2VB.js +2 -0
  221. codex/static_root/assets/reader-DIPRg2VB.js.br +0 -0
  222. codex/static_root/assets/reader-DIPRg2VB.js.gz +0 -0
  223. codex/static_root/assets/reader-DveZZr9x.7b21b9f8f628.css +1 -0
  224. codex/static_root/assets/reader-DveZZr9x.7b21b9f8f628.css.br +0 -0
  225. codex/static_root/assets/reader-DveZZr9x.7b21b9f8f628.css.gz +0 -0
  226. codex/static_root/assets/reader-DveZZr9x.css +1 -0
  227. codex/static_root/assets/reader-DveZZr9x.css.br +0 -0
  228. codex/static_root/assets/reader-DveZZr9x.css.gz +0 -0
  229. codex/static_root/assets/{relation-chips-CUSatZET.js → relation-chips-3tTlR5QH.71f18bc92adc.js} +1 -1
  230. codex/static_root/assets/relation-chips-3tTlR5QH.71f18bc92adc.js.br +0 -0
  231. codex/static_root/assets/relation-chips-3tTlR5QH.71f18bc92adc.js.gz +0 -0
  232. codex/static_root/assets/{relation-chips-CUSatZET.a58031ff8141.js → relation-chips-3tTlR5QH.js} +1 -1
  233. codex/static_root/assets/relation-chips-3tTlR5QH.js.br +0 -0
  234. codex/static_root/assets/relation-chips-3tTlR5QH.js.gz +0 -0
  235. codex/static_root/assets/{settings-drawer-BSHTAsJ9.js → settings-drawer-BdyFhA_r.151f4c3061ed.js} +2 -2
  236. codex/static_root/assets/settings-drawer-BdyFhA_r.151f4c3061ed.js.br +0 -0
  237. codex/static_root/assets/settings-drawer-BdyFhA_r.151f4c3061ed.js.gz +0 -0
  238. codex/static_root/assets/{settings-drawer-BSHTAsJ9.1d07ce084fc9.js → settings-drawer-BdyFhA_r.js} +2 -2
  239. codex/static_root/assets/settings-drawer-BdyFhA_r.js.br +0 -0
  240. codex/static_root/assets/settings-drawer-BdyFhA_r.js.gz +0 -0
  241. codex/static_root/assets/stats-tab-DeKjwvmh.7557c71b4cfa.js +1 -0
  242. codex/static_root/assets/stats-tab-DeKjwvmh.7557c71b4cfa.js.br +0 -0
  243. codex/static_root/assets/stats-tab-DeKjwvmh.7557c71b4cfa.js.gz +0 -0
  244. codex/static_root/assets/stats-tab-DeKjwvmh.js +1 -0
  245. codex/static_root/assets/stats-tab-DeKjwvmh.js.br +0 -0
  246. codex/static_root/assets/stats-tab-DeKjwvmh.js.gz +0 -0
  247. codex/static_root/assets/{stats-tab-BXGisn5N.9b7a71e7fe28.css → stats-tab-DpfGsVX3.1cb66f2649a9.css} +1 -1
  248. codex/static_root/assets/stats-tab-DpfGsVX3.1cb66f2649a9.css.br +0 -0
  249. codex/static_root/assets/stats-tab-DpfGsVX3.1cb66f2649a9.css.gz +0 -0
  250. codex/static_root/assets/{stats-tab-BXGisn5N.css → stats-tab-DpfGsVX3.css} +1 -1
  251. codex/static_root/assets/stats-tab-DpfGsVX3.css.br +0 -0
  252. codex/static_root/assets/stats-tab-DpfGsVX3.css.gz +0 -0
  253. codex/static_root/assets/{task-tab-NORFAa9p.97e07e366ddd.js → task-tab-C8D0qRP_.d4ab174c69a3.js} +1 -1
  254. codex/static_root/assets/task-tab-C8D0qRP_.d4ab174c69a3.js.br +0 -0
  255. codex/static_root/assets/task-tab-C8D0qRP_.d4ab174c69a3.js.gz +0 -0
  256. codex/static_root/assets/{task-tab-NORFAa9p.js → task-tab-C8D0qRP_.js} +1 -1
  257. codex/static_root/assets/task-tab-C8D0qRP_.js.br +0 -0
  258. codex/static_root/assets/task-tab-C8D0qRP_.js.gz +0 -0
  259. codex/static_root/assets/unauthorized-BHgBRF4z.8e5c1b9e52b0.js +1 -0
  260. codex/static_root/assets/unauthorized-BHgBRF4z.8e5c1b9e52b0.js.br +0 -0
  261. codex/static_root/assets/unauthorized-BHgBRF4z.8e5c1b9e52b0.js.gz +0 -0
  262. codex/static_root/assets/unauthorized-BHgBRF4z.js +1 -0
  263. codex/static_root/assets/unauthorized-BHgBRF4z.js.br +0 -0
  264. codex/static_root/assets/unauthorized-BHgBRF4z.js.gz +0 -0
  265. codex/static_root/assets/{unauthorized-muDsv-rC.css → unauthorized-BjhIc97q.728511c92cd0.css} +1 -1
  266. codex/static_root/assets/unauthorized-BjhIc97q.728511c92cd0.css.br +0 -0
  267. codex/static_root/assets/unauthorized-BjhIc97q.728511c92cd0.css.gz +0 -0
  268. codex/static_root/assets/{unauthorized-muDsv-rC.2166ec8b3a32.css → unauthorized-BjhIc97q.css} +1 -1
  269. codex/static_root/assets/unauthorized-BjhIc97q.css.br +0 -0
  270. codex/static_root/assets/unauthorized-BjhIc97q.css.gz +0 -0
  271. codex/static_root/assets/{user-tab-CHbyN1EW.e7206db08680.js → user-tab-BU31Z92y.35613c713faf.js} +1 -1
  272. codex/static_root/assets/user-tab-BU31Z92y.35613c713faf.js.br +0 -0
  273. codex/static_root/assets/user-tab-BU31Z92y.35613c713faf.js.gz +0 -0
  274. codex/static_root/assets/{user-tab-CHbyN1EW.js → user-tab-BU31Z92y.js} +1 -1
  275. codex/static_root/assets/user-tab-BU31Z92y.js.br +0 -0
  276. codex/static_root/assets/user-tab-BU31Z92y.js.gz +0 -0
  277. codex/static_root/js/choices-admin.8aa64c911203.json +1 -0
  278. codex/static_root/js/choices-admin.8aa64c911203.json.br +0 -0
  279. codex/static_root/js/choices-admin.8aa64c911203.json.gz +0 -0
  280. codex/static_root/js/choices-admin.json +1 -1
  281. codex/static_root/js/choices-admin.json.br +0 -0
  282. codex/static_root/js/choices-admin.json.gz +0 -0
  283. codex/static_root/manifest.45cb46e19686.json +635 -0
  284. codex/static_root/manifest.45cb46e19686.json.br +0 -0
  285. codex/static_root/manifest.45cb46e19686.json.gz +0 -0
  286. codex/static_root/manifest.json +248 -248
  287. codex/static_root/manifest.json.br +0 -0
  288. codex/static_root/manifest.json.gz +0 -0
  289. codex/static_root/staticfiles.json +1 -1
  290. codex/status_controller.py +10 -4
  291. codex/views/admin/tasks.py +46 -40
  292. codex/views/auth.py +15 -4
  293. codex/views/browser/annotations.py +94 -51
  294. codex/views/browser/base.py +1 -2
  295. codex/views/browser/browser.py +52 -21
  296. codex/views/browser/cover.py +8 -4
  297. codex/views/browser/filters/annotations.py +28 -6
  298. codex/views/browser/filters/search/__init__.py +1 -0
  299. codex/views/browser/filters/search/aliases.py +81 -0
  300. codex/views/browser/filters/search/field/__init__.py +1 -0
  301. codex/views/browser/filters/search/field/column.py +53 -0
  302. codex/views/browser/filters/search/field/expression.py +177 -0
  303. codex/views/browser/filters/search/field/filter.py +70 -0
  304. codex/views/browser/filters/search/field/optimize.py +71 -0
  305. codex/views/browser/filters/search/field/parse.py +187 -0
  306. codex/views/browser/filters/search/fts.py +38 -0
  307. codex/views/browser/filters/search/parse.py +220 -0
  308. codex/views/browser/order_by.py +8 -2
  309. codex/views/browser/page_in_bounds.py +88 -0
  310. codex/views/browser/paginate.py +28 -113
  311. codex/views/const.py +0 -1
  312. codex/views/opds/v1/feed.py +2 -1
  313. codex/views/opds/v2/feed.py +2 -1
  314. codex/views/opds/v2/links.py +1 -1
  315. codex/views/reader/books.py +1 -1
  316. codex/views/reader/page.py +3 -3
  317. {codex-1.6.19.dist-info → codex-1.7.0a0.dist-info}/METADATA +18 -10
  318. {codex-1.6.19.dist-info → codex-1.7.0a0.dist-info}/RECORD +321 -372
  319. codex/_vendor/__init__.py +0 -0
  320. codex/_vendor/django_haystack-3.2.1.dist-info/AUTHORS +0 -127
  321. codex/_vendor/django_haystack-3.2.1.dist-info/INSTALLER +0 -1
  322. codex/_vendor/django_haystack-3.2.1.dist-info/LICENSE +0 -31
  323. codex/_vendor/django_haystack-3.2.1.dist-info/METADATA +0 -98
  324. codex/_vendor/django_haystack-3.2.1.dist-info/RECORD +0 -97
  325. codex/_vendor/django_haystack-3.2.1.dist-info/REQUESTED +0 -0
  326. codex/_vendor/django_haystack-3.2.1.dist-info/WHEEL +0 -5
  327. codex/_vendor/django_haystack-3.2.1.dist-info/top_level.txt +0 -1
  328. codex/_vendor/haystack/__init__.py +0 -80
  329. codex/_vendor/haystack/admin.py +0 -163
  330. codex/_vendor/haystack/apps.py +0 -31
  331. codex/_vendor/haystack/backends/__init__.py +0 -1109
  332. codex/_vendor/haystack/backends/elasticsearch2_backend.py +0 -390
  333. codex/_vendor/haystack/backends/elasticsearch5_backend.py +0 -483
  334. codex/_vendor/haystack/backends/elasticsearch7_backend.py +0 -586
  335. codex/_vendor/haystack/backends/elasticsearch_backend.py +0 -1141
  336. codex/_vendor/haystack/backends/simple_backend.py +0 -132
  337. codex/_vendor/haystack/backends/solr_backend.py +0 -991
  338. codex/_vendor/haystack/backends/whoosh_backend.py +0 -1104
  339. codex/_vendor/haystack/constants.py +0 -57
  340. codex/_vendor/haystack/exceptions.py +0 -57
  341. codex/_vendor/haystack/fields.py +0 -562
  342. codex/_vendor/haystack/forms.py +0 -135
  343. codex/_vendor/haystack/generic_views.py +0 -141
  344. codex/_vendor/haystack/indexes.py +0 -548
  345. codex/_vendor/haystack/inputs.py +0 -169
  346. codex/_vendor/haystack/management/__init__.py +0 -0
  347. codex/_vendor/haystack/management/commands/__init__.py +0 -0
  348. codex/_vendor/haystack/management/commands/build_solr_schema.py +0 -187
  349. codex/_vendor/haystack/management/commands/clear_index.py +0 -67
  350. codex/_vendor/haystack/management/commands/haystack_info.py +0 -22
  351. codex/_vendor/haystack/management/commands/rebuild_index.py +0 -65
  352. codex/_vendor/haystack/management/commands/update_index.py +0 -438
  353. codex/_vendor/haystack/manager.py +0 -105
  354. codex/_vendor/haystack/models.py +0 -257
  355. codex/_vendor/haystack/panels.py +0 -89
  356. codex/_vendor/haystack/query.py +0 -771
  357. codex/_vendor/haystack/routers.py +0 -14
  358. codex/_vendor/haystack/signals.py +0 -88
  359. codex/_vendor/haystack/templates/panels/haystack.html +0 -33
  360. codex/_vendor/haystack/templates/search_configuration/schema.xml +0 -1056
  361. codex/_vendor/haystack/templates/search_configuration/solrconfig.xml +0 -1446
  362. codex/_vendor/haystack/templatetags/__init__.py +0 -0
  363. codex/_vendor/haystack/templatetags/highlight.py +0 -131
  364. codex/_vendor/haystack/templatetags/more_like_this.py +0 -119
  365. codex/_vendor/haystack/urls.py +0 -5
  366. codex/_vendor/haystack/utils/__init__.py +0 -84
  367. codex/_vendor/haystack/utils/app_loading.py +0 -34
  368. codex/_vendor/haystack/utils/geo.py +0 -71
  369. codex/_vendor/haystack/utils/highlighting.py +0 -165
  370. codex/_vendor/haystack/utils/loading.py +0 -374
  371. codex/_vendor/haystack/utils/log.py +0 -21
  372. codex/_vendor/haystack/version.py +0 -16
  373. codex/_vendor/haystack/views.py +0 -253
  374. codex/integrity.py +0 -492
  375. codex/librarian/search/merge.py +0 -86
  376. codex/librarian/search/version.py +0 -63
  377. codex/search/__init__.py +0 -1
  378. codex/search/backend.py +0 -524
  379. codex/search/backend_search.py +0 -229
  380. codex/search/engine.py +0 -33
  381. codex/search/indexes.py +0 -79
  382. codex/search/query.py +0 -67
  383. codex/search/writing.py +0 -180
  384. codex/static_root/assets/VCheckbox-Cko1sQK-.170726b3b8a1.js.br +0 -0
  385. codex/static_root/assets/VCheckbox-Cko1sQK-.170726b3b8a1.js.gz +0 -0
  386. codex/static_root/assets/VCheckbox-Cko1sQK-.js.br +0 -0
  387. codex/static_root/assets/VCheckbox-Cko1sQK-.js.gz +0 -0
  388. codex/static_root/assets/VCheckboxBtn-CO3-aqQL.c9b8062fd66f.js.br +0 -0
  389. codex/static_root/assets/VCheckboxBtn-CO3-aqQL.c9b8062fd66f.js.gz +0 -0
  390. codex/static_root/assets/VCheckboxBtn-CO3-aqQL.js.br +0 -0
  391. codex/static_root/assets/VCheckboxBtn-CO3-aqQL.js.gz +0 -0
  392. codex/static_root/assets/VCombobox-Bjp6lffE.caf59fba486e.js.br +0 -0
  393. codex/static_root/assets/VCombobox-Bjp6lffE.caf59fba486e.js.gz +0 -0
  394. codex/static_root/assets/VCombobox-Bjp6lffE.js.br +0 -0
  395. codex/static_root/assets/VCombobox-Bjp6lffE.js.gz +0 -0
  396. codex/static_root/assets/VDialog-BkpVGB70.6eea3ca762a5.js.br +0 -0
  397. codex/static_root/assets/VDialog-BkpVGB70.6eea3ca762a5.js.gz +0 -0
  398. codex/static_root/assets/VDialog-BkpVGB70.js.br +0 -0
  399. codex/static_root/assets/VDialog-BkpVGB70.js.gz +0 -0
  400. codex/static_root/assets/VExpansionPanels-Ci2-j8XX.9c55db4ef49e.js.br +0 -0
  401. codex/static_root/assets/VExpansionPanels-Ci2-j8XX.9c55db4ef49e.js.gz +0 -0
  402. codex/static_root/assets/VExpansionPanels-Ci2-j8XX.js.br +0 -0
  403. codex/static_root/assets/VExpansionPanels-Ci2-j8XX.js.gz +0 -0
  404. codex/static_root/assets/VRadioGroup-D3Py5BfQ.a4f25edb86d3.js.br +0 -0
  405. codex/static_root/assets/VRadioGroup-D3Py5BfQ.a4f25edb86d3.js.gz +0 -0
  406. codex/static_root/assets/VRadioGroup-D3Py5BfQ.js.br +0 -0
  407. codex/static_root/assets/VRadioGroup-D3Py5BfQ.js.gz +0 -0
  408. codex/static_root/assets/VSelect-DtvZsYZz.e98745d858eb.js.br +0 -0
  409. codex/static_root/assets/VSelect-DtvZsYZz.e98745d858eb.js.gz +0 -0
  410. codex/static_root/assets/VSelect-DtvZsYZz.js.br +0 -0
  411. codex/static_root/assets/VSelect-DtvZsYZz.js.gz +0 -0
  412. codex/static_root/assets/VSelectionControl-D6kmykQW.1e1fda62ceba.js.br +0 -0
  413. codex/static_root/assets/VSelectionControl-D6kmykQW.1e1fda62ceba.js.gz +0 -0
  414. codex/static_root/assets/VSelectionControl-D6kmykQW.js.br +0 -0
  415. codex/static_root/assets/VSelectionControl-D6kmykQW.js.gz +0 -0
  416. codex/static_root/assets/VSlideGroup-UGZWxpF5.360bdefcd215.js.br +0 -0
  417. codex/static_root/assets/VSlideGroup-UGZWxpF5.360bdefcd215.js.gz +0 -0
  418. codex/static_root/assets/VSlideGroup-UGZWxpF5.js.br +0 -0
  419. codex/static_root/assets/VSlideGroup-UGZWxpF5.js.gz +0 -0
  420. codex/static_root/assets/VTable-DXH_yQ0o.1149f56ad566.js.br +0 -0
  421. codex/static_root/assets/VTable-DXH_yQ0o.1149f56ad566.js.gz +0 -0
  422. codex/static_root/assets/VTable-DXH_yQ0o.js.br +0 -0
  423. codex/static_root/assets/VTable-DXH_yQ0o.js.gz +0 -0
  424. codex/static_root/assets/VTextField-Blqy56_L.26d8761e0155.js.br +0 -0
  425. codex/static_root/assets/VTextField-Blqy56_L.26d8761e0155.js.gz +0 -0
  426. codex/static_root/assets/VTextField-Blqy56_L.js.br +0 -0
  427. codex/static_root/assets/VTextField-Blqy56_L.js.gz +0 -0
  428. codex/static_root/assets/VWindowItem-C8_ovV7e.afbc08414765.js.br +0 -0
  429. codex/static_root/assets/VWindowItem-C8_ovV7e.afbc08414765.js.gz +0 -0
  430. codex/static_root/assets/VWindowItem-C8_ovV7e.js.br +0 -0
  431. codex/static_root/assets/VWindowItem-C8_ovV7e.js.gz +0 -0
  432. codex/static_root/assets/admin-DTRn8bBs.d031ea42d8d0.js.br +0 -0
  433. codex/static_root/assets/admin-DTRn8bBs.d031ea42d8d0.js.gz +0 -0
  434. codex/static_root/assets/admin-DTRn8bBs.js.br +0 -0
  435. codex/static_root/assets/admin-DTRn8bBs.js.gz +0 -0
  436. codex/static_root/assets/admin-drawer-panel-BaXFOcru.b1a44b05f482.js.br +0 -0
  437. codex/static_root/assets/admin-drawer-panel-BaXFOcru.b1a44b05f482.js.gz +0 -0
  438. codex/static_root/assets/admin-drawer-panel-BaXFOcru.js.br +0 -0
  439. codex/static_root/assets/admin-drawer-panel-BaXFOcru.js.gz +0 -0
  440. codex/static_root/assets/browser-BBpUyGmz.c1cb9e2d463b.js +0 -1
  441. codex/static_root/assets/browser-BBpUyGmz.c1cb9e2d463b.js.br +0 -0
  442. codex/static_root/assets/browser-BBpUyGmz.c1cb9e2d463b.js.gz +0 -0
  443. codex/static_root/assets/browser-BBpUyGmz.js +0 -1
  444. codex/static_root/assets/browser-BBpUyGmz.js.br +0 -0
  445. codex/static_root/assets/browser-BBpUyGmz.js.gz +0 -0
  446. codex/static_root/assets/browser-Binc3n9H.313722d27ca3.css +0 -1
  447. codex/static_root/assets/browser-Binc3n9H.313722d27ca3.css.br +0 -0
  448. codex/static_root/assets/browser-Binc3n9H.313722d27ca3.css.gz +0 -0
  449. codex/static_root/assets/browser-Binc3n9H.css +0 -1
  450. codex/static_root/assets/browser-Binc3n9H.css.br +0 -0
  451. codex/static_root/assets/browser-Binc3n9H.css.gz +0 -0
  452. codex/static_root/assets/change-password-dialog-Cebek1-c.aff2975e31f8.css +0 -1
  453. codex/static_root/assets/change-password-dialog-Cebek1-c.aff2975e31f8.css.br +0 -0
  454. codex/static_root/assets/change-password-dialog-Cebek1-c.aff2975e31f8.css.gz +0 -0
  455. codex/static_root/assets/change-password-dialog-Cebek1-c.css +0 -1
  456. codex/static_root/assets/change-password-dialog-Cebek1-c.css.br +0 -0
  457. codex/static_root/assets/change-password-dialog-Cebek1-c.css.gz +0 -0
  458. codex/static_root/assets/change-password-dialog-DlHoLhDF.76ab4a29bb9b.js +0 -1
  459. codex/static_root/assets/change-password-dialog-DlHoLhDF.76ab4a29bb9b.js.br +0 -0
  460. codex/static_root/assets/change-password-dialog-DlHoLhDF.76ab4a29bb9b.js.gz +0 -0
  461. codex/static_root/assets/change-password-dialog-DlHoLhDF.js +0 -1
  462. codex/static_root/assets/change-password-dialog-DlHoLhDF.js.br +0 -0
  463. codex/static_root/assets/change-password-dialog-DlHoLhDF.js.gz +0 -0
  464. codex/static_root/assets/confirm-dialog-D3_s2DQy.9dde66036c72.js.br +0 -0
  465. codex/static_root/assets/confirm-dialog-D3_s2DQy.9dde66036c72.js.gz +0 -0
  466. codex/static_root/assets/confirm-dialog-D3_s2DQy.js.br +0 -0
  467. codex/static_root/assets/confirm-dialog-D3_s2DQy.js.gz +0 -0
  468. codex/static_root/assets/datetime-column-BxC1Li9e.3dc314b3295d.js.br +0 -0
  469. codex/static_root/assets/datetime-column-BxC1Li9e.3dc314b3295d.js.gz +0 -0
  470. codex/static_root/assets/datetime-column-BxC1Li9e.js.br +0 -0
  471. codex/static_root/assets/datetime-column-BxC1Li9e.js.gz +0 -0
  472. codex/static_root/assets/filter-Bzk7x841.d0c3b602e62d.js.br +0 -0
  473. codex/static_root/assets/filter-Bzk7x841.d0c3b602e62d.js.gz +0 -0
  474. codex/static_root/assets/filter-Bzk7x841.js.br +0 -0
  475. codex/static_root/assets/filter-Bzk7x841.js.gz +0 -0
  476. codex/static_root/assets/flag-tab-C2bI5zq3.8f8c297600a6.js +0 -1
  477. codex/static_root/assets/flag-tab-C2bI5zq3.8f8c297600a6.js.br +0 -0
  478. codex/static_root/assets/flag-tab-C2bI5zq3.8f8c297600a6.js.gz +0 -0
  479. codex/static_root/assets/flag-tab-C2bI5zq3.js +0 -1
  480. codex/static_root/assets/flag-tab-C2bI5zq3.js.br +0 -0
  481. codex/static_root/assets/flag-tab-C2bI5zq3.js.gz +0 -0
  482. codex/static_root/assets/group-tab-5esH4lwX.a81fdd258117.js.br +0 -0
  483. codex/static_root/assets/group-tab-5esH4lwX.a81fdd258117.js.gz +0 -0
  484. codex/static_root/assets/group-tab-5esH4lwX.js.br +0 -0
  485. codex/static_root/assets/group-tab-5esH4lwX.js.gz +0 -0
  486. codex/static_root/assets/http-error-BTOBfcGY.52ced6f28420.js.br +0 -0
  487. codex/static_root/assets/http-error-BTOBfcGY.52ced6f28420.js.gz +0 -0
  488. codex/static_root/assets/http-error-BTOBfcGY.js.br +0 -0
  489. codex/static_root/assets/http-error-BTOBfcGY.js.gz +0 -0
  490. codex/static_root/assets/library-tab-DiPEdOF7.ece2d642a9dc.js.br +0 -0
  491. codex/static_root/assets/library-tab-DiPEdOF7.ece2d642a9dc.js.gz +0 -0
  492. codex/static_root/assets/library-tab-DiPEdOF7.js.br +0 -0
  493. codex/static_root/assets/library-tab-DiPEdOF7.js.gz +0 -0
  494. codex/static_root/assets/main-BPIPjzsc.66def8991e38.js +0 -6
  495. codex/static_root/assets/main-BPIPjzsc.66def8991e38.js.br +0 -0
  496. codex/static_root/assets/main-BPIPjzsc.66def8991e38.js.gz +0 -0
  497. codex/static_root/assets/main-BPIPjzsc.js +0 -6
  498. codex/static_root/assets/main-BPIPjzsc.js.br +0 -0
  499. codex/static_root/assets/main-BPIPjzsc.js.gz +0 -0
  500. codex/static_root/assets/pager-full-pdf-CiyC6Al9.278b9978f36f.js +0 -1
  501. codex/static_root/assets/pager-full-pdf-CiyC6Al9.278b9978f36f.js.br +0 -0
  502. codex/static_root/assets/pager-full-pdf-CiyC6Al9.278b9978f36f.js.gz +0 -0
  503. codex/static_root/assets/pager-full-pdf-CiyC6Al9.js +0 -1
  504. codex/static_root/assets/pager-full-pdf-CiyC6Al9.js.br +0 -0
  505. codex/static_root/assets/pager-full-pdf-CiyC6Al9.js.gz +0 -0
  506. codex/static_root/assets/pagination-toolbar-C45-onwe.4722195bb60b.css.br +0 -0
  507. codex/static_root/assets/pagination-toolbar-C45-onwe.4722195bb60b.css.gz +0 -0
  508. codex/static_root/assets/pagination-toolbar-C45-onwe.css.br +0 -0
  509. codex/static_root/assets/pagination-toolbar-C45-onwe.css.gz +0 -0
  510. codex/static_root/assets/pagination-toolbar-CkIzuyx1.00c354a82e6e.js.br +0 -0
  511. codex/static_root/assets/pagination-toolbar-CkIzuyx1.00c354a82e6e.js.gz +0 -0
  512. codex/static_root/assets/pagination-toolbar-CkIzuyx1.js.br +0 -0
  513. codex/static_root/assets/pagination-toolbar-CkIzuyx1.js.gz +0 -0
  514. codex/static_root/assets/pdf-doc-BjlRPuf4.0f056fa321b6.js.br +0 -0
  515. codex/static_root/assets/pdf-doc-BjlRPuf4.0f056fa321b6.js.gz +0 -0
  516. codex/static_root/assets/pdf-doc-BjlRPuf4.js.br +0 -0
  517. codex/static_root/assets/pdf-doc-BjlRPuf4.js.gz +0 -0
  518. codex/static_root/assets/reader-_stAWL-4.5089e9144795.css +0 -1
  519. codex/static_root/assets/reader-_stAWL-4.5089e9144795.css.br +0 -0
  520. codex/static_root/assets/reader-_stAWL-4.5089e9144795.css.gz +0 -0
  521. codex/static_root/assets/reader-_stAWL-4.css +0 -1
  522. codex/static_root/assets/reader-_stAWL-4.css.br +0 -0
  523. codex/static_root/assets/reader-_stAWL-4.css.gz +0 -0
  524. codex/static_root/assets/reader-ucxnLi2K.d0fbce0f03c1.js +0 -2
  525. codex/static_root/assets/reader-ucxnLi2K.d0fbce0f03c1.js.br +0 -0
  526. codex/static_root/assets/reader-ucxnLi2K.d0fbce0f03c1.js.gz +0 -0
  527. codex/static_root/assets/reader-ucxnLi2K.js +0 -2
  528. codex/static_root/assets/reader-ucxnLi2K.js.br +0 -0
  529. codex/static_root/assets/reader-ucxnLi2K.js.gz +0 -0
  530. codex/static_root/assets/relation-chips-CUSatZET.a58031ff8141.js.br +0 -0
  531. codex/static_root/assets/relation-chips-CUSatZET.a58031ff8141.js.gz +0 -0
  532. codex/static_root/assets/relation-chips-CUSatZET.js.br +0 -0
  533. codex/static_root/assets/relation-chips-CUSatZET.js.gz +0 -0
  534. codex/static_root/assets/settings-drawer-BSHTAsJ9.1d07ce084fc9.js.br +0 -0
  535. codex/static_root/assets/settings-drawer-BSHTAsJ9.1d07ce084fc9.js.gz +0 -0
  536. codex/static_root/assets/settings-drawer-BSHTAsJ9.js.br +0 -0
  537. codex/static_root/assets/settings-drawer-BSHTAsJ9.js.gz +0 -0
  538. codex/static_root/assets/stats-tab-BXGisn5N.9b7a71e7fe28.css.br +0 -0
  539. codex/static_root/assets/stats-tab-BXGisn5N.9b7a71e7fe28.css.gz +0 -0
  540. codex/static_root/assets/stats-tab-BXGisn5N.css.br +0 -0
  541. codex/static_root/assets/stats-tab-BXGisn5N.css.gz +0 -0
  542. codex/static_root/assets/stats-tab-DKXVB2Cc.0a3de58bf5ee.js +0 -1
  543. codex/static_root/assets/stats-tab-DKXVB2Cc.0a3de58bf5ee.js.br +0 -0
  544. codex/static_root/assets/stats-tab-DKXVB2Cc.0a3de58bf5ee.js.gz +0 -0
  545. codex/static_root/assets/stats-tab-DKXVB2Cc.js +0 -1
  546. codex/static_root/assets/stats-tab-DKXVB2Cc.js.br +0 -0
  547. codex/static_root/assets/stats-tab-DKXVB2Cc.js.gz +0 -0
  548. codex/static_root/assets/task-tab-NORFAa9p.97e07e366ddd.js.br +0 -0
  549. codex/static_root/assets/task-tab-NORFAa9p.97e07e366ddd.js.gz +0 -0
  550. codex/static_root/assets/task-tab-NORFAa9p.js.br +0 -0
  551. codex/static_root/assets/task-tab-NORFAa9p.js.gz +0 -0
  552. codex/static_root/assets/unauthorized-RHaQZRfr.a234e9403f60.js +0 -1
  553. codex/static_root/assets/unauthorized-RHaQZRfr.a234e9403f60.js.br +0 -0
  554. codex/static_root/assets/unauthorized-RHaQZRfr.a234e9403f60.js.gz +0 -0
  555. codex/static_root/assets/unauthorized-RHaQZRfr.js +0 -1
  556. codex/static_root/assets/unauthorized-RHaQZRfr.js.br +0 -0
  557. codex/static_root/assets/unauthorized-RHaQZRfr.js.gz +0 -0
  558. codex/static_root/assets/unauthorized-muDsv-rC.2166ec8b3a32.css.br +0 -0
  559. codex/static_root/assets/unauthorized-muDsv-rC.2166ec8b3a32.css.gz +0 -0
  560. codex/static_root/assets/unauthorized-muDsv-rC.css.br +0 -0
  561. codex/static_root/assets/unauthorized-muDsv-rC.css.gz +0 -0
  562. codex/static_root/assets/user-tab-CHbyN1EW.e7206db08680.js.br +0 -0
  563. codex/static_root/assets/user-tab-CHbyN1EW.e7206db08680.js.gz +0 -0
  564. codex/static_root/assets/user-tab-CHbyN1EW.js.br +0 -0
  565. codex/static_root/assets/user-tab-CHbyN1EW.js.gz +0 -0
  566. codex/static_root/js/choices-admin.1a20a5648f20.json +0 -1
  567. codex/static_root/js/choices-admin.1a20a5648f20.json.br +0 -0
  568. codex/static_root/js/choices-admin.1a20a5648f20.json.gz +0 -0
  569. codex/static_root/manifest.0fe31a6cb99f.json +0 -635
  570. codex/static_root/manifest.0fe31a6cb99f.json.br +0 -0
  571. codex/static_root/manifest.0fe31a6cb99f.json.gz +0 -0
  572. codex/templates/search/indexes/codex/comic_text.txt +0 -47
  573. codex/views/browser/filters/search.py +0 -196
  574. {codex-1.6.19.dist-info → codex-1.7.0a0.dist-info}/LICENSE +0 -0
  575. {codex-1.6.19.dist-info → codex-1.7.0a0.dist-info}/WHEEL +0 -0
  576. {codex-1.6.19.dist-info → codex-1.7.0a0.dist-info}/entry_points.txt +0 -0
codex/_vendor/__init__.py DELETED
File without changes
@@ -1,127 +0,0 @@
1
- Primary Authors:
2
-
3
- * Daniel Lindsley
4
- * Matt Croydon (some documentation, sanity checks and the sweet name)
5
- * Travis Cline (the original SQ implementation, improvements to ModelSearchIndex)
6
- * David Sauve (notanumber) for the Xapian backend, the simple backend and various patches.
7
- * Jannis Leidel (jezdez)
8
- * Chris Adams (acdha)
9
- * Justin Caratzas (bigjust)
10
- * Andrew Schoen (andrewschoen)
11
- * Dan Watson (dcwatson)
12
- * Matt Woodward (mpwoodward)
13
- * Alex Vidal (avidal)
14
- * Zach Smith (zmsmith)
15
- * Stefan Wehrmeyer (stefanw)
16
- * George Hickman (ghickman)
17
- * Ben Spaulding (benspaulding)
18
-
19
-
20
- Thanks to
21
- * Jacob Kaplan-Moss & Joseph Kocherhans for the original implementation of
22
- djangosearch, of which portions were used, as well as basic API feedback.
23
- * Christian Metts for designing the logo and building a better site.
24
- * Nathan Borror for testing and advanced form usage.
25
- * Malcolm Tredinnick for API feedback.
26
- * Mediaphormedia for funding the development on More Like This and faceting.
27
- * Travis Cline for API feedback, Git help and improvements to the reindex command.
28
- * Brian Rosner for various patches.
29
- * Richard Boulton for feedback and suggestions.
30
- * Cyberdelia for feedback and patches.
31
- * Ask Solem for for patching the setup.py.
32
- * Ben Spaulding for feedback and documentation patches.
33
- * smulloni for various patches.
34
- * JoeGermuska for various patches.
35
- * SmileyChris for various patches.
36
- * sk1p for various patches.
37
- * Ryszard Szopa (ryszard) for various patches.
38
- * Patryk Zawadzki (patrys) for various patches and feedback.
39
- * Frank Wiles for documentation patches.
40
- * Chris Adams (acdha) for various patches.
41
- * Kyle MacFarlane for various patches.
42
- * Alex Gaynor (alex) for help with handling deferred models with More Like This.
43
- * RobertGawron for a patch to the Highlighter.
44
- * Simon Willison (simonw) for various proposals and patches.
45
- * Ben Firshman (bfirsh) for faceting improvements and suggestions.
46
- * Peter Bengtsson for a patch regarding passing a customized site.
47
- * Sam Bull (osirius) for a patch regarding initial data on SearchForms.
48
- * slai for a patch regarding Whoosh and fetching all documents of a certain model type.
49
- * alanwj for a patch regarding Whoosh and empty MultiValueFields.
50
- * alanzoppa for a patch regarding highlighting.
51
- * piquadrat for a patch regarding the more_like_this template tag.
52
- * dedsm for a patch regarding the pickling of SearchResult objects.
53
- * EmilStenstrom for a patch to the Highlighter.
54
- * symroe for a patch regarding the more_like_this template tag.
55
- * ghostrocket for a patch regarding the simple backend.
56
- * Rob Hudson (robhudson) for improvements to the admin search.
57
- * apollo13 for simplifying ``SearchForm.__init__``.
58
- * Carl Meyer (carljm) for a patch regarding character primary keys.
59
- * oyiptong for a patch regarding pickling.
60
- * alfredo for a patch to generate epub docs.
61
- * Luke Hatcher (lukeman) for documentation patches.
62
- * Trey Hunner (treyhunner) for a Whoosh field boosting patch.
63
- * Kent Gormat of Retail Catalyst for funding the development of multiple index support.
64
- * Gidsy for funding the initial geospatial implementation
65
- * CMGdigital for funding the development on:
66
- * a multiprocessing-enabled version of ``update_index``.
67
- * the addition of ``--start/--end`` options in ``update_index``.
68
- * the ability to specify both apps & models to ``update_index``.
69
- * A significant portion of the geospatial feature.
70
- * A significant portion of the input types feature.
71
- * Aram Dulyan (Aramgutang) for fixing the included admin class to be Django 1.4 compatible.
72
- * Honza Kral (HonzaKral) for various Elasticsearch tweaks & testing.
73
- * Alex Vidal (avidal) for a patch allowing developers to override the queryset used for update operations.
74
- * Igor Támara (ikks) for a patch related to Unicode ``verbose_name_plural``.
75
- * Dan Helfman (witten) for a patch related to highlighting.
76
- * Matt DeBoard for refactor of ``SolrSearchBackend.search`` method to allow simpler extension of the class.
77
- * Rodrigo Guzman (rz) for a fix to query handling in the ``simple`` backend.
78
- * Martin J. Laubach (mjl) for fixing the logic used when combining querysets
79
- * Eric Holscher (ericholscher) for a docs fix.
80
- * Erik Rose (erikrose) for a quick pyelasticsearch-compatibility patch
81
- * Stefan Wehrmeyer (stefanw) for a simple search filter fix
82
- * Dan Watson (dcwatson) for various patches.
83
- * Andrew Schoen (andrewschoen) for the addition of ``HAYSTACK_IDENTIFIER_METHOD``
84
- * Pablo SEMINARIO (pabluk) for a docs fix, and a fix in the ElasticSearch backend.
85
- * Eric Thurgood (ethurgood) for a import fix in the Elasticssearch backend.
86
- * Revolution Systems & The Python Software Foundation for funding a significant portion of the port to Python 3!
87
- * Artem Kostiuk (postatum) for patch allowing to search for slash character in ElasticSearch since Lucene 4.0.
88
- * Luis Barrueco (luisbarrueco) for a simple fix regarding updating indexes using multiple backends.
89
- * Szymon Teżewski (jasisz) for an update to the bounding-box calculation for spatial queries
90
- * Chris Wilson (qris) and Orlando Fiol (overflow) for an update allowing the use of multiple order_by()
91
- fields with Whoosh as long as they share a consistent sort direction
92
- * Steven Skoczen (@skoczen) for an ElasticSearch bug fix
93
- * @Xaroth for updating the app loader to be compatible with Django 1.7
94
- * Jaroslav Gorjatsev (jarig) for a bugfix with index_fieldname
95
- * Dirk Eschler (@deschler) for app loader Django 1.7 compatibility fixes
96
- * Wictor (wicol) for a patch improving the error message given when model_attr references a non-existent
97
- field
98
- * Pierre Dulac (dulaccc) for a patch updating distance filters for ElasticSearch 1.x
99
- * Andrei Fokau (andreif) for adding support for ``SQ`` in ``SearchQuerySet.narrow()``
100
- * Phill Tornroth (phill-tornroth) for several patches improving UnifiedIndex and ElasticSearch support
101
- * Philippe Luickx (philippeluickx) for documenting how to provide backend-specific facet options
102
- * Felipe Prenholato (@chronossc) for a patch making it easy to exclude documents from indexing using custom logic
103
- * Alfredo Armanini (@phingage) for a patch fixing compatibility with database API changes in Django 1.8
104
- * Ben Spaulding (@benspaulding) for many updates for Django 1.8 support
105
- * Troy Grosfield (@troygrosfield) for fixing the test runner for Django 1.8
106
- * Ilan Steemers (@Koed00) for fixing Django 1.9 deprecation warnings
107
- * Ana Carolina (@anacarolinats) and Steve Bussetti (@sbussetti) for adding the ``fuzzy`` operator to
108
- SearchQuerySet
109
- * Tadas Dailyda (@skirsdeda) for various patches
110
- * Craig de Stigter (@craigds) for a patch fixing concurrency issues when building UnifiedIndex
111
- * Claude Paroz (@claudep) for Django 1.9 support
112
- * Chris Brooke (@chrisbrooke) for patching around a backwards-incompatible change in ElasticSearch 2
113
- * Gilad Beeri (@giladbeeri) for adding retries when updating a backend
114
- * Arjen Verstoep (@terr) for a patch that allows attribute lookups through Django ManyToManyField relationships
115
- * Tim Babych (@tymofij) for enabling backend-specific parameters in ``.highlight()``
116
- * Antony Raj (@antonyr) for adding endswith input type and fixing contains input type
117
- * Morgan Aubert (@ellmetha) for Django 1.10 support
118
- * João Junior (@joaojunior) and Bruno Marques (@ElSaico) for Elasticsearch 2.x support
119
- * Alex Tomkins (@tomkins) for various patches
120
- * Martin Pauly (@mpauly) for Django 2.0 support
121
- * Ryan Jarvis (@cabalist) for some code cleanup
122
- * Dulmandakh Sukhbaatar (@dulmandakh) for GitHub Actions support, and flake8, black, isort checks.
123
- * Deniz Dogan (@denizdogan) for adding support for the ``analyzer`` parameter for the Whoosh backend
124
- * parruc for basic Whoosh faceting support
125
- * Jens Kadenbach (audax) for updating and testing Whoosh faceting support
126
- * Alejandro Sedeño (asedeno) trying the Whoosh faceting thing again
127
- * Fábio Piovam (fabiopiovam) for date_facet on Solr 6.6+
@@ -1,31 +0,0 @@
1
- Copyright (c) 2009-2013, Daniel Lindsley.
2
- All rights reserved.
3
-
4
- Redistribution and use in source and binary forms, with or without modification,
5
- are permitted provided that the following conditions are met:
6
-
7
- 1. Redistributions of source code must retain the above copyright notice,
8
- this list of conditions and the following disclaimer.
9
-
10
- 2. Redistributions in binary form must reproduce the above copyright
11
- notice, this list of conditions and the following disclaimer in the
12
- documentation and/or other materials provided with the distribution.
13
-
14
- 3. Neither the name of Haystack nor the names of its contributors may be used
15
- to endorse or promote products derived from this software without
16
- specific prior written permission.
17
-
18
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
22
- ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24
- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
25
- ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
-
29
- ---
30
-
31
- Prior to April 17, 2009, this software was released under the MIT license.
@@ -1,98 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: django-haystack
3
- Version: 3.2.1
4
- Summary: Pluggable search for Django.
5
- Home-page: http://haystacksearch.org/
6
- Author: Daniel Lindsley
7
- Author-email: daniel@toastdriven.com
8
- Project-URL: Documentation, https://django-haystack.readthedocs.io
9
- Project-URL: Source, https://github.com/django-haystack/django-haystack
10
- Classifier: Development Status :: 5 - Production/Stable
11
- Classifier: Environment :: Web Environment
12
- Classifier: Framework :: Django
13
- Classifier: Framework :: Django :: 2.2
14
- Classifier: Framework :: Django :: 3.1
15
- Classifier: Framework :: Django :: 3.2
16
- Classifier: Intended Audience :: Developers
17
- Classifier: License :: OSI Approved :: BSD License
18
- Classifier: Operating System :: OS Independent
19
- Classifier: Programming Language :: Python
20
- Classifier: Programming Language :: Python :: 3
21
- Classifier: Programming Language :: Python :: 3.6
22
- Classifier: Programming Language :: Python :: 3.7
23
- Classifier: Programming Language :: Python :: 3.8
24
- Classifier: Programming Language :: Python :: 3.9
25
- Classifier: Topic :: Utilities
26
- License-File: LICENSE
27
- License-File: AUTHORS
28
- Requires-Dist: Django >=2.2
29
- Provides-Extra: elasticsearch
30
- Requires-Dist: elasticsearch <8,>=5 ; extra == 'elasticsearch'
31
-
32
- .. image:: https://github.com/django-haystack/django-haystack/actions/workflows/test.yml/badge.svg
33
- :target: https://github.com/django-haystack/django-haystack/actions/workflows/test.yml
34
- .. image:: https://img.shields.io/pypi/v/django-haystack.svg
35
- :target: https://pypi.python.org/pypi/django-haystack/
36
- .. image:: https://img.shields.io/pypi/pyversions/django-haystack.svg
37
- :target: https://pypi.python.org/pypi/django-haystack/
38
- .. image:: https://img.shields.io/pypi/dm/django-haystack.svg
39
- :target: https://pypi.python.org/pypi/django-haystack/
40
- .. image:: https://readthedocs.org/projects/django-haystack/badge/
41
- :target: https://django-haystack.readthedocs.io/
42
- .. image:: https://img.shields.io/badge/code%20style-black-000.svg
43
- :target: https://github.com/psf/black
44
- .. image:: https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat&labelColor=ef8336
45
- :target: https://pycqa.github.io/isort/
46
-
47
- ========
48
- Haystack
49
- ========
50
-
51
- :author: Daniel Lindsley
52
- :date: 2013/07/28
53
-
54
- Haystack provides modular search for Django. It features a unified, familiar
55
- API that allows you to plug in different search backends (such as Solr_,
56
- Elasticsearch_, Whoosh_, Xapian_, etc.) without having to modify your code.
57
-
58
- .. _Solr: http://lucene.apache.org/solr/
59
- .. _Elasticsearch: https://www.elastic.co/products/elasticsearch
60
- .. _Whoosh: https://github.com/mchaput/whoosh/
61
- .. _Xapian: http://xapian.org/
62
-
63
- Haystack is BSD licensed, plays nicely with third-party app without needing to
64
- modify the source and supports advanced features like faceting, More Like This,
65
- highlighting, spatial search and spelling suggestions.
66
-
67
- You can find more information at http://haystacksearch.org/.
68
-
69
-
70
- Getting Help
71
- ============
72
-
73
- There is a mailing list (http://groups.google.com/group/django-haystack/)
74
- available for general discussion and an IRC channel (#haystack on
75
- irc.freenode.net).
76
-
77
-
78
- Documentation
79
- =============
80
-
81
- * Development version: http://docs.haystacksearch.org/
82
- * v2.8.X: https://django-haystack.readthedocs.io/en/v2.8.1/
83
- * v2.7.X: https://django-haystack.readthedocs.io/en/v2.7.0/
84
- * v2.6.X: https://django-haystack.readthedocs.io/en/v2.6.0/
85
-
86
- See the `changelog <docs/changelog.rst>`_
87
-
88
- Requirements
89
- ============
90
-
91
- Haystack has a relatively easily-met set of requirements.
92
-
93
- * Python 3.6+
94
- * A supported version of Django: https://www.djangoproject.com/download/#supported-versions
95
-
96
- Additionally, each backend has its own requirements. You should refer to
97
- https://django-haystack.readthedocs.io/en/latest/installing_search_engines.html for more
98
- details.
@@ -1,97 +0,0 @@
1
- django_haystack-3.2.1.dist-info/AUTHORS,sha256=-qP83VFWUrTglPWF6Evq20NYZFczHBpkvhJzVkDlZas,8312
2
- django_haystack-3.2.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
3
- django_haystack-3.2.1.dist-info/LICENSE,sha256=3Sx8FiBRaVZdKS6RBtnPXyWr5DWBnasBZRS29cfr6yY,1607
4
- django_haystack-3.2.1.dist-info/METADATA,sha256=zsOhWHg4CiJlx6NreYURaWioi1omH_F6UbfHl9Jt9f4,3779
5
- django_haystack-3.2.1.dist-info/RECORD,,
6
- django_haystack-3.2.1.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
- django_haystack-3.2.1.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
8
- django_haystack-3.2.1.dist-info/top_level.txt,sha256=MzIzV5bHYjAz5eYt06OxWM1qawy39pWK9ZPvm27RKTI,9
9
- haystack/__init__.py,sha256=qapovFNpOb1Yf0nq8PB_cpB66yKBXsrFR99ZC-iKMOU,2689
10
- haystack/__pycache__/__init__.cpython-311.pyc,,
11
- haystack/__pycache__/admin.cpython-311.pyc,,
12
- haystack/__pycache__/apps.cpython-311.pyc,,
13
- haystack/__pycache__/constants.cpython-311.pyc,,
14
- haystack/__pycache__/exceptions.cpython-311.pyc,,
15
- haystack/__pycache__/fields.cpython-311.pyc,,
16
- haystack/__pycache__/forms.cpython-311.pyc,,
17
- haystack/__pycache__/generic_views.cpython-311.pyc,,
18
- haystack/__pycache__/indexes.cpython-311.pyc,,
19
- haystack/__pycache__/inputs.cpython-311.pyc,,
20
- haystack/__pycache__/manager.cpython-311.pyc,,
21
- haystack/__pycache__/models.cpython-311.pyc,,
22
- haystack/__pycache__/panels.cpython-311.pyc,,
23
- haystack/__pycache__/query.cpython-311.pyc,,
24
- haystack/__pycache__/routers.cpython-311.pyc,,
25
- haystack/__pycache__/signals.cpython-311.pyc,,
26
- haystack/__pycache__/urls.cpython-311.pyc,,
27
- haystack/__pycache__/version.cpython-311.pyc,,
28
- haystack/__pycache__/views.cpython-311.pyc,,
29
- haystack/admin.py,sha256=iXH6Dm5K3OcAFZWYkL0katH-2UpDEusJKrtET_CHlpQ,6183
30
- haystack/apps.py,sha256=BdB4aC-ntDhGa5VwYrMtQ1KOVlZnE9Qkltglv7oSdBA,963
31
- haystack/backends/__init__.py,sha256=bVqWoh1Oc8kretBjBZlxOEco7Uzg5QLhayYTvhQYJFU,36622
32
- haystack/backends/__pycache__/__init__.cpython-311.pyc,,
33
- haystack/backends/__pycache__/elasticsearch2_backend.cpython-311.pyc,,
34
- haystack/backends/__pycache__/elasticsearch5_backend.cpython-311.pyc,,
35
- haystack/backends/__pycache__/elasticsearch7_backend.cpython-311.pyc,,
36
- haystack/backends/__pycache__/elasticsearch_backend.cpython-311.pyc,,
37
- haystack/backends/__pycache__/simple_backend.cpython-311.pyc,,
38
- haystack/backends/__pycache__/solr_backend.cpython-311.pyc,,
39
- haystack/backends/__pycache__/whoosh_backend.cpython-311.pyc,,
40
- haystack/backends/elasticsearch2_backend.py,sha256=A7of9VL_PIWX2wquPvmc-iuMJI9sK0VtscxGCX6zQ7Q,13882
41
- haystack/backends/elasticsearch5_backend.py,sha256=vpPoYM3bWJa8CLiCAagogqn7lZNAAPHDr8gpWk6Lnu8,17457
42
- haystack/backends/elasticsearch7_backend.py,sha256=9XWs35VitrrwSBQbBDShVBGpy1eoTpjg6nGtCs5fDfw,20528
43
- haystack/backends/elasticsearch_backend.py,sha256=RPfp3W2vFMqA6090FfO0iv5SHE1MGKJYy41EFDEWDwU,39695
44
- haystack/backends/simple_backend.py,sha256=9BUCecd8pV3DnZX_DTMeVtuSjUz49reqLNm0kxtDvOw,3927
45
- haystack/backends/solr_backend.py,sha256=JkF5SVNtXoTves6HcKiqyhuTf3G3DGAEAXEs8qNO5D8,35754
46
- haystack/backends/whoosh_backend.py,sha256=6BcewRoUpSMQOxWEp4c3gKtKs6rpkKqJJXtvhvqxjp4,38346
47
- haystack/constants.py,sha256=7GzXDQUmvs2vJXfMNhA4KxNC8ZlqcM2zU5Ja6ztK7Ek,1612
48
- haystack/exceptions.py,sha256=s5v6As8amA_WdBhNooLefsEvP40137Ev73gnwbLoGso,1138
49
- haystack/fields.py,sha256=6Csn8oCfUyryd64w2gKiP9ZlvdG6XvBpMWF4JkslXpg,15708
50
- haystack/forms.py,sha256=jkzyhWe5LetMAGSO9T1MOMZEgUZ7pKm84nBW6n0CSKk,3994
51
- haystack/generic_views.py,sha256=MSB48hnnT2Xk8gjxQmWboxTEevxzqezGIqYyUMgIi10,4035
52
- haystack/indexes.py,sha256=V8ltof9_twWvCP9f0d45paUZ2J6lXq9ioQm0o9c-nJ4,18702
53
- haystack/inputs.py,sha256=imA2ScfNfQ391djpvPvw4TZP_Pv2rZUDOnaPTPieNC4,4452
54
- haystack/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
- haystack/management/__pycache__/__init__.cpython-311.pyc,,
56
- haystack/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
- haystack/management/commands/__pycache__/__init__.cpython-311.pyc,,
58
- haystack/management/commands/__pycache__/build_solr_schema.cpython-311.pyc,,
59
- haystack/management/commands/__pycache__/clear_index.cpython-311.pyc,,
60
- haystack/management/commands/__pycache__/haystack_info.cpython-311.pyc,,
61
- haystack/management/commands/__pycache__/rebuild_index.cpython-311.pyc,,
62
- haystack/management/commands/__pycache__/update_index.cpython-311.pyc,,
63
- haystack/management/commands/build_solr_schema.py,sha256=oD4XowbDmgizE7djWHnPrIkKNdkuW5yoS9c4ZYZthfw,7236
64
- haystack/management/commands/clear_index.py,sha256=s-L7yXf5IyRZzXRFQpP7OMZI4IEEwUpoaj4uSOwlefE,2265
65
- haystack/management/commands/haystack_info.py,sha256=LfN5UeL5OBAd4AQ5zrzbdcsBM3S3R63yPu_XkP140zU,766
66
- haystack/management/commands/rebuild_index.py,sha256=J-wiZ6AhCuIDmq83-hXnPA16EG2B5wEi22kkvQT8SFE,2177
67
- haystack/management/commands/update_index.py,sha256=PIvMLJzR16VkEYJPBzDGHTAZgQLN1_OBOWp1vwMIm1s,16129
68
- haystack/manager.py,sha256=mxIpJDhmLpkK6hMhCpK-FiLyO-hn1Mq4f0inShwe_68,3569
69
- haystack/models.py,sha256=UjvWBesf2OECuVQ7C_B3wyVz8pC7j6zmBVCKy6PH4T4,8819
70
- haystack/panels.py,sha256=wtfYNOsGaNTOUMRswaRV8faaE4UKw5eY6mmAavtFt4A,2823
71
- haystack/query.py,sha256=W58XUNZSI1hzZELUadjPGBHFUrKwPVADfPqdGll557U,26126
72
- haystack/routers.py,sha256=vCoUf3XhktWW53l67aipQlfkaUVUhrspivWXHyDUeao,272
73
- haystack/signals.py,sha256=tPELLHsHF1mHA78AYIhn1U3tANWLC4BrfSrayNgPbH8,3054
74
- haystack/templates/panels/haystack.html,sha256=0dlea0f67ONaBoIVGyi0hepE_Ce0w1h-duVm3V3NcD8,1353
75
- haystack/templates/search_configuration/schema.xml,sha256=t0LVmKq5nNIuPYbt3030xQWYMV1rd_NRI4rI1hoE_Yc,58455
76
- haystack/templates/search_configuration/solrconfig.xml,sha256=v5zieZDwjg5gnHNeCikzwK6-8HxtXsB5ZpYXzIdvdLM,57423
77
- haystack/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
78
- haystack/templatetags/__pycache__/__init__.cpython-311.pyc,,
79
- haystack/templatetags/__pycache__/highlight.cpython-311.pyc,,
80
- haystack/templatetags/__pycache__/more_like_this.cpython-311.pyc,,
81
- haystack/templatetags/highlight.py,sha256=x5asWDgB8HKHTLu14me1G2D1FYg5cWFoQLmiPbePmWY,4320
82
- haystack/templatetags/more_like_this.py,sha256=3cfA0qpkt5VsMFjsj7sUg7sDEgDw7ODMtkTDu062YjU,3438
83
- haystack/urls.py,sha256=9X83KVMTiBf-uXW_aXsUONQK14mj_RANcdd4UhnhnH8,132
84
- haystack/utils/__init__.py,sha256=QpJWvr8J87UBKHJH18sx12TFZ3zIefP66mhH3TSa0g0,2519
85
- haystack/utils/__pycache__/__init__.cpython-311.pyc,,
86
- haystack/utils/__pycache__/app_loading.cpython-311.pyc,,
87
- haystack/utils/__pycache__/geo.cpython-311.pyc,,
88
- haystack/utils/__pycache__/highlighting.cpython-311.pyc,,
89
- haystack/utils/__pycache__/loading.cpython-311.pyc,,
90
- haystack/utils/__pycache__/log.cpython-311.pyc,,
91
- haystack/utils/app_loading.py,sha256=rbcDNESN78x3HRPVdP5uRR-WkTa5w5lbgucxO1uytaM,1030
92
- haystack/utils/geo.py,sha256=4OoZp0pvVfcXKy2Q6xk_UxNjqJsCExf5CDZBFunRVhY,2036
93
- haystack/utils/highlighting.py,sha256=vS2YovJ27qPLQhIOxEmmOwXUqpOG8vCqOiAcK-ZSFXk,5645
94
- haystack/utils/loading.py,sha256=mh_zttL2W2BHn7vTQB9arHaQSgeMn4CPEcdDFsaDMpI,12818
95
- haystack/utils/log.py,sha256=qTsLR_vWauLfhZjdgEzqlY3WqhkI4qHvcYVgau9z7yM,468
96
- haystack/version.py,sha256=70AepeDTySCZqwIgESwm9fNpAAurlRUMCJs8phEMJMM,411
97
- haystack/views.py,sha256=HYA2-YYtd32l_53ZKv6x7TTX6pdfH6ZulvRe0lamQ2o,6925
File without changes
@@ -1,5 +0,0 @@
1
- Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.42.0)
3
- Root-Is-Purelib: true
4
- Tag: py3-none-any
5
-
@@ -1,80 +0,0 @@
1
- import django
2
- from django.conf import settings
3
- from django.core.exceptions import ImproperlyConfigured
4
- from pkg_resources import DistributionNotFound, get_distribution, parse_version
5
-
6
- from ..haystack.constants import DEFAULT_ALIAS
7
- from ..haystack.utils import loading
8
-
9
- __author__ = "Daniel Lindsley"
10
-
11
- try:
12
- pkg_distribution = get_distribution("django-haystack")
13
- __version__ = pkg_distribution.version
14
- version_info = pkg_distribution.parsed_version
15
- except DistributionNotFound:
16
- __version__ = "0.0.dev0"
17
- version_info = parse_version(__version__)
18
-
19
-
20
- if django.VERSION < (3, 2):
21
- # default_app_config is deprecated since django 3.2.
22
- default_app_config = "haystack.apps.HaystackConfig"
23
-
24
-
25
- # Help people clean up from 1.X.
26
- if hasattr(settings, "HAYSTACK_SITECONF"):
27
- raise ImproperlyConfigured(
28
- "The HAYSTACK_SITECONF setting is no longer used & can be removed."
29
- )
30
- if hasattr(settings, "HAYSTACK_SEARCH_ENGINE"):
31
- raise ImproperlyConfigured(
32
- "The HAYSTACK_SEARCH_ENGINE setting has been replaced with HAYSTACK_CONNECTIONS."
33
- )
34
- if hasattr(settings, "HAYSTACK_ENABLE_REGISTRATIONS"):
35
- raise ImproperlyConfigured(
36
- "The HAYSTACK_ENABLE_REGISTRATIONS setting is no longer used & can be removed."
37
- )
38
- if hasattr(settings, "HAYSTACK_INCLUDE_SPELLING"):
39
- raise ImproperlyConfigured(
40
- "The HAYSTACK_INCLUDE_SPELLING setting is now a per-backend setting"
41
- " & belongs in HAYSTACK_CONNECTIONS."
42
- )
43
-
44
-
45
- # Check the 2.X+ bits.
46
- if not hasattr(settings, "HAYSTACK_CONNECTIONS"):
47
- raise ImproperlyConfigured("The HAYSTACK_CONNECTIONS setting is required.")
48
- if DEFAULT_ALIAS not in settings.HAYSTACK_CONNECTIONS:
49
- raise ImproperlyConfigured(
50
- "The default alias '%s' must be included in the HAYSTACK_CONNECTIONS setting."
51
- % DEFAULT_ALIAS
52
- )
53
-
54
- # Load the connections.
55
- connections = loading.ConnectionHandler(settings.HAYSTACK_CONNECTIONS)
56
-
57
- # Just check HAYSTACK_ROUTERS setting validity, routers will be loaded lazily
58
- if hasattr(settings, "HAYSTACK_ROUTERS"):
59
- if not isinstance(settings.HAYSTACK_ROUTERS, (list, tuple)):
60
- raise ImproperlyConfigured(
61
- "The HAYSTACK_ROUTERS setting must be either a list or tuple."
62
- )
63
-
64
- # Load the router(s).
65
- connection_router = loading.ConnectionRouter()
66
-
67
-
68
- # Per-request, reset the ghetto query log.
69
- # Probably not extraordinarily thread-safe but should only matter when
70
- # DEBUG = True.
71
- def reset_search_queries(**kwargs):
72
- for conn in connections.all():
73
- if conn:
74
- conn.reset_queries()
75
-
76
-
77
- if settings.DEBUG:
78
- from django.core import signals as django_signals
79
-
80
- django_signals.request_started.connect(reset_search_queries)
@@ -1,163 +0,0 @@
1
- from django.contrib.admin.options import ModelAdmin, csrf_protect_m
2
- from django.contrib.admin.views.main import SEARCH_VAR, ChangeList
3
- from django.core.exceptions import PermissionDenied
4
- from django.core.paginator import InvalidPage, Paginator
5
- from django.shortcuts import render
6
- from django.utils.encoding import force_str
7
- from django.utils.translation import ngettext
8
-
9
- from ..haystack import connections
10
- from ..haystack.constants import DEFAULT_ALIAS
11
- from ..haystack.query import SearchQuerySet
12
- from ..haystack.utils import get_model_ct_tuple
13
-
14
-
15
- class SearchChangeList(ChangeList):
16
- def __init__(self, **kwargs):
17
- self.haystack_connection = kwargs.pop("haystack_connection", DEFAULT_ALIAS)
18
- super().__init__(**kwargs)
19
-
20
- def get_results(self, request):
21
- if SEARCH_VAR not in request.GET:
22
- return super().get_results(request)
23
-
24
- # Note that pagination is 0-based, not 1-based.
25
- sqs = (
26
- SearchQuerySet(self.haystack_connection)
27
- .models(self.model)
28
- .auto_query(request.GET[SEARCH_VAR])
29
- .load_all()
30
- )
31
-
32
- paginator = Paginator(sqs, self.list_per_page)
33
- # Get the number of objects, with admin filters applied.
34
- result_count = paginator.count
35
- full_result_count = (
36
- SearchQuerySet(self.haystack_connection).models(self.model).all().count()
37
- )
38
-
39
- can_show_all = result_count <= self.list_max_show_all
40
- multi_page = result_count > self.list_per_page
41
-
42
- # Get the list of objects to display on this page.
43
- try:
44
- result_list = paginator.page(self.page_num).object_list
45
- # Grab just the Django models, since that's what everything else is
46
- # expecting.
47
- result_list = [result.object for result in result_list]
48
- except InvalidPage:
49
- result_list = ()
50
-
51
- self.result_count = result_count
52
- self.full_result_count = full_result_count
53
- self.result_list = result_list
54
- self.can_show_all = can_show_all
55
- self.multi_page = multi_page
56
- self.paginator = paginator
57
-
58
-
59
- class SearchModelAdminMixin:
60
- # haystack connection to use for searching
61
- haystack_connection = DEFAULT_ALIAS
62
-
63
- @csrf_protect_m
64
- def changelist_view(self, request, extra_context=None):
65
- if not self.has_change_permission(request, None):
66
- raise PermissionDenied
67
-
68
- if SEARCH_VAR not in request.GET:
69
- # Do the usual song and dance.
70
- return super().changelist_view(request, extra_context)
71
-
72
- # Do a search of just this model and populate a Changelist with the
73
- # returned bits.
74
- indexed_models = (
75
- connections[self.haystack_connection]
76
- .get_unified_index()
77
- .get_indexed_models()
78
- )
79
-
80
- if self.model not in indexed_models:
81
- # Oops. That model isn't being indexed. Return the usual
82
- # behavior instead.
83
- return super().changelist_view(request, extra_context)
84
-
85
- # So. Much. Boilerplate.
86
- # Why copy-paste a few lines when you can copy-paste TONS of lines?
87
- list_display = list(self.list_display)
88
-
89
- kwargs = {
90
- "haystack_connection": self.haystack_connection,
91
- "request": request,
92
- "model": self.model,
93
- "list_display": list_display,
94
- "list_display_links": self.list_display_links,
95
- "list_filter": self.list_filter,
96
- "date_hierarchy": self.date_hierarchy,
97
- "search_fields": self.search_fields,
98
- "list_select_related": self.list_select_related,
99
- "list_per_page": self.list_per_page,
100
- "list_editable": self.list_editable,
101
- "list_max_show_all": self.list_max_show_all,
102
- "model_admin": self,
103
- }
104
- if hasattr(self, "get_sortable_by"): # Django 2.1+
105
- kwargs["sortable_by"] = self.get_sortable_by(request)
106
- changelist = SearchChangeList(**kwargs)
107
- changelist.formset = None
108
- media = self.media
109
-
110
- # Build the action form and populate it with available actions.
111
- # Check actions to see if any are available on this changelist
112
- actions = self.get_actions(request)
113
- if actions:
114
- action_form = self.action_form(auto_id=None)
115
- action_form.fields["action"].choices = self.get_action_choices(request)
116
- else:
117
- action_form = None
118
-
119
- selection_note = ngettext(
120
- "0 of %(count)d selected",
121
- "of %(count)d selected",
122
- len(changelist.result_list),
123
- )
124
- selection_note_all = ngettext(
125
- "%(total_count)s selected",
126
- "All %(total_count)s selected",
127
- changelist.result_count,
128
- )
129
-
130
- context = {
131
- "module_name": force_str(self.model._meta.verbose_name_plural),
132
- "selection_note": selection_note % {"count": len(changelist.result_list)},
133
- "selection_note_all": selection_note_all
134
- % {"total_count": changelist.result_count},
135
- "title": changelist.title,
136
- "is_popup": changelist.is_popup,
137
- "cl": changelist,
138
- "media": media,
139
- "has_add_permission": self.has_add_permission(request),
140
- "opts": changelist.opts,
141
- "app_label": self.model._meta.app_label,
142
- "action_form": action_form,
143
- "actions_on_top": self.actions_on_top,
144
- "actions_on_bottom": self.actions_on_bottom,
145
- "actions_selection_counter": getattr(self, "actions_selection_counter", 0),
146
- }
147
- context.update(extra_context or {})
148
- request.current_app = self.admin_site.name
149
- app_name, model_name = get_model_ct_tuple(self.model)
150
- return render(
151
- request,
152
- self.change_list_template
153
- or [
154
- "admin/%s/%s/change_list.html" % (app_name, model_name),
155
- "admin/%s/change_list.html" % app_name,
156
- "admin/change_list.html",
157
- ],
158
- context,
159
- )
160
-
161
-
162
- class SearchModelAdmin(SearchModelAdminMixin, ModelAdmin):
163
- pass
@@ -1,31 +0,0 @@
1
- import logging
2
-
3
- from django.apps import AppConfig
4
- from django.conf import settings
5
-
6
- from ..haystack import connection_router, connections
7
- from ..haystack.utils import loading
8
-
9
- class HaystackConfig(AppConfig):
10
- name = loading.VENDOR_PREFIX + "haystack"
11
- signal_processor = None
12
- stream = None
13
-
14
- def ready(self):
15
- # Setup default logging.
16
- log = logging.getLogger("haystack")
17
- self.stream = logging.StreamHandler()
18
- self.stream.setLevel(logging.INFO)
19
- log.addHandler(self.stream)
20
-
21
- # Setup the signal processor.
22
- if not self.signal_processor:
23
- signal_processor_path = getattr(
24
- settings,
25
- "HAYSTACK_SIGNAL_PROCESSOR",
26
- loading.VENDOR_PREFIX + "haystack.signals.BaseSignalProcessor",
27
- )
28
- signal_processor_class = loading.import_class(signal_processor_path)
29
- self.signal_processor = signal_processor_class(
30
- connections, connection_router
31
- )