Skip to content
Snippets Groups Projects
Select Git revision
  • cdbcc39b1bd93077db9a1b0459379047c21bee39
  • devel default
  • master
  • fo
  • jirka/typing
  • fo-base
  • mj/submit-images
  • jk/issue-96
  • jk/issue-196
  • honza/add-contestant
  • honza/mr7
  • honza/mrf
  • honza/mrd
  • honza/mra
  • honza/mr6
  • honza/submit-images
  • honza/kolo-vs-soutez
  • jh-stress-test-wip
  • shorten-schools
19 results

export-ksp-post

Blame
  • 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)