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
codex/__init__.py CHANGED
@@ -1,4 +1,5 @@
1
1
  """Initialize Django."""
2
+
2
3
  from os import environ
3
4
 
4
5
  from django import setup
@@ -6,9 +6,8 @@ from django.conf import settings
6
6
  from ..haystack import connection_router, connections
7
7
  from ..haystack.utils import loading
8
8
 
9
-
10
9
  class HaystackConfig(AppConfig):
11
- name = "codex._vendor.haystack"
10
+ name = loading.VENDOR_PREFIX + "haystack"
12
11
  signal_processor = None
13
12
  stream = None
14
13
 
@@ -24,7 +23,7 @@ class HaystackConfig(AppConfig):
24
23
  signal_processor_path = getattr(
25
24
  settings,
26
25
  "HAYSTACK_SIGNAL_PROCESSOR",
27
- "codex._vendor.haystack.signals.BaseSignalProcessor",
26
+ loading.VENDOR_PREFIX + "haystack.signals.BaseSignalProcessor",
28
27
  )
29
28
  signal_processor_class = loading.import_class(signal_processor_path)
30
29
  self.signal_processor = signal_processor_class(
@@ -13,8 +13,11 @@ from ...haystack.exceptions import NotHandled, SearchFieldError
13
13
  from ...haystack.utils import importlib
14
14
  from ...haystack.utils.app_loading import haystack_get_app_modules
15
15
 
16
+ VENDOR_PREFIX = "codex._vendor."
16
17
 
17
18
  def import_class(path):
19
+ if path.startswith("haystack"):
20
+ path = VENDOR_PREFIX + path
18
21
  path_bits = path.split(".")
19
22
  # Cut off the class name at the end.
20
23
  class_name = path_bits.pop()
@@ -1,4 +1,5 @@
1
1
  """Start and stop daemons."""
2
+
2
3
  import asyncio
3
4
  from contextlib import suppress
4
5
 
@@ -1,4 +1,5 @@
1
1
  """Channels Websocket Application."""
2
+
2
3
  from channels.auth import AuthMiddlewareStack
3
4
  from channels.routing import URLRouter
4
5
  from channels.security.websocket import AllowedHostsOriginValidator
codex/asgi.py CHANGED
@@ -5,6 +5,7 @@ It exposes the ASGI callable as a module-level variable named ``DJANGO_APPLICATI
5
5
  For more information on this file, see
6
6
  https://docs.djangoproject.com/en/dev/howto/deployment/asgi/
7
7
  """
8
+
8
9
  from channels.routing import ProtocolTypeRouter
9
10
  from django.core.asgi import get_asgi_application
10
11
 
codex/db_functions.py CHANGED
@@ -1,4 +1,5 @@
1
1
  """Custom Django DB functions."""
2
+
2
3
  from django.db.models import Aggregate
3
4
  from django.db.models.fields import CharField
4
5
 
codex/exceptions.py CHANGED
@@ -1,4 +1,5 @@
1
1
  """Special Redirect Error."""
2
+
2
3
  from django.shortcuts import redirect
3
4
  from django.urls import reverse
4
5
  from django.utils.http import urlencode
codex/integrity.py CHANGED
@@ -1,4 +1,5 @@
1
1
  """Repair Database Integrity Errors."""
2
+
2
3
  import re
3
4
  import sqlite3
4
5
  from types import MappingProxyType
@@ -1,4 +1,5 @@
1
1
  """Functions for dealing with comic cover thumbnails."""
2
+
2
3
  from codex.librarian.covers.create import CoverCreateMixin
3
4
  from codex.librarian.covers.purge import CoverPurgeMixin
4
5
  from codex.librarian.covers.tasks import (
@@ -1,4 +1,5 @@
1
1
  """Create comic cover paths."""
2
+
2
3
  from io import BytesIO
3
4
  from time import time
4
5
 
@@ -75,7 +76,7 @@ class CoverCreateMixin(CoverPathMixin):
75
76
  if data:
76
77
  with cover_path.open("wb") as cover_file:
77
78
  cover_file.write(data)
78
- else:
79
+ elif not cover_path.exists():
79
80
  cover_path.symlink_to(self.MISSING_COVER_PATH)
80
81
 
81
82
  def _bulk_create_comic_covers(self, comic_pks):
@@ -1,4 +1,5 @@
1
1
  """Cover Path functions."""
2
+
2
3
  from pathlib import Path
3
4
 
4
5
  from fnvhash import fnv1a_32
@@ -1,4 +1,5 @@
1
1
  """Purge comic covers."""
2
+
2
3
  import os
3
4
  import shutil
4
5
  from pathlib import Path
@@ -1,4 +1,5 @@
1
1
  """Cover status types."""
2
+
2
3
  from django.db.models import Choices
3
4
 
4
5
 
@@ -1,4 +1,5 @@
1
1
  """Covers Tasks."""
2
+
2
3
  from dataclasses import dataclass
3
4
 
4
5
 
@@ -1,4 +1,5 @@
1
1
  """Delay tasks."""
2
+
2
3
  from queue import PriorityQueue
3
4
  from time import sleep, time
4
5
 
@@ -1,4 +1,5 @@
1
1
  """Aggregate metadata from comcs to prepare for importing."""
2
+
2
3
  from collections.abc import Mapping
3
4
  from pathlib import Path
4
5
  from zipfile import BadZipFile
@@ -1,4 +1,5 @@
1
1
  """Clean metadata before importing."""
2
+
2
3
  from contextlib import suppress
3
4
  from decimal import ROUND_DOWN, Decimal
4
5
  from typing import Any
@@ -1,4 +1,5 @@
1
1
  """Consts and maps for import."""
2
+
2
3
  from types import MappingProxyType
3
4
 
4
5
  from codex.models import (
@@ -1,4 +1,5 @@
1
1
  """Bulk update and create comic objects and bulk update m2m fields."""
2
+
2
3
  from codex.librarian.importer.const import BULK_UPDATE_COMIC_FIELDS
3
4
  from codex.librarian.importer.link_comics import LinkComicsMixin
4
5
  from codex.librarian.importer.status import ImportStatusTypes, status_notify
@@ -2,6 +2,7 @@
2
2
 
3
3
  So we may safely create the comics next.
4
4
  """
5
+
5
6
  from itertools import chain
6
7
  from pathlib import Path
7
8
 
@@ -1,4 +1,5 @@
1
1
  """Update and create failed imports."""
2
+
2
3
  from pathlib import Path
3
4
 
4
5
  from django.db.models.functions import Now
@@ -1,4 +1,5 @@
1
1
  """Bulk import and move comics and folders."""
2
+
2
3
  import logging
3
4
  from pathlib import Path
4
5
  from time import sleep, time
@@ -1,4 +1,5 @@
1
1
  """Bulk update m2m fields."""
2
+
2
3
  from pathlib import Path
3
4
 
4
5
  from django.db.models import Q
@@ -214,9 +215,7 @@ class LinkComicsMixin(QueuedThread):
214
215
  unique_fields=update_fields,
215
216
  )
216
217
  if created_count := len(tms):
217
- self.log.info(
218
- f"Linked {created_count} new {field_name}s to altered comics."
219
- )
218
+ self.log.info(f"Linked {created_count} new {field_name} to altered comics.")
220
219
  if status:
221
220
  status.complete = status.complete or 0
222
221
  status.complete += created_count
@@ -1,4 +1,5 @@
1
1
  """Bulk import and move comics and folders."""
2
+
2
3
  from pathlib import Path
3
4
 
4
5
  from django.db.models.functions import Now
@@ -41,27 +42,25 @@ class MovedMixin(CreateComicsMixin, CreateForeignKeysMixin, QueryForeignKeysMixi
41
42
 
42
43
  folder_m2m_links = {}
43
44
  now = Now()
44
- comic_pks = []
45
+ updated_comics = []
45
46
  for comic in comics.iterator():
46
47
  try:
47
- comic.path = moved_paths[comic.path]
48
- new_path = Path(comic.path)
49
- if new_path.parent == Path(library.path):
50
- comic.parent_folder = None
51
- else:
52
- comic.parent_folder = Folder.objects.get( # type: ignore
53
- path=new_path.parent
54
- )
48
+ new_path = moved_paths[comic.path]
49
+ comic.path = new_path
50
+ new_path = Path(new_path)
51
+ comic.parent_folder = Folder.objects.get( # type: ignore
52
+ path=new_path.parent
53
+ )
55
54
  comic.updated_at = now
56
55
  comic.set_stat()
57
56
  folder_m2m_links[comic.pk] = Folder.objects.filter(
58
57
  path__in=new_path.parents
59
58
  ).values_list("pk", flat=True)
60
- comic_pks.append(comic.pk)
59
+ updated_comics.append(comic)
61
60
  except Exception:
62
61
  self.log.exception(f"moving {comic.path}")
63
62
 
64
- Comic.objects.bulk_update(comics, _MOVED_BULK_COMIC_UPDATE_FIELDS)
63
+ Comic.objects.bulk_update(updated_comics, _MOVED_BULK_COMIC_UPDATE_FIELDS)
65
64
 
66
65
  # Update m2m field
67
66
  if folder_m2m_links:
@@ -78,9 +77,10 @@ class MovedMixin(CreateComicsMixin, CreateForeignKeysMixin, QueryForeignKeysMixi
78
77
  dest_parent_folder_paths = set()
79
78
  for dest_folder_path in dest_folder_paths:
80
79
  dest_parent_path = str(Path(dest_folder_path).parent)
81
- dest_parent_folder_paths.add(dest_parent_path)
80
+ if dest_parent_path not in dest_folder_paths:
81
+ dest_parent_folder_paths.add(dest_parent_path)
82
82
 
83
- # Create intermediate subfolders.
83
+ # Create only intermediate subfolders.
84
84
  existing_folder_paths = Folder.objects.filter(
85
85
  library=library, path__in=dest_parent_folder_paths
86
86
  ).values_list("path", flat=True)
@@ -111,11 +111,13 @@ class MovedMixin(CreateComicsMixin, CreateForeignKeysMixin, QueryForeignKeysMixi
111
111
  )
112
112
 
113
113
  src_folder_paths = frozenset(folders_moved.keys())
114
- folders = Folder.objects.filter(library=library, path__in=src_folder_paths)
114
+ folders_to_move = Folder.objects.filter(
115
+ library=library, path__in=src_folder_paths
116
+ ).order_by("path")
115
117
 
116
118
  update_folders = []
117
119
  now = Now()
118
- for folder in folders.iterator():
120
+ for folder in folders_to_move.iterator():
119
121
  new_path = folders_moved[folder.path]
120
122
  folder.name = Path(new_path).name
121
123
  folder.path = new_path
@@ -1,4 +1,5 @@
1
1
  """Query the missing foreign keys for comics and contributors."""
2
+
2
3
  from logging import DEBUG, INFO
3
4
  from pathlib import Path
4
5
  from types import MappingProxyType
@@ -1,4 +1,5 @@
1
1
  """Librarian Status for imports."""
2
+
2
3
  from collections.abc import Callable
3
4
  from enum import Enum
4
5
  from time import time
@@ -1,4 +1,5 @@
1
1
  """DB Import Tasks."""
2
+
2
3
  from dataclasses import dataclass
3
4
 
4
5
 
@@ -1,4 +1,5 @@
1
1
  """Clean up the database after moves or imports."""
2
+
2
3
  import logging
3
4
  from time import time
4
5
 
@@ -1,4 +1,5 @@
1
1
  """Force update events for failed imports."""
2
+
2
3
  from watchdog.events import FileModifiedEvent
3
4
 
4
5
  from codex.librarian.watchdog.tasks import WatchdogEventTask
@@ -1,4 +1,5 @@
1
1
  """Janitor task runner."""
2
+
2
3
  from codex.librarian.covers.status import CoverStatusTypes
3
4
  from codex.librarian.covers.tasks import CoverRemoveOrphansTask
4
5
  from codex.librarian.janitor.cleanup import TOTAL_NUM_FK_CLASSES, CleanupMixin
@@ -1,4 +1,5 @@
1
1
  """Perform maintence tasks."""
2
+
2
3
  from datetime import datetime, time, timedelta
3
4
  from threading import Condition, Event
4
5
  from time import sleep
@@ -1,4 +1,5 @@
1
1
  """Janitor Status Types."""
2
+
2
3
  from django.db.models import Choices
3
4
 
4
5
 
@@ -1,4 +1,5 @@
1
1
  """Janitor Tasks."""
2
+
2
3
  from dataclasses import dataclass
3
4
 
4
5
 
@@ -1,4 +1,5 @@
1
1
  """Update the codex python package."""
2
+
2
3
  import os
3
4
  import signal
4
5
  import subprocess
@@ -1,4 +1,5 @@
1
1
  """Vacuum the database."""
2
+
2
3
  from django.db import connection
3
4
  from humanize import naturalsize
4
5
 
@@ -1,4 +1,5 @@
1
1
  """Library process worker for background tasks."""
2
+
2
3
  from multiprocessing import Manager, Process
3
4
  from threading import active_count
4
5
  from types import MappingProxyType
@@ -1,4 +1,5 @@
1
1
  """Library Queue."""
2
+
2
3
  # This file cannot be named queue or it causes weird type checker errors
3
4
  from multiprocessing import Queue
4
5
 
@@ -1,6 +1,5 @@
1
1
  """Sends notifications to connections, reading from a queue."""
2
2
 
3
-
4
3
  from codex.threads import AggregateMessageQueuedThread
5
4
 
6
5
 
@@ -1,4 +1,5 @@
1
1
  """Notifier Tasks."""
2
+
2
3
  from dataclasses import dataclass
3
4
 
4
5
  from codex.websockets.consumers import ChannelGroups
@@ -1,4 +1,5 @@
1
1
  """Search Index Merging for Read Optimization."""
2
+
2
3
  from pathlib import Path
3
4
  from time import time
4
5
  from typing import TYPE_CHECKING
@@ -1,4 +1,5 @@
1
1
  """Search Index cleanup."""
2
+
2
3
  from time import time
3
4
 
4
5
  from humanize import naturaldelta
@@ -1,4 +1,5 @@
1
1
  """Haystack Search index updater."""
2
+
2
3
  from codex.librarian.search.merge import MergeMixin
3
4
  from codex.librarian.search.tasks import (
4
5
  SearchIndexClearTask,
@@ -1,4 +1,5 @@
1
1
  """Search Index Status Types."""
2
+
2
3
  from django.db.models import Choices
3
4
 
4
5
 
@@ -1,4 +1,5 @@
1
1
  """Libarian Tasks for searchd."""
2
+
2
3
  from dataclasses import dataclass
3
4
 
4
5
 
@@ -1,4 +1,5 @@
1
1
  """Search Index update."""
2
+
2
3
  from datetime import datetime
3
4
  from math import ceil
4
5
  from multiprocessing import Pool, cpu_count
@@ -1,4 +1,5 @@
1
1
  """Search Engine to database matching."""
2
+
2
3
  from uuid import uuid4
3
4
 
4
5
  from codex.librarian.search.tasks import SearchIndexUpdateTask
codex/librarian/tasks.py CHANGED
@@ -1,4 +1,5 @@
1
1
  """Librarian Tasks."""
2
+
2
3
  from dataclasses import dataclass, field
3
4
 
4
5
 
@@ -1,4 +1,5 @@
1
1
  """Custom directory snapshots."""
2
+
2
3
  import os
3
4
  from itertools import chain
4
5
  from pathlib import Path
@@ -1,4 +1,5 @@
1
1
  """Custom directory snapshots."""
2
+
2
3
  from dataclasses import dataclass
3
4
 
4
5
  from watchdog.utils.dirsnapshot import DirectorySnapshot, DirectorySnapshotDiff
@@ -1,4 +1,5 @@
1
1
  """A Codex database event emitter for use by the observer."""
2
+
2
3
  from pathlib import Path
3
4
  from threading import Condition
4
5
 
@@ -24,6 +25,20 @@ from codex.models import Library
24
25
  from codex.status import Status
25
26
  from codex.worker_base import WorkerBaseMixin
26
27
 
28
+ _CODEX_EVENT_FILTER = frozenset(
29
+ {
30
+ FileMovedEvent,
31
+ FileModifiedEvent,
32
+ FileCreatedEvent,
33
+ FileDeletedEvent,
34
+ # FileClosedEvent,
35
+ # FileOpenedEvent,
36
+ DirMovedEvent,
37
+ DirModifiedEvent,
38
+ DirDeletedEvent,
39
+ # DirCreatedEvent,
40
+ }
41
+ )
27
42
  _DOCKER_UNMOUNTED_FN = "DOCKER_UNMOUNTED_VOLUME"
28
43
 
29
44
 
@@ -46,7 +61,9 @@ class DatabasePollingEmitter(EventEmitter, WorkerBaseMixin):
46
61
  self._force = False
47
62
  self._watch_path = Path(watch.path)
48
63
  self._watch_path_unmounted = self._watch_path / _DOCKER_UNMOUNTED_FN
49
- super().__init__(event_queue, watch, timeout=timeout)
64
+ super().__init__(
65
+ event_queue, watch, timeout=timeout, event_filter=_CODEX_EVENT_FILTER
66
+ )
50
67
 
51
68
  self._take_dir_snapshot = lambda: DirectorySnapshot(
52
69
  self._watch.path,
@@ -5,6 +5,7 @@ but the built-in filesystem event emitters serialize them, so the most
5
5
  consistent thing is for the DBEmitter to serialize them in the same way
6
6
  and then re-serialize everything in this batcher and the event Handler
7
7
  """
8
+
8
9
  from contextlib import suppress
9
10
  from copy import deepcopy
10
11
  from types import MappingProxyType
@@ -1,4 +1,5 @@
1
1
  """Watchdog Event Handlers."""
2
+
2
3
  import re
3
4
  from os import fsdecode
4
5
 
@@ -1,4 +1,5 @@
1
1
  """The Codex Library Watchdog Observer threads."""
2
+
2
3
  from watchdog.observers import Observer
3
4
  from watchdog.observers.api import (
4
5
  DEFAULT_OBSERVER_TIMEOUT,
@@ -89,7 +90,13 @@ class UatuMixin(BaseObserver, WorkerBaseMixin):
89
90
  except Exception:
90
91
  self.log.exception(f"{self.__class__.__name__} sync library watches")
91
92
 
92
- def schedule(self, event_handler, path, recursive=False):
93
+ def schedule( # type: ignore
94
+ self,
95
+ event_handler,
96
+ path,
97
+ recursive=False,
98
+ _event_filter=None,
99
+ ):
93
100
  """Override BaseObserver for Codex emitter class.
94
101
 
95
102
  https://pythonhosted.org/watchdog/_modules/watchdog/observers/api.html#BaseObserver
@@ -1,4 +1,5 @@
1
1
  """Watchdog Status Types."""
2
+
2
3
  from django.db.models import Choices
3
4
 
4
5
 
@@ -1,4 +1,5 @@
1
1
  """Watchdog Tasks."""
2
+
2
3
  from dataclasses import dataclass
3
4
 
4
5
  from watchdog.events import FileSystemEvent
@@ -0,0 +1,36 @@
1
+ """Logging Color Formatter."""
2
+
3
+ import logging
4
+ from types import MappingProxyType
5
+
6
+ from colors import color
7
+
8
+
9
+ class ColorFormatter(logging.Formatter):
10
+ """Logging Formatter to add colors and count warning / errors."""
11
+
12
+ FORMAT_COLORS = MappingProxyType(
13
+ {
14
+ "CRITICAL": {"fg": "red", "style": "bold"},
15
+ "ERROR": {"fg": "red"},
16
+ "WARNING": {"fg": "yellow"},
17
+ "INFO": {"fg": "green"},
18
+ "DEBUG": {"fg": "black", "style": "bold"},
19
+ "NOTSET": {"fg": "blue"},
20
+ }
21
+ )
22
+
23
+ def __init__(self, fmt, **kwargs):
24
+ """Set up the FORMATS dict."""
25
+ super().__init__(**kwargs)
26
+ self.formatters = {}
27
+ for level_name, args in self.FORMAT_COLORS.items():
28
+ levelno = getattr(logging, level_name)
29
+ template = color(fmt, **args)
30
+ formatter = logging.Formatter(fmt=template, **kwargs)
31
+ self.formatters[levelno] = formatter
32
+
33
+ def format(self, record):
34
+ """Format each log message."""
35
+ formatter = self.formatters[record.levelno]
36
+ return formatter.format(record)
codex/logger/loggerd.py CHANGED
@@ -1,43 +1,12 @@
1
1
  """Central Logging Thread."""
2
+
2
3
  import logging
3
4
  from logging.handlers import QueueListener, RotatingFileHandler
4
- from types import MappingProxyType
5
-
6
- from colors import color
7
5
 
6
+ from codex.logger.formatter import ColorFormatter
8
7
  from codex.settings.settings import DEBUG, LOG_DIR, LOG_TO_CONSOLE, LOG_TO_FILE
9
8
 
10
9
 
11
- class ColorFormatter(logging.Formatter):
12
- """Logging Formatter to add colors and count warning / errors."""
13
-
14
- FORMAT_COLORS = MappingProxyType(
15
- {
16
- "CRITICAL": {"fg": "red", "style": "bold"},
17
- "ERROR": {"fg": "red"},
18
- "WARNING": {"fg": "yellow"},
19
- "INFO": {"fg": "green"},
20
- "DEBUG": {"fg": "black", "style": "bold"},
21
- "NOTSET": {"fg": "blue"},
22
- }
23
- )
24
-
25
- def __init__(self, fmt, **kwargs):
26
- """Set up the FORMATS dict."""
27
- super().__init__(**kwargs)
28
- self.formatters = {}
29
- for level_name, args in self.FORMAT_COLORS.items():
30
- levelno = getattr(logging, level_name)
31
- template = color(fmt, **args)
32
- formatter = logging.Formatter(fmt=template, **kwargs)
33
- self.formatters[levelno] = formatter
34
-
35
- def format(self, record):
36
- """Format each log message."""
37
- formatter = self.formatters[record.levelno]
38
- return formatter.format(record)
39
-
40
-
41
10
  class CodexLogQueueListener(QueueListener):
42
11
  """Host for logging queue listener."""
43
12
 
codex/logger/logging.py CHANGED
@@ -1,4 +1,5 @@
1
1
  """Logging classes."""
2
+
2
3
  import logging
3
4
  from contextlib import suppress
4
5
  from logging.handlers import QueueHandler