promnesia 1.1.20230129__tar.gz → 1.2.20240810__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 (244) hide show
  1. promnesia-1.2.20240810/.ci/end2end/.dockerignore +1 -0
  2. promnesia-1.2.20240810/.ci/end2end/Dockerfile +19 -0
  3. promnesia-1.2.20240810/.ci/end2end/build_and_run.sh +20 -0
  4. promnesia-1.2.20240810/.ci/end2end/scripts/build_and_run_tests.sh +15 -0
  5. promnesia-1.2.20240810/.ci/end2end/scripts/setup_chrome.sh +40 -0
  6. promnesia-1.2.20240810/.ci/end2end/scripts/setup_firefox.sh +26 -0
  7. promnesia-1.2.20240810/.ci/end2end/scripts/setup_node.sh +7 -0
  8. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/.ci/release +2 -4
  9. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/.ci/run +1 -1
  10. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/.github/workflows/main.yml +46 -45
  11. promnesia-1.2.20240810/PKG-INFO +53 -0
  12. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/README.org +1 -1
  13. promnesia-1.2.20240810/benchmarks/20231115.org +17 -0
  14. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/doc/DEVELOPMENT.org +7 -4
  15. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/doc/SOURCES.org +108 -47
  16. promnesia-1.2.20240810/doc/addons-mozilla-org.org +53 -0
  17. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/docker/docker_files/Dockerfile +3 -3
  18. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/docker/docker_files/Dockerfile-indexer +1 -0
  19. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/extension/.ci/build +0 -1
  20. promnesia-1.2.20240810/extension/__mocks__/browser.js +30 -0
  21. promnesia-1.2.20240810/extension/amo-metadata.json +47 -0
  22. promnesia-1.1.20230129/extension/babel.config.js → promnesia-1.2.20240810/extension/babel.config.cjs +3 -2
  23. promnesia-1.2.20240810/extension/build +161 -0
  24. promnesia-1.2.20240810/extension/eslint.config.js +31 -0
  25. promnesia-1.2.20240810/extension/generate_manifest.js +250 -0
  26. promnesia-1.1.20230129/extension/jest.config.js → promnesia-1.2.20240810/extension/jest.config.cjs +2 -1
  27. {promnesia-1.1.20230129/extension → promnesia-1.2.20240810/extension/old}/flow-typed/webextension-polyfill.js +14 -0
  28. promnesia-1.2.20240810/extension/old/webpack.config.js +380 -0
  29. promnesia-1.2.20240810/extension/package-lock.json +13754 -0
  30. promnesia-1.2.20240810/extension/package.json +61 -0
  31. promnesia-1.2.20240810/extension/rollup.config.js +172 -0
  32. promnesia-1.1.20230129/extension/src/api.js → promnesia-1.2.20240810/extension/src/api.ts +53 -58
  33. promnesia-1.1.20230129/extension/src/background.js → promnesia-1.2.20240810/extension/src/background.ts +291 -245
  34. promnesia-1.2.20240810/extension/src/background_chrome_mv2.js +5 -0
  35. promnesia-1.1.20230129/extension/src/common.js → promnesia-1.2.20240810/extension/src/common.ts +62 -66
  36. promnesia-1.2.20240810/extension/src/compat.ts +24 -0
  37. promnesia-1.1.20230129/extension/src/display.js → promnesia-1.2.20240810/extension/src/display.ts +30 -28
  38. promnesia-1.1.20230129/extension/src/filterlist.js → promnesia-1.2.20240810/extension/src/filterlist.ts +13 -14
  39. promnesia-1.1.20230129/extension/src/normalise.js → promnesia-1.2.20240810/extension/src/normalise.ts +9 -14
  40. promnesia-1.1.20230129/extension/src/notifications.js → promnesia-1.2.20240810/extension/src/notifications.ts +61 -49
  41. promnesia-1.1.20230129/extension/src/options.js → promnesia-1.2.20240810/extension/src/options.ts +43 -39
  42. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/extension/src/options_page.html +4 -4
  43. promnesia-1.1.20230129/extension/src/options_page.js → promnesia-1.2.20240810/extension/src/options_page.ts +30 -55
  44. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/extension/src/search.html +1 -4
  45. promnesia-1.1.20230129/extension/src/search.js → promnesia-1.2.20240810/extension/src/search.ts +15 -16
  46. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/extension/src/selenium_bridge.js +3 -2
  47. promnesia-1.2.20240810/extension/src/showvisited.css +49 -0
  48. promnesia-1.2.20240810/extension/src/showvisited.js +309 -0
  49. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/extension/src/sidebar.css +2 -1
  50. promnesia-1.1.20230129/extension/src/sidebar.js → promnesia-1.2.20240810/extension/src/sidebar.ts +89 -70
  51. promnesia-1.1.20230129/extension/src/sources.js → promnesia-1.2.20240810/extension/src/sources.ts +30 -27
  52. promnesia-1.2.20240810/extension/tests/anchorme.test.js +12 -0
  53. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/extension/tests/common.test.js +5 -5
  54. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/extension/tests/integration.test.js +27 -47
  55. promnesia-1.2.20240810/extension/tsconfig.json +20 -0
  56. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/mypy.ini +6 -4
  57. promnesia-1.2.20240810/ruff.toml +25 -0
  58. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/scripts/browser_history.py +3 -3
  59. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/scripts/promnesia +1 -0
  60. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/setup.py +15 -13
  61. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/__main__.py +58 -50
  62. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/cannon.py +4 -4
  63. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/common.py +57 -38
  64. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/compare.py +3 -2
  65. promnesia-1.2.20240810/src/promnesia/compat.py +12 -0
  66. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/config.py +4 -2
  67. promnesia-1.2.20240810/src/promnesia/database/common.py +66 -0
  68. promnesia-1.2.20240810/src/promnesia/database/dump.py +187 -0
  69. promnesia-1.1.20230129/src/promnesia/read_db.py → promnesia-1.2.20240810/src/promnesia/database/load.py +10 -11
  70. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/extract.py +1 -0
  71. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/kjson.py +1 -1
  72. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/logging.py +14 -14
  73. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/misc/config_example.py +1 -2
  74. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/misc/install_server.py +5 -4
  75. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/server.py +24 -24
  76. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/sources/auto.py +12 -7
  77. promnesia-1.2.20240810/src/promnesia/sources/browser.py +89 -0
  78. promnesia-1.1.20230129/src/promnesia/sources/browser.py → promnesia-1.2.20240810/src/promnesia/sources/browser_legacy.py +13 -17
  79. promnesia-1.2.20240810/src/promnesia/sources/demo.py +36 -0
  80. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/sources/filetypes.py +8 -0
  81. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/sources/github.py +2 -2
  82. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/sources/hackernews.py +1 -2
  83. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/sources/hypothesis.py +1 -1
  84. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/sources/markdown.py +15 -15
  85. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/sources/org.py +7 -3
  86. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/sources/plaintext.py +3 -1
  87. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/sources/reddit.py +2 -2
  88. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/sources/rss.py +5 -1
  89. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/sources/shellcmd.py +6 -2
  90. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/sources/signal.py +29 -20
  91. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/sources/smscalls.py +8 -1
  92. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/sources/stackexchange.py +2 -2
  93. promnesia-1.2.20240810/src/promnesia/sources/takeout.py +207 -0
  94. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/sources/takeout_legacy.py +10 -2
  95. promnesia-1.2.20240810/src/promnesia/sources/telegram.py +84 -0
  96. promnesia-1.1.20230129/src/promnesia/sources/telegram.py → promnesia-1.2.20240810/src/promnesia/sources/telegram_legacy.py +12 -23
  97. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/sources/vcs.py +1 -1
  98. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/sources/viber.py +6 -15
  99. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/sources/website.py +1 -1
  100. promnesia-1.2.20240810/src/promnesia/sqlite.py +42 -0
  101. promnesia-1.2.20240810/src/promnesia/tests/__init__.py +0 -0
  102. promnesia-1.2.20240810/src/promnesia/tests/common.py +137 -0
  103. promnesia-1.2.20240810/src/promnesia/tests/server_helper.py +64 -0
  104. promnesia-1.2.20240810/src/promnesia/tests/sources/__init__.py +0 -0
  105. promnesia-1.1.20230129/tests/test_auto_indexer.py → promnesia-1.2.20240810/src/promnesia/tests/sources/test_auto.py +9 -10
  106. promnesia-1.2.20240810/src/promnesia/tests/sources/test_filetypes.py +42 -0
  107. promnesia-1.2.20240810/src/promnesia/tests/sources/test_hypothesis.py +39 -0
  108. promnesia-1.1.20230129/tests/test_org_indexer.py → promnesia-1.2.20240810/src/promnesia/tests/sources/test_org.py +16 -9
  109. promnesia-1.2.20240810/src/promnesia/tests/sources/test_plaintext.py +26 -0
  110. promnesia-1.2.20240810/src/promnesia/tests/sources/test_shellcmd.py +22 -0
  111. promnesia-1.2.20240810/src/promnesia/tests/sources/test_takeout.py +58 -0
  112. promnesia-1.1.20230129/tests/cannon.py → promnesia-1.2.20240810/src/promnesia/tests/test_cannon.py +2 -2
  113. promnesia-1.1.20230129/tests/cli.py → promnesia-1.2.20240810/src/promnesia/tests/test_cli.py +11 -18
  114. promnesia-1.2.20240810/src/promnesia/tests/test_compare.py +30 -0
  115. promnesia-1.1.20230129/tests/config_tests.py → promnesia-1.2.20240810/src/promnesia/tests/test_config.py +90 -71
  116. promnesia-1.2.20240810/src/promnesia/tests/test_db_dump.py +223 -0
  117. promnesia-1.2.20240810/src/promnesia/tests/test_extract.py +61 -0
  118. promnesia-1.2.20240810/src/promnesia/tests/test_extract_urls.py +43 -0
  119. promnesia-1.2.20240810/src/promnesia/tests/test_indexer.py +245 -0
  120. promnesia-1.2.20240810/src/promnesia/tests/test_server.py +292 -0
  121. {promnesia-1.1.20230129 → promnesia-1.2.20240810/src/promnesia}/tests/test_traverse.py +11 -13
  122. promnesia-1.2.20240810/src/promnesia/tests/utils.py +35 -0
  123. promnesia-1.2.20240810/src/promnesia.egg-info/PKG-INFO +53 -0
  124. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia.egg-info/SOURCES.txt +75 -44
  125. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia.egg-info/entry_points.txt +0 -1
  126. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia.egg-info/requires.txt +9 -10
  127. promnesia-1.2.20240810/tests/addon.py +364 -0
  128. promnesia-1.2.20240810/tests/addon_helper.py +172 -0
  129. promnesia-1.2.20240810/tests/common.py +69 -0
  130. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/tests/demos.py +13 -10
  131. promnesia-1.2.20240810/tests/end2end_test.py +837 -0
  132. promnesia-1.2.20240810/tests/testdata/auto/orgs/file5.org +4 -0
  133. promnesia-1.2.20240810/tests/webdriver_utils.py +162 -0
  134. promnesia-1.2.20240810/tox.ini +99 -0
  135. promnesia-1.1.20230129/.ci/end2end_tests.Dockerfile +0 -56
  136. promnesia-1.1.20230129/.circleci/config.yml +0 -41
  137. promnesia-1.1.20230129/PKG-INFO +0 -20
  138. promnesia-1.1.20230129/doc/addons-mozilla-org.org +0 -29
  139. promnesia-1.1.20230129/extension/.eslintrc.js +0 -44
  140. promnesia-1.1.20230129/extension/.flowconfig +0 -15
  141. promnesia-1.1.20230129/extension/build +0 -117
  142. promnesia-1.1.20230129/extension/package.json +0 -71
  143. promnesia-1.1.20230129/extension/src/manifest.json +0 -14
  144. promnesia-1.1.20230129/extension/src/showvisited.css +0 -70
  145. promnesia-1.1.20230129/extension/src/showvisited.js +0 -589
  146. promnesia-1.1.20230129/extension/webpack.config.js +0 -297
  147. promnesia-1.1.20230129/src/promnesia/compat.py +0 -71
  148. promnesia-1.1.20230129/src/promnesia/dump.py +0 -105
  149. promnesia-1.1.20230129/src/promnesia/sources/demo.py +0 -20
  150. promnesia-1.1.20230129/src/promnesia/sources/takeout.py +0 -87
  151. promnesia-1.1.20230129/src/promnesia.egg-info/PKG-INFO +0 -20
  152. promnesia-1.1.20230129/tests/browser_helper.py +0 -119
  153. promnesia-1.1.20230129/tests/common.py +0 -100
  154. promnesia-1.1.20230129/tests/end2end_test.py +0 -1246
  155. promnesia-1.1.20230129/tests/imports.py +0 -33
  156. promnesia-1.1.20230129/tests/indexer_test.py +0 -297
  157. promnesia-1.1.20230129/tests/integration_test.py +0 -291
  158. promnesia-1.1.20230129/tests/server_test.py +0 -257
  159. promnesia-1.1.20230129/tests/test_misc.py +0 -84
  160. promnesia-1.1.20230129/tests/webdriver_utils.py +0 -43
  161. promnesia-1.1.20230129/tox.ini +0 -89
  162. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/.ci/fake-systemd/systemctl +0 -0
  163. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/.ci/github-ci-compat +0 -0
  164. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/.dockerignore +0 -0
  165. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/.gitignore +0 -0
  166. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/.gitmodules +0 -0
  167. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/CHANGELOG.org +0 -0
  168. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/LICENSE +0 -0
  169. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/ci/run-github-locally +0 -0
  170. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/doc/GUIDE.org +0 -0
  171. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/doc/PRIVACY.org +0 -0
  172. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/doc/TROUBLESHOOTING.org +0 -0
  173. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/doc/config.py +0 -0
  174. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/docker/.gitignore +0 -0
  175. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/docker/docker_files/docker-compose.yaml +0 -0
  176. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/docker/docker_files/indexer-config.py.example +0 -0
  177. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/docker/docker_files/indexer-entrypoint.sh +0 -0
  178. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/docker/get-some-data.sh +0 -0
  179. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/docker/init.sh +0 -0
  180. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/docker/start.sh +0 -0
  181. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/extension/.editorconfig +0 -0
  182. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/extension/MANUAL-TESTS.org +0 -0
  183. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/extension/TODO.org +0 -0
  184. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/extension/__mocks__/dom-form-serializer.js +0 -0
  185. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/extension/old/patcher.js +0 -0
  186. {promnesia-1.1.20230129/extension → promnesia-1.2.20240810/extension/src}/images/generate +0 -0
  187. {promnesia-1.1.20230129/extension → promnesia-1.2.20240810/extension/src}/images/ic_blacklisted_48.png +0 -0
  188. {promnesia-1.1.20230129/extension → promnesia-1.2.20240810/extension/src}/images/ic_blue_48.png +0 -0
  189. {promnesia-1.1.20230129/extension → promnesia-1.2.20240810/extension/src}/images/ic_boring_48.png +0 -0
  190. {promnesia-1.1.20230129/extension → promnesia-1.2.20240810/extension/src}/images/ic_error.png +0 -0
  191. {promnesia-1.1.20230129/extension → promnesia-1.2.20240810/extension/src}/images/ic_not_visited_48.png +0 -0
  192. {promnesia-1.1.20230129/extension → promnesia-1.2.20240810/extension/src}/images/ic_relatives_48.png +0 -0
  193. {promnesia-1.1.20230129/extension → promnesia-1.2.20240810/extension/src}/images/ic_visited_48.png +0 -0
  194. {promnesia-1.1.20230129/extension → promnesia-1.2.20240810/extension/src}/images/source_48.svg +0 -0
  195. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/extension/src/options_page.css +0 -0
  196. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/extension/src/sidebar-outer.css +0 -0
  197. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/extension/src/toastify.css +0 -0
  198. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/extension/src/toastify.js +0 -0
  199. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/extension/tests/defensify.test.js +0 -0
  200. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/extension/tests/test.html +0 -0
  201. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/pytest.ini +0 -0
  202. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/scripts/backup-phone-history.sh +0 -0
  203. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/setup.cfg +0 -0
  204. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/__init__.py +0 -0
  205. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/misc/__init__.pyi +0 -0
  206. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/py.typed +0 -0
  207. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/sources/__init__.pyi +0 -0
  208. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/sources/auto_logseq.py +0 -0
  209. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/sources/auto_obsidian.py +0 -0
  210. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/sources/fbmessenger.py +0 -0
  211. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/sources/guess.py +0 -0
  212. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/sources/hpi.py +0 -0
  213. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/sources/html.py +0 -0
  214. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/sources/instapaper.py +0 -0
  215. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/sources/pocket.py +0 -0
  216. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/sources/roamresearch.py +0 -0
  217. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/sources/twitter.py +0 -0
  218. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia/sources/zulip.py +0 -0
  219. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia.egg-info/dependency_links.txt +0 -0
  220. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia.egg-info/not-zip-safe +0 -0
  221. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/src/promnesia.egg-info/top_level.txt +0 -0
  222. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/tests/convert_screencast.py +0 -0
  223. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/tests/install_and_run +0 -0
  224. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/tests/record.py +0 -0
  225. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/tests/testdata/auto/orgs/file.org +0 -0
  226. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/tests/testdata/auto/orgs/file2.org +0 -0
  227. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/tests/testdata/auto/orgs/file3.org +0 -0
  228. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/tests/testdata/auto/orgs/file4.org +0 -0
  229. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/tests/testdata/auto/pocket.json +0 -0
  230. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/tests/testdata/custom/file1.txt +0 -0
  231. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/tests/testdata/custom/file2.txt +0 -0
  232. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/tests/testdata/logseq-graph/logseq/config.edn +0 -0
  233. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/tests/testdata/logseq-graph/pages/Note.md +0 -0
  234. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/tests/testdata/normalise/ff.txt +0 -0
  235. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/tests/testdata/obsidian-vault/.obsidian/app.json +0 -0
  236. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/tests/testdata/obsidian-vault/Note.md +0 -0
  237. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/tests/testdata/takeout/Takeout/My Activity/Chrome/MyActivity.html +0 -0
  238. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/tests/testdata/takeout-20150518T000000Z.zip +0 -0
  239. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/tests/testdata/test_config.py +0 -0
  240. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/tests/testdata/traverse/ignoreme.txt +0 -0
  241. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/tests/testdata/traverse/ignoreme2/notrealignored.txt +0 -0
  242. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/tests/testdata/traverse/imhere.txt +0 -0
  243. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/tests/testdata/traverse/imhere2/real.txt +0 -0
  244. {promnesia-1.1.20230129 → promnesia-1.2.20240810}/tests/testdata/weird.txt +0 -0
@@ -0,0 +1 @@
1
+ build_and_run.sh
@@ -0,0 +1,19 @@
1
+ FROM ubuntu:latest
2
+
3
+ ENV DEBIAN_FRONTEND=noninteractive
4
+
5
+ COPY scripts /scripts
6
+
7
+ RUN /scripts/setup_firefox.sh \
8
+ && /scripts/setup_chrome.sh \
9
+ && /scripts/setup_node.sh \
10
+ && apt install --yes tox git \
11
+ # using python docs as a source of some html test data
12
+ # need to prevent dpkg from excluding doc files...
13
+ && sed -i '/usr.share.doc/d' /etc/dpkg/dpkg.cfg.d/excludes && apt install --yes python3-doc \
14
+ && apt clean \
15
+ && mkdir /promnesia
16
+
17
+ WORKDIR /promnesia
18
+
19
+ ENTRYPOINT ["/scripts/build_and_run_tests.sh"]
@@ -0,0 +1,20 @@
1
+ #!/bin/bash
2
+ set -eux
3
+
4
+ # TODO assert we're running under github ci?
5
+ # since this setup is kinda elaborate and can be somewhat unsafe to run blindly
6
+
7
+ # supposed to be called from promnesia repository root
8
+ [ -e src/promnesia ]
9
+ [ -e extension/src ]
10
+
11
+ PROMNESIA_SRC="$(pwd)"
12
+
13
+ cd .ci/end2end
14
+
15
+ IMAGE='promnesia_end2end_tests'
16
+
17
+ docker build -t "$IMAGE" .
18
+
19
+ # NOTE: dev/shm mount to prevent crashes during headless chrome
20
+ docker run -v /dev/shm:/dev/shm --mount "type=bind,src=$PROMNESIA_SRC,dst=/promnesia_source,readonly=true" -e CI "$IMAGE" "$@"
@@ -0,0 +1,15 @@
1
+ #!/bin/bash
2
+ set -eux
3
+
4
+ # Seems wrong to keep the whole repository in docker build context.
5
+ # So instead, we mount the repository inside the container (into /promnesia_source)
6
+ # (as read only to avoid messing up host files and crapping with caches etc.)
7
+ # However to actually run tests we do need a writable directory..
8
+ # So we copy the repo to the actual working dir here
9
+
10
+ # ugh, kinda annoying -- not sure how to update source files when we change them on the host system...
11
+ cp -R -T /promnesia_source /promnesia
12
+ extension/.ci/build
13
+
14
+ git init # todo ??? otherwise setuptools-scm fails to detect the version...
15
+ python3 -m tox -e end2end -- "$@"
@@ -0,0 +1,40 @@
1
+ #!/bin/bash
2
+ set -eux -o pipefail
3
+
4
+ apt update --yes
5
+
6
+ apt install --yes wget
7
+
8
+ install -d -m 0755 /etc/apt/keyrings
9
+ wget -q https://dl.google.com/linux/linux_signing_key.pub -O- | tee /etc/apt/keyrings/linux_signing_key.pub.asc > /dev/null
10
+ echo "deb [signed-by=/etc/apt/keyrings/linux_signing_key.pub.asc] https://dl.google.com/linux/chrome/deb/ stable main" | tee -a /etc/apt/sources.list.d/google-chrome.list > /dev/null
11
+
12
+ apt update
13
+
14
+ apt install --yes google-chrome-stable
15
+
16
+ # sadly latest version of chrome/chromedriver isn't working due to some bugs with iframes (see install_custom_chrome)
17
+
18
+ # remove the actual chrome to get it out of the way (we do want dependencies though)
19
+ apt remove --yes google-chrome-stable
20
+ ! which google-chrome # check there is no binary (in case of virtual packages or whatever)
21
+
22
+ function install_custom_chrome() {
23
+ ## this installs last revision that was actually working (1110897) or 113.0.5623.0
24
+ ## see https://bugs.chromium.org/p/chromedriver/issues/detail?id=4440
25
+ apt install --yes unzip
26
+
27
+ mkdir /tmp/chrome
28
+
29
+ wget -q 'https://www.googleapis.com/download/storage/v1/b/chromium-browser-snapshots/o/Linux_x64%2F1110897%2Fchrome-linux.zip?generation=1677589092014487&alt=media' \
30
+ -O /tmp/chrome/chrome-linux.zip
31
+ unzip /tmp/chrome/chrome-linux.zip -d /tmp/chrome
32
+ ln -sf /tmp/chrome/chrome-linux/chrome /usr/bin/google-chrome
33
+
34
+ wget -q 'https://www.googleapis.com/download/storage/v1/b/chromium-browser-snapshots/o/Linux_x64%2F1110897%2Fchromedriver_linux64.zip?generation=1677589097630198&alt=media' \
35
+ -O /tmp/chrome/chromedriver_linux64.zip
36
+ unzip /tmp/chrome/chromedriver_linux64.zip -d /tmp/chrome
37
+ ln -sf /tmp/chrome/chromedriver_linux64/chromedriver /usr/bin/chromedriver
38
+ }
39
+
40
+ install_custom_chrome
@@ -0,0 +1,26 @@
1
+ #!/bin/bash
2
+ set -eux -o pipefail
3
+
4
+ apt update --yes
5
+
6
+ apt install --yes wget
7
+
8
+ # NOTE: these days ubuntu provisions firefox via snap, and it's a nightmare to make it work with webdriver
9
+ # so we force it to use a regular package (following these instructions https://askubuntu.com/a/1510872/427470)
10
+ install -d -m 0755 /etc/apt/keyrings
11
+ wget -q https://packages.mozilla.org/apt/repo-signing-key.gpg -O- | tee /etc/apt/keyrings/packages.mozilla.org.asc > /dev/null
12
+ echo "deb [signed-by=/etc/apt/keyrings/packages.mozilla.org.asc] https://packages.mozilla.org/apt mozilla main" | tee -a /etc/apt/sources.list.d/mozilla.list > /dev/null
13
+
14
+ # prevent snap version from overriding:
15
+ echo '
16
+ Package: *
17
+ Pin: origin packages.mozilla.org
18
+ Pin-Priority: 1000
19
+ ' | tee /etc/apt/preferences.d/mozilla
20
+ # to check: -- should not show anything mentioning snap
21
+ # apt install --verbose-versions --dry-run firefox
22
+
23
+ apt update
24
+
25
+ apt install --yes firefox
26
+ # NOTE: selenium should download the corresponding geckodriver itself via selenium_manager
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ set -eux -o pipefail
3
+
4
+ apt update --yes
5
+ apt install --yes curl
6
+ curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
7
+ apt install --yes nodejs
@@ -19,10 +19,8 @@ from pathlib import Path
19
19
  from subprocess import check_call
20
20
  import shutil
21
21
 
22
-
23
22
  is_ci = os.environ.get('CI') is not None
24
23
 
25
-
26
24
  def main() -> None:
27
25
  import argparse
28
26
  p = argparse.ArgumentParser()
@@ -31,7 +29,7 @@ def main() -> None:
31
29
 
32
30
  extra = []
33
31
  if args.test:
34
- extra.extend(['--repository-url', 'https://test.pypi.org/legacy/'])
32
+ extra.extend(['--repository', 'testpypi'])
35
33
 
36
34
  root = Path(__file__).absolute().parent.parent
37
35
  os.chdir(root) # just in case
@@ -44,7 +42,7 @@ def main() -> None:
44
42
  if dist.exists():
45
43
  shutil.rmtree(dist)
46
44
 
47
- check_call('python3 setup.py sdist bdist_wheel', shell=True)
45
+ check_call(['python3', '-m', 'build'])
48
46
 
49
47
  TP = 'TWINE_PASSWORD'
50
48
  password = os.environ.get(TP)
@@ -45,4 +45,4 @@ if ! command -v python3 &> /dev/null; then
45
45
  fi
46
46
 
47
47
  "$PY_BIN" -m pip install --user tox
48
- "$PY_BIN" -m tox
48
+ "$PY_BIN" -m tox --parallel --parallel-live "$@"
@@ -9,28 +9,32 @@ on:
9
9
  pull_request: # needed to trigger on others' PRs
10
10
  # Note that people who fork it need to go to "Actions" tab on their fork and click "I understand my workflows, go ahead and enable them".
11
11
  workflow_dispatch: # needed to trigger workflows manually
12
+ # todo cron?
13
+ inputs:
14
+ debug_enabled:
15
+ type: boolean
16
+ description: 'Run the build with tmate debugging enabled (https://github.com/marketplace/actions/debugging-with-tmate)'
17
+ required: false
18
+ default: false
12
19
 
13
20
 
14
21
  jobs:
15
22
  build:
16
23
  strategy:
17
- # useful to quickly debug all versions, otherwise a bit wasteful
18
- # fail-fast: false
24
+ fail-fast: false
19
25
  matrix:
20
26
  platform: [ubuntu-latest, macos-latest, windows-latest]
21
- python-version: ['3.7', '3.8', '3.9', '3.10', '3.11']
27
+ python-version: ['3.8', '3.9', '3.10', '3.11', '3.12']
22
28
  exclude: [
23
- # windows runners are pretty scarce, so let's only run one of them..
24
- # also 3.7 on windows is a bit broken due to the WindowsPath bug
25
- {platform: windows-latest, python-version: '3.7'},
26
- {platform: windows-latest, python-version: '3.9'},
27
- # 3.11 on windows has this bug, lxml setup fails
28
- #https://bugs.launchpad.net/lxml/+bug/1977998
29
+ # windows runners are pretty scarce, so let's only run lowest and highest python version
30
+ {platform: windows-latest, python-version: '3.9' },
31
+ {platform: windows-latest, python-version: '3.10'},
29
32
  {platform: windows-latest, python-version: '3.11'},
30
33
 
31
- # perhaps no need to run all macos versions -- it's a bit too slow and ubuntu covers python quirks well
32
- {platform: macos-latest , python-version: '3.8' },
34
+ # same, macos is a bit too slow and ubuntu covers python quirks well
33
35
  {platform: macos-latest , python-version: '3.9' },
36
+ {platform: macos-latest , python-version: '3.10'},
37
+ {platform: macos-latest , python-version: '3.11'},
34
38
  ]
35
39
 
36
40
  runs-on: ${{ matrix.platform }}
@@ -40,31 +44,29 @@ jobs:
40
44
  steps:
41
45
  # ugh https://github.com/actions/toolkit/blob/main/docs/commands.md#path-manipulation
42
46
  - run: echo "$HOME/.local/bin" >> $GITHUB_PATH
43
- - if: ${{ matrix.platform == 'macos-latest' && matrix.python-version == '3.11' }}
44
- # hmm somehow only seems necessary for 3.11 on osx??
45
- run: echo "$HOME/Library/Python/${{ matrix.python-version }}/bin" >> $GITHUB_PATH
46
47
 
47
- - uses: actions/setup-python@v4
48
+ - uses: actions/setup-python@v5
48
49
  with:
49
50
  python-version: ${{ matrix.python-version }}
50
51
 
51
- - uses: actions/checkout@v3
52
+ - uses: actions/checkout@v4
52
53
  with:
53
54
  submodules: recursive
54
-
55
- # uncomment for SSH debugging
56
- # - uses: mxschmitt/action-tmate@v3
55
+ fetch-depth: 0 # nicer to have all git history when debugging/for tests
56
+
57
+ - uses: mxschmitt/action-tmate@v3
58
+ if: ${{ github.event_name == 'workflow_dispatch' && inputs.debug_enabled }}
57
59
 
58
60
  # explicit bash command is necessary for Windows CI runner, otherwise it thinks it's cmd...
59
61
  - run: bash .ci/run
60
62
 
61
63
  - if: matrix.platform == 'ubuntu-latest' # no need to compute coverage for other platforms
62
- uses: actions/upload-artifact@v3
64
+ uses: actions/upload-artifact@v4
63
65
  with:
64
66
  name: .coverage.mypy-core_${{ matrix.platform }}_${{ matrix.python-version }}
65
67
  path: .coverage.mypy-core/
66
68
  - if: matrix.platform == 'ubuntu-latest' # no need to compute coverage for other platforms
67
- uses: actions/upload-artifact@v3
69
+ uses: actions/upload-artifact@v4
68
70
  with:
69
71
  name: .coverage.mypy-misc_${{ matrix.platform }}_${{ matrix.python-version }}
70
72
  path: .coverage.mypy-misc/
@@ -73,24 +75,22 @@ jobs:
73
75
  end2end_tests_chrome:
74
76
  runs-on: ubuntu-latest
75
77
  steps:
76
- - uses: actions/checkout@v3
78
+ - uses: actions/checkout@v4
77
79
  with:
78
80
  submodules: recursive
79
- # NOTE: dev/shm mount to prevent crashes during headless chrome
80
- - run: |
81
- docker build -f .ci/end2end_tests.Dockerfile . -t promnesia_end2end_tests
82
- docker run -v /dev/shm:/dev/shm -e CI promnesia_end2end_tests -- -k chrome
81
+ - uses: mxschmitt/action-tmate@v3
82
+ if: ${{ github.event_name == 'workflow_dispatch' && inputs.debug_enabled }}
83
+ - run: .ci/end2end/build_and_run.sh -k chrome
83
84
 
84
85
  end2end_tests_firefox:
85
86
  runs-on: ubuntu-latest
86
87
  steps:
87
- - uses: actions/checkout@v3
88
+ - uses: actions/checkout@v4
88
89
  with:
89
90
  submodules: recursive
90
- # NOTE: dev/shm mount to prevent crashes during headless chrome
91
- - run: |
92
- docker build -f .ci/end2end_tests.Dockerfile . -t promnesia_end2end_tests
93
- docker run -v /dev/shm:/dev/shm -e CI promnesia_end2end_tests -- -k firefox
91
+ - uses: mxschmitt/action-tmate@v3
92
+ if: ${{ github.event_name == 'workflow_dispatch' && inputs.debug_enabled }}
93
+ - run: .ci/end2end/build_and_run.sh -k firefox
94
94
 
95
95
  install_and_run_test:
96
96
  # todo use setup-python thing?
@@ -98,7 +98,7 @@ jobs:
98
98
  runs-on: ubuntu-latest
99
99
 
100
100
  steps:
101
- - uses: actions/checkout@v3
101
+ - uses: actions/checkout@v4
102
102
  with:
103
103
  submodules: recursive
104
104
 
@@ -119,11 +119,11 @@ jobs:
119
119
  # ugh https://github.com/actions/toolkit/blob/main/docs/commands.md#path-manipulation
120
120
  - run: echo "$HOME/.local/bin" >> $GITHUB_PATH
121
121
 
122
- - uses: actions/setup-python@v4
122
+ - uses: actions/setup-python@v5
123
123
  with:
124
- python-version: '3.8'
124
+ python-version: '3.10'
125
125
 
126
- - uses: actions/checkout@v3
126
+ - uses: actions/checkout@v4
127
127
  with:
128
128
  submodules: recursive
129
129
 
@@ -132,8 +132,7 @@ jobs:
132
132
  if: github.event_name != 'pull_request' && github.event.ref == 'refs/heads/master'
133
133
  env:
134
134
  TWINE_PASSWORD: ${{ secrets.TWINE_PASSWORD_TEST }}
135
- run: pip3 install --user wheel twine && .ci/release --test
136
- # TODO run pip install just to test?
135
+ run: pip3 install --user --upgrade build twine && .ci/release --test
137
136
 
138
137
  - name: 'release to pypi'
139
138
  # always deploy tags to release pypi
@@ -141,7 +140,7 @@ jobs:
141
140
  if: github.event_name != 'pull_request' && startsWith(github.event.ref, 'refs/tags')
142
141
  env:
143
142
  TWINE_PASSWORD: ${{ secrets.TWINE_PASSWORD }}
144
- run: pip3 install --user wheel twine && .ci/release
143
+ run: pip3 install --user --upgrade build twine && .ci/release
145
144
 
146
145
  ###
147
146
  build_extension:
@@ -149,31 +148,33 @@ jobs:
149
148
  name: 'promnesia'
150
149
  runs-on: ubuntu-latest
151
150
  steps:
152
- - uses: actions/checkout@v3
151
+ - uses: actions/checkout@v4
153
152
  with:
154
153
  submodules: recursive
155
- - uses: actions/setup-node@v3
154
+ fetch-depth: 0 # nicer to have all git history when debugging/for tests
155
+
156
+ - uses: actions/setup-node@v4
156
157
  with:
157
- node-version: '18'
158
+ node-version: '20'
158
159
 
159
160
  - run: extension/.ci/build --lint # debug version
160
161
  - run: extension/.ci/build --lint --release
161
162
 
162
163
  # TODO ugh. can't share github actions artifacts publicly...
163
164
  # TODO for fuck's sake... why does it end up named as .zip.zip ????
164
- - uses: actions/upload-artifact@v3
165
+ - uses: actions/upload-artifact@v4
165
166
  with:
166
167
  name: '${{ env.name }}-chrome-debug-latest.zip'
167
168
  path: 'extension/dist/artifacts/chrome/${{ env.name }}_dev_-*.zip'
168
- - uses: actions/upload-artifact@v3
169
+ - uses: actions/upload-artifact@v4
169
170
  with:
170
171
  name: '${{ env.name }}-chrome-release-latest.zip'
171
172
  path: 'extension/dist/artifacts/chrome/${{ env.name }}-*.zip'
172
- - uses: actions/upload-artifact@v3
173
+ - uses: actions/upload-artifact@v4
173
174
  with:
174
175
  name: '${{ env.name }}-firefox-debug-latest.zip'
175
176
  path: 'extension/dist/artifacts/firefox/${{ env.name }}_dev_-*.zip'
176
- - uses: actions/upload-artifact@v3
177
+ - uses: actions/upload-artifact@v4
177
178
  with:
178
179
  name: '${{ env.name }}-firefox-release-latest.zip'
179
180
  path: 'extension/dist/artifacts/firefox/${{ env.name }}-*.zip'
@@ -0,0 +1,53 @@
1
+ Metadata-Version: 2.1
2
+ Name: promnesia
3
+ Version: 1.2.20240810
4
+ Summary: Enhancement of your browsing history
5
+ Home-page: https://github.com/karlicoss/promnesia
6
+ Author: Dmitrii Gerasimov
7
+ Author-email: karlicoss@gmail.com
8
+ Requires-Python: >=3.8
9
+ License-File: LICENSE
10
+ Requires-Dist: appdirs
11
+ Requires-Dist: tzlocal
12
+ Requires-Dist: more_itertools
13
+ Requires-Dist: pytz
14
+ Requires-Dist: sqlalchemy>=2.0
15
+ Requires-Dist: urlextract
16
+ Requires-Dist: fastapi
17
+ Requires-Dist: uvicorn[standard]
18
+ Provides-Extra: testing
19
+ Requires-Dist: pytest; extra == "testing"
20
+ Requires-Dist: pytest-timeout; extra == "testing"
21
+ Requires-Dist: pytest-xdist; extra == "testing"
22
+ Requires-Dist: hypothesis; extra == "testing"
23
+ Requires-Dist: psutil; extra == "testing"
24
+ Requires-Dist: requests; extra == "testing"
25
+ Requires-Dist: selenium; extra == "testing"
26
+ Requires-Dist: click; extra == "testing"
27
+ Requires-Dist: ruff; extra == "testing"
28
+ Requires-Dist: mypy; extra == "testing"
29
+ Requires-Dist: lxml; extra == "testing"
30
+ Requires-Dist: loguru; extra == "testing"
31
+ Provides-Extra: testing-gui
32
+ Requires-Dist: pyautogui; extra == "testing-gui"
33
+ Provides-Extra: optional
34
+ Requires-Dist: logzero; extra == "optional"
35
+ Requires-Dist: python-magic; extra == "optional"
36
+ Provides-Extra: hpi
37
+ Requires-Dist: HPI; extra == "hpi"
38
+ Provides-Extra: html
39
+ Requires-Dist: beautifulsoup4; extra == "html"
40
+ Requires-Dist: lxml; extra == "html"
41
+ Provides-Extra: markdown
42
+ Requires-Dist: mistletoe; extra == "markdown"
43
+ Provides-Extra: org
44
+ Requires-Dist: orgparse>=0.3.0; extra == "org"
45
+ Provides-Extra: telegram
46
+ Provides-Extra: all
47
+ Requires-Dist: logzero; extra == "all"
48
+ Requires-Dist: python-magic; extra == "all"
49
+ Requires-Dist: HPI; extra == "all"
50
+ Requires-Dist: beautifulsoup4; extra == "all"
51
+ Requires-Dist: lxml; extra == "all"
52
+ Requires-Dist: mistletoe; extra == "all"
53
+ Requires-Dist: orgparse>=0.3.0; extra == "all"
@@ -406,7 +406,7 @@ The best support for me would be if you contribute to this or my other projects.
406
406
 
407
407
  I don't need money, but I understand it's often easier to give away than time, so here are some of projects that I donate to:
408
408
 
409
- - [[https://orgmode.org/worg/donate.html][org-mode]]
409
+ - [[https://liberapay.com/org-mode][org-mode]]
410
410
  - [[https://archive.org/donate][Internet Archive]]
411
411
  - [[https://web.hypothes.is/donate][Hypothes.is]]
412
412
  - [[https://github.com/hlissner/doom-emacs#contribute][Doom Emacs]]
@@ -0,0 +1,17 @@
1
+ Running on @karlicoss desktop PC, =python3.10= (under docker)
2
+
3
+ - dumping via cachew NTBinder, using regular sqlalchemy insert statement
4
+
5
+ #+begin_example
6
+ $ python3 -m pytest --import-mode=importlib --pyargs promnesia.tests -s -k 'gc_off and benchmark and 100000'
7
+ 12.90s call src/promnesia/tests/test_db_dump.py::test_benchmark_visits_dumping[gc_off-100000]
8
+ PASSED src/promnesia/tests/test_db_dump.py::test_benchmark_visits_dumping[gc_off-100000]
9
+ #+end_example
10
+
11
+
12
+ - dumping via cachew NTBinder, using dbengine to insert directly -- massive speedup (added a test with 1M visits too)
13
+ #+begin_example
14
+ $ python3 -m pytest --import-mode=importlib --pyargs promnesia.tests -s -k 'gc_off and benchmark and 100000'
15
+ 0.85s call src/promnesia/tests/test_db_dump.py::test_benchmark_visits_dumping[gc_off-100000]
16
+ 8.23s call src/promnesia/tests/test_db_dump.py::test_benchmark_visits_dumping[gc_off-1000000]
17
+ #+end_example
@@ -52,7 +52,7 @@ I'm not against it, but with limited time resources full-scale tests give better
52
52
  : ./build --firefox # you can also use --chrome
53
53
  : --lint # [optional], run webext linter
54
54
  : --release # [optional], build in the release mode (with optimizations)
55
- : --publish # [optional], release to the Chrome Web Store/Mozilla addons
55
+ : --publish listed # [optional], release to the Chrome Web Store/Mozilla addons
56
56
 
57
57
  You'll find the result in =dist/=. After that, you can load it in your browser and develop.
58
58
 
@@ -61,7 +61,7 @@ I'm not against it, but with limited time resources full-scale tests give better
61
61
 
62
62
  * Run end-to-end tests
63
63
 
64
- End-to-end test go thought the full cycle from indexing & backend to automated extension tests, and are very helpful to make sure you don't break things.
64
+ End-to-end tests go through the full cycle from indexing & backend to automated extension tests, and are very helpful to make sure you don't break things.
65
65
 
66
66
  You need:
67
67
 
@@ -74,18 +74,21 @@ Example of running a test:
74
74
 
75
75
  You can also run them via tox:
76
76
 
77
+ # TODO https://github.com/tox-dev/tox/discussions/2681
77
78
  : TOX_TESTENV_PASSENV='DISPLAY HOME' tox -e end2end -- -s -k 'test_blacklist_custom[firefox]'
78
79
 
79
80
  - it's useful to pass =--pdb= to pytest, so you don't have to restart webdriver all over
80
81
  - after initial run, it's best pass =--skip-pkg-install= to tox to speedup repetitive test runs
81
82
  - when you're in development/debugging process, perhaps best to run the firefox version of tests -- Chrome has a 5-ish seconds lag after installing the extension
83
+ - since these tests can be quite slow, you can benefit from installing =pytest-xdist= plugin and using =-n= flag to parallelize
84
+ - to debug flaky tests, it's useful to install =pytest-repeat= in addition, e.g. =--repeat=5 -n 5=
82
85
 
83
86
  * Releasing
84
87
  ** AMO (addons.mozilla.org)
85
88
 
86
89
  : cd extension
87
90
  : npm install # (if necessary)
88
- : ./build --firefox --lint --release --publish
91
+ : ./build --firefox --lint --release --publish listed
89
92
 
90
93
  Note that this will only upload the extension (see [[https://extensionworkshop.com/documentation/develop/web-ext-command-reference/#channel][web-ext sign command reference]] and [[https://github.com/fregante/web-ext-submit#readme][web-ext-submit]] for more info).
91
94
  You need go to https://addons.mozilla.org/en-GB/developers/addon/promnesia/versions, there you should see your extension as 'pending approval'. Usually it's approved within minutes.
@@ -97,7 +100,7 @@ For build instructions, you can point the reviewers at [[file:addons-mozilla-org
97
100
  ** CWS (chrome web store)
98
101
  : cd extension
99
102
  : npm install # (if necessary)
100
- : ./build --chrome --lint --release --publish
103
+ : ./build --chrome --lint --release --publish listed
101
104
 
102
105
  This command should work in theory and upload automatically... however getting the api keys is super annoying (see [[https://github.com/DrewML/chrome-webstore-upload/blob/master/How%20to%20generate%20Google%20API%20keys.md][this]]).
103
106