prettify calls provider
This commit is contained in:
parent
348460a83d
commit
3018807e2a
2 changed files with 30 additions and 20 deletions
|
@ -1,12 +1,18 @@
|
||||||
import os
|
"""
|
||||||
from pathlib import Path
|
Phone calls and SMS messages
|
||||||
from typing import Dict, List, NamedTuple, Iterator, Iterable
|
"""
|
||||||
from datetime import datetime
|
# TODO extract SMS as well? I barely use them though..
|
||||||
import pytz
|
|
||||||
|
|
||||||
|
from datetime import datetime
|
||||||
|
from pathlib import Path
|
||||||
|
from typing import NamedTuple, Iterator, Set
|
||||||
|
|
||||||
|
import pytz
|
||||||
from lxml import etree # type: ignore
|
from lxml import etree # type: ignore
|
||||||
|
|
||||||
BPATH = Path("/L/backups/smscalls")
|
from .common import get_files
|
||||||
|
|
||||||
|
from mycfg import paths
|
||||||
|
|
||||||
|
|
||||||
class Call(NamedTuple):
|
class Call(NamedTuple):
|
||||||
|
@ -19,8 +25,8 @@ class Call(NamedTuple):
|
||||||
return f"talked with {self.who} for {self.duration_s} secs"
|
return f"talked with {self.who} for {self.duration_s} secs"
|
||||||
|
|
||||||
|
|
||||||
def _extract_calls(fname: str) -> Iterator[Call]:
|
def _extract_calls(path: Path) -> Iterator[Call]:
|
||||||
tr = etree.parse(fname)
|
tr = etree.parse(str(path))
|
||||||
for cxml in tr.findall('call'):
|
for cxml in tr.findall('call'):
|
||||||
# TODO we've got local tz herer, not sure if useful..
|
# TODO we've got local tz herer, not sure if useful..
|
||||||
# ok, so readable date is local datetime, cahnging throughout the backup
|
# ok, so readable date is local datetime, cahnging throughout the backup
|
||||||
|
@ -32,17 +38,15 @@ def _extract_calls(fname: str) -> Iterator[Call]:
|
||||||
# TODO type? must be missing/outgoing/incoming
|
# TODO type? must be missing/outgoing/incoming
|
||||||
)
|
)
|
||||||
|
|
||||||
def get_calls():
|
|
||||||
calls: Dict[datetime, Call] = {}
|
|
||||||
for n in sorted(BPATH.glob('calls-*.xml')):
|
|
||||||
# for c in _extract_calls(os.path.join(BPATH, n)):
|
|
||||||
# cc = calls.get(c.dt, None)
|
|
||||||
# if cc is not None and cc != c:
|
|
||||||
# print(f"WARNING: {cc} vs {c}")
|
|
||||||
calls.update({c.dt: c for c in _extract_calls(os.path.join(BPATH, n))})
|
|
||||||
# always replacing with latter is good, we get better contact names
|
|
||||||
return sorted(calls.values(), key=lambda c: c.dt)
|
|
||||||
|
|
||||||
|
def calls() -> Iterator[Call]:
|
||||||
|
files = get_files(paths.smscalls.export_path, glob='calls-*.xml')
|
||||||
|
|
||||||
def test():
|
# TODO always replacing with the latter is good, we get better contact names??
|
||||||
assert len(get_calls()) > 10
|
emitted: Set[datetime] = set()
|
||||||
|
for p in files:
|
||||||
|
for c in _extract_calls(p):
|
||||||
|
if c.dt in emitted:
|
||||||
|
continue
|
||||||
|
emitted.add(c.dt)
|
||||||
|
yield c
|
||||||
|
|
6
tests/smscalls.py
Normal file
6
tests/smscalls.py
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
from my.smscalls import calls
|
||||||
|
|
||||||
|
|
||||||
|
# TODO that's a pretty dumb test; perhaps can be generic..
|
||||||
|
def test():
|
||||||
|
assert len(list(calls())) > 10
|
Loading…
Add table
Reference in a new issue