rummage 4.18__tar.gz → 4.20__tar.gz

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.
Files changed (217) hide show
  1. {rummage-4.18 → rummage-4.20}/PKG-INFO +8 -9
  2. {rummage-4.18 → rummage-4.20}/docs/src/markdown/about/changelog.md +12 -0
  3. rummage-4.20/docs/src/markdown/images/settings_general.png +0 -0
  4. rummage-4.20/docs/src/markdown/installation.md +180 -0
  5. {rummage-4.18 → rummage-4.20}/docs/src/markdown/preferences.md +15 -3
  6. {rummage-4.18 → rummage-4.20}/gui.fbp +123 -0
  7. {rummage-4.18 → rummage-4.20}/hatch_build.py +2 -4
  8. {rummage-4.18 → rummage-4.20}/mkdocs-internal.yml +2 -2
  9. {rummage-4.18 → rummage-4.20}/mkdocs.yml +2 -2
  10. {rummage-4.18 → rummage-4.20}/pyproject.toml +83 -0
  11. rummage-4.20/requirements/lint.txt +1 -0
  12. rummage-4.20/requirements/project.txt +11 -0
  13. {rummage-4.18 → rummage-4.20}/rummage/lib/__meta__.py +1 -1
  14. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/actions/checksum/__init__.py +4 -4
  15. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/actions/export_csv.py +1 -1
  16. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/actions/export_html.py +3 -3
  17. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/actions/sanitize_json.py +2 -2
  18. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/controls/autocomplete_combo.py +22 -9
  19. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/controls/custom_statusbar.py +2 -4
  20. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/controls/dynamic_lists.py +1 -1
  21. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/controls/result_lists.py +4 -8
  22. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/about/changelog.html +12 -0
  23. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/about/contributing.html +1 -1
  24. rummage-4.20/rummage/lib/gui/data/docs/images/settings_general.png +0 -0
  25. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/installation.html +84 -59
  26. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/preferences.html +14 -12
  27. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/search.html +7 -7
  28. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/usage.html +1 -1
  29. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/dialogs/column_dialog.py +1 -3
  30. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/dialogs/import_settings_dialog.py +6 -5
  31. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/dialogs/msg_dialogs.py +3 -1
  32. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/dialogs/regex_test_dialog.py +2 -2
  33. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/dialogs/rummage_dialog.py +39 -33
  34. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/dialogs/settings_dialog.py +10 -1
  35. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/gui.py +10 -0
  36. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/localization/locale/en_US/LC_MESSAGES/rummage.po +311 -281
  37. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/localization/locale/ru_RU/LC_MESSAGES/rummage.po +312 -281
  38. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/settings/__init__.py +32 -4
  39. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/util/images.py +2 -2
  40. {rummage-4.18 → rummage-4.20}/rummage/lib/rumcore/__init__.py +11 -12
  41. {rummage-4.18 → rummage-4.20}/tests/test_rumcore.py +8 -8
  42. {rummage-4.18 → rummage-4.20}/tests/test_text_decode.py +2 -2
  43. {rummage-4.18 → rummage-4.20}/tests/util.py +1 -0
  44. rummage-4.18/docs/src/markdown/images/settings_general.png +0 -0
  45. rummage-4.18/docs/src/markdown/installation.md +0 -137
  46. rummage-4.18/requirements/lint.txt +0 -5
  47. rummage-4.18/requirements/project.txt +0 -11
  48. rummage-4.18/rummage/lib/gui/data/docs/images/settings_general.png +0 -0
  49. rummage-4.18/tox.ini +0 -38
  50. {rummage-4.18 → rummage-4.20}/.coveragerc +0 -0
  51. {rummage-4.18 → rummage-4.20}/.gitignore +0 -0
  52. {rummage-4.18 → rummage-4.20}/LICENSE.md +0 -0
  53. {rummage-4.18 → rummage-4.20}/README.md +0 -0
  54. {rummage-4.18 → rummage-4.20}/docs/src/markdown/.snippets/abbr.md +0 -0
  55. {rummage-4.18 → rummage-4.20}/docs/src/markdown/.snippets/links.md +0 -0
  56. {rummage-4.18 → rummage-4.20}/docs/src/markdown/.snippets/refs.md +0 -0
  57. {rummage-4.18 → rummage-4.20}/docs/src/markdown/about/contributing.md +0 -0
  58. {rummage-4.18 → rummage-4.20}/docs/src/markdown/about/license.md +0 -0
  59. {rummage-4.18 → rummage-4.20}/docs/src/markdown/extras.md +0 -0
  60. {rummage-4.18 → rummage-4.20}/docs/src/markdown/images/chain_button.png +0 -0
  61. {rummage-4.18 → rummage-4.20}/docs/src/markdown/images/chain_mode.png +0 -0
  62. {rummage-4.18 → rummage-4.20}/docs/src/markdown/images/chains.png +0 -0
  63. {rummage-4.18 → rummage-4.20}/docs/src/markdown/images/content_tab.png +0 -0
  64. {rummage-4.18 → rummage-4.20}/docs/src/markdown/images/file_pattern.png +0 -0
  65. {rummage-4.18 → rummage-4.20}/docs/src/markdown/images/files_tab.png +0 -0
  66. {rummage-4.18 → rummage-4.20}/docs/src/markdown/images/html_export.png +0 -0
  67. {rummage-4.18 → rummage-4.20}/docs/src/markdown/images/limit_search_panel.png +0 -0
  68. {rummage-4.18 → rummage-4.20}/docs/src/markdown/images/load_search.png +0 -0
  69. {rummage-4.18 → rummage-4.20}/docs/src/markdown/images/logo.svg +0 -0
  70. {rummage-4.18 → rummage-4.20}/docs/src/markdown/images/plugin_input.png +0 -0
  71. {rummage-4.18 → rummage-4.20}/docs/src/markdown/images/plugin_toggle.png +0 -0
  72. {rummage-4.18 → rummage-4.20}/docs/src/markdown/images/preview.png +0 -0
  73. {rummage-4.18 → rummage-4.20}/docs/src/markdown/images/regex_buttons.png +0 -0
  74. {rummage-4.18 → rummage-4.20}/docs/src/markdown/images/regex_tester.png +0 -0
  75. {rummage-4.18 → rummage-4.20}/docs/src/markdown/images/rummage.png +0 -0
  76. {rummage-4.18 → rummage-4.20}/docs/src/markdown/images/rummage.svg +0 -0
  77. {rummage-4.18 → rummage-4.20}/docs/src/markdown/images/save_search.png +0 -0
  78. {rummage-4.18 → rummage-4.20}/docs/src/markdown/images/search_replace_inputs.png +0 -0
  79. {rummage-4.18 → rummage-4.20}/docs/src/markdown/images/search_replace_panel.png +0 -0
  80. {rummage-4.18 → rummage-4.20}/docs/src/markdown/images/search_tab.png +0 -0
  81. {rummage-4.18 → rummage-4.20}/docs/src/markdown/images/settings_backup.png +0 -0
  82. {rummage-4.18 → rummage-4.20}/docs/src/markdown/images/settings_editor.png +0 -0
  83. {rummage-4.18 → rummage-4.20}/docs/src/markdown/images/settings_encoding.png +0 -0
  84. {rummage-4.18 → rummage-4.20}/docs/src/markdown/images/settings_export.png +0 -0
  85. {rummage-4.18 → rummage-4.20}/docs/src/markdown/images/settings_history.png +0 -0
  86. {rummage-4.18 → rummage-4.20}/docs/src/markdown/images/settings_import.png +0 -0
  87. {rummage-4.18 → rummage-4.20}/docs/src/markdown/images/settings_notify.png +0 -0
  88. {rummage-4.18 → rummage-4.20}/docs/src/markdown/images/settings_search.png +0 -0
  89. {rummage-4.18 → rummage-4.20}/docs/src/markdown/images/thunar-basic.png +0 -0
  90. {rummage-4.18 → rummage-4.20}/docs/src/markdown/images/thunar-conditions.png +0 -0
  91. {rummage-4.18 → rummage-4.20}/docs/src/markdown/images/thunar-custom.png +0 -0
  92. {rummage-4.18 → rummage-4.20}/docs/src/markdown/index.md +0 -0
  93. {rummage-4.18 → rummage-4.20}/docs/src/markdown/search.md +0 -0
  94. {rummage-4.18 → rummage-4.20}/docs/src/markdown/usage.md +0 -0
  95. {rummage-4.18 → rummage-4.20}/docs/theme/announce.html +0 -0
  96. {rummage-4.18 → rummage-4.20}/requirements/docs.txt +0 -0
  97. {rummage-4.18 → rummage-4.20}/requirements/extras.txt +0 -0
  98. {rummage-4.18 → rummage-4.20}/requirements/setup.txt +0 -0
  99. {rummage-4.18 → rummage-4.20}/requirements/test-project.txt +0 -0
  100. {rummage-4.18 → rummage-4.20}/requirements/test.txt +0 -0
  101. {rummage-4.18 → rummage-4.20}/rummage/__init__.py +0 -0
  102. {rummage-4.18 → rummage-4.20}/rummage/__main__.py +0 -0
  103. {rummage-4.18 → rummage-4.20}/rummage/lib/__init__.py +0 -0
  104. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/__init__.py +0 -0
  105. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/actions/__init__.py +0 -0
  106. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/actions/checksum/sum_hashes.py +0 -0
  107. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/actions/checksum/tiger.py +0 -0
  108. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/actions/checksum/whirlpool.py +0 -0
  109. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/actions/fileops.py +0 -0
  110. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/actions/updates.py +0 -0
  111. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/app/__init__.py +0 -0
  112. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/app/custom_app.py +0 -0
  113. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/app/platform_window_focus.py +0 -0
  114. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/app/rummage_app.py +0 -0
  115. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/controls/__init__.py +0 -0
  116. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/controls/collapsible_pane.py +0 -0
  117. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/controls/date_picker.py +0 -0
  118. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/controls/dock_icon.py +0 -0
  119. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/controls/encoding_list.py +0 -0
  120. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/controls/file_picker.py +0 -0
  121. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/controls/load_search_list.py +0 -0
  122. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/controls/pick_button.py +0 -0
  123. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/controls/search_chain_list.py +0 -0
  124. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/controls/search_error_list.py +0 -0
  125. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/controls/time_picker.py +0 -0
  126. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/controls/webview.py +0 -0
  127. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/__init__.py +0 -0
  128. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/arrow_down.png +0 -0
  129. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/arrow_left.png +0 -0
  130. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/arrow_right.png +0 -0
  131. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/arrow_up.png +0 -0
  132. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/binary.png +0 -0
  133. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/doc.png +0 -0
  134. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/404.html +0 -0
  135. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/about/license.html +0 -0
  136. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/css/theme.css +0 -0
  137. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/extras.html +0 -0
  138. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/images/chain_button.png +0 -0
  139. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/images/chain_mode.png +0 -0
  140. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/images/chains.png +0 -0
  141. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/images/content_tab.png +0 -0
  142. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/images/file_pattern.png +0 -0
  143. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/images/files_tab.png +0 -0
  144. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/images/html_export.png +0 -0
  145. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/images/limit_search_panel.png +0 -0
  146. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/images/load_search.png +0 -0
  147. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/images/logo.svg +0 -0
  148. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/images/plugin_input.png +0 -0
  149. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/images/plugin_toggle.png +0 -0
  150. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/images/preview.png +0 -0
  151. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/images/regex_buttons.png +0 -0
  152. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/images/regex_tester.png +0 -0
  153. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/images/rummage.png +0 -0
  154. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/images/rummage.svg +0 -0
  155. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/images/save_search.png +0 -0
  156. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/images/search_replace_inputs.png +0 -0
  157. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/images/search_replace_panel.png +0 -0
  158. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/images/search_tab.png +0 -0
  159. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/images/settings_backup.png +0 -0
  160. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/images/settings_editor.png +0 -0
  161. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/images/settings_encoding.png +0 -0
  162. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/images/settings_export.png +0 -0
  163. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/images/settings_history.png +0 -0
  164. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/images/settings_import.png +0 -0
  165. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/images/settings_notify.png +0 -0
  166. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/images/settings_search.png +0 -0
  167. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/images/thunar-basic.png +0 -0
  168. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/images/thunar-conditions.png +0 -0
  169. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/images/thunar-custom.png +0 -0
  170. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/index.html +0 -0
  171. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/js/theme.js +0 -0
  172. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/docs/sitemap.html +0 -0
  173. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/error.png +0 -0
  174. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/glass.png +0 -0
  175. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/results.css +0 -0
  176. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/rummage.png +0 -0
  177. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/rummage_1024.png +0 -0
  178. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/rummage_128.png +0 -0
  179. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/rummage_16.png +0 -0
  180. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/rummage_256.png +0 -0
  181. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/rummage_32.png +0 -0
  182. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/rummage_40.png +0 -0
  183. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/rummage_48.png +0 -0
  184. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/rummage_512.png +0 -0
  185. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/rummage_mac.png +0 -0
  186. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/data/sorttable.js +0 -0
  187. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/dialogs/__init__.py +0 -0
  188. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/dialogs/checksum_dialog.py +0 -0
  189. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/dialogs/delete_dialog.py +0 -0
  190. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/dialogs/edit_search_chain_dialog.py +0 -0
  191. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/dialogs/error_text_dialog.py +0 -0
  192. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/dialogs/export_settings_dialog.py +0 -0
  193. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/dialogs/file_ext_dialog.py +0 -0
  194. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/dialogs/generic_dialogs.py +0 -0
  195. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/dialogs/html_dialog.py +0 -0
  196. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/dialogs/load_search_dialog.py +0 -0
  197. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/dialogs/overwrite_dialog.py +0 -0
  198. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/dialogs/save_search_dialog.py +0 -0
  199. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/dialogs/search_chain_dialog.py +0 -0
  200. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/dialogs/search_error_dialog.py +0 -0
  201. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/dialogs/support_info_dialog.py +0 -0
  202. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/localization/__init__.py +0 -0
  203. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/notify/__init__.py +0 -0
  204. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/notify/notify_linux.py +0 -0
  205. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/notify/notify_osx.py +0 -0
  206. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/notify/notify_windows.py +0 -0
  207. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/notify/util.py +0 -0
  208. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/util/__init__.py +0 -0
  209. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/util/colors.py +0 -0
  210. {rummage-4.18 → rummage-4.20}/rummage/lib/gui/util/png.py +0 -0
  211. {rummage-4.18 → rummage-4.20}/rummage/lib/rumcore/text_decode.py +0 -0
  212. {rummage-4.18 → rummage-4.20}/rummage/lib/rumcore/util.py +0 -0
  213. {rummage-4.18 → rummage-4.20}/tests/__init__.py +0 -0
  214. {rummage-4.18 → rummage-4.20}/tests/test_versions.py +0 -0
  215. {rummage-4.18 → rummage-4.20}/tools/__init__.py +0 -0
  216. {rummage-4.18 → rummage-4.20}/tools/gen_docs.py +0 -0
  217. {rummage-4.18 → rummage-4.20}/tools/gui_patch.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.3
2
2
  Name: rummage
3
- Version: 4.18
3
+ Version: 4.20
4
4
  Summary: A GUI search and replace app.
5
5
  Project-URL: Homepage, https://github.com/facelessuser/Rummage
6
6
  Author-email: Isaac Muse <Isaac.Muse@gmail.com>
@@ -13,7 +13,6 @@ Classifier: Intended Audience :: Developers
13
13
  Classifier: License :: OSI Approved :: MIT License
14
14
  Classifier: Operating System :: OS Independent
15
15
  Classifier: Programming Language :: Python :: 3
16
- Classifier: Programming Language :: Python :: 3.7
17
16
  Classifier: Programming Language :: Python :: 3.8
18
17
  Classifier: Programming Language :: Python :: 3.9
19
18
  Classifier: Programming Language :: Python :: 3.10
@@ -23,16 +22,16 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
23
22
  Classifier: Topic :: Text Processing :: Filters
24
23
  Classifier: Topic :: Text Processing :: Markup :: HTML
25
24
  Requires-Python: >=3.7
26
- Requires-Dist: backrefs<6.0,>=5.5
27
- Requires-Dist: bracex>=2.3
25
+ Requires-Dist: backrefs<6.0,>=5.6
26
+ Requires-Dist: bracex>=2.4
28
27
  Requires-Dist: chardet>=5.1.0
29
- Requires-Dist: coloraide>=2.4
28
+ Requires-Dist: coloraide>=2.9.1
30
29
  Requires-Dist: filelock>=3.12.2
31
- Requires-Dist: markdown>=3.3.4
30
+ Requires-Dist: markdown>=3.4.4
32
31
  Requires-Dist: pygments>=2.14.1
33
- Requires-Dist: pymdown-extensions>=10.0.1
32
+ Requires-Dist: pymdown-extensions>=10.3
34
33
  Requires-Dist: send2trash>=1.8.2
35
- Requires-Dist: wcmatch<9.0,>=8.4.1
34
+ Requires-Dist: wcmatch<9.0,>=8.5
36
35
  Requires-Dist: wxpython>=4.1.0
37
36
  Provides-Extra: extras
38
37
  Requires-Dist: faust-cchardet>=2.1.18; extra == 'extras'
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 4.20
4
+
5
+ - **NEW**: Add new autocomplete setting to disable/enable autocomplete. Mainly for Linux systems where autocomplete
6
+ functionality can sometimes work well or not so well depending on the distro.
7
+ - **FIX**: Fix issue with autocomplete shortcuts not working on every platform.
8
+
9
+ ## 4.19
10
+
11
+ - **NEW**: Drop support for Python 3.7.
12
+ - **NEW**: Update some dependencies for latest bug fixes and improvements.
13
+ - **FIX**: Minor bug fixes.
14
+
3
15
  ## 4.18
4
16
 
5
17
  - **NEW**: Officially support Python 3.11.
@@ -0,0 +1,180 @@
1
+ # Installation
2
+
3
+ ## Requirements
4
+
5
+ Rummage, when installed via `pip`, will install all of your required dependencies, but there are a few optional
6
+ dependencies. If desired, you can install these dependencies manually, or install them automatically with
7
+ [`pip`](#installation_1).
8
+
9
+ Name | Details
10
+ ---------------------- | -------
11
+ [`regex`][regex] | Regex is a great regular expression engine that adds some nice features such as fuzzy searching, nested char sets, better Unicode support, and more.
12
+ [`cchardet`][cchardet] | `cchardet` is high speed universal character encoding detector. Much faster than the default `chardet`.
13
+
14
+ ## Installation
15
+
16
+ For well supported platforms, Python wheels are usually available for Rummage and its dependencies. In most cases,
17
+ installation can be done quickly and easily through `pip`. Some platforms, like Linux, may require some additional
18
+ hoops that you must jump through. Additionally, wxPython, the GUI library that Rummage depends on, may sometimes have
19
+ support lagging for the latest Python version.
20
+
21
+ In general, it is always recommended to try and install `wxpython` first and make sure it is properly available
22
+ before installing Rummage. The wxPython installation may be more complicated depending on the platform. But in general,
23
+ for non-Linux systems, the following steps are usually sufficient.
24
+
25
+ Make sure wxPython is installed first. It is important to first ensure wxPython can be installed for your platform and
26
+ specific Python version first.
27
+
28
+ ```console
29
+ $ pip install wxpython
30
+ ```
31
+
32
+ Install Rummage:
33
+
34
+ ```console
35
+ $ pip install rummage
36
+ ```
37
+
38
+ Install Rummage with optional modules.
39
+
40
+ ```console
41
+ $ pip install rummage[extras]
42
+ ```
43
+
44
+ Upgrade Rummage:
45
+
46
+ ```console
47
+ $ pip install --upgrade rummage
48
+ ```
49
+
50
+ ### Windows and macOS
51
+
52
+ On Windows, installation is pretty straight forward as wheels are provided for all packages in `pip`. In recent years,
53
+ macOS installation also usually has wheels available as well. Support for the latest Python version may not always be
54
+ available as the development cycle for wxPython can take a bit to catch up.
55
+
56
+ Simply using `pip` to install is sufficient.
57
+
58
+ ```console
59
+ $ pip install rummage
60
+ ```
61
+
62
+ ### Linux
63
+
64
+ Linux doesn't often have pre-built wheels for wxPython, so often, you must first ensure some prerequisites are in place
65
+ before using `pip install` (or other methods). Additionally, Linux, in recent years, has made managing libraries and
66
+ applications in Python a bit more complex with its new restrictions. Despite all of this, Rummage is still supported,
67
+ but may require slightly more complex installation.
68
+
69
+ #### pipx
70
+
71
+ If installing Rummage on Linux, you may consider `pipx`, especially if your distro has a new enough wxPython [distro
72
+ packages](#distro-packages). On Ubuntu, installation may look similar to the following:
73
+
74
+ ``` console
75
+ $ sudo apt install python3-wgtk4.0 python3-wxgtk-webview4.0
76
+ $ pipx install --system-site-packages rummage
77
+ ```
78
+
79
+ The `--system-site-packages` flag is necessary as by default, `pipx` will create a brand new virtual environment that
80
+ does not have access to the globally available distro package.
81
+
82
+ #### venv
83
+
84
+ Another approach on Linux is to use the `venv` package to install Rummage and its dependencies. If your distro has a new
85
+ enough wxPython [distro package](#distro-packages), you can install the wxPython and then create your virtual
86
+ environment with the `--system-site-packages` flag to ensure it has access to the installed package. On Ubuntu, it may
87
+ look similar to:
88
+
89
+ ``` console
90
+ $ sudo apt install python3-wgtk4.0 python3-wxgtk-webview4.0
91
+ $ python3 -m venv --system-site-packages ./venv/rummage
92
+ $ source ./venv/rummage/bin/activate
93
+ $ (rummage) $ pip install rummage
94
+ ```
95
+
96
+ If your distro does not have a proper wxPython package, you may have to install it from another source under your
97
+ virtual environment.
98
+
99
+ #### Prerequisites
100
+
101
+ The most important prerequisite to getting Rummage installed is `wxpython`. It is always recommended to ensure it is
102
+ installed before trying to install Rummage. If it is not, installation may try and download `wxpython` and build it
103
+ from scratch. This can take a long time and can fail.
104
+
105
+ ##### Distro Packages
106
+
107
+ Many Linux distros make wxPython available via their package manager. Assuming the package is not too old and is still
108
+ supported by Rummage, this should automatically fulfill all the needed requirements. As an example, on Ubuntu, you must
109
+ install the following:
110
+
111
+ ``` console
112
+ $ sudo apt install python3-wgtk4.0 python3-wxgtk-webview4.0
113
+ ```
114
+
115
+ ##### Pre-built Wheels
116
+
117
+ Another option, if your distro packages are too old, is to see if there is a readily available pre-built wheel from the
118
+ wxPython team. These are usually kept here: https://extras.wxpython.org/wxPython4/extras/linux/. It is possible through
119
+ that even after this, there may be some Linux dependencies missing. The wheel can be installed in a virtual environment
120
+ using pip:
121
+
122
+ ```console
123
+ $ pip install -U -f https://extras.wxpython.org/wxPython4/extras/linux/gtk3/ubuntu-20.04 wxPython
124
+ ```
125
+
126
+ While the wheel should install fine, when you actually run Rummage, you may see some libraries missing. A common one
127
+ on Ubuntu is `libSDL` libraries. If you see a complaint about a library not being found or loaded, and you are on
128
+ Ubuntu, you can install `apt-find` and search for the package containing the file, then you can install it.
129
+
130
+ ```shell-session
131
+ $ sudo apt install apt-file
132
+ $ sudo apt-file update
133
+ $ apt-file search libSDL2-2.0.so.0
134
+ libsdl2-2.0-0: /usr/lib/x86_64-linux-gnu/libSDL2-2.0.so.0
135
+ libsdl2-2.0-0: /usr/lib/x86_64-linux-gnu/libSDL2-2.0.so.0.10.0
136
+ $ sudo apt install libsdl2-2.0-0
137
+ ```
138
+
139
+ ##### Manual Building
140
+
141
+ If you have installed a version of Python on your machine that does not have a pre-built wxPython package, or are using
142
+ a distro that does not have a pre-built wheel, you may have to build it.
143
+
144
+ You can build the package by installing with `pip`, but you may find that it won't build until you get all the
145
+ dependencies installed. Once the dependencies for building are in place, you can run pip to install the package.
146
+
147
+ We do not have updated lists of prerequisites for distros. The last updated list was from Ubuntu 18.04 and Fedora 26.
148
+ What you must install may vary depend on what is already installed on your distro out of the box. Also, the version of
149
+ each prerequisites may vary from distro to distro or from distro release to distro release.
150
+
151
+ Usually the requirements deal with `gstreamer`, `gtk`, `libsdl`, etc. Below are some examples, but are most likely out
152
+ of date:
153
+
154
+ /// define
155
+ Ubuntu 18.04
156
+
157
+ -
158
+ ```shell-session
159
+ $ sudo apt-get install python3.6-dev dpkg-dev build-essential libwebkitgtk-dev libjpeg-dev libtiff-dev libsdl1.2-dev libgstreamer-plugins-base1.0-dev libnotify-dev freeglut3 freeglut3-dev libgtk-3-dev libwebkitgtk-3.0-dev
160
+ ```
161
+
162
+ Fedora 26
163
+
164
+ -
165
+ ```shell-session
166
+ $ sudo dnf install gcc-c++ wxGTK-devel gstreamer-devel webkitgtk-devel GConf2-devel gstreamer-plugins-base-devel
167
+ ```
168
+ ///
169
+
170
+ Once dependencies are in place, you can finally install wxPython with pip (`pip install wxpython`). Be patient when
171
+ installing wxPython manually as Linux must build the package, and it won't give much in the way of status while it
172
+ builds. If it fails and complains about a missing library, you may have to install more dependencies.
173
+
174
+ For a complete list of dependencies please check wxPython's official documentation on dependencies before installing.
175
+ Particularly under [this section][wxpython-prereq]. If they are out of date, please contact the wxPython team for better
176
+ instructions.
177
+
178
+ other systems, there may be some prerequisites. If on Linux, it is recommended to make sure you can install `wxpython`
179
+ first. This is due to the fact that installation of that library may require special instructions and will cause the
180
+ installation of Rummage to fail if `wxpython` fails due to not having the necessary prerequisites.
@@ -23,7 +23,6 @@ Language
23
23
  - Rummage has internal support to display dialog labels in different languages. Currently Rummage has English. Russian
24
24
  is outdated but includes a fair bit of the needed translations. See [Localization](./extras.md#localization) to
25
25
  learn more about improving current translations or adding additional translations.
26
- ///
27
26
 
28
27
  Updates
29
28
 
@@ -34,7 +33,7 @@ Updates
34
33
  The check is only a check for new versions and doesn't perform an upgrade. Rummage must be upgraded via `pip` from
35
34
  command line.
36
35
 
37
- /// info | Update Issues: Python 3.6+ on macOS
36
+ //// info | Update Issues: Python 3.6+ on macOS
38
37
  There is a small issue on macOS with Python 3.6+: Python 3.6 changed how it gets the default certificates
39
38
  required to properly check URLs. The details are actually documented here: https://bugs.python.org/issue28150#msg276516.
40
39
 
@@ -44,13 +43,26 @@ Updates
44
43
  will use `pip` to install `certifi` and creates a symlink in the OpenSSL directory to `certifi`'s installed
45
44
  bundle location. If you are using something like macports, then you'll probably have to research to find out how
46
45
  to do the same thing.
47
- ///
46
+ ////
48
47
 
49
48
  International Time
50
49
 
51
50
  - Rummage displays file creation and modified time in the form `Jul 01, 2018, 03:00:00 AM`, but you can enable this
52
51
  option to display the times in international format: `2018-07-01 03:00:00`.
53
52
 
53
+ Alternate Row Colors
54
+
55
+ - In search results, Rummage can show alternating colors for each row. This can be enabled/disabled.
56
+
57
+ Autocomplete
58
+
59
+ - For certain text boxes that retain a history of previous inputs, Rummage will employ an autocomplete feature.
60
+ Unfortunately, in some Linux distros, this autocomplete doesn't work quite right. Autocomplete can be
61
+ enabled/disabled for those who are having trouble with the feature.
62
+
63
+ ///
64
+
65
+
54
66
  ## Search
55
67
 
56
68
  ![Preferences: Search](images/settings_search.png)
@@ -7615,6 +7615,129 @@
7615
7615
  <event name="OnCheckBox">on_alt_row_toggle</event>
7616
7616
  </object>
7617
7617
  </object>
7618
+ <object class="sizeritem" expanded="0">
7619
+ <property name="border">5</property>
7620
+ <property name="flag">wxEXPAND | wxALL</property>
7621
+ <property name="proportion">0</property>
7622
+ <object class="wxStaticLine" expanded="0">
7623
+ <property name="BottomDockable">1</property>
7624
+ <property name="LeftDockable">1</property>
7625
+ <property name="RightDockable">1</property>
7626
+ <property name="TopDockable">1</property>
7627
+ <property name="aui_layer"></property>
7628
+ <property name="aui_name"></property>
7629
+ <property name="aui_position"></property>
7630
+ <property name="aui_row"></property>
7631
+ <property name="best_size"></property>
7632
+ <property name="bg"></property>
7633
+ <property name="caption"></property>
7634
+ <property name="caption_visible">1</property>
7635
+ <property name="center_pane">0</property>
7636
+ <property name="close_button">1</property>
7637
+ <property name="context_help"></property>
7638
+ <property name="context_menu">1</property>
7639
+ <property name="default_pane">0</property>
7640
+ <property name="dock">Dock</property>
7641
+ <property name="dock_fixed">0</property>
7642
+ <property name="docking">Left</property>
7643
+ <property name="enabled">1</property>
7644
+ <property name="fg"></property>
7645
+ <property name="floatable">1</property>
7646
+ <property name="font"></property>
7647
+ <property name="gripper">0</property>
7648
+ <property name="hidden">0</property>
7649
+ <property name="id">wxID_ANY</property>
7650
+ <property name="max_size"></property>
7651
+ <property name="maximize_button">0</property>
7652
+ <property name="maximum_size"></property>
7653
+ <property name="min_size"></property>
7654
+ <property name="minimize_button">0</property>
7655
+ <property name="minimum_size"></property>
7656
+ <property name="moveable">1</property>
7657
+ <property name="name">m_staticline15</property>
7658
+ <property name="pane_border">1</property>
7659
+ <property name="pane_position"></property>
7660
+ <property name="pane_size"></property>
7661
+ <property name="permission">protected</property>
7662
+ <property name="pin_button">1</property>
7663
+ <property name="pos"></property>
7664
+ <property name="resize">Resizable</property>
7665
+ <property name="show">1</property>
7666
+ <property name="size"></property>
7667
+ <property name="style">wxLI_HORIZONTAL</property>
7668
+ <property name="subclass">; ; forward_declare</property>
7669
+ <property name="toolbar_pane">0</property>
7670
+ <property name="tooltip"></property>
7671
+ <property name="window_extra_style"></property>
7672
+ <property name="window_name"></property>
7673
+ <property name="window_style"></property>
7674
+ </object>
7675
+ </object>
7676
+ <object class="sizeritem" expanded="0">
7677
+ <property name="border">5</property>
7678
+ <property name="flag">wxALL</property>
7679
+ <property name="proportion">0</property>
7680
+ <object class="wxCheckBox" expanded="0">
7681
+ <property name="BottomDockable">1</property>
7682
+ <property name="LeftDockable">1</property>
7683
+ <property name="RightDockable">1</property>
7684
+ <property name="TopDockable">1</property>
7685
+ <property name="aui_layer"></property>
7686
+ <property name="aui_name"></property>
7687
+ <property name="aui_position"></property>
7688
+ <property name="aui_row"></property>
7689
+ <property name="best_size"></property>
7690
+ <property name="bg"></property>
7691
+ <property name="caption"></property>
7692
+ <property name="caption_visible">1</property>
7693
+ <property name="center_pane">0</property>
7694
+ <property name="checked">0</property>
7695
+ <property name="close_button">1</property>
7696
+ <property name="context_help"></property>
7697
+ <property name="context_menu">1</property>
7698
+ <property name="default_pane">0</property>
7699
+ <property name="dock">Dock</property>
7700
+ <property name="dock_fixed">0</property>
7701
+ <property name="docking">Left</property>
7702
+ <property name="enabled">1</property>
7703
+ <property name="fg"></property>
7704
+ <property name="floatable">1</property>
7705
+ <property name="font"></property>
7706
+ <property name="gripper">0</property>
7707
+ <property name="hidden">0</property>
7708
+ <property name="id">wxID_ANY</property>
7709
+ <property name="label">Enable autocomplete</property>
7710
+ <property name="max_size"></property>
7711
+ <property name="maximize_button">0</property>
7712
+ <property name="maximum_size"></property>
7713
+ <property name="min_size"></property>
7714
+ <property name="minimize_button">0</property>
7715
+ <property name="minimum_size"></property>
7716
+ <property name="moveable">1</property>
7717
+ <property name="name">m_autocomplete_checkbox</property>
7718
+ <property name="pane_border">1</property>
7719
+ <property name="pane_position"></property>
7720
+ <property name="pane_size"></property>
7721
+ <property name="permission">protected</property>
7722
+ <property name="pin_button">1</property>
7723
+ <property name="pos"></property>
7724
+ <property name="resize">Resizable</property>
7725
+ <property name="show">1</property>
7726
+ <property name="size"></property>
7727
+ <property name="style"></property>
7728
+ <property name="subclass">; ; forward_declare</property>
7729
+ <property name="toolbar_pane">0</property>
7730
+ <property name="tooltip"></property>
7731
+ <property name="validator_data_type"></property>
7732
+ <property name="validator_style">wxFILTER_NONE</property>
7733
+ <property name="validator_type">wxDefaultValidator</property>
7734
+ <property name="validator_variable"></property>
7735
+ <property name="window_extra_style"></property>
7736
+ <property name="window_name"></property>
7737
+ <property name="window_style"></property>
7738
+ <event name="OnCheckBox">on_autocomplete_toggle</event>
7739
+ </object>
7740
+ </object>
7618
7741
  </object>
7619
7742
  </object>
7620
7743
  </object>
@@ -22,9 +22,7 @@ def get_requirements(root, requirements):
22
22
 
23
23
  install_requires = []
24
24
  with open(os.path.join(root, requirements)) as f:
25
- for line in f:
26
- if not line.startswith("#"):
27
- install_requires.append(line.strip())
25
+ install_requires = [line.strip() for line in f if not line.startswith("#")]
28
26
  return install_requires
29
27
 
30
28
 
@@ -45,11 +43,11 @@ class CustomMetadataHook(MetadataHookInterface):
45
43
  "License :: OSI Approved :: MIT License",
46
44
  "Operating System :: OS Independent",
47
45
  "Programming Language :: Python :: 3",
48
- "Programming Language :: Python :: 3.7",
49
46
  "Programming Language :: Python :: 3.8",
50
47
  "Programming Language :: Python :: 3.9",
51
48
  "Programming Language :: Python :: 3.10",
52
49
  "Programming Language :: Python :: 3.11",
50
+ # "Programming Language :: Python :: 3.12",
53
51
  "Topic :: Internet :: WWW/HTTP :: Dynamic Content",
54
52
  "Topic :: Software Development :: Libraries :: Python Modules",
55
53
  "Topic :: Text Processing :: Filters",
@@ -55,8 +55,8 @@ markdown_extensions:
55
55
  - pymdownx.caret:
56
56
  - pymdownx.smartsymbols:
57
57
  - pymdownx.emoji:
58
- emoji_index: !!python/name:materialx.emoji.twemoji
59
- emoji_generator: !!python/name:materialx.emoji.to_svg
58
+ emoji_index: !!python/name:material.extensions.emoji.twemoji
59
+ emoji_generator: !!python/name:material.extensions.emoji.to_svg
60
60
  - pymdownx.escapeall:
61
61
  hardbreak: True
62
62
  nbsp: True
@@ -82,8 +82,8 @@ markdown_extensions:
82
82
  - pymdownx.caret:
83
83
  - pymdownx.smartsymbols:
84
84
  - pymdownx.emoji:
85
- emoji_index: !!python/name:materialx.emoji.twemoji
86
- emoji_generator: !!python/name:materialx.emoji.to_svg
85
+ emoji_index: !!python/name:material.extensions.emoji.twemoji
86
+ emoji_generator: !!python/name:material.extensions.emoji.to_svg
87
87
  - pymdownx.escapeall:
88
88
  hardbreak: True
89
89
  nbsp: True
@@ -100,3 +100,86 @@ extract = "pybabel extract --input-dirs=rummage --output-file=rummage/lib/gui/lo
100
100
  init = "pybabel init --domain=rummage --input-file=rummage/lib/gui/localization/locale/rummage.pot --output-dir=rummage/lib/gui/localization/locale"
101
101
  update = "pybabel update --domain=rummage --input-file=rummage/lib/gui/localization/locale/rummage.pot --output-dir=rummage/lib/gui/localization/locale"
102
102
  compile = "pybabel compile --domain=rummage --directory=rummage/lib/gui/localization/locale"
103
+
104
+ [tool.ruff]
105
+ line-length = 120
106
+
107
+ extend-exclude = [
108
+ "rummage/lib/gui/gui.py",
109
+ "tests/encodings/*",
110
+ "*tiger.py",
111
+ "*whirlpool.py",
112
+ "*png.py"
113
+ ]
114
+
115
+ select = [
116
+ "A", # flake8-builtins
117
+ "B", # flake8-bugbear
118
+ "D", # pydocstyle
119
+ "C4", # flake8-comprehensions
120
+ "N", # pep8-naming
121
+ "E", # pycodestyle
122
+ "F", # pyflakes
123
+ "PGH", # pygrep-hooks
124
+ "RUF", # ruff
125
+ # "UP", # pyupgrade
126
+ "W", # pycodestyle
127
+ "YTT", # flake8-2020,
128
+ "PERF" # Perflint
129
+ ]
130
+
131
+ ignore = [
132
+ "B034",
133
+ "E741",
134
+ "D202",
135
+ "D401",
136
+ "D212",
137
+ "D203",
138
+ "D417",
139
+ "N802",
140
+ "N801",
141
+ "N803",
142
+ "N806",
143
+ "N818",
144
+ "RUF012",
145
+ "RUF005",
146
+ "PGH004",
147
+ "RUF100"
148
+ ]
149
+
150
+ [tool.tox]
151
+ legacy_tox_ini = """
152
+ [tox]
153
+ skipsdist=true
154
+ envlist=
155
+ {py38,py39,py310,py311,py312},
156
+ lint
157
+
158
+ [testenv]
159
+ passenv = *
160
+ deps=
161
+ -r requirements/test-project.txt
162
+ -r requirements/extras.txt
163
+ -r requirements/test.txt
164
+ commands=
165
+ {envbindir}/py.test --cov rummage --cov-append tests
166
+ {envbindir}/coverage html -d {envtmpdir}/coverage
167
+ {envbindir}/coverage xml
168
+ {envbindir}/coverage report --show-missing
169
+
170
+ [testenv:lint]
171
+ passenv = *
172
+ deps=
173
+ -r requirements/lint.txt
174
+ commands=
175
+ "{envbindir}"/ruff check .
176
+
177
+ [testenv:documents]
178
+ passenv = *
179
+ deps=
180
+ -r requirements/docs.txt
181
+ commands=
182
+ {envpython} -m mkdocs build --clean --verbose --strict
183
+ {envpython} -m pyspelling
184
+ {envpython} {toxinidir}/tools/gen_docs.py --verbose --test
185
+ """
@@ -0,0 +1 @@
1
+ ruff
@@ -0,0 +1,11 @@
1
+ chardet>=5.1.0
2
+ backrefs>=5.6,<6.0
3
+ bracex>=2.4
4
+ wcmatch>=8.5,<9.0
5
+ wxpython>=4.1.0
6
+ filelock>=3.12.2
7
+ send2trash>=1.8.2
8
+ markdown>=3.4.4
9
+ pymdown-extensions>=10.3
10
+ pygments>=2.14.1
11
+ coloraide>=2.9.1
@@ -189,7 +189,7 @@ def parse_version(ver):
189
189
 
190
190
 
191
191
  # (major, minor, micro, release type, pre-release build, post-release build, development-release)
192
- __version_info__ = Version(4, 18, 0, 'final')
192
+ __version_info__ = Version(4, 20, 0, 'final')
193
193
  __version__ = __version_info__._get_canonical()
194
194
  __app__ = "Rummage"
195
195
  __status__ = __version_info__[3]
@@ -134,11 +134,11 @@ def _verify_hashes(hashes):
134
134
  try:
135
135
  hashlib.new(item)
136
136
  VALID_HASH.append(item)
137
- except Exception:
137
+ except Exception: # noqa: PERF203
138
138
  pass
139
139
 
140
140
 
141
- _available_hashes = list(set([x.lower() for x in hashlib.algorithms_available]))
141
+ _available_hashes = list({x.lower() for x in hashlib.algorithms_available})
142
142
  _verify_hashes(_available_hashes)
143
143
 
144
144
  _additional_hashes = {
@@ -153,10 +153,10 @@ _additional_hashes = {
153
153
  'whirlpool': whirlpool.whirlpool
154
154
  }
155
155
 
156
- for k, v in _additional_hashes.items():
156
+ for k in _additional_hashes.keys():
157
157
  try:
158
158
  hashlib.new(k)
159
- except Exception:
159
+ except Exception: # noqa: PERF203
160
160
  VALID_HASH.append(k)
161
161
 
162
162
  VALID_HASH.sort()
@@ -89,7 +89,7 @@ def export(export_csv, chain, result_list, result_content_list):
89
89
  literal_search = csv_encode(_("Literal Search"))
90
90
 
91
91
  with codecs.open(export_csv, "w", encoding="utf-8-sig") as csv:
92
- for pattern, replace, flags in chain:
92
+ for pattern, _replace, flags in chain:
93
93
  csv.write(
94
94
  "%s,%s\n" % (
95
95
  (literal_search if flags & rumcore.LITERAL else regex_search), csv_encode(pattern)
@@ -145,7 +145,7 @@ def export_result_list(res, html):
145
145
  )
146
146
 
147
147
  for item in res.values():
148
- content.append(
148
+ content.append( # noqa: PERF401
149
149
  RESULT_ROW % {
150
150
  "file": html_encode(item[0]),
151
151
  "matches": util.to_ustr(item[1]),
@@ -189,7 +189,7 @@ def export_result_content_list(res, html):
189
189
  )
190
190
 
191
191
  for item in res.values():
192
- content.append(
192
+ content.append( # noqa: PERF401
193
193
  RESULT_CONTENT_ROW % {
194
194
  "file_sort": html_encode(os.path.join(item[0][1], item[0][0])),
195
195
  "file": html_encode(item[0][0]),
@@ -282,7 +282,7 @@ def export(export_html, chain, result_list, result_content_list):
282
282
 
283
283
  search_label_regex = html_encode(_("Regex search:"))
284
284
  search_label_literal = html_encode(_("Literal search:"))
285
- for pattern, replace, flags in chain:
285
+ for pattern, _replace, flags in chain:
286
286
  html.write(
287
287
  TABS_END % {
288
288
  "search": html_encode(pattern),