adjust github provier to use exporter model

This commit is contained in:
Dima Gerasimov 2019-09-19 23:53:31 +01:00
parent a99661892a
commit b9a06d7a7d

View file

@ -1,19 +1,23 @@
import json from functools import lru_cache
from .. import paths
@lru_cache()
def ghexport():
from kython import import_file
return import_file(paths.ghexport.repo / 'model.py')
from typing import Dict, List, Union, Any, NamedTuple, Tuple, Optional from typing import Dict, List, Union, Any, NamedTuple, Tuple, Optional
from datetime import datetime from datetime import datetime
from pathlib import Path from pathlib import Path
import logging import logging
import pytz
BPATH = Path("/L/backups/github-events")
def get_logger(): def get_logger():
return logging.getLogger('github-provider') return logging.getLogger('my.github') # TODO __package__???
def iter_events():
for f in list(sorted(BPATH.glob('*.json'))):
yield f
class Event(NamedTuple): class Event(NamedTuple):
@ -69,36 +73,24 @@ def _get_summary(e) -> Tuple[str, Optional[str]]:
else: else:
return tp, None return tp, None
def get_model():
sources = list(sorted(paths.ghexport.export_dir.glob('*.json')))
model = ghexport().Model(sources)
return model
def get_events(): def get_events():
logger = get_logger() # from kython import setup_logzero
# import logging
events: Dict[str, Any] = {} # setup_logzero(ghexport().get_logger(), level=logging.INFO)
for f in iter_events(): model = get_model()
with Path(f).open() as fo:
jj = json.load(fo)
# quick hack to adapt for both old & new formats
if 'events' in jj:
jj = jj['events']
#
for e in jj:
eid = e['id']
prev = events.get(eid, None)
if prev is not None:
if prev != e:
# a = prev['payload']
# b = e['payload']
# TODO err... push_id has changed??? wtf??
logger.error(f"Mismatch in \n{e}\n vs \n{prev}")
events[eid] = e
# TODO utc?? localize
ev = [Event( ev = [Event(
dt=datetime.strptime(d['created_at'], '%Y-%m-%dT%H:%M:%SZ'), dt=pytz.utc.localize(datetime.strptime(d['created_at'], '%Y-%m-%dT%H:%M:%SZ')),
summary=_get_summary(d)[0], summary=_get_summary(d)[0],
link=_get_summary(d)[1], link=_get_summary(d)[1],
eid=d['id'], eid=d['id'],
) for d in events.values()] ) for d in model.events()]
return sorted(ev, key=lambda e: e.dt) return sorted(ev, key=lambda e: e.dt)