toulouse-maelis: [tools] add raw SOAP scripts (#75927) #165
|
@ -1,35 +0,0 @@
|
|||
#!/usr/bin/python3
|
||||
|
||||
import argparse
|
||||
|
||||
import requests
|
||||
import zeep
|
||||
from zeep.transports import Transport
|
||||
from zeep.wsse.username import UsernameToken
|
||||
|
||||
WSSE = UsernameToken('maelis-webservice', 'maelis-password')
|
||||
WSDL_URL = 'https://demo-toulouse.sigec.fr/maelisws-toulouse-recette/services/FamilyService?wsdl'
|
||||
|
||||
|
||||
def read_family(family_id, verbose):
|
||||
session = requests.Session()
|
||||
session.verify = False
|
||||
transport = Transport(session=session)
|
||||
settings = zeep.Settings(strict=False, xsd_ignore_sequence_order=True)
|
||||
client = zeep.Client(WSDL_URL, transport=transport, wsse=WSSE, settings=settings)
|
||||
|
||||
result = client.service.readFamily(
|
||||
dossierNumber=family_id,
|
||||
# schoolYear=
|
||||
# incomeYear=2022, # <-- pour filtrer les quotients sur cette année
|
||||
# referenceYear=2020,
|
||||
)
|
||||
print(result)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--verbose', '-v', type=int, default=2, help='display errors')
|
||||
parser.add_argument('family_id', help='196544', nargs='?', default='196544')
|
||||
args = parser.parse_args()
|
||||
read_family(args.family_id, verbose=args.verbose)
|
|
@ -0,0 +1,5 @@
|
|||
*~
|
||||
*.pyc
|
||||
*.xml
|
||||
*.txt
|
||||
*.json
|
|
@ -0,0 +1,90 @@
|
|||
Scripts SOAP Parsifal
|
||||
=====================
|
||||
|
||||
Scripts pour produire rapidement des trames SOAP à poster sur
|
||||
https://redmine.sigec.fr/
|
||||
mais aussi pour vérifier rapidement le contenus des référentiels,
|
||||
qui sont mis en cache dans le connecteur,
|
||||
ou sinon pour les tests.
|
||||
|
||||
ex:
|
||||
$ ./read_referential_list.py civility
|
||||
$ cat soap_sent.xml
|
||||
$ cat soap_received.xml
|
||||
|
||||
Les scripts appellent les WS définis sur
|
||||
https://demo-toulouse.sigec.fr/maelisws-toulouse-recette/
|
||||
|
||||
Il y a d'autres infos sur le connecteur dans ce wiki :
|
||||
https://redmine.sigec.fr/projects/toulouse/wiki/Le_connecteur_publik
|
||||
|
||||
Install
|
||||
-------
|
||||
Créer un fichier config.json à la racine (au même niveau que ce
|
||||
fichier Readme) avec le contenu qui est donné par le lien suivant :
|
||||
https://redmine.sigec.fr/projects/toulouse/wiki/Les_scripts_SOAP
|
||||
|
||||
Mémo
|
||||
----
|
||||
|
||||
Nouveautés dans les WSDL
|
||||
........................
|
||||
$ ./check_wsdl.py -e dev -v1
|
||||
|
||||
Référentiels
|
||||
............
|
||||
$ ./read_referential_list.py -e dev civility
|
||||
$ ./read_nursery_list.py -e dev
|
||||
|
||||
DUI
|
||||
...
|
||||
$ ./read_family.py -e dev 322423
|
||||
|
||||
Catalogue des activités
|
||||
.......................
|
||||
$ ./read_activity_list.py -e dev
|
||||
$ ./read_activity_nature_type.py -e dev
|
||||
|
||||
Catalogue personnalisé
|
||||
......................
|
||||
$ ./get_person_catalogue_activity.py -e dev -f 322423 -P 261768
|
||||
$ ./grep_activity_info.py -e dev -f 322423 -P 261771 -d > to_grep_into.txt
|
||||
|
||||
Inscriptions
|
||||
............
|
||||
$ ./get_person_unit_info.py -e dev -f 322423 -P 261768 -a A10055585940 -u A10055585942 -p M10053212180
|
||||
$ ./add_person_unit_basket.py -e dev -f 322423 -P 261772 -a A10055585940 -u A10055585942 -p M10053212180 -S 2023-02-07 -E 2023-07-07
|
||||
$ ./add_person_unit_subscribe.py -e dev -f 322423 -P 264026 -a A10055585940 -u A10055585942 -p M10053212180 -S 2023-02-07 -E 2023-07-07
|
||||
|
||||
$ ./get_person_unit_info.py -e dev -f 322423 -P 261768 -a A10055590330 -u A10055590332 -p A10053179224
|
||||
$ ./add_person_unit_basket.py -e dev -f 322423 -P 261771 -a A10055590330 -u A10055590332 -p A10053179224 -S 2023-01-01 -E 2023-06-30
|
||||
|
||||
Réservations (agenda)
|
||||
.....................
|
||||
$ ./get_person_schedule_list.py -e dev -f 322423 -P 261768 A10055585940 -y 2023 -m 4
|
||||
$ ./update_person_schedule_list.py -e dev -f 322423 -P 261768 -a A10055585940 -u A10055585942 -D "2023-04-12" -A ADD_PRES_PREVI
|
||||
|
||||
Réservations (semaine type)
|
||||
...........................
|
||||
$ ./get_person_schedule_list.py -e dev -f 322423 -P 261768 -y 2023 -m 4 -d A10049327682
|
||||
$ ./update_week_calendar.py -e dev -f 322423 -P 261768 -a A10049327682 -S "2023-04-01" -E "2222-05-01" -W "XB_____"
|
||||
|
||||
Paniers
|
||||
.......
|
||||
$ ./get_family_basket.py -e dev 322423
|
||||
$ ./delete_basket.py -e dev S10055618250
|
||||
$ ./delete_basket_line.py -e dev S10055618251
|
||||
$ ./validate_basket.py -e dev S10055618250
|
||||
|
||||
penser à noter les idIns pour ensuite pouvoir faire :
|
||||
$ ./delete_subscribe_activity.py -e dev S10055619138
|
||||
|
||||
Factures
|
||||
........
|
||||
$ ./read_referential_list.py -e dev -s invoice regie
|
||||
$ ./read_invoices.py -e dev -r 104 -f 322423
|
||||
|
||||
|
||||
(à venir...)
|
||||
$ ./pay_invoices.py -e dev --help
|
||||
(il y aura aussi le WS cancelInvoiceAndDeleteSubscribeList)
|
|
@ -0,0 +1,45 @@
|
|||
#!/usr/bin/python3
|
||||
|
||||
import argparse
|
||||
|
||||
import utils
|
||||
|
||||
FAMILY_ID = '322573' # NICO
|
||||
PERSON_ID = '263781' # BART
|
||||
ACTIVITY_ID = 'A10055227963'
|
||||
UNIT_ID = 'A10055227965'
|
||||
PLACE_ID = 'A10055129635'
|
||||
START_DATE = '2023-02-01'
|
||||
END_DATE = '2023-07-01'
|
||||
|
||||
|
||||
def check(args):
|
||||
utils.configure_logging(args.verbose)
|
||||
client = utils.get_client(args.env, 'Activity')
|
||||
|
||||
result = client.service.addPersonUnitBasket(
|
||||
addPersonUnitBasketRequestBean={
|
||||
'numFamily': args.family,
|
||||
'numPerson': args.person,
|
||||
'idAct': args.activity,
|
||||
'idUnit': args.unit,
|
||||
'idPlace': args.place,
|
||||
'dateStartSubscribe': args.start,
|
||||
'dateEndSubscribe': args.end,
|
||||
}
|
||||
)
|
||||
print(result)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--verbose', '-v', type=int, default=2, help='display errors')
|
||||
parser.add_argument('--env', '-e', default='integ', help='dev, test, integ, prod')
|
||||
parser.add_argument('--family', '-f', default=FAMILY_ID, help='family id')
|
||||
parser.add_argument('--person', '-P', default=PERSON_ID, help='person id')
|
||||
parser.add_argument('--activity', '-a', default=ACTIVITY_ID, help='activity id')
|
||||
parser.add_argument('--unit', '-u', default=UNIT_ID, help='unit id')
|
||||
parser.add_argument('--place', '-p', default=PLACE_ID, help='place id')
|
||||
parser.add_argument('--start', '-S', default=START_DATE, help='start date (ex: 2023-02-01)')
|
||||
parser.add_argument('--end', '-E', default=START_DATE, help='end date (ex: 2023-07-01)')
|
||||
check(parser.parse_args())
|
|
@ -0,0 +1,45 @@
|
|||
#!/usr/bin/python3
|
||||
|
||||
import argparse
|
||||
|
||||
import utils
|
||||
|
||||
FAMILY_ID = '322573' # NICO
|
||||
PERSON_ID = '263781' # BART
|
||||
ACTIVITY_ID = 'A10055227963'
|
||||
UNIT_ID = 'A10055227965'
|
||||
PLACE_ID = 'A10055129635'
|
||||
START_DATE = '2023-02-01'
|
||||
END_DATE = '2023-07-01'
|
||||
|
||||
|
||||
def check(args):
|
||||
utils.configure_logging(args.verbose)
|
||||
client = utils.get_client(args.env, 'Activity')
|
||||
|
||||
result = client.service.addPersonUnitSubscribe(
|
||||
AddPersonSubscribeRequestBean={
|
||||
'numFamily': args.family,
|
||||
'numPerson': args.person,
|
||||
'idAct': args.activity,
|
||||
'idUnit': args.unit,
|
||||
'idPlace': args.place,
|
||||
'dateStartSubscribe': args.start,
|
||||
'dateEndSubscribe': args.end,
|
||||
}
|
||||
)
|
||||
print(result)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--verbose', '-v', type=int, default=2, help='display errors')
|
||||
parser.add_argument('--env', '-e', default='integ', help='dev, test, integ, prod')
|
||||
parser.add_argument('--family', '-f', default=FAMILY_ID, help='family id')
|
||||
parser.add_argument('--person', '-P', default=PERSON_ID, help='person id')
|
||||
parser.add_argument('--activity', '-a', default=ACTIVITY_ID, help='activity id')
|
||||
parser.add_argument('--unit', '-u', default=UNIT_ID, help='unit id')
|
||||
parser.add_argument('--place', '-p', default=PLACE_ID, help='place id')
|
||||
parser.add_argument('--start', '-S', default=START_DATE, help='start date (ex: 2023-02-01)')
|
||||
parser.add_argument('--end', '-E', default=START_DATE, help='end date (ex: 2023-07-01)')
|
||||
check(parser.parse_args())
|
|
@ -0,0 +1,64 @@
|
|||
#!/usr/bin/python3
|
||||
|
||||
import argparse
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
import requests
|
||||
import utils
|
||||
|
||||
|
||||
def check_one(args, service):
|
||||
wsdl_url = utils.get_wsdl_url(args.env, service)
|
||||
print(wsdl_url)
|
||||
|
||||
# previous result
|
||||
wsdl_file_path = 'wsdl/%sService.wsdl' % service.title()
|
||||
if not os.path.exists(wsdl_file_path):
|
||||
with open(wsdl_file_path, 'w'):
|
||||
pass
|
||||
|
||||
result = requests.get(wsdl_url, verify=False)
|
||||
assert result.status_code == 200
|
||||
|
||||
# result
|
||||
last_wsdl_file_path = wsdl_file_path + '.new'
|
||||
with open(last_wsdl_file_path, 'w') as wsdl_last_file:
|
||||
wsdl_last_file.write(result.text)
|
||||
|
||||
# diff
|
||||
if args.verbose > 1:
|
||||
stdout = stderr = None
|
||||
else:
|
||||
stdout = stderr = subprocess.PIPE
|
||||
cmd = 'diff %s %s' % (wsdl_file_path, last_wsdl_file_path)
|
||||
output = subprocess.run(cmd, shell=True, check=False, stdout=stdout, stderr=stderr)
|
||||
|
||||
if output.returncode:
|
||||
print('WSDL change on %s' % service)
|
||||
return output.returncode
|
||||
|
||||
|
||||
def check(args):
|
||||
returncode = 0
|
||||
|
||||
utils.configure_logging(args.verbose)
|
||||
if args.service == 'all':
|
||||
for service in ['family', 'activity', 'invoice', 'ape', 'site']:
|
||||
result = check_one(args, service)
|
||||
returncode = returncode or result
|
||||
else:
|
||||
returncode = check_one(args, args.service)
|
||||
sys.exit(returncode)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--verbose', '-v', type=int, default=2, help='display errors')
|
||||
parser.add_argument('--env', '-e', default='integ', help='dev, test, integ, prod')
|
||||
parser.add_argument(
|
||||
'service', help='family, activity, invoice, ape, site or all', nargs='?', default='all'
|
||||
)
|
||||
args = parser.parse_args()
|
||||
check(args)
|
|
@ -0,0 +1,26 @@
|
|||
#!/usr/bin/python3
|
||||
|
||||
import argparse
|
||||
|
||||
import utils
|
||||
|
||||
|
||||
def check(args):
|
||||
utils.configure_logging(args.verbose)
|
||||
client = utils.get_client(args.env, 'Activity')
|
||||
|
||||
results = client.service.deleteBasket(
|
||||
deleteBasketRequestBean={
|
||||
'idBasket': args.basket,
|
||||
'idUtilisat': "Entr'ouvert",
|
||||
}
|
||||
)
|
||||
print(results)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--verbose', '-v', type=int, default=2, help='display errors')
|
||||
parser.add_argument('--env', '-e', default='integ', help='dev, test, integ, prod')
|
||||
parser.add_argument('basket', help='basket id')
|
||||
check(parser.parse_args())
|
|
@ -0,0 +1,25 @@
|
|||
#!/usr/bin/python3
|
||||
|
||||
import argparse
|
||||
|
||||
import utils
|
||||
|
||||
|
||||
def check(args):
|
||||
utils.configure_logging(args.verbose)
|
||||
client = utils.get_client(args.env, 'Activity')
|
||||
|
||||
results = client.service.deletePersonUnitBasket(
|
||||
deletePersonUnitBasketRequestBean={
|
||||
'idBasketLine': args.line,
|
||||
}
|
||||
)
|
||||
print(results)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--verbose', '-v', type=int, default=2, help='display errors')
|
||||
parser.add_argument('--env', '-e', default='integ', help='dev, test, integ, prod')
|
||||
parser.add_argument('line', nargs='?', help='basket line id')
|
||||
check(parser.parse_args())
|
|
@ -0,0 +1,21 @@
|
|||
#!/usr/bin/python3
|
||||
|
||||
import argparse
|
||||
|
||||
import utils
|
||||
|
||||
|
||||
def check(args):
|
||||
utils.configure_logging(args.verbose)
|
||||
client = utils.get_client(args.env, 'Activity')
|
||||
|
||||
results = client.service.deleteSubscribeActivity(idSubscribe=args.subscribe)
|
||||
print(results)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--verbose', '-v', type=int, default=2, help='display errors')
|
||||
parser.add_argument('--env', '-e', default='integ', help='dev, test, integ, prod')
|
||||
parser.add_argument('subscribe', nargs='?', help='subscribe id (idIns du panier)')
|
||||
check(parser.parse_args())
|
|
@ -0,0 +1,30 @@
|
|||
#!/usr/bin/python3
|
||||
|
||||
from math import inf
|
||||
|
||||
from dateutil.relativedelta import relativedelta
|
||||
from django.utils.dateparse import parse_date
|
||||
|
||||
|
||||
def get_ages_criteria(today, start_dob, end_dob):
|
||||
ages_txt = ['<=2', '3-11', '12-17', '18-25', '26-59', '>=60']
|
||||
ages = [0, 3, 12, 18, 26, 60, 62]
|
||||
|
||||
data = []
|
||||
max_age = relativedelta(today, parse_date(start_dob[:10])).years if start_dob else inf
|
||||
min_age = relativedelta(today, parse_date(end_dob[:10])).years if end_dob else 0
|
||||
print('activity: [%s:%s]' % (min_age, max_age))
|
||||
|
||||
for i in range(0, len(ages) - 1):
|
||||
print('check for laps [%s:%s]' % (ages[i], ages[i + 1] - 1))
|
||||
for age in range(ages[i], ages[i + 1]):
|
||||
# print('check for age %s <= %s <= %s (%s)' % (min_age, age, max_age, bool(min_age <= age <= max_age)))
|
||||
if min_age <= age <= max_age:
|
||||
print('found %s' % ages_txt[i])
|
||||
data.append((i, ages_txt[i]))
|
||||
break
|
||||
return data
|
||||
|
||||
|
||||
today = parse_date('2023-01-01')
|
||||
print(get_ages_criteria(today, '1964-01-01', '1964-01-01'))
|
|
@ -0,0 +1,27 @@
|
|||
#!/usr/bin/python3
|
||||
|
||||
import argparse
|
||||
|
||||
import utils
|
||||
|
||||
FAMILY_ID = '322423' # NICO
|
||||
|
||||
|
||||
def check(args):
|
||||
utils.configure_logging(args.verbose)
|
||||
client = utils.get_client(args.env, 'Activity')
|
||||
|
||||
results = client.service.getFamilyBasket(
|
||||
getFamilyBasketRequestBean={
|
||||
'numFamily': args.family,
|
||||
}
|
||||
)
|
||||
print(results)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--verbose', '-v', type=int, default=2, help='display errors')
|
||||
parser.add_argument('--env', '-e', default='integ', help='dev, test, integ, prod')
|
||||
parser.add_argument('family', help=FAMILY_ID, nargs='?', default=FAMILY_ID)
|
||||
check(parser.parse_args())
|
|
@ -0,0 +1,93 @@
|
|||
#!/usr/bin/python3
|
||||
|
||||
import argparse
|
||||
import json
|
||||
|
||||
import utils
|
||||
from zeep.helpers import serialize_object
|
||||
|
||||
FAMILY_ID = '322573' # NICO
|
||||
PERSON_ID = '263781' # BART
|
||||
|
||||
|
||||
def check(args):
|
||||
utils.configure_logging(args.verbose)
|
||||
client = utils.get_client(args.env, 'Activity')
|
||||
|
||||
results = client.service.getPersonCatalogueActivity(
|
||||
getPersonCatalogueActivityRequestBean={
|
||||
'numDossier': args.family,
|
||||
'numPerson': args.person,
|
||||
# facultatif, pour fitrer sur une nature d'activité
|
||||
#'codeNatureActivity': None, # 'P' ou 'V'
|
||||
# facultatif, ne fait que retirer des lignes
|
||||
#'yearSchool': '2022', # aucune influence ici
|
||||
#'dateStartActivity': '2022-09-01',
|
||||
#'dateEndActivity': '2023-08-01',
|
||||
}
|
||||
)
|
||||
|
||||
if args.dump:
|
||||
print(json.dumps(serialize_object(results), cls=utils.DjangoJSONEncoder, indent=2))
|
||||
return
|
||||
|
||||
for activity in results['catalogueActivityList']:
|
||||
if args.nature:
|
||||
if args.nature.lower() == 'loisir':
|
||||
if activity['activity']['activityType'] and activity['activity']['activityType'][
|
||||
'natureSpec'
|
||||
]['code'] in ['A', 'R', 'X']:
|
||||
continue
|
||||
elif args.nature and not (
|
||||
activity['activity']['activityType']
|
||||
and activity['activity']['activityType']['natureSpec']['code'] == args.nature
|
||||
):
|
||||
continue
|
||||
|
||||
print(
|
||||
'* %s / %s'
|
||||
% ( # / %s' % (
|
||||
activity['activity']['idActivity'],
|
||||
activity['activity']['libelle1'],
|
||||
# activity['activity']['libelle2'],
|
||||
)
|
||||
)
|
||||
|
||||
# print(' calendarGeneration: %s' % activity['activity']['calendarGeneration']['code'])
|
||||
if activity['activity']['activityType']:
|
||||
print(
|
||||
' type: %s / %s'
|
||||
% (
|
||||
activity['activity']['activityType']['code'],
|
||||
activity['activity']['activityType']['natureSpec']['code'],
|
||||
)
|
||||
)
|
||||
else:
|
||||
print("' type: no activity type")
|
||||
# print(' weeklyCalendarActivityList: %s' %
|
||||
# bool('weeklyCalendarActivityList' in activity['activity']))
|
||||
# print(' openDayList: %s' % len(activity['openDayList']))
|
||||
|
||||
for unit in activity['unitInfoList']:
|
||||
print(' * %s / %s' % (unit['idUnit'], unit['libelle']))
|
||||
print(' start: %s' % (unit['dateStart'].strftime('%Y-%m-%d')))
|
||||
print(' end: %s' % (unit['dateEnd'].strftime('%Y-%m-%d')))
|
||||
|
||||
# print(' places: %s' % len(unit['placeInfoList']))
|
||||
for item in unit['placeInfoList']:
|
||||
place = item['place']
|
||||
print(
|
||||
' * %s / %s: (x/y: %s/%s)'
|
||||
% (place['idPlace'], place['lib1'], place['longitude'], place['latitude'])
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--verbose', '-v', type=int, default=2, help='display errors')
|
||||
parser.add_argument('--env', '-e', default='integ', help='dev, test, integ, prod')
|
||||
parser.add_argument('--dump', '-d', default=False, action='store_true', help='dump')
|
||||
parser.add_argument('--family', '-f', default=FAMILY_ID, help='family id')
|
||||
parser.add_argument('--person', '-P', default=PERSON_ID, help='person id')
|
||||
parser.add_argument('--nature', '-n', default=None, help='code nature, ex: "X"')
|
||||
check(parser.parse_args())
|
|
@ -0,0 +1,52 @@
|
|||
#!/usr/bin/python3
|
||||
|
||||
import argparse
|
||||
|
||||
import utils
|
||||
|
||||
FAMILY_ID = '322573' # NICO
|
||||
PERSON_ID = '263781' # BART
|
||||
ACTIVITY_ID = 'A10055227963'
|
||||
YEAR = '2023'
|
||||
MONTH = '4'
|
||||
|
||||
|
||||
def check(args):
|
||||
utils.configure_logging(args.verbose)
|
||||
client = utils.get_client(args.env, 'Activity')
|
||||
|
||||
res = client.service.getPersonScheduleList(
|
||||
requestBean={
|
||||
'numDossier': args.family,
|
||||
'numPerson': args.person,
|
||||
'year': args.year,
|
||||
'month': args.month,
|
||||
'idAct': args.activity,
|
||||
}
|
||||
)
|
||||
if args.dump:
|
||||
print(res)
|
||||
return
|
||||
for person in res:
|
||||
for activity in person['activityScheduleList']:
|
||||
print('* %s / %s' % (activity['activity']['idAct'], activity['activity']['libelle']))
|
||||
for unit in activity['unitScheduleList']:
|
||||
print(' * %s / %s' % (unit['unit']['idUnit'], unit['unit']['libelle']))
|
||||
for day in unit['dayInfoList']:
|
||||
if day['status'] in ['NO_READ', 'NO_CUSTODY']:
|
||||
continue
|
||||
print(day)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--verbose', '-v', type=int, default=2, help='display errors')
|
||||
parser.add_argument('--env', '-e', default='integ', help='dev, test, integ, prod')
|
||||
parser.add_argument('--dump', '-d', default=False, action='store_true', help='dump')
|
||||
parser.add_argument('--family', '-f', default=FAMILY_ID, help='family id')
|
||||
parser.add_argument('--person', '-P', default=PERSON_ID, help='person id')
|
||||
parser.add_argument('--activity', '-a', default=ACTIVITY_ID, help='activity id')
|
||||
parser.add_argument('--year', '-y', default=YEAR, help='year (ex: 2023)')
|
||||
parser.add_argument('--month', '-m', default=MONTH, help='month (ex: 4)')
|
||||
parser.add_argument('activity', nargs='?', default=None, help='activity id')
|
||||
check(parser.parse_args())
|
|
@ -0,0 +1,81 @@
|
|||
#!/usr/bin/python3
|
||||
|
||||
import argparse
|
||||
|
||||
import utils
|
||||
|
||||
FAMILY_ID = '322573' # NICO
|
||||
PERSON_ID = '263781' # BART
|
||||
ACTIVITY_ID = 'A10055227963'
|
||||
UNIT_ID = 'A10055227965'
|
||||
PLACE_ID = 'A10055129635'
|
||||
|
||||
|
||||
def check(args):
|
||||
utils.configure_logging(args.verbose)
|
||||
client = utils.get_client(args.env, 'Activity')
|
||||
|
||||
results = client.service.getPersonUnitInfo(
|
||||
getPersonUnitInfoRequestBean={
|
||||
'numDossier': args.family,
|
||||
'numPerson': args.person,
|
||||
'activityUnitPlace': {
|
||||
'idActivity': args.activity,
|
||||
'idUnit': args.unit,
|
||||
'idPlace': args.place,
|
||||
},
|
||||
'dateRef': None, # si nulle, date du jour
|
||||
}
|
||||
)
|
||||
|
||||
if args.dump:
|
||||
print(results)
|
||||
exit(0)
|
||||
|
||||
print(
|
||||
'* %s / %s / %s'
|
||||
% (
|
||||
results['activity']['idActivity'],
|
||||
results['activity']['libelle1'],
|
||||
results['activity']['libelle2'],
|
||||
)
|
||||
)
|
||||
print(
|
||||
' control: %s / %s'
|
||||
% (
|
||||
results['controlResult']['controlOK'],
|
||||
results['controlResult']['message'],
|
||||
)
|
||||
)
|
||||
print(' calendarGeneration: %s' % results['calendarGeneration']['code'])
|
||||
if results['activity']['activityType']:
|
||||
print(
|
||||
' type: %s / %s'
|
||||
% (
|
||||
results['activity']['activityType']['code'],
|
||||
results['activity']['activityType']['natureSpec']['code'],
|
||||
)
|
||||
)
|
||||
else:
|
||||
print("' type: no activity type")
|
||||
print(' weeklyCalendarActivityList: %s' % bool('weeklyCalendarActivityList' in results))
|
||||
|
||||
print(' openDayList: %s' % len(results['openDayList']))
|
||||
|
||||
print(' unit: %s / %s' % (results['unit']['idUnit'], results['unit']['libelle']))
|
||||
print(' start: %s' % (results['unit']['dateStart'].strftime('%Y-%m-%d')))
|
||||
print(' end: %s' % (results['unit']['dateEnd'].strftime('%Y-%m-%d')))
|
||||
print(' place: %s / %s' % (results['place']['idPlace'], results['place']['lib1']))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--verbose', '-v', type=int, default=2, help='display errors')
|
||||
parser.add_argument('--env', '-e', default='integ', help='dev, test, integ, prod')
|
||||
parser.add_argument('--dump', '-d', default=False, action='store_true', help='dump')
|
||||
parser.add_argument('--family', '-f', default=FAMILY_ID, help='family id')
|
||||
parser.add_argument('--person', '-P', default=PERSON_ID, help='person id')
|
||||
parser.add_argument('--activity', '-a', default=ACTIVITY_ID, help='activity id')
|
||||
parser.add_argument('--unit', '-u', default=UNIT_ID, help='unit id')
|
||||
parser.add_argument('--place', '-p', default=PLACE_ID, help='place id')
|
||||
check(parser.parse_args())
|
|
@ -0,0 +1,72 @@
|
|||
#!/usr/bin/python3
|
||||
|
||||
import argparse
|
||||
|
||||
import utils
|
||||
|
||||
FAMILY_ID = '322573' # NICO
|
||||
PERSON_ID = '263781' # BART
|
||||
|
||||
|
||||
def activity_info(args, client, activity_id, unit_id, text_id):
|
||||
results = client.service.getPersonUnitInfo(
|
||||
getPersonUnitInfoRequestBean={
|
||||
'numDossier': args.family,
|
||||
'numPerson': args.person,
|
||||
'activityUnitPlace': {
|
||||
'idActivity': activity_id,
|
||||
'idUnit': unit_id,
|
||||
'idPlace': text_id,
|
||||
},
|
||||
'dateRef': None, # si nulle, date du jour
|
||||
}
|
||||
)
|
||||
print('* %s / %s / %s\n' % (activity_id, unit_id, text_id))
|
||||
if args.dump:
|
||||
print(results)
|
||||
|
||||
|
||||
def check(args):
|
||||
utils.configure_logging(args.verbose)
|
||||
client = utils.get_client(args.env, 'Activity')
|
||||
|
||||
results = client.service.getPersonCatalogueActivity(
|
||||
getPersonCatalogueActivityRequestBean={
|
||||
'numDossier': args.family,
|
||||
'numPerson': args.person,
|
||||
# facultatif, pour fitrer sur une nature d'activité
|
||||
'codeNatureActivity': None, # 'P' ou 'V'
|
||||
# facultatif, ne fait que retirer des lignes
|
||||
'yearSchool': '2022', # aucune influence ici
|
||||
'dateStartActivity': '2022-09-01',
|
||||
'dateEndActivity': '2023-08-01',
|
||||
}
|
||||
)
|
||||
|
||||
for activity in results['catalogueActivityList']:
|
||||
activity_id = activity['activity']['idActivity']
|
||||
activity_text = activity['activity']['libelle1']
|
||||
|
||||
for unit in activity['unitInfoList']:
|
||||
unit_id = unit['idUnit']
|
||||
unit_text = unit['libelle']
|
||||
i = 0
|
||||
for place in unit['placeInfoList']:
|
||||
place_id = place['place']['idPlace']
|
||||
place_text = place['place']['lib1']
|
||||
print('\n=== %s - %s - %s ===' % (activity_text, unit_text, place_text))
|
||||
activity_info(args, client, activity_id, unit_id, place_id)
|
||||
i += 1
|
||||
if i == 3:
|
||||
print('(...)')
|
||||
break
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--verbose', '-v', type=int, default=2, help='display errors')
|
||||
parser.add_argument('--env', '-e', default='integ', help='dev, test, integ, prod')
|
||||
parser.add_argument('--dump', '-d', default=False, action='store_true', help='dump')
|
||||
parser.add_argument('--family', '-f', default=FAMILY_ID, help='family id')
|
||||
parser.add_argument('--person', '-P', default=PERSON_ID, help='person id')
|
||||
check(parser.parse_args())
|
|
@ -0,0 +1,112 @@
|
|||
#!/usr/bin/python3
|
||||
|
||||
import argparse
|
||||
import json
|
||||
import pprint
|
||||
|
||||
import utils
|
||||
from zeep.helpers import serialize_object
|
||||
|
||||
|
||||
def check(args):
|
||||
utils.configure_logging(args.verbose)
|
||||
client = utils.get_client(args.env, 'Activity')
|
||||
|
||||
results = client.service.readActivityList(
|
||||
schoolyear=2022,
|
||||
# schoolyear=2023, # si je fais ça je perd "A10049327682 / RESTAURATION SCOLAIRE 22/23"
|
||||
dateStartCalend='2022-09-01',
|
||||
dateEndCalend='2023-08-31',
|
||||
# dateEndCalend='2022-09-01' # si je fais ça je perd "A10053187065 / Vacances Hivers 2023" et "A10053187089 / Vacances Ete 2023"
|
||||
)
|
||||
|
||||
if args.dump:
|
||||
print(json.dumps(serialize_object(results), cls=utils.DjangoJSONEncoder, indent=2))
|
||||
exit(0)
|
||||
|
||||
for activity in serialize_object(results):
|
||||
nature_code = None
|
||||
nature_lib = None
|
||||
type_code = None
|
||||
type_lib = None
|
||||
if activity['activityPortail'].get('activityType'):
|
||||
nature_code = activity['activityPortail']['activityType']['natureSpec']['code']
|
||||
nature_lib = activity['activityPortail']['activityType']['natureSpec']['libelle']
|
||||
type_code = activity['activityPortail']['activityType']['code']
|
||||
type_lib = activity['activityPortail']['activityType']['libelle']
|
||||
print(
|
||||
'* %s / %s (nature: (%s) %s / type: (%s) %s)'
|
||||
% (
|
||||
activity['activityPortail']['idAct'],
|
||||
activity['activityPortail']['libelle'],
|
||||
nature_code,
|
||||
nature_lib,
|
||||
type_code,
|
||||
type_lib,
|
||||
)
|
||||
)
|
||||
|
||||
# # # print(' schoolYear: %s' % activity['activityPortail']['schoolYear'])
|
||||
# print(' calendarGeneration: %s' % activity['activityPortail']['calendarGeneration']['code'])
|
||||
# if activity['activityPortail']['activityType']:
|
||||
# print(' type: %s / %s' % (
|
||||
# activity['activityPortail']['activityType']['code'],
|
||||
# activity['activityPortail']['activityType']['libelle'],
|
||||
# ))
|
||||
# # print(' weeklyCalendarActivityList: %s' %
|
||||
# # bool('weeklyCalendarActivityList' in activity['activityPortail']))
|
||||
# # print(' openDayList: %s' % len(activity['openDayList']))
|
||||
|
||||
# for unit in activity['unitPortailList']:
|
||||
# print(' * %s / %s' % (unit['idUnit'], unit['libelle']))
|
||||
# #print(' age: %s -> %s' % (unit['birthDateStart'], unit['birthDateEnd']))
|
||||
# #print(' places: %s' % len(unit['placeList']))
|
||||
# #for place in unit['placeList']:
|
||||
# # print(' * %s : (%s/%s)' % (place['lib'], place['longitude'], place['latitude']))
|
||||
exit(0)
|
||||
|
||||
for activity in serialize_object(results):
|
||||
if activity['activityPortail']['activityType']['natureSpec']['code'] not in ('P', 'L', 'S'):
|
||||
continue
|
||||
print(
|
||||
'* %s / %s'
|
||||
% (
|
||||
activity['activityPortail']['idAct'],
|
||||
activity['activityPortail']['libelle'],
|
||||
)
|
||||
)
|
||||
print(
|
||||
' nature: %s: %s'
|
||||
% (
|
||||
activity['activityPortail']['activityType']['natureSpec']['code'],
|
||||
activity['activityPortail']['activityType']['natureSpec']['libelle'],
|
||||
)
|
||||
)
|
||||
print(
|
||||
' type: %s: %s'
|
||||
% (
|
||||
activity['activityPortail']['activityType']['code'],
|
||||
activity['activityPortail']['activityType']['libelle'],
|
||||
)
|
||||
)
|
||||
exit(0)
|
||||
|
||||
data = []
|
||||
for a, activity in enumerate(serialize_object(results)):
|
||||
if activity['activityPortail']['activityType']['natureSpec']['code'] not in ('P', 'L', 'S', 'V'):
|
||||
continue
|
||||
results[a]['openDayList'] = 'hidden (%s)' % len(activity['openDayList'])
|
||||
for u, unit in enumerate(activity['unitPortailList']):
|
||||
# del result[a]['unitPortailList'][u]['placeList']
|
||||
results[a]['unitPortailList'][u]['placeList'] = 'hidden (%s)' % len(unit['placeList'])
|
||||
data.append(activity)
|
||||
pprint.pprint(data)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--verbose', '-v', type=int, default=2, help='display errors')
|
||||
parser.add_argument('--env', '-e', default='integ', help='dev, test, integ, prod')
|
||||
parser.add_argument('--dump', '-d', default=False, action='store_true', help='dump')
|
||||
args = parser.parse_args()
|
||||
check(args)
|
|
@ -0,0 +1,23 @@
|
|||
#!/usr/bin/python3
|
||||
|
||||
import argparse
|
||||
|
||||
import utils
|
||||
|
||||
|
||||
def check(args):
|
||||
utils.configure_logging(args.verbose)
|
||||
client = utils.get_client(args.env, 'Activity')
|
||||
results = client.service.readActivityNatureTypeList()
|
||||
|
||||
for nature in results:
|
||||
print('* %s: %s' % (nature['code'], nature['libelle']))
|
||||
for a_type in nature['activityTypeList']:
|
||||
print(' * %s: %s' % (a_type['code'], a_type['libelle']))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--verbose', '-v', type=int, default=2, help='display errors')
|
||||
parser.add_argument('--env', '-e', default='integ', help='dev, test, integ, prod')
|
||||
check(parser.parse_args())
|
|
@ -0,0 +1,31 @@
|
|||
#!/usr/bin/python3
|
||||
|
||||
import argparse
|
||||
|
||||
import utils
|
||||
|
||||
FAMILY_ID = '322423' # NICO
|
||||
|
||||
|
||||
def check(args):
|
||||
utils.configure_logging(args.verbose)
|
||||
client = utils.get_client(args.env, 'Family')
|
||||
|
||||
result = client.service.readFamily(
|
||||
dossierNumber=args.family,
|
||||
# schoolYear=
|
||||
# incomeYear=2020, # <-- pour avoir les quotients
|
||||
# referenceYear=2020,
|
||||
)
|
||||
if args.verbose > 1:
|
||||
print(result)
|
||||
return result
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--verbose', '-v', type=int, default=2, help='display errors')
|
||||
parser.add_argument('--env', '-e', default='integ', help='dev, test, integ, prod')
|
||||
parser.add_argument('family', help=FAMILY_ID, nargs='?', default=FAMILY_ID)
|
||||
args = parser.parse_args()
|
||||
check(args)
|
|
@ -0,0 +1,35 @@
|
|||
#!/usr/bin/python3
|
||||
|
||||
import argparse
|
||||
|
||||
import utils
|
||||
|
||||
FAMILY_ID = '322573' # NICO
|
||||
PERSON_ID = '263781' # BART
|
||||
REGIE_ID = '100' # CANTINE / CLAE
|
||||
START_DATE = '1970-01-01'
|
||||
END_DATE = '2222-02-22'
|
||||
|
||||
|
||||
def check(args):
|
||||
utils.configure_logging(args.verbose)
|
||||
client = utils.get_client(args.env, 'Invoice')
|
||||
|
||||
result = client.service.readInvoices(
|
||||
numDossier=args.family,
|
||||
codeRegie=args.regie,
|
||||
dateStart=args.start,
|
||||
dateEnd=args.end,
|
||||
)
|
||||
print(result)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--verbose', '-v', type=int, default=2, help='display errors')
|
||||
parser.add_argument('--env', '-e', default='integ', help='dev, test, integ, prod')
|
||||
parser.add_argument('--family', '-f', default=FAMILY_ID, help='family id')
|
||||
parser.add_argument('--regie', '-r', default=REGIE_ID, help='person id')
|
||||
parser.add_argument('--start', '-S', default=START_DATE, help='start date (ex: 1970-01-01)')
|
||||
parser.add_argument('--end', '-E', default=START_DATE, help='end date (ex: 2222-02-22)')
|
||||
check(parser.parse_args())
|
|
@ -0,0 +1,28 @@
|
|||
#!/usr/bin/python3
|
||||
|
||||
import argparse
|
||||
import json
|
||||
|
||||
import utils
|
||||
from zeep.helpers import serialize_object
|
||||
|
||||
|
||||
def check(args):
|
||||
utils.configure_logging(args.verbose)
|
||||
client = utils.get_client(args.env, 'Ape')
|
||||
|
||||
results = client.service.readNurseryList(
|
||||
request={
|
||||
#'activityTypeCode': '', #'CRECHFAM', # 'CRECHCO'
|
||||
#'codePSU': '', #'REGULAR', # 'OCCASIONAL'
|
||||
}
|
||||
)
|
||||
|
||||
print(json.dumps(serialize_object(results), cls=utils.DjangoJSONEncoder, indent=2))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--verbose', '-v', type=int, default=2, help='display errors')
|
||||
parser.add_argument('--env', '-e', default='integ', help='dev, test, integ, prod')
|
||||
check(parser.parse_args())
|
|
@ -0,0 +1,54 @@
|
|||
#!/usr/bin/python3
|
||||
|
||||
import argparse
|
||||
|
||||
import utils
|
||||
|
||||
|
||||
def check(args):
|
||||
utils.configure_logging(args.verbose)
|
||||
client = utils.get_client(args.env, args.service.title())
|
||||
|
||||
ref = args.referential.title()
|
||||
if ref == 'Csp':
|
||||
ref = 'CSP'
|
||||
elif ref == 'Dietcode':
|
||||
ref = 'DietCode'
|
||||
elif ref == 'Pai':
|
||||
ref = 'PAI'
|
||||
elif ref == 'Childindicator':
|
||||
ref = 'ChildIndicator'
|
||||
elif ref == 'Rlindicator':
|
||||
ref = 'RLIndicator'
|
||||
elif ref == 'Activitynaturetype':
|
||||
ref = 'ActivityNatureType'
|
||||
elif ref == 'Yearschool':
|
||||
ref = 'YearSchool'
|
||||
elif ref == 'Derogreason':
|
||||
ref = 'DerogReason'
|
||||
elif ref == 'Activitynaturetype':
|
||||
ref = 'ActivityNatureType'
|
||||
|
||||
method = getattr(client.service, 'read%sList' % ref)
|
||||
results = method()
|
||||
print(results)
|
||||
assert len(results) > 1
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--verbose', '-v', type=int, default=2, help='display errors')
|
||||
parser.add_argument('--env', '-e', default='integ', help='dev, test, integ, prod')
|
||||
parser.add_argument('--service', '-s', default='Family', help='Family, Activity, Site, Invoice, Ape')
|
||||
parser.add_argument(
|
||||
'referential',
|
||||
help='category childIndicator civility country county csp dietcode direct organ pai quality quotient rlIndicator service situation street town vaccin'
|
||||
+ 'activityNatureType derogReason level yearschool'
|
||||
+ 'regie'
|
||||
+ 'apeIndicator',
|
||||
nargs='?',
|
||||
default='civility',
|
||||
)
|
||||
|
||||
args = parser.parse_args()
|
||||
check(args)
|
|
@ -0,0 +1,25 @@
|
|||
#!/usr/bin/python3
|
||||
|
||||
import argparse
|
||||
|
||||
import utils
|
||||
|
||||
FAMILY_ID = '322423' # NICO
|
||||
|
||||
|
||||
def check(args):
|
||||
utils.configure_logging(args.verbose)
|
||||
client = utils.get_client(args.env, 'Activity')
|
||||
|
||||
result = client.service.updateBasketTime(
|
||||
idBasket=args.basket,
|
||||
)
|
||||
print(result)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--verbose', '-v', type=int, default=2, help='display errors')
|
||||
parser.add_argument('--env', '-e', default='integ', help='dev, test, integ, prod')
|
||||
parser.add_argument('basket', nargs='?', help='basket id')
|
||||
check(parser.parse_args())
|
|
@ -0,0 +1,47 @@
|
|||
#!/usr/bin/python3
|
||||
|
||||
import argparse
|
||||
|
||||
import utils
|
||||
|
||||
FAMILY_ID = '322573' # NICO
|
||||
PERSON_ID = '263781' # BART
|
||||
ACTIVITY_ID = 'A10055227963'
|
||||
UNIT_ID = 'A10055227965'
|
||||
DATE = '2023-04-12'
|
||||
YEAR = '2023'
|
||||
ACTION = 'ADD_PRES_PREVI'
|
||||
|
||||
|
||||
def check(args):
|
||||
utils.configure_logging(args.verbose)
|
||||
client = utils.get_client(args.env, 'Activity')
|
||||
|
||||
res = client.service.updatePersonSchedule(
|
||||
requestBean={
|
||||
'numDossier': args.family,
|
||||
'unitPersonDayInfoList': [
|
||||
{
|
||||
'numPerson': args.person,
|
||||
'idAct': args.activity,
|
||||
'idUni': args.unit,
|
||||
'date': args.date,
|
||||
'action': args.action,
|
||||
},
|
||||
],
|
||||
}
|
||||
)
|
||||
print(res)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--verbose', '-v', type=int, default=2, help='display errors')
|
||||
parser.add_argument('--env', '-e', default='integ', help='dev, test, integ, prod')
|
||||
parser.add_argument('--family', '-f', default=FAMILY_ID, help='family id')
|
||||
parser.add_argument('--person', '-P', default=PERSON_ID, help='person id')
|
||||
parser.add_argument('--activity', '-a', default=ACTIVITY_ID, help='activity id')
|
||||
parser.add_argument('--unit', '-u', default=UNIT_ID, help='unit id')
|
||||
parser.add_argument('--date', '-D', default=DATE, help='date (ex: 2023-04-12)')
|
||||
parser.add_argument('--action', '-A', default=ACTION, help='ADD_PRES_PREVI, DEL_PRES_PREVI, ...')
|
||||
check(parser.parse_args())
|
|
@ -0,0 +1,55 @@
|
|||
#!/usr/bin/python3
|
||||
|
||||
import argparse
|
||||
|
||||
import utils
|
||||
|
||||
FAMILY_ID = '322573' # NICO
|
||||
PERSON_ID = '263781' # BART
|
||||
ACTIVITY_ID = 'A10055227963'
|
||||
START_DATE = '2023-02-01'
|
||||
END_DATE = '2023-07-01'
|
||||
WEEK = '_XB____'
|
||||
|
||||
|
||||
def check(args):
|
||||
utils.configure_logging(args.verbose)
|
||||
client = utils.get_client(args.env, 'Activity')
|
||||
|
||||
if len(args.week) != 7:
|
||||
raise Exception("week must contain 7 letters (on per week day)")
|
||||
week = []
|
||||
for i, unit_letter in enumerate(args.week):
|
||||
if unit_letter in ['_', ' ']:
|
||||
letter = None
|
||||
else:
|
||||
letter = unit_letter
|
||||
week.append(
|
||||
{
|
||||
'dayNum': i + 1,
|
||||
'calendarLetter': letter,
|
||||
'isPresent': bool(letter is not None),
|
||||
}
|
||||
)
|
||||
|
||||
result = client.service.updateWeekCalendar(
|
||||
numPerson=args.person,
|
||||
idActivity=args.activity,
|
||||
dateStart=args.start,
|
||||
dateEnd=args.end,
|
||||
dayWeekInfoList=week,
|
||||
)
|
||||
print(result)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--verbose', '-v', type=int, default=2, help='display errors')
|
||||
parser.add_argument('--env', '-e', default='integ', help='dev, test, integ, prod')
|
||||
parser.add_argument('--family', '-f', default=FAMILY_ID, help='family id')
|
||||
parser.add_argument('--person', '-P', default=PERSON_ID, help='person id')
|
||||
parser.add_argument('--activity', '-a', default=ACTIVITY_ID, help='activity id')
|
||||
parser.add_argument('--start', '-S', default=START_DATE, help='start date (ex: 2023-02-01)')
|
||||
parser.add_argument('--end', '-E', default=START_DATE, help='end date (ex: 2023-07-01)')
|
||||
parser.add_argument('--week', '-W', default=WEEK, help='7 unit lettres or "_" (ex: _XB____)')
|
||||
check(parser.parse_args())
|
|
@ -0,0 +1,126 @@
|
|||
import datetime
|
||||
import json
|
||||
import logging.config
|
||||
import os
|
||||
import time
|
||||
|
||||
import requests
|
||||
import zeep
|
||||
from django.core.serializers.json import DjangoJSONEncoder
|
||||
from lxml import etree
|
||||
from zeep.transports import Transport
|
||||
from zeep.wsse.username import UsernameToken
|
||||
|
||||
|
||||
class SoapFilter(logging.Filter):
|
||||
def filter(elf, record):
|
||||
# ignore get WSDL record
|
||||
if 'HTTP Post to' in record.message:
|
||||
return True
|
||||
if 'HTTP Response from' in record.message:
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
class SoapHandler(logging.Handler):
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
for purpose in 'sent', 'received':
|
||||
try:
|
||||
os.remove('soap_' + purpose + '.xml')
|
||||
except OSError:
|
||||
pass
|
||||
|
||||
def format(self, record):
|
||||
# cannot use formatter to do that
|
||||
start = record.message.find('<soap')
|
||||
soap = record.message[start:]
|
||||
return soap
|
||||
|
||||
def emit(self, record):
|
||||
msg = self.format(record)
|
||||
xml = etree.fromstring(msg)
|
||||
if 'HTTP Post to' in record.message:
|
||||
path = 'soap_sent.xml'
|
||||
elif 'HTTP Response from' in record.message:
|
||||
path = 'soap_received.xml'
|
||||
with open(path, 'ab') as soap_file:
|
||||
soap_file.write(('---8<---' + '-' * 50 + '\n').encode())
|
||||
soap_file.write(etree.tostring(xml, pretty_print=True, encoding='UTF-8'))
|
||||
|
||||
# keep all traces
|
||||
path = 'all_' + path
|
||||
with open(path, 'ab') as soap_file:
|
||||
soap_file.write(('---8<---' + '-' * 50 + '\n').encode())
|
||||
soap_file.write(etree.tostring(xml, pretty_print=True, encoding='UTF-8'))
|
||||
|
||||
|
||||
def configure_logging(verbose):
|
||||
if verbose > 1:
|
||||
level = 'DEBUG'
|
||||
else:
|
||||
level = 'INFO'
|
||||
logging.config.dictConfig(
|
||||
{
|
||||
'version': 1,
|
||||
'filters': {
|
||||
'soap_filter': {
|
||||
'()': 'utils.SoapFilter',
|
||||
},
|
||||
},
|
||||
'formatters': {'verbose': {'format': '%(name)s: %(message)s'}},
|
||||
'handlers': {
|
||||
'console': {
|
||||
'level': level,
|
||||
'class': 'logging.StreamHandler',
|
||||
'formatter': 'verbose',
|
||||
},
|
||||
'soap': {
|
||||
'level': level,
|
||||
'class': 'utils.SoapHandler',
|
||||
'filters': ['soap_filter'],
|
||||
# no formatter used
|
||||
},
|
||||
},
|
||||
'loggers': {
|
||||
'zeep.transports': {
|
||||
'level': 'DEBUG',
|
||||
'propagate': True,
|
||||
'handlers': ['console', 'soap'],
|
||||
},
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
def load_config(env):
|
||||
with open('config.json') as conf_file:
|
||||
config = json.load(conf_file)
|
||||
return config[env.lower()]
|
||||
|
||||
|
||||
def get_wsdl_url(env, service):
|
||||
'''VPN is required to access test and integ environments'''
|
||||
config = load_config(env)
|
||||
return config['url'] + 'services/' + service.title() + 'Service?wsdl'
|
||||
|
||||
|
||||
def get_client(env, service):
|
||||
config = load_config(env)
|
||||
settings = zeep.Settings(strict=False, xsd_ignore_sequence_order=True)
|
||||
wsse = UsernameToken(config['login'], config['password'])
|
||||
session = requests.Session()
|
||||
session.verify = config['session_verify']
|
||||
wsdl_url = get_wsdl_url(env, service)
|
||||
print(wsdl_url)
|
||||
|
||||
transport = Transport(session=session)
|
||||
client = zeep.Client(wsdl_url, transport=transport, wsse=wsse, settings=settings)
|
||||
return client
|
||||
|
||||
|
||||
class JSONEncoder(DjangoJSONEncoder):
|
||||
def default(self, o):
|
||||
if isinstance(o, time.struct_time):
|
||||
o = datetime.datetime(*tuple(o)[:6])
|
||||
return super().default(o)
|
|
@ -0,0 +1,25 @@
|
|||
#!/usr/bin/python3
|
||||
|
||||
import argparse
|
||||
|
||||
import utils
|
||||
|
||||
|
||||
def check(args):
|
||||
utils.configure_logging(args.verbose)
|
||||
client = utils.get_client(args.env, 'Activity')
|
||||
|
||||
result = client.service.validateBasket(
|
||||
validateBasketRequestBean={
|
||||
'idBasket': args.basket,
|
||||
}
|
||||
)
|
||||
print(result)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--verbose', '-v', type=int, default=2, help='display errors')
|
||||
parser.add_argument('--env', '-e', default='integ', help='dev, test, integ, prod')
|
||||
parser.add_argument('basket', help='basket id')
|
||||
check(parser.parse_args())
|
|
@ -0,0 +1 @@
|
|||
*.wsdl.new
|