59 lines
1.6 KiB
Python
59 lines
1.6 KiB
Python
"""
|
|
Facebook Messenger messages
|
|
|
|
Uses the output of [[https://github.com/karlicoss/fbmessengerexport][fbmessengerexport]]
|
|
"""
|
|
REQUIRES = [
|
|
'git+https://github.com/karlicoss/fbmessengerexport',
|
|
]
|
|
|
|
from collections.abc import Iterator
|
|
from contextlib import ExitStack, contextmanager
|
|
from dataclasses import dataclass
|
|
|
|
import fbmessengerexport.dal as messenger
|
|
|
|
from my.config import fbmessenger as user_config
|
|
from my.core import PathIsh, Res, Stats, stat
|
|
from my.core.warnings import high
|
|
|
|
###
|
|
# support old style config
|
|
_new_section = getattr(user_config, 'fbmessengerexport', None)
|
|
_old_attr = getattr(user_config, 'export_db', None)
|
|
|
|
if _new_section is None and _old_attr is not None:
|
|
high("""DEPRECATED! Please modify your fbmessenger config to look like:
|
|
|
|
class fbmessenger:
|
|
class fbmessengerexport:
|
|
export_db: PathIsh = '/path/to/fbmessengerexport/database'
|
|
""")
|
|
class fbmessengerexport:
|
|
export_db = _old_attr
|
|
setattr(user_config, 'fbmessengerexport', fbmessengerexport)
|
|
###
|
|
|
|
|
|
@dataclass
|
|
class config(user_config.fbmessengerexport):
|
|
export_db: PathIsh
|
|
|
|
|
|
@contextmanager
|
|
def _dal() -> Iterator[messenger.DAL]:
|
|
model = messenger.DAL(config.export_db)
|
|
with ExitStack() as stack:
|
|
if hasattr(model, '__dal__'): # defensive to support legacy fbmessengerexport
|
|
stack.enter_context(model)
|
|
yield model
|
|
|
|
|
|
def messages() -> Iterator[Res[messenger.Message]]:
|
|
with _dal() as model:
|
|
for t in model.iter_threads():
|
|
yield from t.iter_messages()
|
|
|
|
|
|
def stats() -> Stats:
|
|
return stat(messages)
|