diff --git a/venissieux-technocarte/run.py b/venissieux-technocarte/run.py index e404f94..467f65d 100644 --- a/venissieux-technocarte/run.py +++ b/venissieux-technocarte/run.py @@ -1,3 +1,4 @@ +import argparse import base64 import collections import csv @@ -6,7 +7,6 @@ import datetime import hashlib import hmac import random -import sys import time import urllib.parse @@ -19,22 +19,10 @@ CARD_FAMILLE_SLUG = 'familles' CARD_GARDE_SLUG = 'gardes' WCS_BASE_URL = 'https://wcs.dev.publik.love/api/' -EMAIL = 'admin@localhost' +WCS_EMAIL = 'admin@localhost' WCS_ORIG = 'wcs.dev.publik.love' WCS_KEY = 'c25fc1f82bd56b01e7cf62d785ae4410b0f7fdbebfb92a986d3fd6a150f3ba0e' -FILEPATH = None -ACTION = sys.argv[1] -assert ACTION in ('import', 'reset') - -if ACTION == 'import': - FILEPATH = sys.argv[2] - -MODE = 'sample' -if ACTION == 'import' and len(sys.argv) > 3: - MODE = sys.argv[3] -assert MODE in ('sample', 'full') - def sign_url(url, key, algo='sha256', orig=None, timestamp=None, nonce=None): parsed = urllib.parse.urlparse(url) @@ -70,7 +58,7 @@ def sign_string(s, key, algo='sha256', timedelta=30): def api_call(url, data=None, method='post'): - url = sign_url(url + '?email=%s' % EMAIL, WCS_KEY, orig=WCS_ORIG) + url = sign_url(url + '?email=%s' % WCS_EMAIL, WCS_KEY, orig=WCS_ORIG) if method == 'post': resp = requests.post(url, json={'data': data}) elif method == 'get': @@ -88,11 +76,11 @@ def get_field_value(carddata, varname): return carddata.data.get(field.id) -def get_rows(): - with open(FILEPATH) as csvfile: +def get_rows(filepath, mode): + with open(filepath) as csvfile: reader = csv.DictReader(csvfile, delimiter=';', quotechar='"') for i, row in enumerate(reader): - if MODE != 'full' and i > 100: + if mode != 'full' and i > 100: break yield row @@ -118,12 +106,12 @@ def init_human_data(row): return data -def create_adultes(): +def create_adultes(filepath, mode): adultes = {} familles_adulte_count = collections.defaultdict(int) url = WCS_BASE_URL + 'cards/adultes/submit' - for row in get_rows(): + for row in get_rows(filepath, mode): if row['ADULTE'] != '1': continue @@ -151,10 +139,10 @@ def create_adultes(): return adultes -def create_enfants(): +def create_enfants(filepath, mode): enfants = {} url = WCS_BASE_URL + 'cards/%s/submit' % CARD_ENFANT_SLUG - for row in get_rows(): + for row in get_rows(filepath, mode): if row['ADULTE'] == '1': continue @@ -230,22 +218,30 @@ def create_gardes(enfants, familles): return gardes -def import_data(): - adultes = create_adultes() - enfants = create_enfants() +def import_data(args): + adultes = create_adultes(args.filepath, args.mode) + enfants = create_enfants(args.filepath, args.mode) familles = create_familles(adultes, enfants) create_gardes(enfants, familles) -def reset(): +def reset(args): CardDef.get_by_urlname(CARD_ENFANT_SLUG).data_class().wipe() CardDef.get_by_urlname(CARD_ADULTE_SLUG).data_class().wipe() CardDef.get_by_urlname(CARD_FAMILLE_SLUG).data_class().wipe() CardDef.get_by_urlname(CARD_GARDE_SLUG).data_class().wipe() -if ACTION == 'import': - import_data() +parser = argparse.ArgumentParser() +subparsers = parser.add_subparsers() -elif ACTION == 'reset': - reset() +parser_import = subparsers.add_parser('import') +parser_import.set_defaults(func=import_data) +parser_import.add_argument('--filepath') +parser_import.add_argument('--mode', default='sample', choices=('sample', 'full')) + +parser_import = subparsers.add_parser('reset') +parser_import.set_defaults(func=reset) + +args = parser.parse_args() +args.func(args)