codex 1.5.0a1__py3-none-any.whl โ†’ 1.5.0a3__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 (919) hide show
  1. codex/__init__.py +1 -0
  2. codex/_vendor/haystack/apps.py +2 -3
  3. codex/_vendor/haystack/utils/loading.py +3 -0
  4. codex/applications/lifespan.py +1 -0
  5. codex/applications/websocket.py +1 -0
  6. codex/asgi.py +1 -0
  7. codex/db_functions.py +1 -0
  8. codex/exceptions.py +1 -0
  9. codex/integrity.py +1 -0
  10. codex/librarian/covers/coverd.py +1 -0
  11. codex/librarian/covers/create.py +2 -1
  12. codex/librarian/covers/path.py +1 -0
  13. codex/librarian/covers/purge.py +1 -0
  14. codex/librarian/covers/status.py +1 -0
  15. codex/librarian/covers/tasks.py +1 -0
  16. codex/librarian/delayed_taskd.py +1 -0
  17. codex/librarian/importer/aggregate_metadata.py +1 -0
  18. codex/librarian/importer/clean_metadata.py +1 -0
  19. codex/librarian/importer/const.py +1 -0
  20. codex/librarian/importer/create_comics.py +1 -0
  21. codex/librarian/importer/create_fks.py +1 -0
  22. codex/librarian/importer/failed_imports.py +1 -0
  23. codex/librarian/importer/importerd.py +1 -0
  24. codex/librarian/importer/link_comics.py +2 -3
  25. codex/librarian/importer/moved.py +17 -15
  26. codex/librarian/importer/query_fks.py +1 -0
  27. codex/librarian/importer/status.py +1 -0
  28. codex/librarian/importer/tasks.py +1 -0
  29. codex/librarian/janitor/cleanup.py +1 -0
  30. codex/librarian/janitor/failed_imports.py +1 -0
  31. codex/librarian/janitor/janitor.py +1 -0
  32. codex/librarian/janitor/janitord.py +1 -0
  33. codex/librarian/janitor/status.py +1 -0
  34. codex/librarian/janitor/tasks.py +1 -0
  35. codex/librarian/janitor/update.py +1 -0
  36. codex/librarian/janitor/vacuum.py +1 -0
  37. codex/librarian/librariand.py +1 -0
  38. codex/librarian/mp_queue.py +1 -0
  39. codex/librarian/notifier/notifierd.py +0 -1
  40. codex/librarian/notifier/tasks.py +1 -0
  41. codex/librarian/search/merge.py +1 -0
  42. codex/librarian/search/remove.py +1 -0
  43. codex/librarian/search/searchd.py +1 -0
  44. codex/librarian/search/status.py +1 -0
  45. codex/librarian/search/tasks.py +1 -0
  46. codex/librarian/search/update.py +1 -0
  47. codex/librarian/search/version.py +1 -0
  48. codex/librarian/tasks.py +1 -0
  49. codex/librarian/watchdog/db_snapshot.py +1 -0
  50. codex/librarian/watchdog/dir_snapshot_diff.py +1 -0
  51. codex/librarian/watchdog/emitter.py +18 -1
  52. codex/librarian/watchdog/event_batcherd.py +1 -0
  53. codex/librarian/watchdog/events.py +1 -0
  54. codex/librarian/watchdog/observers.py +8 -1
  55. codex/librarian/watchdog/status.py +1 -0
  56. codex/librarian/watchdog/tasks.py +1 -0
  57. codex/logger/formatter.py +36 -0
  58. codex/logger/loggerd.py +2 -33
  59. codex/logger/logging.py +1 -0
  60. codex/logger/mp_queue.py +1 -0
  61. codex/logger_base.py +1 -0
  62. codex/memory.py +1 -0
  63. codex/middleware.py +1 -0
  64. codex/migrations/0002_auto_20200826_0622.py +0 -1
  65. codex/migrations/0003_auto_20200831_2033.py +0 -1
  66. codex/migrations/0004_failedimport.py +0 -1
  67. codex/migrations/0005_auto_20200918_0146.py +1 -0
  68. codex/migrations/0008_alter_comic_created_at_alter_comic_format_and_more.py +0 -1
  69. codex/migrations/0009_alter_comic_parent_folder.py +0 -1
  70. codex/migrations/0010_haystack.py +0 -1
  71. codex/migrations/0011_library_groups_and_metadata_changes.py +1 -0
  72. codex/migrations/0013_int_issue_count_longer_charfields.py +1 -0
  73. codex/migrations/0014_pdf_issue_suffix_remove_cover_image_sort_name.py +1 -0
  74. codex/migrations/0015_link_comics_to_top_level_folders.py +1 -0
  75. codex/migrations/0016_remove_comic_cover_path_librarianstatus.py +1 -0
  76. codex/migrations/0017_alter_timestamp_options_alter_adminflag_name_and_more.py +1 -0
  77. codex/migrations/0023_rename_credit_creator_and_more.py +1 -0
  78. codex/migrations/0024_comic_gtin_comic_story_arc_number.py +0 -1
  79. codex/migrations/0026_comicbox_1.py +10 -6
  80. codex/models/__init__.py +1 -0
  81. codex/models/admin.py +1 -0
  82. codex/models/base.py +1 -0
  83. codex/models/bookmark.py +1 -0
  84. codex/models/comic.py +1 -0
  85. codex/models/groups.py +1 -0
  86. codex/models/library.py +1 -0
  87. codex/models/named.py +1 -0
  88. codex/models/paths.py +1 -0
  89. codex/permissions.py +1 -0
  90. codex/registration.py +1 -0
  91. codex/run.py +1 -0
  92. codex/search/backend.py +7 -1
  93. codex/search/engine.py +1 -0
  94. codex/search/indexes.py +1 -0
  95. codex/search/writing.py +1 -0
  96. codex/serializers/admin.py +1 -0
  97. codex/serializers/browser/choices.py +1 -0
  98. codex/serializers/browser/filters.py +1 -0
  99. codex/serializers/browser/page.py +3 -0
  100. codex/serializers/browser/settings.py +1 -0
  101. codex/serializers/choices.py +7 -3
  102. codex/serializers/homepage.py +1 -0
  103. codex/serializers/metadata.py +1 -0
  104. codex/serializers/mixins.py +1 -0
  105. codex/serializers/models/admin.py +1 -0
  106. codex/serializers/models/base.py +1 -0
  107. codex/serializers/models/bookmark.py +1 -0
  108. codex/serializers/models/comic.py +1 -0
  109. codex/serializers/models/groups.py +1 -0
  110. codex/serializers/models/named.py +1 -0
  111. codex/serializers/models/pycountry.py +1 -0
  112. codex/serializers/opds/authentication.py +1 -0
  113. codex/serializers/opds/v1.py +1 -0
  114. codex/serializers/opds/v2_unused.py +1 -0
  115. codex/serializers/reader.py +3 -0
  116. codex/serializers/redirect.py +1 -0
  117. codex/serializers/versions.py +1 -0
  118. codex/settings/hypercorn.py +1 -0
  119. codex/settings/logging.py +1 -0
  120. codex/settings/secret_key.py +1 -0
  121. codex/settings/settings.py +1 -0
  122. codex/settings/timezone.py +1 -0
  123. codex/settings/whitenoise.py +1 -0
  124. codex/signals/django_signals.py +1 -0
  125. codex/signals/os_signals.py +1 -0
  126. codex/startup.py +1 -0
  127. codex/static_root/assets/VCheckbox-CMKdyl0R.016ed8d222c4.css +1 -0
  128. codex/static_root/assets/VCheckbox-CMKdyl0R.016ed8d222c4.css.br +0 -0
  129. codex/static_root/assets/VCheckbox-CMKdyl0R.016ed8d222c4.css.gz +0 -0
  130. codex/static_root/assets/VCheckbox-CMKdyl0R.css +1 -0
  131. codex/static_root/assets/VCheckbox-CMKdyl0R.css.br +0 -0
  132. codex/static_root/assets/VCheckbox-CMKdyl0R.css.gz +0 -0
  133. codex/static_root/assets/VCheckbox-CeROBShW.13efd0db94ad.js +1 -0
  134. codex/static_root/assets/VCheckbox-CeROBShW.13efd0db94ad.js.br +0 -0
  135. codex/static_root/assets/VCheckbox-CeROBShW.13efd0db94ad.js.gz +0 -0
  136. codex/static_root/assets/VCheckbox-CeROBShW.js +1 -0
  137. codex/static_root/assets/VCheckbox-CeROBShW.js.br +0 -0
  138. codex/static_root/assets/VCheckbox-CeROBShW.js.gz +0 -0
  139. codex/static_root/assets/VCheckboxBtn-DsXzjZmq.024342a993d5.js +1 -0
  140. codex/static_root/assets/VCheckboxBtn-DsXzjZmq.024342a993d5.js.br +0 -0
  141. codex/static_root/assets/VCheckboxBtn-DsXzjZmq.024342a993d5.js.gz +0 -0
  142. codex/static_root/assets/VCheckboxBtn-DsXzjZmq.js +1 -0
  143. codex/static_root/assets/VCheckboxBtn-DsXzjZmq.js.br +0 -0
  144. codex/static_root/assets/VCheckboxBtn-DsXzjZmq.js.gz +0 -0
  145. codex/static_root/assets/VCombobox-BkNOTgy1.8fe8fb5f133b.js +1 -0
  146. codex/static_root/assets/VCombobox-BkNOTgy1.8fe8fb5f133b.js.br +0 -0
  147. codex/static_root/assets/VCombobox-BkNOTgy1.8fe8fb5f133b.js.gz +0 -0
  148. codex/static_root/assets/VCombobox-BkNOTgy1.js +1 -0
  149. codex/static_root/assets/VCombobox-BkNOTgy1.js.br +0 -0
  150. codex/static_root/assets/VCombobox-BkNOTgy1.js.gz +0 -0
  151. codex/static_root/assets/VCombobox-BksEr4D_.73429bb75f42.css +1 -0
  152. codex/static_root/assets/VCombobox-BksEr4D_.73429bb75f42.css.br +0 -0
  153. codex/static_root/assets/VCombobox-BksEr4D_.73429bb75f42.css.gz +0 -0
  154. codex/static_root/assets/VCombobox-BksEr4D_.css +1 -0
  155. codex/static_root/assets/VCombobox-BksEr4D_.css.br +0 -0
  156. codex/static_root/assets/VCombobox-BksEr4D_.css.gz +0 -0
  157. codex/static_root/assets/{VDataTableVirtual-cJ9EDO4X.1a711f5f2fc0.css โ†’ VDataTableVirtual-Cbj7IGxa.24039b2ebc61.css} +1 -1
  158. codex/static_root/assets/VDataTableVirtual-Cbj7IGxa.24039b2ebc61.css.br +0 -0
  159. codex/static_root/assets/VDataTableVirtual-Cbj7IGxa.24039b2ebc61.css.gz +0 -0
  160. codex/static_root/assets/{VDataTableVirtual-cJ9EDO4X.css โ†’ VDataTableVirtual-Cbj7IGxa.css} +1 -1
  161. codex/static_root/assets/VDataTableVirtual-Cbj7IGxa.css.br +0 -0
  162. codex/static_root/assets/VDataTableVirtual-Cbj7IGxa.css.gz +0 -0
  163. codex/static_root/assets/VDataTableVirtual-xoo8biCM.a039eb46d778.js +1 -0
  164. codex/static_root/assets/VDataTableVirtual-xoo8biCM.a039eb46d778.js.br +0 -0
  165. codex/static_root/assets/VDataTableVirtual-xoo8biCM.a039eb46d778.js.gz +0 -0
  166. codex/static_root/assets/VDataTableVirtual-xoo8biCM.js +1 -0
  167. codex/static_root/assets/VDataTableVirtual-xoo8biCM.js.br +0 -0
  168. codex/static_root/assets/VDataTableVirtual-xoo8biCM.js.gz +0 -0
  169. codex/static_root/assets/{VExpansionPanel-gdSap9-6.212a9add7ff2.css โ†’ VExpansionPanel-BgvW2DKJ.cd604d70ceee.css} +1 -1
  170. codex/static_root/assets/VExpansionPanel-BgvW2DKJ.cd604d70ceee.css.br +0 -0
  171. codex/static_root/assets/VExpansionPanel-BgvW2DKJ.cd604d70ceee.css.gz +0 -0
  172. codex/static_root/assets/{VExpansionPanel-gdSap9-6.css โ†’ VExpansionPanel-BgvW2DKJ.css} +1 -1
  173. codex/static_root/assets/VExpansionPanel-BgvW2DKJ.css.br +0 -0
  174. codex/static_root/assets/VExpansionPanel-BgvW2DKJ.css.gz +0 -0
  175. codex/static_root/assets/VExpansionPanel-CvNJm3e_.f038a64c77fe.js +1 -0
  176. codex/static_root/assets/VExpansionPanel-CvNJm3e_.f038a64c77fe.js.br +0 -0
  177. codex/static_root/assets/VExpansionPanel-CvNJm3e_.f038a64c77fe.js.gz +0 -0
  178. codex/static_root/assets/VExpansionPanel-CvNJm3e_.js +1 -0
  179. codex/static_root/assets/VExpansionPanel-CvNJm3e_.js.br +0 -0
  180. codex/static_root/assets/VExpansionPanel-CvNJm3e_.js.gz +0 -0
  181. codex/static_root/assets/{VMain-MR9pvpIS.ffd0ac6a1519.js โ†’ VMain-C7hhAcs8.bdcb5a3f2a40.js} +1 -1
  182. codex/static_root/assets/VMain-C7hhAcs8.bdcb5a3f2a40.js.br +0 -0
  183. codex/static_root/assets/VMain-C7hhAcs8.bdcb5a3f2a40.js.gz +0 -0
  184. codex/static_root/assets/{VMain-MR9pvpIS.js โ†’ VMain-C7hhAcs8.js} +1 -1
  185. codex/static_root/assets/VMain-C7hhAcs8.js.br +0 -0
  186. codex/static_root/assets/VMain-C7hhAcs8.js.gz +0 -0
  187. codex/static_root/assets/VRadioGroup-C_4z_UxB.caf3bf08435a.js +1 -0
  188. codex/static_root/assets/VRadioGroup-C_4z_UxB.caf3bf08435a.js.br +0 -0
  189. codex/static_root/assets/VRadioGroup-C_4z_UxB.caf3bf08435a.js.gz +0 -0
  190. codex/static_root/assets/VRadioGroup-C_4z_UxB.js +1 -0
  191. codex/static_root/assets/VRadioGroup-C_4z_UxB.js.br +0 -0
  192. codex/static_root/assets/VRadioGroup-C_4z_UxB.js.gz +0 -0
  193. codex/static_root/assets/VSelect-mJnmdX3T.f376a225b78d.js +1 -0
  194. codex/static_root/assets/VSelect-mJnmdX3T.f376a225b78d.js.br +0 -0
  195. codex/static_root/assets/VSelect-mJnmdX3T.f376a225b78d.js.gz +0 -0
  196. codex/static_root/assets/VSelect-mJnmdX3T.js +1 -0
  197. codex/static_root/assets/VSelect-mJnmdX3T.js.br +0 -0
  198. codex/static_root/assets/VSelect-mJnmdX3T.js.gz +0 -0
  199. codex/static_root/assets/VSelect-udkSZJsa.1873bae92d9d.css +1 -0
  200. codex/static_root/assets/VSelect-udkSZJsa.1873bae92d9d.css.br +0 -0
  201. codex/static_root/assets/VSelect-udkSZJsa.1873bae92d9d.css.gz +0 -0
  202. codex/static_root/assets/VSelect-udkSZJsa.css +1 -0
  203. codex/static_root/assets/VSelect-udkSZJsa.css.br +0 -0
  204. codex/static_root/assets/VSelect-udkSZJsa.css.gz +0 -0
  205. codex/static_root/assets/VSelectionControl-Dl-z80yK.a06799bce7a2.js +1 -0
  206. codex/static_root/assets/VSelectionControl-Dl-z80yK.a06799bce7a2.js.br +0 -0
  207. codex/static_root/assets/VSelectionControl-Dl-z80yK.a06799bce7a2.js.gz +0 -0
  208. codex/static_root/assets/VSelectionControl-Dl-z80yK.js +1 -0
  209. codex/static_root/assets/VSelectionControl-Dl-z80yK.js.br +0 -0
  210. codex/static_root/assets/VSelectionControl-Dl-z80yK.js.gz +0 -0
  211. codex/static_root/assets/VSlideGroup-D7-cGh6b.a9ccd72e815b.js +1 -0
  212. codex/static_root/assets/VSlideGroup-D7-cGh6b.a9ccd72e815b.js.br +0 -0
  213. codex/static_root/assets/VSlideGroup-D7-cGh6b.a9ccd72e815b.js.gz +0 -0
  214. codex/static_root/assets/VSlideGroup-D7-cGh6b.js +1 -0
  215. codex/static_root/assets/VSlideGroup-D7-cGh6b.js.br +0 -0
  216. codex/static_root/assets/VSlideGroup-D7-cGh6b.js.gz +0 -0
  217. codex/static_root/assets/{VTextField-8NJPNEpH.190723039dea.css โ†’ VSlideGroup-Z7BhHtYB.90de84ac696c.css} +1 -1
  218. codex/static_root/assets/VSlideGroup-Z7BhHtYB.90de84ac696c.css.br +0 -0
  219. codex/static_root/assets/VSlideGroup-Z7BhHtYB.90de84ac696c.css.gz +0 -0
  220. codex/static_root/assets/{VTextField-8NJPNEpH.css โ†’ VSlideGroup-Z7BhHtYB.css} +1 -1
  221. codex/static_root/assets/VSlideGroup-Z7BhHtYB.css.br +0 -0
  222. codex/static_root/assets/VSlideGroup-Z7BhHtYB.css.gz +0 -0
  223. codex/static_root/assets/{VTable-XNR_fTYM.4be31a3a6cd7.js โ†’ VTable-D3ZmQmNr.ae26ea41abdd.js} +1 -1
  224. codex/static_root/assets/VTable-D3ZmQmNr.ae26ea41abdd.js.br +0 -0
  225. codex/static_root/assets/VTable-D3ZmQmNr.ae26ea41abdd.js.gz +0 -0
  226. codex/static_root/assets/{VTable-XNR_fTYM.js โ†’ VTable-D3ZmQmNr.js} +1 -1
  227. codex/static_root/assets/VTable-D3ZmQmNr.js.br +0 -0
  228. codex/static_root/assets/VTable-D3ZmQmNr.js.gz +0 -0
  229. codex/static_root/assets/VTable-DflzroDq.160504d82195.css +1 -0
  230. codex/static_root/assets/VTable-DflzroDq.160504d82195.css.br +0 -0
  231. codex/static_root/assets/VTable-DflzroDq.160504d82195.css.gz +0 -0
  232. codex/static_root/assets/VTable-DflzroDq.css +1 -0
  233. codex/static_root/assets/VTable-DflzroDq.css.br +0 -0
  234. codex/static_root/assets/VTable-DflzroDq.css.gz +0 -0
  235. codex/static_root/assets/VToolbar-C5QbEltS.6de3ffa35a37.css +1 -0
  236. codex/static_root/assets/VToolbar-C5QbEltS.6de3ffa35a37.css.br +0 -0
  237. codex/static_root/assets/VToolbar-C5QbEltS.6de3ffa35a37.css.gz +0 -0
  238. codex/static_root/assets/VToolbar-C5QbEltS.css +1 -0
  239. codex/static_root/assets/VToolbar-C5QbEltS.css.br +0 -0
  240. codex/static_root/assets/VToolbar-C5QbEltS.css.gz +0 -0
  241. codex/static_root/assets/VToolbar-_8U2Zy9o.95e33cc12ad9.js +7 -0
  242. codex/static_root/assets/VToolbar-_8U2Zy9o.95e33cc12ad9.js.br +0 -0
  243. codex/static_root/assets/VToolbar-_8U2Zy9o.95e33cc12ad9.js.gz +0 -0
  244. codex/static_root/assets/VToolbar-_8U2Zy9o.js +7 -0
  245. codex/static_root/assets/VToolbar-_8U2Zy9o.js.br +0 -0
  246. codex/static_root/assets/VToolbar-_8U2Zy9o.js.gz +0 -0
  247. codex/static_root/assets/VWindowItem-BL-3IAQN.d6854cb3e107.js +1 -0
  248. codex/static_root/assets/VWindowItem-BL-3IAQN.d6854cb3e107.js.br +0 -0
  249. codex/static_root/assets/VWindowItem-BL-3IAQN.d6854cb3e107.js.gz +0 -0
  250. codex/static_root/assets/VWindowItem-BL-3IAQN.js +1 -0
  251. codex/static_root/assets/VWindowItem-BL-3IAQN.js.br +0 -0
  252. codex/static_root/assets/VWindowItem-BL-3IAQN.js.gz +0 -0
  253. codex/static_root/assets/{VWindowItem--TlRwQ5R.css โ†’ VWindowItem-ByIod57Y.css} +1 -1
  254. codex/static_root/assets/VWindowItem-ByIod57Y.css.br +0 -0
  255. codex/static_root/assets/VWindowItem-ByIod57Y.css.gz +0 -0
  256. codex/static_root/assets/{VWindowItem--TlRwQ5R.fe195e056b07.css โ†’ VWindowItem-ByIod57Y.f7fb19752bf3.css} +1 -1
  257. codex/static_root/assets/VWindowItem-ByIod57Y.f7fb19752bf3.css.br +0 -0
  258. codex/static_root/assets/VWindowItem-ByIod57Y.f7fb19752bf3.css.gz +0 -0
  259. codex/static_root/assets/admin-DB_W6AqP.c4baa268ac64.js +1 -0
  260. codex/static_root/assets/admin-DB_W6AqP.c4baa268ac64.js.br +0 -0
  261. codex/static_root/assets/admin-DB_W6AqP.c4baa268ac64.js.gz +0 -0
  262. codex/static_root/assets/admin-DB_W6AqP.js +1 -0
  263. codex/static_root/assets/admin-DB_W6AqP.js.br +0 -0
  264. codex/static_root/assets/admin-DB_W6AqP.js.gz +0 -0
  265. codex/static_root/assets/{admin-MwCSFwIp.6de10f13b01b.css โ†’ admin-Df82-Qcj.4c3f0406ee54.css} +1 -1
  266. codex/static_root/assets/admin-Df82-Qcj.4c3f0406ee54.css.br +0 -0
  267. codex/static_root/assets/admin-Df82-Qcj.4c3f0406ee54.css.gz +0 -0
  268. codex/static_root/assets/{admin-MwCSFwIp.css โ†’ admin-Df82-Qcj.css} +1 -1
  269. codex/static_root/assets/admin-Df82-Qcj.css.br +0 -0
  270. codex/static_root/assets/admin-Df82-Qcj.css.gz +0 -0
  271. codex/static_root/assets/{admin-drawer-panel-qf94Ysts.css โ†’ admin-drawer-panel-CsBUDBLE.08509b8ed15f.css} +1 -1
  272. codex/static_root/assets/admin-drawer-panel-CsBUDBLE.08509b8ed15f.css.br +0 -0
  273. codex/static_root/assets/admin-drawer-panel-CsBUDBLE.08509b8ed15f.css.gz +0 -0
  274. codex/static_root/assets/{admin-drawer-panel-qf94Ysts.c0696c636fab.css โ†’ admin-drawer-panel-CsBUDBLE.css} +1 -1
  275. codex/static_root/assets/admin-drawer-panel-CsBUDBLE.css.br +0 -0
  276. codex/static_root/assets/admin-drawer-panel-CsBUDBLE.css.gz +0 -0
  277. codex/static_root/assets/admin-drawer-panel-d5nWfOhv.9ff3ea099676.js +30 -0
  278. codex/static_root/assets/admin-drawer-panel-d5nWfOhv.9ff3ea099676.js.br +0 -0
  279. codex/static_root/assets/admin-drawer-panel-d5nWfOhv.9ff3ea099676.js.gz +0 -0
  280. codex/static_root/assets/admin-drawer-panel-d5nWfOhv.js +30 -0
  281. codex/static_root/assets/admin-drawer-panel-d5nWfOhv.js.br +0 -0
  282. codex/static_root/assets/admin-drawer-panel-d5nWfOhv.js.gz +0 -0
  283. codex/static_root/assets/browser-C8SJwVGz.0f7daf93b064.css +1 -0
  284. codex/static_root/assets/browser-C8SJwVGz.0f7daf93b064.css.br +0 -0
  285. codex/static_root/assets/browser-C8SJwVGz.0f7daf93b064.css.gz +0 -0
  286. codex/static_root/assets/browser-C8SJwVGz.css +1 -0
  287. codex/static_root/assets/browser-C8SJwVGz.css.br +0 -0
  288. codex/static_root/assets/browser-C8SJwVGz.css.gz +0 -0
  289. codex/static_root/assets/browser-WCnHQaMI.83b81e02a6c9.js +1 -0
  290. codex/static_root/assets/browser-WCnHQaMI.83b81e02a6c9.js.br +0 -0
  291. codex/static_root/assets/browser-WCnHQaMI.83b81e02a6c9.js.gz +0 -0
  292. codex/static_root/assets/browser-WCnHQaMI.js +1 -0
  293. codex/static_root/assets/browser-WCnHQaMI.js.br +0 -0
  294. codex/static_root/assets/browser-WCnHQaMI.js.gz +0 -0
  295. codex/static_root/assets/change-password-dialog-D_VAW-nW.d1c607e833e1.js +1 -0
  296. codex/static_root/assets/change-password-dialog-D_VAW-nW.d1c607e833e1.js.br +0 -0
  297. codex/static_root/assets/change-password-dialog-D_VAW-nW.d1c607e833e1.js.gz +0 -0
  298. codex/static_root/assets/change-password-dialog-D_VAW-nW.js +1 -0
  299. codex/static_root/assets/change-password-dialog-D_VAW-nW.js.br +0 -0
  300. codex/static_root/assets/change-password-dialog-D_VAW-nW.js.gz +0 -0
  301. codex/static_root/assets/{confirm-dialog-oEnGefnv.b1227348d465.js โ†’ confirm-dialog-cCUg3s1r.619d5623b44d.js} +1 -1
  302. codex/static_root/assets/confirm-dialog-cCUg3s1r.619d5623b44d.js.br +0 -0
  303. codex/static_root/assets/confirm-dialog-cCUg3s1r.619d5623b44d.js.gz +0 -0
  304. codex/static_root/assets/{confirm-dialog-oEnGefnv.js โ†’ confirm-dialog-cCUg3s1r.js} +1 -1
  305. codex/static_root/assets/confirm-dialog-cCUg3s1r.js.br +0 -0
  306. codex/static_root/assets/confirm-dialog-cCUg3s1r.js.gz +0 -0
  307. codex/static_root/assets/{confirm-footer-wmmDHzIL.04fb93e7daf3.css โ†’ confirm-footer-VFepxcJs.4150131304bd.css} +1 -1
  308. codex/static_root/assets/confirm-footer-VFepxcJs.4150131304bd.css.br +0 -0
  309. codex/static_root/assets/confirm-footer-VFepxcJs.4150131304bd.css.gz +0 -0
  310. codex/static_root/assets/{confirm-footer-wmmDHzIL.css โ†’ confirm-footer-VFepxcJs.css} +1 -1
  311. codex/static_root/assets/confirm-footer-VFepxcJs.css.br +0 -0
  312. codex/static_root/assets/confirm-footer-VFepxcJs.css.gz +0 -0
  313. codex/static_root/assets/confirm-footer-g19OD_Ro.9511476b5d4d.js +1 -0
  314. codex/static_root/assets/confirm-footer-g19OD_Ro.9511476b5d4d.js.br +0 -0
  315. codex/static_root/assets/confirm-footer-g19OD_Ro.9511476b5d4d.js.gz +0 -0
  316. codex/static_root/assets/confirm-footer-g19OD_Ro.js +1 -0
  317. codex/static_root/assets/confirm-footer-g19OD_Ro.js.br +0 -0
  318. codex/static_root/assets/confirm-footer-g19OD_Ro.js.gz +0 -0
  319. codex/static_root/assets/{datetime-column-wfJgH61c.5e9a5e4f4942.js โ†’ datetime-column-D40geMT4.7b07d44a9935.js} +1 -1
  320. codex/static_root/assets/datetime-column-D40geMT4.7b07d44a9935.js.br +0 -0
  321. codex/static_root/assets/datetime-column-D40geMT4.7b07d44a9935.js.gz +0 -0
  322. codex/static_root/assets/{datetime-column-wfJgH61c.js โ†’ datetime-column-D40geMT4.js} +1 -1
  323. codex/static_root/assets/datetime-column-D40geMT4.js.br +0 -0
  324. codex/static_root/assets/datetime-column-D40geMT4.js.gz +0 -0
  325. codex/static_root/assets/filter-DbyVndkN.3a89dcf851f7.js +1 -0
  326. codex/static_root/assets/filter-DbyVndkN.3a89dcf851f7.js.br +0 -0
  327. codex/static_root/assets/filter-DbyVndkN.3a89dcf851f7.js.gz +0 -0
  328. codex/static_root/assets/filter-DbyVndkN.js +1 -0
  329. codex/static_root/assets/filter-DbyVndkN.js.br +0 -0
  330. codex/static_root/assets/filter-DbyVndkN.js.gz +0 -0
  331. codex/static_root/assets/{flag-tab-g9dmSvT7.64fc848dba03.js โ†’ flag-tab-Beq9QsKv.1caf7342b359.js} +1 -1
  332. codex/static_root/assets/flag-tab-Beq9QsKv.1caf7342b359.js.br +0 -0
  333. codex/static_root/assets/flag-tab-Beq9QsKv.1caf7342b359.js.gz +0 -0
  334. codex/static_root/assets/{flag-tab-g9dmSvT7.js โ†’ flag-tab-Beq9QsKv.js} +1 -1
  335. codex/static_root/assets/flag-tab-Beq9QsKv.js.br +0 -0
  336. codex/static_root/assets/flag-tab-Beq9QsKv.js.gz +0 -0
  337. codex/static_root/assets/group-tab-D_Xc9f5l.48613b45cd25.js +1 -0
  338. codex/static_root/assets/group-tab-D_Xc9f5l.48613b45cd25.js.br +0 -0
  339. codex/static_root/assets/group-tab-D_Xc9f5l.48613b45cd25.js.gz +0 -0
  340. codex/static_root/assets/group-tab-D_Xc9f5l.js +1 -0
  341. codex/static_root/assets/group-tab-D_Xc9f5l.js.br +0 -0
  342. codex/static_root/assets/group-tab-D_Xc9f5l.js.gz +0 -0
  343. codex/static_root/assets/http-error-MvZTJwze.c2f1ef9de95d.js +1 -0
  344. codex/static_root/assets/http-error-MvZTJwze.c2f1ef9de95d.js.br +0 -0
  345. codex/static_root/assets/http-error-MvZTJwze.c2f1ef9de95d.js.gz +0 -0
  346. codex/static_root/assets/http-error-MvZTJwze.js +1 -0
  347. codex/static_root/assets/http-error-MvZTJwze.js.br +0 -0
  348. codex/static_root/assets/http-error-MvZTJwze.js.gz +0 -0
  349. codex/static_root/assets/library-tab-BekMoaXp.b6db20b5b272.js +1 -0
  350. codex/static_root/assets/library-tab-BekMoaXp.b6db20b5b272.js.br +0 -0
  351. codex/static_root/assets/library-tab-BekMoaXp.b6db20b5b272.js.gz +0 -0
  352. codex/static_root/assets/library-tab-BekMoaXp.js +1 -0
  353. codex/static_root/assets/library-tab-BekMoaXp.js.br +0 -0
  354. codex/static_root/assets/library-tab-BekMoaXp.js.gz +0 -0
  355. codex/static_root/assets/main-CXxSyR20.34af24d11af1.js +37 -0
  356. codex/static_root/assets/main-CXxSyR20.34af24d11af1.js.br +0 -0
  357. codex/static_root/assets/main-CXxSyR20.34af24d11af1.js.gz +0 -0
  358. codex/static_root/assets/main-CXxSyR20.js +37 -0
  359. codex/static_root/assets/main-CXxSyR20.js.br +0 -0
  360. codex/static_root/assets/main-CXxSyR20.js.gz +0 -0
  361. codex/static_root/assets/{main-eLpQR-nY.052265de7d69.css โ†’ main-CacfwsKA.4f849ef1c5db.css} +2 -2
  362. codex/static_root/assets/main-CacfwsKA.4f849ef1c5db.css.br +0 -0
  363. codex/static_root/assets/main-CacfwsKA.4f849ef1c5db.css.gz +0 -0
  364. codex/static_root/assets/{main-eLpQR-nY.css โ†’ main-CacfwsKA.css} +2 -2
  365. codex/static_root/assets/main-CacfwsKA.css.br +0 -0
  366. codex/static_root/assets/main-CacfwsKA.css.gz +0 -0
  367. codex/static_root/assets/metadata-dialog-Bs652L_u.c9fc03399abd.js +1 -0
  368. codex/static_root/assets/metadata-dialog-Bs652L_u.c9fc03399abd.js.br +0 -0
  369. codex/static_root/assets/metadata-dialog-Bs652L_u.c9fc03399abd.js.gz +0 -0
  370. codex/static_root/assets/metadata-dialog-Bs652L_u.js +1 -0
  371. codex/static_root/assets/metadata-dialog-Bs652L_u.js.br +0 -0
  372. codex/static_root/assets/metadata-dialog-Bs652L_u.js.gz +0 -0
  373. codex/static_root/assets/metadata-dialog-DPxDDFDy.34b7c11509ec.css +1 -0
  374. codex/static_root/assets/metadata-dialog-DPxDDFDy.34b7c11509ec.css.br +0 -0
  375. codex/static_root/assets/metadata-dialog-DPxDDFDy.34b7c11509ec.css.gz +0 -0
  376. codex/static_root/assets/metadata-dialog-DPxDDFDy.css +1 -0
  377. codex/static_root/assets/metadata-dialog-DPxDDFDy.css.br +0 -0
  378. codex/static_root/assets/metadata-dialog-DPxDDFDy.css.gz +0 -0
  379. codex/static_root/assets/pdf-doc-CMzaSV_K.8cd4b3e65f9a.css +1 -0
  380. codex/static_root/assets/pdf-doc-CMzaSV_K.8cd4b3e65f9a.css.br +0 -0
  381. codex/static_root/assets/pdf-doc-CMzaSV_K.8cd4b3e65f9a.css.gz +0 -0
  382. codex/static_root/assets/pdf-doc-CMzaSV_K.css +1 -0
  383. codex/static_root/assets/pdf-doc-CMzaSV_K.css.br +0 -0
  384. codex/static_root/assets/pdf-doc-CMzaSV_K.css.gz +0 -0
  385. codex/static_root/assets/pdf-doc-CQL4P7bj.3a68571faee3.js +35 -0
  386. codex/static_root/assets/pdf-doc-CQL4P7bj.3a68571faee3.js.br +0 -0
  387. codex/static_root/assets/pdf-doc-CQL4P7bj.3a68571faee3.js.gz +0 -0
  388. codex/static_root/assets/pdf-doc-CQL4P7bj.js +35 -0
  389. codex/static_root/assets/pdf-doc-CQL4P7bj.js.br +0 -0
  390. codex/static_root/assets/pdf-doc-CQL4P7bj.js.gz +0 -0
  391. codex/static_root/assets/reader-B4hkFEOb.d0dd217d177e.js +7 -0
  392. codex/static_root/assets/reader-B4hkFEOb.d0dd217d177e.js.br +0 -0
  393. codex/static_root/assets/reader-B4hkFEOb.d0dd217d177e.js.gz +0 -0
  394. codex/static_root/assets/reader-B4hkFEOb.js +7 -0
  395. codex/static_root/assets/reader-B4hkFEOb.js.br +0 -0
  396. codex/static_root/assets/reader-B4hkFEOb.js.gz +0 -0
  397. codex/static_root/assets/reader-DHZzx6Jl.17879ea49fff.css +1 -0
  398. codex/static_root/assets/reader-DHZzx6Jl.17879ea49fff.css.br +0 -0
  399. codex/static_root/assets/reader-DHZzx6Jl.17879ea49fff.css.gz +0 -0
  400. codex/static_root/assets/reader-DHZzx6Jl.css +1 -0
  401. codex/static_root/assets/reader-DHZzx6Jl.css.br +0 -0
  402. codex/static_root/assets/reader-DHZzx6Jl.css.gz +0 -0
  403. codex/static_root/assets/stats-tab-BTZLMBCU.7e0a9547c12e.css +1 -0
  404. codex/static_root/assets/stats-tab-BTZLMBCU.7e0a9547c12e.css.br +0 -0
  405. codex/static_root/assets/stats-tab-BTZLMBCU.7e0a9547c12e.css.gz +0 -0
  406. codex/static_root/assets/stats-tab-BTZLMBCU.css +1 -0
  407. codex/static_root/assets/stats-tab-BTZLMBCU.css.br +0 -0
  408. codex/static_root/assets/stats-tab-BTZLMBCU.css.gz +0 -0
  409. codex/static_root/assets/stats-tab-Cb-54N4z.9eec298d5175.js +1 -0
  410. codex/static_root/assets/stats-tab-Cb-54N4z.9eec298d5175.js.br +0 -0
  411. codex/static_root/assets/stats-tab-Cb-54N4z.9eec298d5175.js.gz +0 -0
  412. codex/static_root/assets/stats-tab-Cb-54N4z.js +1 -0
  413. codex/static_root/assets/stats-tab-Cb-54N4z.js.br +0 -0
  414. codex/static_root/assets/stats-tab-Cb-54N4z.js.gz +0 -0
  415. codex/static_root/assets/task-tab-DoX9OA37.9bb355f36dbf.css +1 -0
  416. codex/static_root/assets/task-tab-DoX9OA37.9bb355f36dbf.css.br +2 -0
  417. codex/static_root/assets/task-tab-DoX9OA37.9bb355f36dbf.css.gz +0 -0
  418. codex/static_root/assets/task-tab-DoX9OA37.css +1 -0
  419. codex/static_root/assets/task-tab-DoX9OA37.css.br +2 -0
  420. codex/static_root/assets/task-tab-DoX9OA37.css.gz +0 -0
  421. codex/static_root/assets/task-tab-QhcQNvG8.ed4e7a9b6d9d.js +1 -0
  422. codex/static_root/assets/task-tab-QhcQNvG8.ed4e7a9b6d9d.js.br +0 -0
  423. codex/static_root/assets/task-tab-QhcQNvG8.ed4e7a9b6d9d.js.gz +0 -0
  424. codex/static_root/assets/task-tab-QhcQNvG8.js +1 -0
  425. codex/static_root/assets/task-tab-QhcQNvG8.js.br +0 -0
  426. codex/static_root/assets/task-tab-QhcQNvG8.js.gz +0 -0
  427. codex/static_root/assets/to-case-kUm8NPpW.5b3369f511b8.js +1 -0
  428. codex/static_root/assets/to-case-kUm8NPpW.js +1 -0
  429. codex/static_root/assets/user-tab-BuianwBU.df5cefd3b550.js +1 -0
  430. codex/static_root/assets/user-tab-BuianwBU.df5cefd3b550.js.br +0 -0
  431. codex/static_root/assets/user-tab-BuianwBU.df5cefd3b550.js.gz +0 -0
  432. codex/static_root/assets/user-tab-BuianwBU.js +1 -0
  433. codex/static_root/assets/user-tab-BuianwBU.js.br +0 -0
  434. codex/static_root/assets/user-tab-BuianwBU.js.gz +0 -0
  435. codex/static_root/manifest.bb70f9bc6689.json +573 -0
  436. codex/static_root/manifest.bb70f9bc6689.json.br +0 -0
  437. codex/static_root/manifest.bb70f9bc6689.json.gz +0 -0
  438. codex/static_root/manifest.json +378 -377
  439. codex/static_root/manifest.json.br +0 -0
  440. codex/static_root/manifest.json.gz +0 -0
  441. codex/static_root/rest_framework/css/bootstrap-tweaks.css +4 -0
  442. codex/static_root/rest_framework/css/bootstrap-tweaks.css.br +0 -0
  443. codex/static_root/rest_framework/css/bootstrap-tweaks.css.gz +0 -0
  444. codex/static_root/rest_framework/css/{bootstrap-tweaks.46ed116b0edd.css โ†’ bootstrap-tweaks.ee4ee6acf9eb.css} +4 -0
  445. codex/static_root/rest_framework/css/bootstrap-tweaks.ee4ee6acf9eb.css.br +0 -0
  446. codex/static_root/rest_framework/css/bootstrap-tweaks.ee4ee6acf9eb.css.gz +0 -0
  447. codex/static_root/rest_framework/js/{ajax-form.0ea6e6052ab5.js โ†’ ajax-form.4e1cdcb7acab.js} +6 -0
  448. codex/static_root/rest_framework/js/ajax-form.4e1cdcb7acab.js.br +0 -0
  449. codex/static_root/rest_framework/js/ajax-form.4e1cdcb7acab.js.gz +0 -0
  450. codex/static_root/rest_framework/js/ajax-form.js +6 -0
  451. codex/static_root/rest_framework/js/ajax-form.js.br +0 -0
  452. codex/static_root/rest_framework/js/ajax-form.js.gz +0 -0
  453. codex/static_root/rest_framework/js/{csrf.969930007329.js โ†’ csrf.455080a7b2ce.js} +1 -0
  454. codex/static_root/rest_framework/js/csrf.455080a7b2ce.js.br +0 -0
  455. codex/static_root/rest_framework/js/csrf.455080a7b2ce.js.gz +0 -0
  456. codex/static_root/rest_framework/js/csrf.js +1 -0
  457. codex/static_root/rest_framework/js/csrf.js.br +0 -0
  458. codex/static_root/rest_framework/js/csrf.js.gz +0 -0
  459. codex/static_root/rest_framework/js/jquery-3.7.1.min.2c872dbe60f4.js +2 -0
  460. codex/static_root/rest_framework/js/jquery-3.7.1.min.2c872dbe60f4.js.br +0 -0
  461. codex/static_root/rest_framework/js/jquery-3.7.1.min.2c872dbe60f4.js.gz +0 -0
  462. codex/static_root/rest_framework/js/jquery-3.7.1.min.js +2 -0
  463. codex/static_root/rest_framework/js/jquery-3.7.1.min.js.br +0 -0
  464. codex/static_root/rest_framework/js/jquery-3.7.1.min.js.gz +0 -0
  465. codex/static_root/rest_framework/js/load-ajax-form.8cdb3a9f3466.js +3 -0
  466. codex/static_root/rest_framework/js/load-ajax-form.8cdb3a9f3466.js.br +0 -0
  467. codex/static_root/rest_framework/js/load-ajax-form.js +3 -0
  468. codex/static_root/rest_framework/js/load-ajax-form.js.br +0 -0
  469. codex/static_root/staticfiles.json +1 -1
  470. codex/status.py +1 -0
  471. codex/status_controller.py +1 -0
  472. codex/threads.py +1 -0
  473. codex/urls/api/admin.py +1 -0
  474. codex/urls/api/auth.py +1 -0
  475. codex/urls/api/browser.py +7 -6
  476. codex/urls/api/reader.py +3 -5
  477. codex/urls/api/root.py +1 -0
  478. codex/urls/api/v3.py +1 -0
  479. codex/urls/app.py +10 -0
  480. codex/urls/const.py +6 -0
  481. codex/urls/converters.py +1 -0
  482. codex/urls/opds/authentication.py +3 -3
  483. codex/urls/opds/binary.py +2 -3
  484. codex/urls/opds/root.py +1 -0
  485. codex/urls/opds/v1.py +4 -4
  486. codex/urls/opds/v2.py +4 -1
  487. codex/urls/pwa.py +5 -4
  488. codex/urls/root.py +1 -2
  489. codex/version.py +1 -0
  490. codex/views/admin/api_key.py +1 -0
  491. codex/views/admin/flag.py +1 -0
  492. codex/views/admin/group.py +1 -0
  493. codex/views/admin/library.py +1 -0
  494. codex/views/admin/stats.py +1 -0
  495. codex/views/admin/tasks.py +1 -0
  496. codex/views/admin/user.py +1 -0
  497. codex/views/auth.py +1 -0
  498. codex/views/bookmark.py +42 -5
  499. codex/views/browser/base.py +1 -0
  500. codex/views/browser/browser.py +1 -0
  501. codex/views/browser/browser_annotations.py +6 -0
  502. codex/views/browser/browser_order_by.py +1 -0
  503. codex/views/browser/choices.py +1 -0
  504. codex/views/browser/filters/bookmark.py +1 -0
  505. codex/views/browser/filters/field.py +1 -0
  506. codex/views/browser/filters/group.py +1 -0
  507. codex/views/browser/filters/search.py +1 -0
  508. codex/views/browser/metadata.py +18 -12
  509. codex/views/browser/session.py +1 -0
  510. codex/views/const.py +1 -0
  511. codex/views/cover.py +1 -0
  512. codex/views/download.py +18 -2
  513. codex/views/error.py +1 -0
  514. codex/views/frontend.py +1 -0
  515. codex/views/opds/authentication_v1.py +1 -0
  516. codex/views/opds/binary.py +1 -0
  517. codex/views/opds/util.py +1 -0
  518. codex/views/opds/v1/data.py +1 -0
  519. codex/views/opds/v1/entry/data.py +1 -0
  520. codex/views/opds/v1/entry/entry.py +1 -0
  521. codex/views/opds/v1/entry/links.py +1 -0
  522. codex/views/opds/v1/facets.py +1 -0
  523. codex/views/opds/v1/feed.py +1 -0
  524. codex/views/opds/v1/links.py +1 -0
  525. codex/views/opds/v1/opensearch_v1.py +1 -0
  526. codex/views/opds/v2/const.py +1 -0
  527. codex/views/opds/v2/feed.py +1 -0
  528. codex/views/opds/v2/links.py +1 -0
  529. codex/views/opds/v2/publications.py +1 -0
  530. codex/views/opds/v2/top_links.py +1 -0
  531. codex/views/pwa.py +1 -0
  532. codex/views/reader/reader.py +3 -0
  533. codex/views/reader/session.py +1 -0
  534. codex/views/session.py +1 -0
  535. codex/views/template.py +1 -0
  536. codex/views/version.py +1 -0
  537. codex/websockets/aio_queue.py +1 -0
  538. codex/websockets/consumers.py +1 -0
  539. codex/websockets/listener.py +1 -0
  540. codex/worker_base.py +1 -0
  541. {codex-1.5.0a1.dist-info โ†’ codex-1.5.0a3.dist-info}/METADATA +64 -28
  542. codex-1.5.0a3.dist-info/RECORD +935 -0
  543. {codex-1.5.0a1.dist-info โ†’ codex-1.5.0a3.dist-info}/WHEEL +1 -1
  544. codex/static_root/assets/VCheckbox-Flv8K2j6.89239120bde3.css +0 -1
  545. codex/static_root/assets/VCheckbox-Flv8K2j6.89239120bde3.css.br +0 -0
  546. codex/static_root/assets/VCheckbox-Flv8K2j6.css +0 -1
  547. codex/static_root/assets/VCheckbox-Flv8K2j6.css.br +0 -0
  548. codex/static_root/assets/VCheckbox-lZu_HyjX.55532edda1c7.js +0 -1
  549. codex/static_root/assets/VCheckbox-lZu_HyjX.55532edda1c7.js.br +0 -0
  550. codex/static_root/assets/VCheckbox-lZu_HyjX.55532edda1c7.js.gz +0 -0
  551. codex/static_root/assets/VCheckbox-lZu_HyjX.js +0 -1
  552. codex/static_root/assets/VCheckbox-lZu_HyjX.js.br +0 -0
  553. codex/static_root/assets/VCheckbox-lZu_HyjX.js.gz +0 -0
  554. codex/static_root/assets/VCheckboxBtn-DTj7-ezn.38d5f5ce18bb.js +0 -1
  555. codex/static_root/assets/VCheckboxBtn-DTj7-ezn.38d5f5ce18bb.js.br +0 -0
  556. codex/static_root/assets/VCheckboxBtn-DTj7-ezn.38d5f5ce18bb.js.gz +0 -0
  557. codex/static_root/assets/VCheckboxBtn-DTj7-ezn.js +0 -1
  558. codex/static_root/assets/VCheckboxBtn-DTj7-ezn.js.br +0 -0
  559. codex/static_root/assets/VCheckboxBtn-DTj7-ezn.js.gz +0 -0
  560. codex/static_root/assets/VCombobox-JDYDwU3-.5b3aabc73eeb.css +0 -1
  561. codex/static_root/assets/VCombobox-JDYDwU3-.5b3aabc73eeb.css.br +0 -0
  562. codex/static_root/assets/VCombobox-JDYDwU3-.5b3aabc73eeb.css.gz +0 -0
  563. codex/static_root/assets/VCombobox-JDYDwU3-.css +0 -1
  564. codex/static_root/assets/VCombobox-JDYDwU3-.css.br +0 -0
  565. codex/static_root/assets/VCombobox-JDYDwU3-.css.gz +0 -0
  566. codex/static_root/assets/VCombobox-yrK61bne.46ffe20c03cb.js +0 -1
  567. codex/static_root/assets/VCombobox-yrK61bne.46ffe20c03cb.js.br +0 -0
  568. codex/static_root/assets/VCombobox-yrK61bne.46ffe20c03cb.js.gz +0 -0
  569. codex/static_root/assets/VCombobox-yrK61bne.js +0 -1
  570. codex/static_root/assets/VCombobox-yrK61bne.js.br +0 -0
  571. codex/static_root/assets/VCombobox-yrK61bne.js.gz +0 -0
  572. codex/static_root/assets/VDataTableVirtual-XCcE5Jzw.38e36085850a.js +0 -1
  573. codex/static_root/assets/VDataTableVirtual-XCcE5Jzw.38e36085850a.js.br +0 -0
  574. codex/static_root/assets/VDataTableVirtual-XCcE5Jzw.38e36085850a.js.gz +0 -0
  575. codex/static_root/assets/VDataTableVirtual-XCcE5Jzw.js +0 -1
  576. codex/static_root/assets/VDataTableVirtual-XCcE5Jzw.js.br +0 -0
  577. codex/static_root/assets/VDataTableVirtual-XCcE5Jzw.js.gz +0 -0
  578. codex/static_root/assets/VDataTableVirtual-cJ9EDO4X.1a711f5f2fc0.css.br +0 -0
  579. codex/static_root/assets/VDataTableVirtual-cJ9EDO4X.1a711f5f2fc0.css.gz +0 -0
  580. codex/static_root/assets/VDataTableVirtual-cJ9EDO4X.css.br +0 -0
  581. codex/static_root/assets/VDataTableVirtual-cJ9EDO4X.css.gz +0 -0
  582. codex/static_root/assets/VExpansionPanel-CNbQXKrU.0eb9e9b66a59.js +0 -1
  583. codex/static_root/assets/VExpansionPanel-CNbQXKrU.0eb9e9b66a59.js.br +0 -0
  584. codex/static_root/assets/VExpansionPanel-CNbQXKrU.0eb9e9b66a59.js.gz +0 -0
  585. codex/static_root/assets/VExpansionPanel-CNbQXKrU.js +0 -1
  586. codex/static_root/assets/VExpansionPanel-CNbQXKrU.js.br +0 -0
  587. codex/static_root/assets/VExpansionPanel-CNbQXKrU.js.gz +0 -0
  588. codex/static_root/assets/VExpansionPanel-gdSap9-6.212a9add7ff2.css.br +0 -0
  589. codex/static_root/assets/VExpansionPanel-gdSap9-6.212a9add7ff2.css.gz +0 -0
  590. codex/static_root/assets/VExpansionPanel-gdSap9-6.css.br +0 -0
  591. codex/static_root/assets/VExpansionPanel-gdSap9-6.css.gz +0 -0
  592. codex/static_root/assets/VMain-MR9pvpIS.ffd0ac6a1519.js.br +0 -0
  593. codex/static_root/assets/VMain-MR9pvpIS.ffd0ac6a1519.js.gz +0 -0
  594. codex/static_root/assets/VMain-MR9pvpIS.js.br +0 -0
  595. codex/static_root/assets/VMain-MR9pvpIS.js.gz +0 -0
  596. codex/static_root/assets/VRadioGroup-VGTs8Mzg.00e15ce8aed7.js +0 -1
  597. codex/static_root/assets/VRadioGroup-VGTs8Mzg.00e15ce8aed7.js.br +0 -4
  598. codex/static_root/assets/VRadioGroup-VGTs8Mzg.00e15ce8aed7.js.gz +0 -0
  599. codex/static_root/assets/VRadioGroup-VGTs8Mzg.js +0 -1
  600. codex/static_root/assets/VRadioGroup-VGTs8Mzg.js.br +0 -4
  601. codex/static_root/assets/VRadioGroup-VGTs8Mzg.js.gz +0 -0
  602. codex/static_root/assets/VSelect-3jR8Um8C.0c8560b189db.css +0 -1
  603. codex/static_root/assets/VSelect-3jR8Um8C.0c8560b189db.css.br +0 -0
  604. codex/static_root/assets/VSelect-3jR8Um8C.0c8560b189db.css.gz +0 -0
  605. codex/static_root/assets/VSelect-3jR8Um8C.css +0 -1
  606. codex/static_root/assets/VSelect-3jR8Um8C.css.br +0 -0
  607. codex/static_root/assets/VSelect-3jR8Um8C.css.gz +0 -0
  608. codex/static_root/assets/VSelect-X8dbnoNh.ecc201f01af0.js +0 -1
  609. codex/static_root/assets/VSelect-X8dbnoNh.ecc201f01af0.js.br +0 -0
  610. codex/static_root/assets/VSelect-X8dbnoNh.ecc201f01af0.js.gz +0 -0
  611. codex/static_root/assets/VSelect-X8dbnoNh.js +0 -1
  612. codex/static_root/assets/VSelect-X8dbnoNh.js.br +0 -0
  613. codex/static_root/assets/VSelect-X8dbnoNh.js.gz +0 -0
  614. codex/static_root/assets/VSelectionControl-7--lqaSd.b5af1380564c.js +0 -1
  615. codex/static_root/assets/VSelectionControl-7--lqaSd.b5af1380564c.js.br +0 -0
  616. codex/static_root/assets/VSelectionControl-7--lqaSd.b5af1380564c.js.gz +0 -0
  617. codex/static_root/assets/VSelectionControl-7--lqaSd.js +0 -1
  618. codex/static_root/assets/VSelectionControl-7--lqaSd.js.br +0 -0
  619. codex/static_root/assets/VSelectionControl-7--lqaSd.js.gz +0 -0
  620. codex/static_root/assets/VTable-XNR_fTYM.4be31a3a6cd7.js.br +0 -0
  621. codex/static_root/assets/VTable-XNR_fTYM.4be31a3a6cd7.js.gz +0 -0
  622. codex/static_root/assets/VTable-XNR_fTYM.js.br +0 -0
  623. codex/static_root/assets/VTable-XNR_fTYM.js.gz +0 -0
  624. codex/static_root/assets/VTable-aiByCThw.85589025b93b.css +0 -1
  625. codex/static_root/assets/VTable-aiByCThw.85589025b93b.css.br +0 -0
  626. codex/static_root/assets/VTable-aiByCThw.85589025b93b.css.gz +0 -0
  627. codex/static_root/assets/VTable-aiByCThw.css +0 -1
  628. codex/static_root/assets/VTable-aiByCThw.css.br +0 -0
  629. codex/static_root/assets/VTable-aiByCThw.css.gz +0 -0
  630. codex/static_root/assets/VTextField-1_gRJ3Nt.6a1540e0ed41.js +0 -1
  631. codex/static_root/assets/VTextField-1_gRJ3Nt.6a1540e0ed41.js.br +0 -0
  632. codex/static_root/assets/VTextField-1_gRJ3Nt.6a1540e0ed41.js.gz +0 -0
  633. codex/static_root/assets/VTextField-1_gRJ3Nt.js +0 -1
  634. codex/static_root/assets/VTextField-1_gRJ3Nt.js.br +0 -0
  635. codex/static_root/assets/VTextField-1_gRJ3Nt.js.gz +0 -0
  636. codex/static_root/assets/VTextField-8NJPNEpH.190723039dea.css.br +0 -0
  637. codex/static_root/assets/VTextField-8NJPNEpH.190723039dea.css.gz +0 -0
  638. codex/static_root/assets/VTextField-8NJPNEpH.css.br +0 -0
  639. codex/static_root/assets/VTextField-8NJPNEpH.css.gz +0 -0
  640. codex/static_root/assets/VToolbar-PLads6MY.css +0 -1
  641. codex/static_root/assets/VToolbar-PLads6MY.css.br +0 -0
  642. codex/static_root/assets/VToolbar-PLads6MY.css.gz +0 -0
  643. codex/static_root/assets/VToolbar-PLads6MY.ebe8dfc407e8.css +0 -1
  644. codex/static_root/assets/VToolbar-PLads6MY.ebe8dfc407e8.css.br +0 -0
  645. codex/static_root/assets/VToolbar-PLads6MY.ebe8dfc407e8.css.gz +0 -0
  646. codex/static_root/assets/VToolbar-g8yJLQO4.87d49e1177ce.js +0 -7
  647. codex/static_root/assets/VToolbar-g8yJLQO4.87d49e1177ce.js.br +0 -0
  648. codex/static_root/assets/VToolbar-g8yJLQO4.87d49e1177ce.js.gz +0 -0
  649. codex/static_root/assets/VToolbar-g8yJLQO4.js +0 -7
  650. codex/static_root/assets/VToolbar-g8yJLQO4.js.br +0 -0
  651. codex/static_root/assets/VToolbar-g8yJLQO4.js.gz +0 -0
  652. codex/static_root/assets/VWindowItem--TlRwQ5R.css.br +0 -0
  653. codex/static_root/assets/VWindowItem--TlRwQ5R.css.gz +0 -0
  654. codex/static_root/assets/VWindowItem--TlRwQ5R.fe195e056b07.css.br +0 -0
  655. codex/static_root/assets/VWindowItem--TlRwQ5R.fe195e056b07.css.gz +0 -0
  656. codex/static_root/assets/VWindowItem-i5tFRaI4.8a8af6c6de17.js +0 -1
  657. codex/static_root/assets/VWindowItem-i5tFRaI4.8a8af6c6de17.js.br +0 -0
  658. codex/static_root/assets/VWindowItem-i5tFRaI4.8a8af6c6de17.js.gz +0 -0
  659. codex/static_root/assets/VWindowItem-i5tFRaI4.js +0 -1
  660. codex/static_root/assets/VWindowItem-i5tFRaI4.js.br +0 -0
  661. codex/static_root/assets/VWindowItem-i5tFRaI4.js.gz +0 -0
  662. codex/static_root/assets/admin-MwCSFwIp.6de10f13b01b.css.br +0 -0
  663. codex/static_root/assets/admin-MwCSFwIp.6de10f13b01b.css.gz +0 -0
  664. codex/static_root/assets/admin-MwCSFwIp.css.br +0 -0
  665. codex/static_root/assets/admin-MwCSFwIp.css.gz +0 -0
  666. codex/static_root/assets/admin-Vvc8IQ8V.f128fffcff98.js +0 -1
  667. codex/static_root/assets/admin-Vvc8IQ8V.f128fffcff98.js.br +0 -0
  668. codex/static_root/assets/admin-Vvc8IQ8V.f128fffcff98.js.gz +0 -0
  669. codex/static_root/assets/admin-Vvc8IQ8V.js +0 -1
  670. codex/static_root/assets/admin-Vvc8IQ8V.js.br +0 -0
  671. codex/static_root/assets/admin-Vvc8IQ8V.js.gz +0 -0
  672. codex/static_root/assets/admin-drawer-panel-qf94Ysts.c0696c636fab.css.br +0 -0
  673. codex/static_root/assets/admin-drawer-panel-qf94Ysts.c0696c636fab.css.gz +0 -0
  674. codex/static_root/assets/admin-drawer-panel-qf94Ysts.css.br +0 -0
  675. codex/static_root/assets/admin-drawer-panel-qf94Ysts.css.gz +0 -0
  676. codex/static_root/assets/admin-drawer-panel-vjNsHbQp.e17cb629a39c.js +0 -33
  677. codex/static_root/assets/admin-drawer-panel-vjNsHbQp.e17cb629a39c.js.br +0 -0
  678. codex/static_root/assets/admin-drawer-panel-vjNsHbQp.e17cb629a39c.js.gz +0 -0
  679. codex/static_root/assets/admin-drawer-panel-vjNsHbQp.js +0 -33
  680. codex/static_root/assets/admin-drawer-panel-vjNsHbQp.js.br +0 -0
  681. codex/static_root/assets/admin-drawer-panel-vjNsHbQp.js.gz +0 -0
  682. codex/static_root/assets/browser-R-Dbyfan.380647195802.js +0 -1
  683. codex/static_root/assets/browser-R-Dbyfan.380647195802.js.br +0 -0
  684. codex/static_root/assets/browser-R-Dbyfan.380647195802.js.gz +0 -0
  685. codex/static_root/assets/browser-R-Dbyfan.js +0 -1
  686. codex/static_root/assets/browser-R-Dbyfan.js.br +0 -0
  687. codex/static_root/assets/browser-R-Dbyfan.js.gz +0 -0
  688. codex/static_root/assets/browser-hLiDgCIH.6dd225a38a22.css +0 -1
  689. codex/static_root/assets/browser-hLiDgCIH.6dd225a38a22.css.br +0 -0
  690. codex/static_root/assets/browser-hLiDgCIH.6dd225a38a22.css.gz +0 -0
  691. codex/static_root/assets/browser-hLiDgCIH.css +0 -1
  692. codex/static_root/assets/browser-hLiDgCIH.css.br +0 -0
  693. codex/static_root/assets/browser-hLiDgCIH.css.gz +0 -0
  694. codex/static_root/assets/change-password-dialog-xWZubfnu.f721e940b573.js +0 -1
  695. codex/static_root/assets/change-password-dialog-xWZubfnu.f721e940b573.js.br +0 -0
  696. codex/static_root/assets/change-password-dialog-xWZubfnu.f721e940b573.js.gz +0 -0
  697. codex/static_root/assets/change-password-dialog-xWZubfnu.js +0 -1
  698. codex/static_root/assets/change-password-dialog-xWZubfnu.js.br +0 -0
  699. codex/static_root/assets/change-password-dialog-xWZubfnu.js.gz +0 -0
  700. codex/static_root/assets/confirm-dialog-oEnGefnv.b1227348d465.js.br +0 -0
  701. codex/static_root/assets/confirm-dialog-oEnGefnv.b1227348d465.js.gz +0 -0
  702. codex/static_root/assets/confirm-dialog-oEnGefnv.js.br +0 -0
  703. codex/static_root/assets/confirm-dialog-oEnGefnv.js.gz +0 -0
  704. codex/static_root/assets/confirm-footer-wmmDHzIL.04fb93e7daf3.css.br +0 -0
  705. codex/static_root/assets/confirm-footer-wmmDHzIL.04fb93e7daf3.css.gz +0 -0
  706. codex/static_root/assets/confirm-footer-wmmDHzIL.css.br +0 -0
  707. codex/static_root/assets/confirm-footer-wmmDHzIL.css.gz +0 -0
  708. codex/static_root/assets/confirm-footer-xJ8_9LG8.5a506ba86e71.js +0 -1
  709. codex/static_root/assets/confirm-footer-xJ8_9LG8.5a506ba86e71.js.br +0 -0
  710. codex/static_root/assets/confirm-footer-xJ8_9LG8.5a506ba86e71.js.gz +0 -0
  711. codex/static_root/assets/confirm-footer-xJ8_9LG8.js +0 -1
  712. codex/static_root/assets/confirm-footer-xJ8_9LG8.js.br +0 -0
  713. codex/static_root/assets/confirm-footer-xJ8_9LG8.js.gz +0 -0
  714. codex/static_root/assets/datetime-column-wfJgH61c.5e9a5e4f4942.js.br +0 -0
  715. codex/static_root/assets/datetime-column-wfJgH61c.5e9a5e4f4942.js.gz +0 -0
  716. codex/static_root/assets/datetime-column-wfJgH61c.js.br +0 -0
  717. codex/static_root/assets/datetime-column-wfJgH61c.js.gz +0 -0
  718. codex/static_root/assets/filter-4tBtSdTO.5bc46faa2c9b.js +0 -1
  719. codex/static_root/assets/filter-4tBtSdTO.5bc46faa2c9b.js.br +0 -0
  720. codex/static_root/assets/filter-4tBtSdTO.5bc46faa2c9b.js.gz +0 -0
  721. codex/static_root/assets/filter-4tBtSdTO.js +0 -1
  722. codex/static_root/assets/filter-4tBtSdTO.js.br +0 -0
  723. codex/static_root/assets/filter-4tBtSdTO.js.gz +0 -0
  724. codex/static_root/assets/flag-tab-g9dmSvT7.64fc848dba03.js.br +0 -0
  725. codex/static_root/assets/flag-tab-g9dmSvT7.64fc848dba03.js.gz +0 -0
  726. codex/static_root/assets/flag-tab-g9dmSvT7.js.br +0 -0
  727. codex/static_root/assets/flag-tab-g9dmSvT7.js.gz +0 -0
  728. codex/static_root/assets/group-tab-RJPwy0ju.ea278c40018d.js +0 -1
  729. codex/static_root/assets/group-tab-RJPwy0ju.ea278c40018d.js.br +0 -0
  730. codex/static_root/assets/group-tab-RJPwy0ju.ea278c40018d.js.gz +0 -0
  731. codex/static_root/assets/group-tab-RJPwy0ju.js +0 -1
  732. codex/static_root/assets/group-tab-RJPwy0ju.js.br +0 -0
  733. codex/static_root/assets/group-tab-RJPwy0ju.js.gz +0 -0
  734. codex/static_root/assets/http-error-Afzc_2W_.2be94674f63d.js +0 -1
  735. codex/static_root/assets/http-error-Afzc_2W_.2be94674f63d.js.br +0 -3
  736. codex/static_root/assets/http-error-Afzc_2W_.2be94674f63d.js.gz +0 -0
  737. codex/static_root/assets/http-error-Afzc_2W_.js +0 -1
  738. codex/static_root/assets/http-error-Afzc_2W_.js.br +0 -3
  739. codex/static_root/assets/http-error-Afzc_2W_.js.gz +0 -0
  740. codex/static_root/assets/library-tab-62PYybeF.64cdd617bb68.js +0 -1
  741. codex/static_root/assets/library-tab-62PYybeF.64cdd617bb68.js.br +0 -0
  742. codex/static_root/assets/library-tab-62PYybeF.64cdd617bb68.js.gz +0 -0
  743. codex/static_root/assets/library-tab-62PYybeF.js +0 -1
  744. codex/static_root/assets/library-tab-62PYybeF.js.br +0 -0
  745. codex/static_root/assets/library-tab-62PYybeF.js.gz +0 -0
  746. codex/static_root/assets/main-0jpTXekm.ad88f977847a.js +0 -37
  747. codex/static_root/assets/main-0jpTXekm.ad88f977847a.js.br +0 -0
  748. codex/static_root/assets/main-0jpTXekm.ad88f977847a.js.gz +0 -0
  749. codex/static_root/assets/main-0jpTXekm.js +0 -37
  750. codex/static_root/assets/main-0jpTXekm.js.br +0 -0
  751. codex/static_root/assets/main-0jpTXekm.js.gz +0 -0
  752. codex/static_root/assets/main-eLpQR-nY.052265de7d69.css.br +0 -0
  753. codex/static_root/assets/main-eLpQR-nY.052265de7d69.css.gz +0 -0
  754. codex/static_root/assets/main-eLpQR-nY.css.br +0 -0
  755. codex/static_root/assets/main-eLpQR-nY.css.gz +0 -0
  756. codex/static_root/assets/metadata-dialog-GoqskInA.4e2d05d79644.css +0 -1
  757. codex/static_root/assets/metadata-dialog-GoqskInA.4e2d05d79644.css.br +0 -0
  758. codex/static_root/assets/metadata-dialog-GoqskInA.4e2d05d79644.css.gz +0 -0
  759. codex/static_root/assets/metadata-dialog-GoqskInA.css +0 -1
  760. codex/static_root/assets/metadata-dialog-GoqskInA.css.br +0 -0
  761. codex/static_root/assets/metadata-dialog-GoqskInA.css.gz +0 -0
  762. codex/static_root/assets/metadata-dialog-jRRTHoGu.8b30e318e621.js +0 -1
  763. codex/static_root/assets/metadata-dialog-jRRTHoGu.8b30e318e621.js.br +0 -0
  764. codex/static_root/assets/metadata-dialog-jRRTHoGu.8b30e318e621.js.gz +0 -0
  765. codex/static_root/assets/metadata-dialog-jRRTHoGu.js +0 -1
  766. codex/static_root/assets/metadata-dialog-jRRTHoGu.js.br +0 -0
  767. codex/static_root/assets/metadata-dialog-jRRTHoGu.js.gz +0 -0
  768. codex/static_root/assets/page-pdf-Pldb5VSY.css +0 -1
  769. codex/static_root/assets/page-pdf-Pldb5VSY.css.br +0 -0
  770. codex/static_root/assets/page-pdf-Pldb5VSY.css.gz +0 -0
  771. codex/static_root/assets/page-pdf-Pldb5VSY.e936ccb145bf.css +0 -1
  772. codex/static_root/assets/page-pdf-Pldb5VSY.e936ccb145bf.css.br +0 -0
  773. codex/static_root/assets/page-pdf-Pldb5VSY.e936ccb145bf.css.gz +0 -0
  774. codex/static_root/assets/page-pdf-hfPKZiCx.7ac17df40bdf.js +0 -64
  775. codex/static_root/assets/page-pdf-hfPKZiCx.7ac17df40bdf.js.br +0 -0
  776. codex/static_root/assets/page-pdf-hfPKZiCx.7ac17df40bdf.js.gz +0 -0
  777. codex/static_root/assets/page-pdf-hfPKZiCx.js +0 -64
  778. codex/static_root/assets/page-pdf-hfPKZiCx.js.br +0 -0
  779. codex/static_root/assets/page-pdf-hfPKZiCx.js.gz +0 -0
  780. codex/static_root/assets/reader-3_PJt6OE.96d9a71d08ab.css +0 -1
  781. codex/static_root/assets/reader-3_PJt6OE.96d9a71d08ab.css.br +0 -0
  782. codex/static_root/assets/reader-3_PJt6OE.96d9a71d08ab.css.gz +0 -0
  783. codex/static_root/assets/reader-3_PJt6OE.css +0 -1
  784. codex/static_root/assets/reader-3_PJt6OE.css.br +0 -0
  785. codex/static_root/assets/reader-3_PJt6OE.css.gz +0 -0
  786. codex/static_root/assets/reader-x2nc0L9U.ec4cbd748751.js +0 -7
  787. codex/static_root/assets/reader-x2nc0L9U.ec4cbd748751.js.br +0 -0
  788. codex/static_root/assets/reader-x2nc0L9U.ec4cbd748751.js.gz +0 -0
  789. codex/static_root/assets/reader-x2nc0L9U.js +0 -7
  790. codex/static_root/assets/reader-x2nc0L9U.js.br +0 -0
  791. codex/static_root/assets/reader-x2nc0L9U.js.gz +0 -0
  792. codex/static_root/assets/stats-tab-MzBiUauN.ce46aa5fafd1.js +0 -1
  793. codex/static_root/assets/stats-tab-MzBiUauN.ce46aa5fafd1.js.br +0 -0
  794. codex/static_root/assets/stats-tab-MzBiUauN.ce46aa5fafd1.js.gz +0 -0
  795. codex/static_root/assets/stats-tab-MzBiUauN.js +0 -1
  796. codex/static_root/assets/stats-tab-MzBiUauN.js.br +0 -0
  797. codex/static_root/assets/stats-tab-MzBiUauN.js.gz +0 -0
  798. codex/static_root/assets/stats-tab-p4QMYgdc.2f98833311d8.css +0 -1
  799. codex/static_root/assets/stats-tab-p4QMYgdc.2f98833311d8.css.br +0 -0
  800. codex/static_root/assets/stats-tab-p4QMYgdc.2f98833311d8.css.gz +0 -0
  801. codex/static_root/assets/stats-tab-p4QMYgdc.css +0 -1
  802. codex/static_root/assets/stats-tab-p4QMYgdc.css.br +0 -0
  803. codex/static_root/assets/stats-tab-p4QMYgdc.css.gz +0 -0
  804. codex/static_root/assets/task-tab-EZTIgaEM.f85bea0d3d37.js +0 -1
  805. codex/static_root/assets/task-tab-EZTIgaEM.f85bea0d3d37.js.br +0 -0
  806. codex/static_root/assets/task-tab-EZTIgaEM.f85bea0d3d37.js.gz +0 -0
  807. codex/static_root/assets/task-tab-EZTIgaEM.js +0 -1
  808. codex/static_root/assets/task-tab-EZTIgaEM.js.br +0 -0
  809. codex/static_root/assets/task-tab-EZTIgaEM.js.gz +0 -0
  810. codex/static_root/assets/task-tab-ZlzQK_L_.11bd9219039b.css +0 -1
  811. codex/static_root/assets/task-tab-ZlzQK_L_.11bd9219039b.css.br +0 -4
  812. codex/static_root/assets/task-tab-ZlzQK_L_.11bd9219039b.css.gz +0 -0
  813. codex/static_root/assets/task-tab-ZlzQK_L_.css +0 -1
  814. codex/static_root/assets/task-tab-ZlzQK_L_.css.br +0 -4
  815. codex/static_root/assets/task-tab-ZlzQK_L_.css.gz +0 -0
  816. codex/static_root/assets/to-case-FdEoSAB7.98a284e67723.js +0 -1
  817. codex/static_root/assets/to-case-FdEoSAB7.98a284e67723.js.br +0 -0
  818. codex/static_root/assets/to-case-FdEoSAB7.js +0 -1
  819. codex/static_root/assets/to-case-FdEoSAB7.js.br +0 -0
  820. codex/static_root/assets/user-tab-pfW96Jlo.93e4cca2d548.js +0 -1
  821. codex/static_root/assets/user-tab-pfW96Jlo.93e4cca2d548.js.br +0 -0
  822. codex/static_root/assets/user-tab-pfW96Jlo.93e4cca2d548.js.gz +0 -0
  823. codex/static_root/assets/user-tab-pfW96Jlo.js +0 -1
  824. codex/static_root/assets/user-tab-pfW96Jlo.js.br +0 -0
  825. codex/static_root/assets/user-tab-pfW96Jlo.js.gz +0 -0
  826. codex/static_root/manifest.0416a9c9f599.json +0 -572
  827. codex/static_root/manifest.0416a9c9f599.json.br +0 -0
  828. codex/static_root/manifest.0416a9c9f599.json.gz +0 -0
  829. codex/static_root/rest_framework/css/bootstrap-tweaks.46ed116b0edd.css.br +0 -0
  830. codex/static_root/rest_framework/css/bootstrap-tweaks.46ed116b0edd.css.gz +0 -0
  831. codex/static_root/rest_framework/js/ajax-form.0ea6e6052ab5.js.br +0 -0
  832. codex/static_root/rest_framework/js/ajax-form.0ea6e6052ab5.js.gz +0 -0
  833. codex/static_root/rest_framework/js/csrf.969930007329.js.br +0 -0
  834. codex/static_root/rest_framework/js/csrf.969930007329.js.gz +0 -0
  835. codex/static_root/rest_framework/js/jquery-3.5.1.min.dc5e7f18c8d3.js +0 -2
  836. codex/static_root/rest_framework/js/jquery-3.5.1.min.dc5e7f18c8d3.js.br +0 -0
  837. codex/static_root/rest_framework/js/jquery-3.5.1.min.dc5e7f18c8d3.js.gz +0 -0
  838. codex/static_root/rest_framework/js/jquery-3.5.1.min.js +0 -2
  839. codex/static_root/rest_framework/js/jquery-3.5.1.min.js.br +0 -0
  840. codex/static_root/rest_framework/js/jquery-3.5.1.min.js.gz +0 -0
  841. codex-1.5.0a1.dist-info/RECORD +0 -929
  842. /codex/static_root/assets/{VMain-crd-1eHM.a00e206f3cfa.css โ†’ VMain-Byt37V4c.a00e206f3cfa.css} +0 -0
  843. /codex/static_root/assets/{VMain-crd-1eHM.a00e206f3cfa.css.br โ†’ VMain-Byt37V4c.a00e206f3cfa.css.br} +0 -0
  844. /codex/static_root/assets/{VMain-crd-1eHM.a00e206f3cfa.css.gz โ†’ VMain-Byt37V4c.a00e206f3cfa.css.gz} +0 -0
  845. /codex/static_root/assets/{VMain-crd-1eHM.css โ†’ VMain-Byt37V4c.css} +0 -0
  846. /codex/static_root/assets/{VMain-crd-1eHM.css.br โ†’ VMain-Byt37V4c.css.br} +0 -0
  847. /codex/static_root/assets/{VMain-crd-1eHM.css.gz โ†’ VMain-Byt37V4c.css.gz} +0 -0
  848. /codex/static_root/assets/{VRadioGroup-Itqj_Vrv.8e3741381961.css โ†’ VRadioGroup-i2qP9Wu9.8e3741381961.css} +0 -0
  849. /codex/static_root/assets/{VRadioGroup-Itqj_Vrv.8e3741381961.css.br โ†’ VRadioGroup-i2qP9Wu9.8e3741381961.css.br} +0 -0
  850. /codex/static_root/assets/{VRadioGroup-Itqj_Vrv.8e3741381961.css.gz โ†’ VRadioGroup-i2qP9Wu9.8e3741381961.css.gz} +0 -0
  851. /codex/static_root/assets/{VRadioGroup-Itqj_Vrv.css โ†’ VRadioGroup-i2qP9Wu9.css} +0 -0
  852. /codex/static_root/assets/{VRadioGroup-Itqj_Vrv.css.br โ†’ VRadioGroup-i2qP9Wu9.css.br} +0 -0
  853. /codex/static_root/assets/{VRadioGroup-Itqj_Vrv.css.gz โ†’ VRadioGroup-i2qP9Wu9.css.gz} +0 -0
  854. /codex/static_root/assets/{VSelectionControl-RavvtvCK.9687c77461fc.css โ†’ VSelectionControl-BFq--28I.9687c77461fc.css} +0 -0
  855. /codex/static_root/assets/{VSelectionControl-RavvtvCK.9687c77461fc.css.br โ†’ VSelectionControl-BFq--28I.9687c77461fc.css.br} +0 -0
  856. /codex/static_root/assets/{VSelectionControl-RavvtvCK.9687c77461fc.css.gz โ†’ VSelectionControl-BFq--28I.9687c77461fc.css.gz} +0 -0
  857. /codex/static_root/assets/{VSelectionControl-RavvtvCK.css โ†’ VSelectionControl-BFq--28I.css} +0 -0
  858. /codex/static_root/assets/{VSelectionControl-RavvtvCK.css.br โ†’ VSelectionControl-BFq--28I.css.br} +0 -0
  859. /codex/static_root/assets/{VSelectionControl-RavvtvCK.css.gz โ†’ VSelectionControl-BFq--28I.css.gz} +0 -0
  860. /codex/static_root/assets/{change-password-dialog-UZr5DYqw.2fead58a78c7.css โ†’ change-password-dialog-BRmvkNir.2fead58a78c7.css} +0 -0
  861. /codex/static_root/assets/{change-password-dialog-UZr5DYqw.2fead58a78c7.css.br โ†’ change-password-dialog-BRmvkNir.2fead58a78c7.css.br} +0 -0
  862. /codex/static_root/assets/{change-password-dialog-UZr5DYqw.2fead58a78c7.css.gz โ†’ change-password-dialog-BRmvkNir.2fead58a78c7.css.gz} +0 -0
  863. /codex/static_root/assets/{change-password-dialog-UZr5DYqw.css โ†’ change-password-dialog-BRmvkNir.css} +0 -0
  864. /codex/static_root/assets/{change-password-dialog-UZr5DYqw.css.br โ†’ change-password-dialog-BRmvkNir.css.br} +0 -0
  865. /codex/static_root/assets/{change-password-dialog-UZr5DYqw.css.gz โ†’ change-password-dialog-BRmvkNir.css.gz} +0 -0
  866. /codex/static_root/assets/{confirm-dialog-ZoXnSwsX.7c2103d319d4.css โ†’ confirm-dialog-BmhedLCx.7c2103d319d4.css} +0 -0
  867. /codex/static_root/assets/{confirm-dialog-ZoXnSwsX.css โ†’ confirm-dialog-BmhedLCx.css} +0 -0
  868. /codex/static_root/assets/{datetime-column-Vln78oZ2.a4a94ba57c73.css โ†’ datetime-column-BWWfvyhn.a4a94ba57c73.css} +0 -0
  869. /codex/static_root/assets/{datetime-column-Vln78oZ2.a4a94ba57c73.css.br โ†’ datetime-column-BWWfvyhn.a4a94ba57c73.css.br} +0 -0
  870. /codex/static_root/assets/{datetime-column-Vln78oZ2.css โ†’ datetime-column-BWWfvyhn.css} +0 -0
  871. /codex/static_root/assets/{datetime-column-Vln78oZ2.css.br โ†’ datetime-column-BWWfvyhn.css.br} +0 -0
  872. /codex/static_root/assets/{flag-tab-Iblj4w2l.6bf1e65123e6.css โ†’ flag-tab-huWPjDaW.6bf1e65123e6.css} +0 -0
  873. /codex/static_root/assets/{flag-tab-Iblj4w2l.6bf1e65123e6.css.br โ†’ flag-tab-huWPjDaW.6bf1e65123e6.css.br} +0 -0
  874. /codex/static_root/assets/{flag-tab-Iblj4w2l.6bf1e65123e6.css.gz โ†’ flag-tab-huWPjDaW.6bf1e65123e6.css.gz} +0 -0
  875. /codex/static_root/assets/{flag-tab-Iblj4w2l.css โ†’ flag-tab-huWPjDaW.css} +0 -0
  876. /codex/static_root/assets/{flag-tab-Iblj4w2l.css.br โ†’ flag-tab-huWPjDaW.css.br} +0 -0
  877. /codex/static_root/assets/{flag-tab-Iblj4w2l.css.gz โ†’ flag-tab-huWPjDaW.css.gz} +0 -0
  878. /codex/static_root/assets/{group-tab-Nw18UnrX.5fc2cfa31669.css โ†’ group-tab-3DXxSetf.5fc2cfa31669.css} +0 -0
  879. /codex/static_root/assets/{group-tab-Nw18UnrX.5fc2cfa31669.css.br โ†’ group-tab-3DXxSetf.5fc2cfa31669.css.br} +0 -0
  880. /codex/static_root/assets/{group-tab-Nw18UnrX.5fc2cfa31669.css.gz โ†’ group-tab-3DXxSetf.5fc2cfa31669.css.gz} +0 -0
  881. /codex/static_root/assets/{group-tab-Nw18UnrX.css โ†’ group-tab-3DXxSetf.css} +0 -0
  882. /codex/static_root/assets/{group-tab-Nw18UnrX.css.br โ†’ group-tab-3DXxSetf.css.br} +0 -0
  883. /codex/static_root/assets/{group-tab-Nw18UnrX.css.gz โ†’ group-tab-3DXxSetf.css.gz} +0 -0
  884. /codex/static_root/assets/{http-error-tuVnY1gp.1c7337ad6e1d.css โ†’ http-error-C25WdjWC.1c7337ad6e1d.css} +0 -0
  885. /codex/static_root/assets/{http-error-tuVnY1gp.1c7337ad6e1d.css.br โ†’ http-error-C25WdjWC.1c7337ad6e1d.css.br} +0 -0
  886. /codex/static_root/assets/{http-error-tuVnY1gp.1c7337ad6e1d.css.gz โ†’ http-error-C25WdjWC.1c7337ad6e1d.css.gz} +0 -0
  887. /codex/static_root/assets/{http-error-tuVnY1gp.css โ†’ http-error-C25WdjWC.css} +0 -0
  888. /codex/static_root/assets/{http-error-tuVnY1gp.css.br โ†’ http-error-C25WdjWC.css.br} +0 -0
  889. /codex/static_root/assets/{http-error-tuVnY1gp.css.gz โ†’ http-error-C25WdjWC.css.gz} +0 -0
  890. /codex/static_root/assets/{index-RrPhDVxT.36d50c91b2c1.js โ†’ index-DUjeNg4x.36d50c91b2c1.js} +0 -0
  891. /codex/static_root/assets/{index-RrPhDVxT.36d50c91b2c1.js.br โ†’ index-DUjeNg4x.36d50c91b2c1.js.br} +0 -0
  892. /codex/static_root/assets/{index-RrPhDVxT.36d50c91b2c1.js.gz โ†’ index-DUjeNg4x.36d50c91b2c1.js.gz} +0 -0
  893. /codex/static_root/assets/{index-RrPhDVxT.js โ†’ index-DUjeNg4x.js} +0 -0
  894. /codex/static_root/assets/{index-RrPhDVxT.js.br โ†’ index-DUjeNg4x.js.br} +0 -0
  895. /codex/static_root/assets/{index-RrPhDVxT.js.gz โ†’ index-DUjeNg4x.js.gz} +0 -0
  896. /codex/static_root/assets/{library-tab-2Sg7UOb_.c8123e4bc5a4.css โ†’ library-tab-DZKDtQ5v.c8123e4bc5a4.css} +0 -0
  897. /codex/static_root/assets/{library-tab-2Sg7UOb_.c8123e4bc5a4.css.br โ†’ library-tab-DZKDtQ5v.c8123e4bc5a4.css.br} +0 -0
  898. /codex/static_root/assets/{library-tab-2Sg7UOb_.c8123e4bc5a4.css.gz โ†’ library-tab-DZKDtQ5v.c8123e4bc5a4.css.gz} +0 -0
  899. /codex/static_root/assets/{library-tab-2Sg7UOb_.css โ†’ library-tab-DZKDtQ5v.css} +0 -0
  900. /codex/static_root/assets/{library-tab-2Sg7UOb_.css.br โ†’ library-tab-DZKDtQ5v.css.br} +0 -0
  901. /codex/static_root/assets/{library-tab-2Sg7UOb_.css.gz โ†’ library-tab-DZKDtQ5v.css.gz} +0 -0
  902. /codex/static_root/assets/{materialdesignicons-webfont-e5j8FT_3.6e435534bd35.ttf โ†’ materialdesignicons-webfont-B7mPwVP_.6e435534bd35.ttf} +0 -0
  903. /codex/static_root/assets/{materialdesignicons-webfont-e5j8FT_3.6e435534bd35.ttf.br โ†’ materialdesignicons-webfont-B7mPwVP_.6e435534bd35.ttf.br} +0 -0
  904. /codex/static_root/assets/{materialdesignicons-webfont-e5j8FT_3.6e435534bd35.ttf.gz โ†’ materialdesignicons-webfont-B7mPwVP_.6e435534bd35.ttf.gz} +0 -0
  905. /codex/static_root/assets/{materialdesignicons-webfont-e5j8FT_3.ttf โ†’ materialdesignicons-webfont-B7mPwVP_.ttf} +0 -0
  906. /codex/static_root/assets/{materialdesignicons-webfont-e5j8FT_3.ttf.br โ†’ materialdesignicons-webfont-B7mPwVP_.ttf.br} +0 -0
  907. /codex/static_root/assets/{materialdesignicons-webfont-e5j8FT_3.ttf.gz โ†’ materialdesignicons-webfont-B7mPwVP_.ttf.gz} +0 -0
  908. /codex/static_root/assets/{materialdesignicons-webfont-kq_ClZaA.8ced95a05e3c.eot โ†’ materialdesignicons-webfont-CSr8KVlo.8ced95a05e3c.eot} +0 -0
  909. /codex/static_root/assets/{materialdesignicons-webfont-kq_ClZaA.8ced95a05e3c.eot.br โ†’ materialdesignicons-webfont-CSr8KVlo.8ced95a05e3c.eot.br} +0 -0
  910. /codex/static_root/assets/{materialdesignicons-webfont-kq_ClZaA.8ced95a05e3c.eot.gz โ†’ materialdesignicons-webfont-CSr8KVlo.8ced95a05e3c.eot.gz} +0 -0
  911. /codex/static_root/assets/{materialdesignicons-webfont-kq_ClZaA.eot โ†’ materialdesignicons-webfont-CSr8KVlo.eot} +0 -0
  912. /codex/static_root/assets/{materialdesignicons-webfont-kq_ClZaA.eot.br โ†’ materialdesignicons-webfont-CSr8KVlo.eot.br} +0 -0
  913. /codex/static_root/assets/{materialdesignicons-webfont-kq_ClZaA.eot.gz โ†’ materialdesignicons-webfont-CSr8KVlo.eot.gz} +0 -0
  914. /codex/static_root/assets/{materialdesignicons-webfont-6eb_lmTU.1d7bcee1b302.woff2 โ†’ materialdesignicons-webfont-Dp5v-WZN.1d7bcee1b302.woff2} +0 -0
  915. /codex/static_root/assets/{materialdesignicons-webfont-6eb_lmTU.woff2 โ†’ materialdesignicons-webfont-Dp5v-WZN.woff2} +0 -0
  916. /codex/static_root/assets/{materialdesignicons-webfont-D15t_tsC.026b7ac9c43c.woff โ†’ materialdesignicons-webfont-PXm3-2wK.026b7ac9c43c.woff} +0 -0
  917. /codex/static_root/assets/{materialdesignicons-webfont-D15t_tsC.woff โ†’ materialdesignicons-webfont-PXm3-2wK.woff} +0 -0
  918. {codex-1.5.0a1.dist-info โ†’ codex-1.5.0a3.dist-info}/LICENSE +0 -0
  919. {codex-1.5.0a1.dist-info โ†’ codex-1.5.0a3.dist-info}/entry_points.txt +0 -0
@@ -1,4 +1,5 @@
1
1
  """Search Filters Methods."""
2
+
2
3
  from django.db.models import Q
3
4
 
4
5
  from codex._vendor.haystack.query import SearchQuerySet
@@ -1,4 +1,5 @@
1
1
  """View for marking comics read and unread."""
2
+
2
3
  from typing import ClassVar
3
4
 
4
5
  from django.db.models import Count, F, IntegerField, Subquery, Value
@@ -7,11 +8,13 @@ from rest_framework.exceptions import NotFound
7
8
  from rest_framework.response import Response
8
9
 
9
10
  from codex.librarian.importer.const import COMIC_M2M_FIELD_NAMES
11
+ from codex.logger.logging import get_logger
10
12
  from codex.models import AdminFlag, Comic
11
13
  from codex.serializers.metadata import MetadataSerializer
12
14
  from codex.views.auth import IsAuthenticatedOrEnabledNonUsers
13
15
  from codex.views.browser.browser_annotations import BrowserAnnotationsView
14
16
 
17
+ LOG = get_logger(__name__)
15
18
  _ADMIN_OR_FILE_VIEW_ENABLED_COMIC_VALUE_FIELDS = frozenset({"path"})
16
19
  _COMIC_VALUE_FIELDS_CONFLICTING = frozenset(
17
20
  {
@@ -157,7 +160,7 @@ class MetadataView(BrowserAnnotationsView):
157
160
  if self.is_admin():
158
161
  return
159
162
  if self._is_enabled_folder_view():
160
- library_path = obj.get("library_path", "")
163
+ library_path = obj.library_path
161
164
  obj.path = obj.path.removeprefix(library_path)
162
165
  else:
163
166
  obj.path = ""
@@ -275,14 +278,17 @@ class MetadataView(BrowserAnnotationsView):
275
278
  def get(self, *_args, **_kwargs):
276
279
  """Get metadata for a filtered browse group."""
277
280
  # Init
278
- self._efv_flag = None
279
- self.parse_params()
280
- self.group = self.kwargs["group"]
281
- self._validate()
282
- self.set_rel_prefix(self.model)
283
- self.set_order_key()
284
-
285
- obj = self.get_object()
286
-
287
- serializer = self.get_serializer(obj)
288
- return Response(serializer.data)
281
+ try:
282
+ self._efv_flag = None
283
+ self.parse_params()
284
+ self.group = self.kwargs["group"]
285
+ self._validate()
286
+ self.set_rel_prefix(self.model)
287
+ self.set_order_key()
288
+
289
+ obj = self.get_object()
290
+
291
+ serializer = self.get_serializer(obj)
292
+ return Response(serializer.data)
293
+ except Exception:
294
+ LOG.exception(f"Getting metadata {self.kwargs}")
@@ -1,4 +1,5 @@
1
1
  """Browser session view."""
2
+
2
3
  from codex.serializers.browser.settings import BrowserSettingsSerializer
3
4
  from codex.views.session import BrowserSessionViewBase, SessionViewBase
4
5
 
codex/views/const.py CHANGED
@@ -1,2 +1,3 @@
1
1
  """Common view constants."""
2
+
2
3
  FALSY = {None, "", "false", "0", False}
codex/views/cover.py CHANGED
@@ -1,4 +1,5 @@
1
1
  """Comic cover thumbnail view."""
2
+
2
3
  from typing import ClassVar
3
4
 
4
5
  from django.http import HttpResponse
codex/views/download.py CHANGED
@@ -1,4 +1,5 @@
1
1
  """Download a comic archive."""
2
+
2
3
  from pathlib import Path
3
4
  from typing import ClassVar
4
5
 
@@ -26,6 +27,7 @@ class DownloadView(APIView, GroupACLMixin):
26
27
  "issue_suffix",
27
28
  "name",
28
29
  )
30
+ AS_ATTACHMENT = True
29
31
 
30
32
  @extend_schema(responses={(200, content_type): OpenApiTypes.BINARY})
31
33
  def get(self, *_args, **kwargs):
@@ -45,9 +47,23 @@ class DownloadView(APIView, GroupACLMixin):
45
47
 
46
48
  # FileResponse requires file handle not be closed in this method.
47
49
  comic_file = Path(comic.path).open("rb") # noqa: SIM115
50
+ content_type = "application/"
51
+ if comic.file_type == "PDF":
52
+ content_type += "pdf"
53
+ elif comic.file_type:
54
+ content_type += "vnd.comicbook+" + comic.file_type.lower()
55
+ else:
56
+ content_type += "octet-stream"
57
+
48
58
  return FileResponse(
49
59
  comic_file,
50
- as_attachment=True,
51
- content_type=self.content_type,
60
+ as_attachment=self.AS_ATTACHMENT,
61
+ content_type=content_type,
52
62
  filename=comic.filename(),
53
63
  )
64
+
65
+
66
+ class FileView(DownloadView):
67
+ """View a comic in the browser."""
68
+
69
+ AS_ATTACHMENT = False
codex/views/error.py CHANGED
@@ -1,4 +1,5 @@
1
1
  """Custom Http Error Views."""
2
+
2
3
  from django.shortcuts import redirect
3
4
  from django.urls import reverse
4
5
  from rest_framework import status
codex/views/frontend.py CHANGED
@@ -1,4 +1,5 @@
1
1
  """Frontend views."""
2
+
2
3
  from typing import ClassVar
3
4
 
4
5
  from rest_framework.renderers import TemplateHTMLRenderer
@@ -1,4 +1,5 @@
1
1
  """OPDS Authentication 1.0."""
2
+
2
3
  from types import MappingProxyType
3
4
 
4
5
  from django.contrib.staticfiles.storage import staticfiles_storage
@@ -1,4 +1,5 @@
1
1
  """Binary views with Basic Authentication added."""
2
+
2
3
  from rest_framework.authentication import BasicAuthentication, SessionAuthentication
3
4
 
4
5
  from codex.views.cover import CoverView
codex/views/opds/util.py CHANGED
@@ -1,4 +1,5 @@
1
1
  """OPDS Utility classes."""
2
+
2
3
  from django.db.models import F
3
4
  from django.http.response import HttpResponseRedirect
4
5
  from django.urls import reverse
@@ -1,4 +1,5 @@
1
1
  """OPDS v1 Data classes."""
2
+
2
3
  from dataclasses import dataclass
3
4
  from datetime import datetime
4
5
 
@@ -1,4 +1,5 @@
1
1
  """OPDS v1 Entry Data classes."""
2
+
2
3
  from collections.abc import Mapping
3
4
  from dataclasses import dataclass
4
5
 
@@ -1,4 +1,5 @@
1
1
  """OPDS v1 Entry."""
2
+
2
3
  import json
3
4
  from datetime import datetime, timezone
4
5
  from urllib.parse import urlencode
@@ -1,4 +1,5 @@
1
1
  """OPDS v1 Entry Links Methods."""
2
+
2
3
  from urllib.parse import quote_plus
3
4
 
4
5
  from django.contrib.staticfiles.storage import staticfiles_storage
@@ -1,4 +1,5 @@
1
1
  """OPDS v1 Facets methods."""
2
+
2
3
  from dataclasses import dataclass
3
4
  from types import MappingProxyType
4
5
 
@@ -1,4 +1,5 @@
1
1
  """OPDS v1 feed."""
2
+
2
3
  from datetime import datetime, timezone
3
4
  from types import MappingProxyType
4
5
  from typing import TYPE_CHECKING, Any
@@ -1,4 +1,5 @@
1
1
  """OPDS v1 Links methods."""
2
+
2
3
  from collections import defaultdict
3
4
  from collections.abc import Mapping
4
5
  from dataclasses import dataclass
@@ -1,4 +1,5 @@
1
1
  """Serve an opensearch v1 document."""
2
+
2
3
  from drf_spectacular.types import OpenApiTypes
3
4
  from drf_spectacular.utils import extend_schema
4
5
  from rest_framework.authentication import BasicAuthentication, SessionAuthentication
@@ -1,4 +1,5 @@
1
1
  """OPDS v2 consts."""
2
+
2
3
  from dataclasses import dataclass
3
4
 
4
5
  from codex.views.opds.const import Rel
@@ -1,4 +1,5 @@
1
1
  """OPDS v2.0 Feed."""
2
+
2
3
  from datetime import datetime, timezone
3
4
  from types import MappingProxyType
4
5
 
@@ -1,4 +1,5 @@
1
1
  """Links methods for OPDS v2.0 Feed."""
2
+
2
3
  from copy import deepcopy
3
4
  from dataclasses import dataclass
4
5
  from urllib.parse import parse_qsl, urlparse
@@ -1,4 +1,5 @@
1
1
  """Publication Methods for OPDS v2.0 feed."""
2
+
2
3
  from types import MappingProxyType
3
4
  from urllib.parse import quote_plus
4
5
 
@@ -1,4 +1,5 @@
1
1
  """OPDS v2.0 top links section methods."""
2
+
2
3
  from codex.views.opds.const import MimeType, Rel
3
4
  from codex.views.opds.v2.links import HrefData, LinkData, LinksMixin
4
5
 
codex/views/pwa.py CHANGED
@@ -1,4 +1,5 @@
1
1
  """PWA views."""
2
+
2
3
  from codex.views.template import CodexTemplateView
3
4
 
4
5
 
@@ -1,4 +1,5 @@
1
1
  """Views for reading comic books."""
2
+
2
3
  from django.db.models import F, IntegerField, Value
3
4
  from django.urls import reverse
4
5
  from drf_spectacular.types import OpenApiTypes
@@ -30,6 +31,7 @@ class ReaderView(BookmarkBaseView):
30
31
  "series",
31
32
  "volume",
32
33
  "reading_direction",
34
+ "updated_at",
33
35
  )
34
36
  _VALID_ARC_GROUPS = frozenset({"f", "s", "a"})
35
37
 
@@ -84,6 +86,7 @@ class ReaderView(BookmarkBaseView):
84
86
  arc_name=F(arc_name_rel),
85
87
  arc_index=arc_index,
86
88
  )
89
+ .annotate(mtime=F("updated_at"))
87
90
  )
88
91
 
89
92
  return qs.order_by(*ordering)
@@ -1,4 +1,5 @@
1
1
  """Reader session view."""
2
+
2
3
  from codex.serializers.reader import ReaderSettingsSerializer
3
4
  from codex.views.session import ReaderSessionViewBase, SessionViewBase
4
5
 
codex/views/session.py CHANGED
@@ -1,4 +1,5 @@
1
1
  """Manage user sessions with appropriate defaults."""
2
+
2
3
  from abc import ABC, abstractmethod
3
4
  from copy import deepcopy
4
5
  from types import MappingProxyType
codex/views/template.py CHANGED
@@ -1,4 +1,5 @@
1
1
  """Generic Codex Template View."""
2
+
2
3
  from rest_framework import status
3
4
  from rest_framework.renderers import TemplateHTMLRenderer
4
5
  from rest_framework.response import Response
codex/views/version.py CHANGED
@@ -1,4 +1,5 @@
1
1
  """Version View."""
2
+
2
3
  from rest_framework.generics import GenericAPIView
3
4
  from rest_framework.response import Response
4
5
 
@@ -1,4 +1,5 @@
1
1
  """Global queue to send async queue messages to consumers from other processes."""
2
+
2
3
  from aioprocessing import AioQueue
3
4
 
4
5
  BROADCAST_QUEUE = AioQueue()
@@ -1,4 +1,5 @@
1
1
  """Notifier ChannelGroups Consumer."""
2
+
2
3
  from enum import Enum
3
4
 
4
5
  from channels.generic.websocket import AsyncWebsocketConsumer
@@ -1,4 +1,5 @@
1
1
  """Listens to the Broadcast Queue and sends its messages to channels."""
2
+
2
3
  from queue import Empty
3
4
  from types import MappingProxyType
4
5
 
codex/worker_base.py CHANGED
@@ -1,4 +1,5 @@
1
1
  """General worker class inherits queues."""
2
+
2
3
  from codex.logger_base import LoggerBaseMixin
3
4
  from codex.status_controller import StatusController
4
5
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: codex
3
- Version: 1.5.0a1
3
+ Version: 1.5.0a3
4
4
  Summary: A comic archive web server.
5
5
  Home-page: https://github.com/ajslater/codex
6
6
  License: GPL-3.0-only
@@ -28,7 +28,7 @@ Requires-Dist: aioprocessing (>=2.0.1,<3.0.0)
28
28
  Requires-Dist: ansicolors (>=1.1,<2.0)
29
29
  Requires-Dist: case-converter (>=1.1.0,<2.0.0)
30
30
  Requires-Dist: channels (>=4.0.0,<5.0.0)
31
- Requires-Dist: comicbox[pdf] (>=1.0.0rc8,<2.0.0)
31
+ Requires-Dist: comicbox[pdf] (>=1.1.0,<2.0.0)
32
32
  Requires-Dist: django (>=5.0.1,<6.0.0)
33
33
  Requires-Dist: django-cors-headers (>=4.0,<5.0)
34
34
  Requires-Dist: django-rest-registration (>=0.8.0,<0.9.0)
@@ -44,7 +44,7 @@ Requires-Dist: psutil (>=5.9.4,<6.0.0)
44
44
  Requires-Dist: python-dateutil (>=2.8.2,<3.0.0)
45
45
  Requires-Dist: requests (>=2.24,<3.0)
46
46
  Requires-Dist: tzlocal (>=5.0,<6.0)
47
- Requires-Dist: watchdog (>=3.0,<4.0)
47
+ Requires-Dist: watchdog (>=4.0,<5.0)
48
48
  Requires-Dist: websocket_client (>=1.2,<2.0)
49
49
  Requires-Dist: whitenoise[brotli] (>=6.0,<7.0)
50
50
  Requires-Dist: whoosh (>=2.7.4,<3.0.0)
@@ -72,7 +72,7 @@ border-radius: 128px;
72
72
  - Filter and sort on all comic metadata and unread status per user.
73
73
  - Browse a tree of publishers, imprints, series, volumes, or your own folder
74
74
  hierarchy.
75
- - Read comics in a variety of aspect ratios that fit your screen.
75
+ - Read comics in a variety of aspect ratios and directions that fit your screen.
76
76
  - Per user bookmarking. Per browser bookmarks even before you make an account.
77
77
  - Watches the filesystem and automatically imports new or changed comics.
78
78
  - Private Libraries accessible only to certain groups of users.
@@ -119,6 +119,8 @@ You'll need to install these system dependencies before installing Codex.
119
119
 
120
120
  ##### macOS
121
121
 
122
+ <!-- eslint-skip -->
123
+
122
124
  ```sh
123
125
  brew install jpeg libffi libyaml libzip openssl python unrar webp
124
126
  ```
@@ -127,53 +129,48 @@ brew install jpeg libffi libyaml libzip openssl python unrar webp
127
129
 
128
130
  ###### <a href="#debian">Debian</a>
129
131
 
130
- Like Ubuntu, Mint, MX and others.
131
-
132
- ```sh
133
- apt install build-essential libffi-dev libjpeg-dev libssl-dev libwebp7 python3-pip zlib1g-dev
134
- ```
132
+ ...and Ubuntu, Mint, MX and others.
135
133
 
136
- older releases may use the `libweb6` package instead.
137
-
138
- ###### Debian on ARM
139
-
140
- The python cryptography wheel needs compiling on rare architectures. Install the
141
- Rust compiler.
134
+ <!-- eslint-skip -->
142
135
 
143
136
  ```sh
144
- apt install cargo
137
+ apt install build-essential libimagequant0 libjpeg62-turbo libopenjp2-7 libssl3 libyaml-0-2 libtiff6 libwebp7 python3-dev python3-pip mupdf unrar zlib1g
145
138
  ```
146
139
 
147
140
  ###### Alpine
148
141
 
142
+ <!-- eslint-skip -->
143
+
149
144
  ```sh
150
145
  apk add bsd-compat-headers build-base jpeg-dev libffi-dev libwebp openssl-dev yaml-dev zlib-dev
151
146
  ```
152
147
 
153
- ##### Install unrar Runtime Dependency on Linux
148
+ ##### Install unrar Runtime Dependency on non-debian Linux
154
149
 
155
- Codex requires unrar to read cbr formatted comic archives. Unrar is often not
150
+ Codex requires unrar to read CBR formatted comic archives. Unrar is often not
156
151
  packaged for Linux, but here are some instructions:
157
152
  [How to install unrar in Linux](https://www.unixtutorial.org/how-to-install-unrar-in-linux/)
158
153
 
159
- Unrar as packaged for Alpine Linux v3.14 seems to work on Alpine v3.15
154
+ Unrar as packaged for Alpine Linux v3.14 seems to work on Alpine v3.15+
160
155
 
161
156
  #### Windows
162
157
 
163
158
  Windows users should use Docker to run Codex until this documentation section is
164
159
  complete.
165
160
 
166
- Codex can _probably_ Windows Linux Subsystem but I haven't done personally
161
+ Codex can _probably_ run on the Windows Linux Subsystem but I haven't personally
167
162
  tested it yet. Try following the instructions for [Debian](#debian) above. There
168
163
  may be outstanding platform related bugs.
169
164
 
170
- Contributions to this documentation accepted on
171
- [the outstanding issue](https://github.com/ajslater/codex/issues/76) or discord.
165
+ Contributions to the Windows documentation will be gratefully accepted on
166
+ [the outstanding issue](https://github.com/ajslater/codex/issues/76) or Discord.
172
167
 
173
168
  #### Install Codex with pip
174
169
 
175
170
  You may now install Codex with pip
176
171
 
172
+ <!-- eslint-skip -->
173
+
177
174
  ```sh
178
175
  pip3 install codex
179
176
  ```
@@ -182,12 +179,25 @@ pip3 install codex
182
179
 
183
180
  pip should install the codex binary on your path. Run
184
181
 
182
+ <!-- eslint-skip -->
183
+
185
184
  ```sh
186
185
  codex
187
186
  ```
188
187
 
189
188
  and then navigate to <http://localhost:9810/>
190
189
 
190
+ ### Install & Run on your preexisting HomeAssistant server
191
+
192
+ If you have a [HomeAssistant](https://www.home-assistant.io/) server, Codex can
193
+ be installed with the following steps :
194
+
195
+ - Add the `https://github.com/alexbelgium/hassio-addons` repository by
196
+ [clicking here](https://my.home-assistant.io/redirect/supervisor_add_addon_repository/?repository_url=https%3A%2F%2Fgithub.com%2Falexbelgium%2Fhassio-addons)
197
+ - Install the addon :
198
+ [click here to automatically open the addon store, then install the addon](https://my.home-assistant.io/redirect/supervisor)
199
+ - Customize addon options, then then start the add-on.
200
+
191
201
  ## <a name="administration">๐Ÿ‘‘ Administration</a>
192
202
 
193
203
  ### Navigate to the Admin Panel
@@ -225,12 +235,16 @@ If you forget all your superuser passwords, you may restore the original default
225
235
  admin account by running codex with the `CODEX_RESET_ADMIN` environment variable
226
236
  set.
227
237
 
238
+ <!-- eslint-skip -->
239
+
228
240
  ```sh
229
241
  CODEX_RESET_ADMIN=1 codex
230
242
  ```
231
243
 
232
244
  or, if using Docker:
233
245
 
246
+ <!-- eslint-skip -->
247
+
234
248
  ```sh
235
249
  docker run -e CODEX_RESET_ADMIN=1 -v host-parent-dir/config:/config ajslater/codex
236
250
  ```
@@ -248,6 +262,11 @@ A library with _any_ groups is accessible only to users who are in those groups.
248
262
  Use the Groups admin panel to create groups and the Users admin panel to add and
249
263
  remove users to groups.
250
264
 
265
+ #### Include and Exclude Groups
266
+
267
+ Codex can make groups for libraries that exclude groups of users or exclude
268
+ everyone and include only certain groups of users.
269
+
251
270
  ### PDFs
252
271
 
253
272
  Codex only reads PDF metadata from the filename. If you decide to include PDFs
@@ -271,6 +290,8 @@ a default one to that directory on startup.
271
290
 
272
291
  The default values for the config options are:
273
292
 
293
+ <!-- eslint-skip -->
294
+
274
295
  ```toml
275
296
  bind = ["0.0.0.0:9810"]
276
297
  quick_bind = ["0.0.0.0:9810"]
@@ -282,9 +303,11 @@ index, a Django cache and comic book cover thumbnails.
282
303
 
283
304
  ### Environment Variables
284
305
 
306
+ ### Codex
307
+
285
308
  - `LOGLEVEL` will change how verbose codex's logging is. Valid values are
286
309
  `ERROR`, `WARNING`, `INFO`, `DEBUG`. The default is `INFO`.
287
- - `TIMEZONE` or `TZ` will explicitly the timezone in long format (e.g.
310
+ - `TIMEZONE` or `TZ` will explicitly set the timezone in long format (e.g.
288
311
  `"America/Los Angeles"`). This is useful inside Docker because codex cannot
289
312
  automatically detect the host machine's timezone.
290
313
  - `CODEX_CONFIG_DIR` will set the path to codex config directory. Defaults to
@@ -298,12 +321,20 @@ index, a Django cache and comic book cover thumbnails.
298
321
  - `CODEX_LOG_TO_FILE=0` will not log to files.
299
322
  - `CODEX_LOG_TO_CONSOLE=0` will not log to the console.
300
323
 
324
+ #### Comicbox
325
+
326
+ - `DEBUG_TRANSFORM` will show verbose information about how the comicbox library
327
+ reads all archive metadata sources and transforms it into a the comicbox
328
+ schema.
329
+
301
330
  ### Reverse Proxy
302
331
 
303
332
  [nginx](https://nginx.org/) is often used as a TLS terminator and subpath proxy.
304
333
 
305
334
  Here's an example nginx config with a subpath named '/codex'.
306
335
 
336
+ <!-- eslint-skip -->
337
+
307
338
  ```nginx
308
339
  # HTTP
309
340
  proxy_set_header Host $http_host;
@@ -328,9 +359,10 @@ proxy_set_header Connection "Upgrade" location /codex {
328
359
 
329
360
  Specify a reverse proxy sub path (if you have one) in `config/hypercorn.toml`
330
361
 
362
+ <!-- eslint-skip -->
363
+
331
364
  ```toml
332
365
  root_path = "/codex"
333
-
334
366
  ```
335
367
 
336
368
  #### Nginx Reverse Proxy 502 when container refreshes
@@ -346,11 +378,11 @@ Codex can run with as little as 1GB available RAM. Large batch jobs โ€“like
346
378
  importing and indexing tens of thousands of comics at onceโ€“ will run faster the
347
379
  more memory is available to Codex. The biggest gains in speed happen when you
348
380
  increase memory up to about 6GB. Codex batch jobs do get faster the more memory
349
- you give it above 6GB, but there are diminishing returns.
381
+ it has above 6GB, but with diminishing returns.
350
382
 
351
- If you run Codex in an admin restricted memory environment you might want to
352
- temporarily give codex a lot of memory to run a very large batch job and then
353
- restrict it for normal operation.
383
+ If you must run Codex in an admin restricted memory environment you might want
384
+ to temporarily give Codex a lot of memory to run a very large import job and
385
+ then restrict it for normal operation.
354
386
 
355
387
  ## <a name="usage">๐Ÿ“– Usage</a>
356
388
 
@@ -418,6 +450,8 @@ You can change how much codex logs by setting the `LOGLEVEL` environment
418
450
  variable. By default this level is `INFO`. To see more verbose messages, run
419
451
  codex like:
420
452
 
453
+ <!-- eslint-skip -->
454
+
421
455
  ```bash
422
456
  LOGLEVEL=DEBUG codex
423
457
  ```
@@ -438,6 +472,8 @@ If the database becomes corrupt, Codex includes a facitlity to rebuild the
438
472
  database. Place a file named `rebuild_db` in your Codex config directory like
439
473
  so:
440
474
 
475
+ <!-- eslint-skip -->
476
+
441
477
  ```sh
442
478
  touch config/rebuild_db
443
479
  ```