Select Git revision
__init__.py
-
Martin Mareš authored
Donutit k něčemu takovému Flask je docela divoké, ale vlastně to jsou všechno dokumentované a doporučené postupy O:-)
Martin Mareš authoredDonutit k něčemu takovému Flask je docela divoké, ale vlastně to jsou všechno dokumentované a doporučené postupy O:-)
export-ksp-post 1.53 KiB
#!/usr/bin/env python3
# Exportování kontaktů na organizátory ve formátu pro KSPácký post-mail-gen
import argparse
from dataclasses import dataclass
from sqlalchemy import or_
from sqlalchemy.orm import joinedload
import sys
import mo.csv
import mo.db as db
from mo.util import die, init_standalone
parser = argparse.ArgumentParser(description='Exportuje kontakty pro post-mail-gen z KSP')
parser.add_argument('--role', type=str, metavar='ROLE', nargs='*', help='organizátoři s jednou ze zadaných rolí (formát jako v DB)')
parser.add_argument('--cat', type=str, metavar='CAT', nargs='*', help='omezit role na jednu z daných kategorií')
args = parser.parse_args()
init_standalone()
sess = db.get_session()
query = (sess.query(db.User)
.filter_by(is_org=True))
if args.role:
roles = [db.RoleType.coerce(x) for x in args.role]
subq = sess.query(db.UserRole.user_id).filter(db.UserRole.role.in_(roles))
if args.cat:
subq = subq.filter(or_(db.UserRole.category.in_(args.cat), db.UserRole.category == None))
query = query.filter(db.User.user_id.in_(subq))
orgs = query.all()
@dataclass
class Row:
uid: str
src: str
email: str
first_name: str
last_name: str
papers: str
output = []
for u in sorted(orgs, key=lambda u: u.sort_key()):
row = Row(
uid=u.user_id,
src='osmo',
email=u.email,
first_name=u.first_name,
last_name=u.last_name,
papers='mail',
)
output.append(row)
mo.csv.write(sys.stdout, mo.csv.FileFormat.tsv, Row, output)