diff --git a/bin/export-ksp-post b/bin/export-ksp-post new file mode 100755 index 0000000000000000000000000000000000000000..79ca869daecb47800daaa4b91284b8ac597fbd64 --- /dev/null +++ b/bin/export-ksp-post @@ -0,0 +1,58 @@ +#!/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)