HPI/my/stackexchange/stexport.py

54 lines
1.2 KiB
Python

'''
Stackexchange data (uses API via [[https://github.com/karlicoss/stexport][stexport]])
'''
REQUIRES = [
'git+https://github.com/karlicoss/stexport',
]
from dataclasses import dataclass
from stexport import dal
from my.core import (
PathIsh,
Stats,
get_files,
make_config,
stat,
)
import my.config
@dataclass
class stackexchange(my.config.stackexchange):
'''
Uses [[https://github.com/karlicoss/stexport][stexport]] outputs
'''
export_path: PathIsh
config = make_config(stackexchange)
# TODO kinda annoying it's resolving gdpr path here (and fails during make_config if gdpr path isn't available)
# I guess it's a good argument to avoid clumping configs together
# or move to my.config.stackexchange.stexport
###
# todo lru cache?
def _dal() -> dal.DAL:
inputs = get_files(config.export_path)
return dal.DAL(inputs)
# TODO not sure if should keep the sites separate.. probably easier to filter after than merge
def site(name: str) -> dal.SiteDAL:
return _dal().site_dal(name)
def stats() -> Stats:
res = {}
for name in _dal().sites():
s = site(name=name)
res.update({name: stat(s.questions, name='questions')})
return res