venissieux-technocarte: get wcs infos from cli
This commit is contained in:
parent
fd887393b4
commit
86e8d70127
|
@ -1,3 +1,9 @@
|
|||
"""
|
||||
Usage :
|
||||
wcs-manage runscript -d wcs.dev.publik.love run.py reset
|
||||
wcs-manage runscript -d wcs.dev.publik.love run.py import --filepath ~/notes/clients/venissieux/famille/technocarte.csv --wcs-api-url=https://wcs.dev.publik.love/api/ --wcs-email=admin@localhost --wcs-orig=wcs.dev.publik.love --wcs-key=c25fc1f82bd56b01e7cf62d785ae4410b0f7fdbebfb92a986d3fd6a150f3ba0e
|
||||
"""
|
||||
|
||||
import argparse
|
||||
import base64
|
||||
import collections
|
||||
|
@ -18,11 +24,6 @@ CARD_ENFANT_SLUG = 'enfants'
|
|||
CARD_FAMILLE_SLUG = 'familles'
|
||||
CARD_GARDE_SLUG = 'gardes'
|
||||
|
||||
WCS_BASE_URL = 'https://wcs.dev.publik.love/api/'
|
||||
WCS_EMAIL = 'admin@localhost'
|
||||
WCS_ORIG = 'wcs.dev.publik.love'
|
||||
WCS_KEY = 'c25fc1f82bd56b01e7cf62d785ae4410b0f7fdbebfb92a986d3fd6a150f3ba0e'
|
||||
|
||||
|
||||
def sign_url(url, key, algo='sha256', orig=None, timestamp=None, nonce=None):
|
||||
parsed = urllib.parse.urlparse(url)
|
||||
|
@ -57,8 +58,8 @@ def sign_string(s, key, algo='sha256', timedelta=30):
|
|||
return hash.digest()
|
||||
|
||||
|
||||
def api_call(url, data=None, method='post'):
|
||||
url = sign_url(url + '?email=%s' % WCS_EMAIL, WCS_KEY, orig=WCS_ORIG)
|
||||
def wcs_api_call(url, args, data=None, method='post'):
|
||||
url = sign_url(url + '?email=%s' % args.wcs_email, args.wcs_key, orig=args.wcs_orig)
|
||||
if method == 'post':
|
||||
resp = requests.post(url, json={'data': data})
|
||||
elif method == 'get':
|
||||
|
@ -76,11 +77,11 @@ def get_field_value(carddata, varname):
|
|||
return carddata.data.get(field.id)
|
||||
|
||||
|
||||
def get_rows(filepath, mode):
|
||||
with open(filepath) as csvfile:
|
||||
def get_rows(args):
|
||||
with open(args.filepath) as csvfile:
|
||||
reader = csv.DictReader(csvfile, delimiter=';', quotechar='"')
|
||||
for i, row in enumerate(reader):
|
||||
if mode != 'full' and i > 100:
|
||||
if args.mode != 'full' and i > 100:
|
||||
break
|
||||
yield row
|
||||
|
||||
|
@ -106,12 +107,12 @@ def init_human_data(row):
|
|||
return data
|
||||
|
||||
|
||||
def create_adultes(filepath, mode):
|
||||
def create_adultes(args):
|
||||
adultes = {}
|
||||
familles_adulte_count = collections.defaultdict(int)
|
||||
|
||||
url = WCS_BASE_URL + 'cards/adultes/submit'
|
||||
for row in get_rows(filepath, mode):
|
||||
url = args.wcs_api_url + 'cards/adultes/submit'
|
||||
for row in get_rows(args):
|
||||
if row['ADULTE'] != '1':
|
||||
continue
|
||||
|
||||
|
@ -126,7 +127,7 @@ def create_adultes(filepath, mode):
|
|||
data['numero_voie'] = "%s %s" % (row['NUMVOI'], row['ADRENF1'])
|
||||
data['code_postal'] = row['CODPOSENF']
|
||||
data['commune'] = row['COMMUNE']
|
||||
resp = api_call(url, data)
|
||||
resp = wcs_api_call(url, args, data)
|
||||
|
||||
familles_adulte_count[code_famille] += 1
|
||||
adultes[row['CODENF']] = {
|
||||
|
@ -139,15 +140,15 @@ def create_adultes(filepath, mode):
|
|||
return adultes
|
||||
|
||||
|
||||
def create_enfants(filepath, mode):
|
||||
def create_enfants(args):
|
||||
enfants = {}
|
||||
url = WCS_BASE_URL + 'cards/%s/submit' % CARD_ENFANT_SLUG
|
||||
for row in get_rows(filepath, mode):
|
||||
url = args.wcs_api_url + 'cards/%s/submit' % CARD_ENFANT_SLUG
|
||||
for row in get_rows(args):
|
||||
if row['ADULTE'] == '1':
|
||||
continue
|
||||
|
||||
data = init_human_data(row)
|
||||
resp = api_call(url, data)
|
||||
resp = wcs_api_call(url, args, data)
|
||||
|
||||
enfant = {
|
||||
'technocarte_id': row['CODENF'],
|
||||
|
@ -164,9 +165,9 @@ def create_enfants(filepath, mode):
|
|||
return enfants
|
||||
|
||||
|
||||
def create_familles(adultes, enfants):
|
||||
def create_familles(adultes, enfants, args):
|
||||
familles_map = {}
|
||||
url = WCS_BASE_URL + 'cards/%s/submit' % CARD_FAMILLE_SLUG
|
||||
url = args.wcs_api_url + 'cards/%s/submit' % CARD_FAMILLE_SLUG
|
||||
for adulte_technocarte_id, adulte in adultes.items():
|
||||
technocarte_famille_id = adulte['technocarte_famille_id']
|
||||
if technocarte_famille_id not in familles_map:
|
||||
|
@ -175,14 +176,14 @@ def create_familles(adultes, enfants):
|
|||
'famille': adulte['nom'],
|
||||
'adulte1': adulte['publik_id']
|
||||
}
|
||||
url = WCS_BASE_URL + 'cards/%s/submit' % CARD_FAMILLE_SLUG
|
||||
resp = api_call(url, data)
|
||||
url = args.wcs_api_url + 'cards/%s/submit' % CARD_FAMILLE_SLUG
|
||||
resp = wcs_api_call(url, args, data)
|
||||
familles_map[technocarte_famille_id] = str(resp.json()['data']['id'])
|
||||
else:
|
||||
url = WCS_BASE_URL + 'cards/%s/%s/' % (
|
||||
url = args.wcs_api_url + 'cards/%s/%s/' % (
|
||||
CARD_FAMILLE_SLUG, familles_map[technocarte_famille_id]
|
||||
)
|
||||
card = api_call(url, method='get').json()
|
||||
card = wcs_api_call(url, args, method='get').json()
|
||||
if card['fields']['adulte2']:
|
||||
# gestion des doublons, s'il ya déjà un deuxième adulte, on zappe
|
||||
continue
|
||||
|
@ -194,14 +195,14 @@ def create_familles(adultes, enfants):
|
|||
# les gens ne se marient plus
|
||||
data['famille'] = "%s %s" % (card['fields']['famille'], adulte['nom'])
|
||||
|
||||
api_call(url, data)
|
||||
wcs_api_call(url, args, data)
|
||||
|
||||
return familles_map
|
||||
|
||||
|
||||
def create_gardes(enfants, familles):
|
||||
def create_gardes(enfants, familles, args):
|
||||
gardes = {}
|
||||
url = WCS_BASE_URL + 'cards/%s/submit' % CARD_GARDE_SLUG
|
||||
url = args.wcs_api_url + 'cards/%s/submit' % CARD_GARDE_SLUG
|
||||
for _, enfant in enfants.items():
|
||||
publik_id = enfant['publik_id']
|
||||
technocarte_famille_id = enfant['technocarte_famille_id']
|
||||
|
@ -212,17 +213,17 @@ def create_gardes(enfants, familles):
|
|||
'enfant': publik_id,
|
||||
'famille': publik_famille_id
|
||||
}
|
||||
resp = api_call(url, data)
|
||||
resp = wcs_api_call(url, args, data)
|
||||
gardes[publik_id] = str(resp.json()['data']['id'])
|
||||
|
||||
return gardes
|
||||
|
||||
|
||||
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)
|
||||
adultes = create_adultes(args)
|
||||
enfants = create_enfants(args)
|
||||
familles = create_familles(adultes, enfants, args)
|
||||
create_gardes(enfants, familles, args)
|
||||
|
||||
|
||||
def reset(args):
|
||||
|
@ -239,6 +240,10 @@ 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.add_argument('--wcs-api-url')
|
||||
parser_import.add_argument('--wcs-email')
|
||||
parser_import.add_argument('--wcs-orig')
|
||||
parser_import.add_argument('--wcs-key')
|
||||
|
||||
parser_import = subparsers.add_parser('reset')
|
||||
parser_import.set_defaults(func=reset)
|
||||
|
|
Loading…
Reference in New Issue