promnesia 1.1.20230129__py3-none-any.whl → 1.2.20240810__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.
Files changed (72) hide show
  1. promnesia/__main__.py +58 -50
  2. promnesia/cannon.py +4 -4
  3. promnesia/common.py +57 -38
  4. promnesia/compare.py +3 -2
  5. promnesia/compat.py +6 -65
  6. promnesia/config.py +4 -2
  7. promnesia/database/common.py +66 -0
  8. promnesia/database/dump.py +187 -0
  9. promnesia/{read_db.py → database/load.py} +10 -11
  10. promnesia/extract.py +1 -0
  11. promnesia/kjson.py +1 -1
  12. promnesia/logging.py +14 -14
  13. promnesia/misc/__init__.pyi +0 -0
  14. promnesia/misc/config_example.py +1 -2
  15. promnesia/misc/install_server.py +5 -4
  16. promnesia/server.py +24 -24
  17. promnesia/sources/__init__.pyi +0 -0
  18. promnesia/sources/auto.py +12 -7
  19. promnesia/sources/browser.py +80 -293
  20. promnesia/sources/browser_legacy.py +298 -0
  21. promnesia/sources/demo.py +18 -2
  22. promnesia/sources/filetypes.py +8 -0
  23. promnesia/sources/github.py +2 -2
  24. promnesia/sources/hackernews.py +1 -2
  25. promnesia/sources/hypothesis.py +1 -1
  26. promnesia/sources/markdown.py +15 -15
  27. promnesia/sources/org.py +7 -3
  28. promnesia/sources/plaintext.py +3 -1
  29. promnesia/sources/reddit.py +2 -2
  30. promnesia/sources/rss.py +5 -1
  31. promnesia/sources/shellcmd.py +6 -2
  32. promnesia/sources/signal.py +29 -20
  33. promnesia/sources/smscalls.py +8 -1
  34. promnesia/sources/stackexchange.py +2 -2
  35. promnesia/sources/takeout.py +132 -12
  36. promnesia/sources/takeout_legacy.py +10 -2
  37. promnesia/sources/telegram.py +79 -123
  38. promnesia/sources/telegram_legacy.py +117 -0
  39. promnesia/sources/vcs.py +1 -1
  40. promnesia/sources/viber.py +6 -15
  41. promnesia/sources/website.py +1 -1
  42. promnesia/sqlite.py +42 -0
  43. promnesia/tests/__init__.py +0 -0
  44. promnesia/tests/common.py +137 -0
  45. promnesia/tests/server_helper.py +64 -0
  46. promnesia/tests/sources/__init__.py +0 -0
  47. promnesia/tests/sources/test_auto.py +66 -0
  48. promnesia/tests/sources/test_filetypes.py +42 -0
  49. promnesia/tests/sources/test_hypothesis.py +39 -0
  50. promnesia/tests/sources/test_org.py +65 -0
  51. promnesia/tests/sources/test_plaintext.py +26 -0
  52. promnesia/tests/sources/test_shellcmd.py +22 -0
  53. promnesia/tests/sources/test_takeout.py +58 -0
  54. promnesia/tests/test_cannon.py +325 -0
  55. promnesia/tests/test_cli.py +42 -0
  56. promnesia/tests/test_compare.py +30 -0
  57. promnesia/tests/test_config.py +290 -0
  58. promnesia/tests/test_db_dump.py +223 -0
  59. promnesia/tests/test_extract.py +61 -0
  60. promnesia/tests/test_extract_urls.py +43 -0
  61. promnesia/tests/test_indexer.py +245 -0
  62. promnesia/tests/test_server.py +292 -0
  63. promnesia/tests/test_traverse.py +41 -0
  64. promnesia/tests/utils.py +35 -0
  65. {promnesia-1.1.20230129.dist-info → promnesia-1.2.20240810.dist-info}/METADATA +14 -19
  66. promnesia-1.2.20240810.dist-info/RECORD +83 -0
  67. {promnesia-1.1.20230129.dist-info → promnesia-1.2.20240810.dist-info}/WHEEL +1 -1
  68. {promnesia-1.1.20230129.dist-info → promnesia-1.2.20240810.dist-info}/entry_points.txt +0 -1
  69. promnesia/dump.py +0 -105
  70. promnesia-1.1.20230129.dist-info/RECORD +0 -55
  71. {promnesia-1.1.20230129.dist-info → promnesia-1.2.20240810.dist-info}/LICENSE +0 -0
  72. {promnesia-1.1.20230129.dist-info → promnesia-1.2.20240810.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,83 @@
1
+ promnesia/__init__.py,sha256=rxVINCLqxpZFknz9QeMA6McpnzR8Hi0zhZdoyYCGUlM,367
2
+ promnesia/__main__.py,sha256=5HVE6tyBCzTKs19rDGZIkotrmaoeTRBVtTCgRnKluh8,15251
3
+ promnesia/cannon.py,sha256=dRfRk4bnII5D0rxKnimZiN727imYuyR2Kfw3pWEOxLs,24596
4
+ promnesia/common.py,sha256=iMBdyYHzjma1mGP02-ugDpkN-WoyBE6Uku4Il8fuWzc,19546
5
+ promnesia/compare.py,sha256=XjhleEzl_hzSvuinDR_I9oin5U65HkAbNCJRJQ6BwM8,4639
6
+ promnesia/compat.py,sha256=SP1Nj3jwFoKKYLnx5qVirHdsufehcb42DShqS3PPzR4,389
7
+ promnesia/config.py,sha256=JFLY28C11tpvwBnPYT-VfdbsD1hivPvZMzojOh5tSJs,4743
8
+ promnesia/extract.py,sha256=JIVCxCvkn02YnGoUvLL0pAGPHXpepq-C_2brYbtN4ts,2804
9
+ promnesia/kjson.py,sha256=9hMw-sY-avA99aWV8cG03HL2AlfvlzE5YfWw1_5LwM4,3313
10
+ promnesia/logging.py,sha256=s_dhobXuTl8tibcpKCxktGduECKWIiEkYe0atcAToIQ,5923
11
+ promnesia/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
+ promnesia/server.py,sha256=42sByMUialuZQoKRF_zgxky7ykc9d-cNMwKBJAEaH68,14636
13
+ promnesia/sqlite.py,sha256=lB7YZ9jdALbo_gblmVn7z3Dn5M6FJg7Nz2y51Z0pl1c,1353
14
+ promnesia/database/common.py,sha256=HRw47RhxqN6Wfb5LVfbc1eRzT8LSJus1colY_S9ijm8,1814
15
+ promnesia/database/dump.py,sha256=JV3j8J5pJJmPocRZalJqq0zz1532p9lVxW7_lcXbvx4,6101
16
+ promnesia/database/load.py,sha256=Q2TLyV0rzvfvq8kkAhIIvcCC4D-eEbCH5wmsZL6jYg0,1353
17
+ promnesia/misc/__init__.pyi,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
+ promnesia/misc/config_example.py,sha256=MXxJCVjm9MrEwPR8SHTwkJRDcqWcqJWtfJg_M6yhRMo,364
19
+ promnesia/misc/install_server.py,sha256=-dPTJjM-jktVf25mcrXRL6Uj6Pji72lPnC3iyg_m8Gk,4820
20
+ promnesia/sources/__init__.pyi,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
+ promnesia/sources/auto.py,sha256=MhOesdn2YfPPepNkOBSihT_CDoGXfyTIA0y8wxcKqn0,11710
22
+ promnesia/sources/auto_logseq.py,sha256=eXOHIOx9MladhyD1IyLd90lyqO6gG2F5uObnuHFQrZA,439
23
+ promnesia/sources/auto_obsidian.py,sha256=PLWPHj9U3pnwLWw7-fzEk12F4Xdigq0VrvSAn_yS-yw,213
24
+ promnesia/sources/browser.py,sha256=BzdVVMm6N-U0F8_sng51deara9maY1TzMF6e7s8VCXg,2992
25
+ promnesia/sources/browser_legacy.py,sha256=3vARw78yXWvp3RQzfPbkXgtZB5iWSbXIKgadMIG4gGs,10400
26
+ promnesia/sources/demo.py,sha256=-5vADo4S-fDNEEPHGrh9pYoIIW_tzApRl6hIy8K3b2Q,1041
27
+ promnesia/sources/fbmessenger.py,sha256=_QdM3-vLutN-dh4vxfQlQkRDiorWA2EwixL49AH7lbM,969
28
+ promnesia/sources/filetypes.py,sha256=W0OVmhtvJKbWk2dju8Uwbo0TfNHye--cKrCPfL_DfBw,3593
29
+ promnesia/sources/github.py,sha256=hHTlJZvxe6TzzALX_z8R9FUQgVw39n22XYWPc62oPfo,2753
30
+ promnesia/sources/guess.py,sha256=-km2_hsrznYrws1lA3ZN5L6ixJunEsgQBFDU7juqPpM,776
31
+ promnesia/sources/hackernews.py,sha256=ReI362AKjZ79Lu99qJNPZtCoyHr6AycghvQrmDFRKgw,1228
32
+ promnesia/sources/hpi.py,sha256=yQIOT-OQ4Rhs7xXbszkNWjj46jvLDgP-xt7bSQV9wRk,361
33
+ promnesia/sources/html.py,sha256=FOLcXzV3J5VEHMkpuF4Q0rrht5zdGsDNQZJMu2WWYZ8,1108
34
+ promnesia/sources/hypothesis.py,sha256=PNuYKV-G7o8trMtgEzK3qX2NcBOhlZuf5Yg71FpWoQY,1359
35
+ promnesia/sources/instapaper.py,sha256=K2feGkgiFp6pNJoDYlyLs9m8MkDizoXy2QUg-Fjm-O0,969
36
+ promnesia/sources/markdown.py,sha256=acI2FwkawcAZX21i4kK44ligKKbj7TZDB5c0a9ihZOk,3762
37
+ promnesia/sources/org.py,sha256=oiZsNdW-oxq4a2D5_TYBUXPdPkPguSosaoyEp9dnyvc,5499
38
+ promnesia/sources/plaintext.py,sha256=aiMwd7WWtE65iTWiLFIow-RBDqozbjGfPgTdkzuMjaI,3259
39
+ promnesia/sources/pocket.py,sha256=4JCNrYs23Nq0c0hw_UxaxaIJbiqF2JVu5GAql-hfNZM,1105
40
+ promnesia/sources/reddit.py,sha256=DIEWQoWGpuQXGOmcZ9lANkPYuLhB9rzq1u23HllqLF4,5623
41
+ promnesia/sources/roamresearch.py,sha256=Su-2ykyjdylvDMogQjAgiGpLkh4Inw-K8yeAhGv678E,1068
42
+ promnesia/sources/rss.py,sha256=5-DmUesDv_GCOF5Qo7e7P3QrS6WdryZpFidazfI24Wg,870
43
+ promnesia/sources/shellcmd.py,sha256=m2tT8RSoOjXz7eC-OOXGGKleod-1A_XtWFlOucO3so0,2644
44
+ promnesia/sources/signal.py,sha256=iTU9z3hFiWjuGr5noLl8Vy3TlKj8zIMFlhNj2741h00,14728
45
+ promnesia/sources/smscalls.py,sha256=HHM8SGDx9qS5tZfpIn_iUcKYQIyryQMZvIkqUNZKHtk,755
46
+ promnesia/sources/stackexchange.py,sha256=vlidNoqWNUtR8dyHya9D7ZlHX5a2OIfoZq951M_V8c8,630
47
+ promnesia/sources/takeout.py,sha256=jDhpJkjtzC7OIlBASXHw0QNwwincBkEMgqyAhuboL7o,7918
48
+ promnesia/sources/takeout_legacy.py,sha256=ZuaP9jOuxKrbm03IOudeneWHlgT95Qr86fcGqvplKeE,4040
49
+ promnesia/sources/telegram.py,sha256=HCft7kWHdkBJiVI8OR6Wg34k4nW1vhb3tMAEJwGO1QA,2947
50
+ promnesia/sources/telegram_legacy.py,sha256=E4izRfxJWy25R0Rm-E78Op2lxcl2w6Rq5XUeYfXw2wc,4468
51
+ promnesia/sources/twitter.py,sha256=8vtLKyhtqioMmp_IKKVozLZC32TIQKjs_toB5cU2_6Q,1848
52
+ promnesia/sources/vcs.py,sha256=K2rRopKlwiNQ2_2TMWSHrwpsd5nYtPMUjHvnpNBvzBg,1609
53
+ promnesia/sources/viber.py,sha256=uFBtiJGWwuEE-gFIV0GV7eLExc0ddt3U3F_Wnkh1XKA,5948
54
+ promnesia/sources/website.py,sha256=Ii0Xka3PZk2_KJHJy9l3EYvGgSKkUehhHSmWI9tXec4,1781
55
+ promnesia/sources/zulip.py,sha256=s1bhYmx26VKC35CJF_2yiO4jdYHH0QwRYtAD3Ss6tt8,742
56
+ promnesia/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
+ promnesia/tests/common.py,sha256=eOFyfOLBUM8hK0gJ7JTXdjAMwRL6QN5DlRsZYAudMOM,4026
58
+ promnesia/tests/server_helper.py,sha256=W76vmwozoqJEPrlxQB0azklR28gf2RzimTHAJWOgclg,2181
59
+ promnesia/tests/test_cannon.py,sha256=bvfL5foAtDm6QzqE_nqtiSF6zAQnkWU0dlMoQp9kX0s,12702
60
+ promnesia/tests/test_cli.py,sha256=YZAsqbJcka1rjlDkb925V4A97FkiQc63JF0eT4Zb5wE,1406
61
+ promnesia/tests/test_compare.py,sha256=8pxY1DPZuGnrU1p0z4VzEawJVzzmL3sNVPce1CeiSNI,945
62
+ promnesia/tests/test_config.py,sha256=zkZXQkADHhgFzoFjqTr3zv-o6hqS0eED3wuYIMvw6dw,6532
63
+ promnesia/tests/test_db_dump.py,sha256=k6FPtcuSImMdealbgNr7mCW5NG1_jG8eESNwO1TSW1o,6751
64
+ promnesia/tests/test_extract.py,sha256=Hn-4B7T_4YrUtcO6tLxYJUkXknU97i0nEGRxejRnozI,2306
65
+ promnesia/tests/test_extract_urls.py,sha256=Ybez16VdYoveL9b_50Ca9vbMogWHOvFqDOJPGZrzQJg,1961
66
+ promnesia/tests/test_indexer.py,sha256=ec5xR9whW6z6GwKjnCGrHDp9WgTebbq7qKOIXHPLGlU,8911
67
+ promnesia/tests/test_server.py,sha256=pwlXT-qU6KXjE0ftlWB9CE1FxhpTrwJRdX8r4QDctYs,10787
68
+ promnesia/tests/test_traverse.py,sha256=F2qd1vvX2u9jJ4GVksAh6Dum-XEVLg9iCyFU6H8CZhI,1352
69
+ promnesia/tests/utils.py,sha256=etNWsXIeTMaYCTN9sIlgMKHyvY_Ek3l0Btu5rIpQEcI,1117
70
+ promnesia/tests/sources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
71
+ promnesia/tests/sources/test_auto.py,sha256=d9MwY8taALdT5C64u8G7uvk4iubZ3SHSCR50qmXzz3E,1855
72
+ promnesia/tests/sources/test_filetypes.py,sha256=w5uPsfzHfl8hS3BbXxkA3TR8rKqniRGWSO8zeIKOiM4,1338
73
+ promnesia/tests/sources/test_hypothesis.py,sha256=nUsfET_X0yGVdlpmvxaDGAPjznYsA0Jc04vXGl83QCU,1400
74
+ promnesia/tests/sources/test_org.py,sha256=BYJqAkI7TfgOkWk1W33MMQUDSBGpvSgGbFvb2r9qqYo,2572
75
+ promnesia/tests/sources/test_plaintext.py,sha256=O6lLrCvZpLaaWuyeKU3eZyf4Mx1rmarU689nifTw3hk,828
76
+ promnesia/tests/sources/test_shellcmd.py,sha256=4wyoFB3UzdviNdQX_dOpIlrzZSMXtPqRgTkRb3pk3go,679
77
+ promnesia/tests/sources/test_takeout.py,sha256=We0gSDpENuxoO9kInSmBExJrAqmfNZkA3cVQf876SsQ,1559
78
+ promnesia-1.2.20240810.dist-info/LICENSE,sha256=rgO9acPmnw53ZBxiXBdp8kfxmRcekhg_Q7HN65BPihs,1074
79
+ promnesia-1.2.20240810.dist-info/METADATA,sha256=7ilgQnAz53XkvjLFIZgf8cjh5qWwyyZ_i3G2dw5mfkI,1870
80
+ promnesia-1.2.20240810.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
81
+ promnesia-1.2.20240810.dist-info/entry_points.txt,sha256=hz1qfzQSRh4kkVkJWk4hnYqE9A1nobEbKlLG_0nNxzE,54
82
+ promnesia-1.2.20240810.dist-info/top_level.txt,sha256=7yvIpooFiuNLf9yLdu9MTADz57z0YTAqSu7aSG9ujSU,10
83
+ promnesia-1.2.20240810.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.38.4)
2
+ Generator: setuptools (72.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,3 +1,2 @@
1
1
  [console_scripts]
2
2
  promnesia = promnesia.__main__:main
3
-
promnesia/dump.py DELETED
@@ -1,105 +0,0 @@
1
- from pathlib import Path
2
- import shutil
3
- from typing import List, Set, Iterable
4
-
5
- from more_itertools import chunked
6
-
7
- from sqlalchemy import create_engine, MetaData, Table, event, text
8
-
9
- from cachew import NTBinder
10
-
11
- from .common import get_logger, DbVisit, get_tmpdir, Res, now_tz, Loc
12
- from . import config
13
-
14
-
15
- # NOTE: I guess the main performance benefit from this is not creating too many tmp lists and avoiding overhead
16
- # since as far as sql is concerned it should all be in the same transaction. only a guess
17
- # not sure it's the proper way to handle it
18
- # see test_index_many
19
- _CHUNK_BY = 10
20
-
21
- # I guess 1 hour is definitely enough
22
- _CONNECTION_TIMEOUT_SECONDS = 3600
23
-
24
- # returns critical warnings
25
- def visits_to_sqlite(vit: Iterable[Res[DbVisit]], *, overwrite_db: bool) -> List[Exception]:
26
- logger = get_logger()
27
- db_path = config.get().db
28
-
29
- now = now_tz()
30
- ok = 0
31
- errors = 0
32
- def vit_ok() -> Iterable[DbVisit]:
33
- nonlocal errors, ok
34
- for v in vit:
35
- if isinstance(v, DbVisit):
36
- ok += 1
37
- yield v
38
- else:
39
- errors += 1
40
- # conform to the schema and dump. can't hurt anyway
41
- ev = DbVisit(
42
- norm_url='<error>',
43
- orig_url='<error>',
44
- dt=now,
45
- locator=Loc.make('<errror>'),
46
- src='error',
47
- # todo attach backtrace?
48
- context=repr(v),
49
- )
50
- yield ev
51
-
52
- tpath = Path(get_tmpdir().name) / 'promnesia.tmp.sqlite'
53
- if overwrite_db:
54
- # here we don't need timeout, since it's a brand new DB
55
- engine = create_engine(f'sqlite:///{tpath}')
56
- else:
57
- # here we need a timeout, othewise concurrent indexing might not work
58
- # (note that this also needs WAL mode)
59
- # see test_concurrent_indexing
60
- engine = create_engine(f'sqlite:///{db_path}', connect_args={'timeout': _CONNECTION_TIMEOUT_SECONDS})
61
-
62
- # using WAL keeps database readable while we're writing in it
63
- # this is tested by test_query_while_indexing
64
- def enable_wal(dbapi_con, con_record) -> None:
65
- dbapi_con.execute('PRAGMA journal_mode = WAL')
66
- event.listen(engine, 'connect', enable_wal)
67
-
68
- binder = NTBinder.make(DbVisit)
69
- meta = MetaData()
70
- table = Table('visits', meta, *binder.columns)
71
-
72
- cleared: Set[str] = set()
73
- ncleared = 0
74
- with engine.begin() as conn:
75
- table.create(conn, checkfirst=True)
76
-
77
- for chunk in chunked(vit_ok(), n=_CHUNK_BY):
78
- srcs = set(v.src or '' for v in chunk)
79
- new = srcs.difference(cleared)
80
-
81
- for src in new:
82
- conn.execute(table.delete().where(table.c.src == src))
83
- cursor = conn.execute(text("SELECT changes()")).fetchone()
84
- assert cursor is not None
85
- ncleared += cursor[0]
86
- cleared.add(src)
87
-
88
- bound = [binder.to_row(x) for x in chunk]
89
- # pylint: disable=no-value-for-parameter
90
- conn.execute(table.insert().values(bound))
91
- engine.dispose()
92
-
93
- if overwrite_db:
94
- shutil.move(str(tpath), str(db_path))
95
-
96
- errs = '' if errors == 0 else f', {errors} ERRORS'
97
- total = ok + errors
98
- what = 'overwritten' if overwrite_db else 'updated'
99
- logger.info(
100
- '%s database "%s". %d total (%d OK%s, %d cleared, +%d more)',
101
- what, db_path, total, ok, errs, ncleared, ok - ncleared)
102
- res: List[Exception] = []
103
- if total == 0:
104
- res.append(RuntimeError('No visits were indexed, something is probably wrong!'))
105
- return res
@@ -1,55 +0,0 @@
1
- promnesia/__init__.py,sha256=rxVINCLqxpZFknz9QeMA6McpnzR8Hi0zhZdoyYCGUlM,367
2
- promnesia/__main__.py,sha256=VeH9_1mUqnaTGi4cWc6bWBlEbw9OZobANERRnei3M08,14938
3
- promnesia/cannon.py,sha256=OAHd4QopUiUB9MR_3NgUK8fxUlaJ0TMPlKqTXR_b8RQ,24638
4
- promnesia/common.py,sha256=obDhIN5jCbgC9Ek6RmXaFVl9Qj1K47FDV2nfACW76Ik,19125
5
- promnesia/compare.py,sha256=AIfgxEefRLAN0BXy9Q8MHeUuaTAmq1P6ZEaMYILpnE8,4635
6
- promnesia/compat.py,sha256=i4wAYBAlSjpSQXV4LzzguaXj8Sa1dWED34DrWhO04z0,2015
7
- promnesia/config.py,sha256=9Vs_3DCJj10KU3Ox_y19C860WgLLcf0v4-S-vXQGAjI,4667
8
- promnesia/dump.py,sha256=-IoMD3bzjXeGESpV_PuBaJN3o2B5Z0mAYCWH6auc6tQ,3642
9
- promnesia/extract.py,sha256=V0vvoI_hXqIInecTgPu3pJUczXTaxYmrn1V1tDXjj1M,2768
10
- promnesia/kjson.py,sha256=EYNd87xR0hW5XrvgMcz_zzYAO41iaEQlO78juhv6t4I,3277
11
- promnesia/logging.py,sha256=WrgEAJc3DdM__rqBIEt-YJUNtICO7povBmOVYpDfqFs,5857
12
- promnesia/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
- promnesia/read_db.py,sha256=gt3tzSiJmB1-m-TwfFchme3X6m0DMbwoFwJZ-fwBz0I,1404
14
- promnesia/server.py,sha256=03oJmMOmI0alD3aHxOBi1NKqgB1-t1qqFmNY-4kJcL4,14709
15
- promnesia/misc/config_example.py,sha256=9roxcTjPlbSmUmUU6pEo6l1WLzStqWSyisgSr2zWLqY,439
16
- promnesia/misc/install_server.py,sha256=bp1VJoIXa59xE9UWkcAkZymfjOXqhbfU0nYq-5llN7I,4850
17
- promnesia/sources/auto.py,sha256=AQMxrMnntxRkz8Gtdj_kE0FtK5MANsyHwv4eGyQMvP4,11303
18
- promnesia/sources/auto_logseq.py,sha256=eXOHIOx9MladhyD1IyLd90lyqO6gG2F5uObnuHFQrZA,439
19
- promnesia/sources/auto_obsidian.py,sha256=PLWPHj9U3pnwLWw7-fzEk12F4Xdigq0VrvSAn_yS-yw,213
20
- promnesia/sources/browser.py,sha256=b2DZvJUN42FRRcMpLPypxVxPLEskeOQY4kaaUT6hIlM,10451
21
- promnesia/sources/demo.py,sha256=YRnQdbnscdX6-kKthISZsLd-79NbtdqkMG8I8QM0qOw,614
22
- promnesia/sources/fbmessenger.py,sha256=_QdM3-vLutN-dh4vxfQlQkRDiorWA2EwixL49AH7lbM,969
23
- promnesia/sources/filetypes.py,sha256=qJ8hIlfQTtmbaNJX4Dc-SG9HNylwGqI1t9uFHPe5-CM,3302
24
- promnesia/sources/github.py,sha256=Tiqtgtp-045s8GKJlVPhbE5nCGIoraWUjvIu21d2pas,2681
25
- promnesia/sources/guess.py,sha256=-km2_hsrznYrws1lA3ZN5L6ixJunEsgQBFDU7juqPpM,776
26
- promnesia/sources/hackernews.py,sha256=SRn-0FqrMbZvsQJvRUZAWA_BkPANPPsFeKL2qKDsBl8,1229
27
- promnesia/sources/hpi.py,sha256=yQIOT-OQ4Rhs7xXbszkNWjj46jvLDgP-xt7bSQV9wRk,361
28
- promnesia/sources/html.py,sha256=FOLcXzV3J5VEHMkpuF4Q0rrht5zdGsDNQZJMu2WWYZ8,1108
29
- promnesia/sources/hypothesis.py,sha256=Vlsb_RHLK9humXHnOWA_jYRUFBG-S8XYLjotDhrUmwI,1363
30
- promnesia/sources/instapaper.py,sha256=K2feGkgiFp6pNJoDYlyLs9m8MkDizoXy2QUg-Fjm-O0,969
31
- promnesia/sources/markdown.py,sha256=1aUN5T-fAmfg6MaUJGywJ-gz-a77mZgsgN_8swkVeRk,3604
32
- promnesia/sources/org.py,sha256=1kFPz12VJGD8uJrx_WIQskYPxoyx6ZqgBGNtvAhKHpk,5382
33
- promnesia/sources/plaintext.py,sha256=3iHVFXwLu4ljGOBVIBBcRkZnqxoOmjjOOxgyCOShvMc,3124
34
- promnesia/sources/pocket.py,sha256=4JCNrYs23Nq0c0hw_UxaxaIJbiqF2JVu5GAql-hfNZM,1105
35
- promnesia/sources/reddit.py,sha256=p8mRiUTtzJbFLpOf4i7bxnxBwgE1DQzqFP6HwTwN4-M,5650
36
- promnesia/sources/roamresearch.py,sha256=Su-2ykyjdylvDMogQjAgiGpLkh4Inw-K8yeAhGv678E,1068
37
- promnesia/sources/rss.py,sha256=r0FhEJmnFz8BqD6jFsTavrBJFy_l02mwaIEZfA6g49E,801
38
- promnesia/sources/shellcmd.py,sha256=2lMaQeTFfCBCRxKt44F6N4uHF0oYV2Uy_aV21LHR-pQ,2587
39
- promnesia/sources/signal.py,sha256=5nkESmHMeu-dOZocHxSo_1w0EOrSAnx3CyQLlkKvdKQ,14600
40
- promnesia/sources/smscalls.py,sha256=Cm7ugD1jWANkinhkevzW1KUERheuY5ab6mYZZpGUt_8,574
41
- promnesia/sources/stackexchange.py,sha256=KGZsZGQ1PyTr7tap9Jqtg5Hm47VSlJ-JlVacXDznpOw,724
42
- promnesia/sources/takeout.py,sha256=nwHbhxWaB0y_cknYz35-lM4G58U3EVXWRF-2jax4KBI,3172
43
- promnesia/sources/takeout_legacy.py,sha256=GxssEfHswu4kLVGLr7fe2uBn5u9ea3It41NDQ44ZDEE,3818
44
- promnesia/sources/telegram.py,sha256=PQGlA9frCuctLiVUe788CU20RGypWB8lBi2oztxkrBM,4892
45
- promnesia/sources/twitter.py,sha256=8vtLKyhtqioMmp_IKKVozLZC32TIQKjs_toB5cU2_6Q,1848
46
- promnesia/sources/vcs.py,sha256=jSoFTK8tQe92z73WJYgy5dNmaoz6xEcIIpRuAHa1noQ,1607
47
- promnesia/sources/viber.py,sha256=B4wmmJAwmqCadgyC36k0XwLaySqW_mYdIfHtbXY6ewI,6185
48
- promnesia/sources/website.py,sha256=XbhG1hynjY7qsQ2b88Ej-BBO2VmDA8rbh5LJMKgZ7f0,1791
49
- promnesia/sources/zulip.py,sha256=s1bhYmx26VKC35CJF_2yiO4jdYHH0QwRYtAD3Ss6tt8,742
50
- promnesia-1.1.20230129.dist-info/LICENSE,sha256=rgO9acPmnw53ZBxiXBdp8kfxmRcekhg_Q7HN65BPihs,1074
51
- promnesia-1.1.20230129.dist-info/METADATA,sha256=JUJFm-_34G_w8Fxs3PpOd2ZFaBmRo14eX1QEIUguKDY,1910
52
- promnesia-1.1.20230129.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
53
- promnesia-1.1.20230129.dist-info/entry_points.txt,sha256=kS7r-9onvui_TELEQvolES4KfWUeraSkSZ9-DWw4WGM,55
54
- promnesia-1.1.20230129.dist-info/top_level.txt,sha256=7yvIpooFiuNLf9yLdu9MTADz57z0YTAqSu7aSG9ujSU,10
55
- promnesia-1.1.20230129.dist-info/RECORD,,