Merge remote-tracking branch 'smscalls/master'
This commit is contained in:
commit
ce0740a2a8
1 changed files with 48 additions and 0 deletions
48
calls/__init__.py
Normal file
48
calls/__init__.py
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
import os
|
||||||
|
from pathlib import Path
|
||||||
|
from typing import Dict, List, NamedTuple, Iterator, Iterable
|
||||||
|
from datetime import datetime
|
||||||
|
import pytz
|
||||||
|
|
||||||
|
from lxml import etree # type: ignore
|
||||||
|
|
||||||
|
BPATH = Path("/L/backups/smscalls")
|
||||||
|
|
||||||
|
|
||||||
|
class Call(NamedTuple):
|
||||||
|
dt: datetime
|
||||||
|
duration_s: int
|
||||||
|
who: str
|
||||||
|
|
||||||
|
@property
|
||||||
|
def summary(self) -> str:
|
||||||
|
return f"talked with {self.who} for {self.duration_s} secs"
|
||||||
|
|
||||||
|
|
||||||
|
def _extract_calls(fname: str) -> Iterator[Call]:
|
||||||
|
tr = etree.parse(fname)
|
||||||
|
for cxml in tr.findall('call'):
|
||||||
|
# TODO we've got local tz herer, not sure if useful..
|
||||||
|
# ok, so readable date is local datetime, cahnging throughout the backup
|
||||||
|
dt = pytz.utc.localize(datetime.utcfromtimestamp(int(cxml.get('date')) / 1000))
|
||||||
|
yield Call(
|
||||||
|
dt=dt,
|
||||||
|
duration_s=int(cxml.get('duration')),
|
||||||
|
who=cxml.get('contact_name') # TODO number if contact is unavail??
|
||||||
|
# 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 test():
|
||||||
|
assert len(get_calls()) > 10
|
Loading…
Add table
Reference in a new issue