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)
|
||||
smihai
commented
J'utiliserais J'utiliserais `pprint` pour mieux voir la structure retournée.
nroche
commented
Pas besoin en fait,
(ce qui ne serait pas le cas si on utilisait le serializer) Pas besoin en fait,
les objets zeep s'affichent déjà en json avec de l'indentation.
```
(Pdb) type(results)
<class 'zeep.objects.getPersonUnitInfoResponseBean'>
```
(ce qui ne serait pas le cas si on utilisait le serializer)
`from zeep.helpers import serialize_object`
|
||||
|
||||
|
||||
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
|
|
@ -36,6 +36,9 @@ from tests.test_manager import login
|
|||
from tests.utils import FakedResponse, ResponsesSoap, generic_endpoint_url, setup_access_rights
|
||||
|
||||
TEST_BASE_DIR = os.path.join(os.path.dirname(__file__), 'data', 'toulouse_maelis')
|
||||
WSDL_BASE_DIR = os.path.join(
|
||||
os.path.dirname(__file__), '..', 'passerelle', 'contrib', 'toulouse_maelis', 'tools', 'wsdl'
|
||||
)
|
||||
|
||||
|
||||
def get_xml_file(filename):
|
||||
|
@ -48,12 +51,17 @@ def get_media_file(filename):
|
|||
return desc.read()
|
||||
|
||||
|
||||
def get_wsdl_file(filename):
|
||||
with open(os.path.join(WSDL_BASE_DIR, filename), 'rb') as desc:
|
||||
return desc.read()
|
||||
|
||||
|
||||
CONNECTION_ERROR = ConnectionError('No address associated with hostname')
|
||||
FAMILY_SERVICE_WSDL = FakedResponse(content=get_xml_file('FamilyService.wsdl'), status_code=200)
|
||||
ACTIVITY_SERVICE_WSDL = FakedResponse(content=get_xml_file('ActivityService.wsdl'), status_code=200)
|
||||
INVOICE_SERVICE_WSDL = FakedResponse(content=get_xml_file('InvoiceService.wsdl'), status_code=200)
|
||||
SITE_SERVICE_WSDL = FakedResponse(content=get_xml_file('SiteService.wsdl'), status_code=200)
|
||||
APE_SERVICE_WSDL = FakedResponse(content=get_xml_file('ApeService.wsdl'), status_code=200)
|
||||
FAMILY_SERVICE_WSDL = FakedResponse(content=get_wsdl_file('FamilyService.wsdl'), status_code=200)
|
||||
ACTIVITY_SERVICE_WSDL = FakedResponse(content=get_wsdl_file('ActivityService.wsdl'), status_code=200)
|
||||
INVOICE_SERVICE_WSDL = FakedResponse(content=get_wsdl_file('InvoiceService.wsdl'), status_code=200)
|
||||
SITE_SERVICE_WSDL = FakedResponse(content=get_wsdl_file('SiteService.wsdl'), status_code=200)
|
||||
APE_SERVICE_WSDL = FakedResponse(content=get_wsdl_file('ApeService.wsdl'), status_code=200)
|
||||
FAILED_AUTH = FakedResponse(content=get_xml_file('R_failed_authentication.xml'), status_code=500)
|
||||
ISWSRUNNING_TRUE = FakedResponse(content=get_xml_file('R_is_ws_running.xml') % b'true', status_code=200)
|
||||
ISWSRUNNING_FALSE = FakedResponse(content=get_xml_file('R_is_ws_running.xml') % b'false', status_code=200)
|
||||
|
@ -74,7 +82,7 @@ def requests_mock():
|
|||
def family_service(requests_mock):
|
||||
responses_soap = ResponsesSoap(
|
||||
wsdl_url='https://example.org/FamilyService?wsdl',
|
||||
wsdl_content=get_xml_file('FamilyService.wsdl'),
|
||||
wsdl_content=get_wsdl_file('FamilyService.wsdl'),
|
||||
settings=Settings(strict=False, xsd_ignore_sequence_order=True),
|
||||
requests_mock=requests_mock,
|
||||
)
|
||||
|
@ -86,7 +94,7 @@ def family_service(requests_mock):
|
|||
def activity_service(requests_mock):
|
||||
responses_soap = ResponsesSoap(
|
||||
wsdl_url='https://example.org/ActivityService?wsdl',
|
||||
wsdl_content=get_xml_file('ActivityService.wsdl'),
|
||||
wsdl_content=get_wsdl_file('ActivityService.wsdl'),
|
||||
settings=Settings(strict=False, xsd_ignore_sequence_order=True),
|
||||
requests_mock=requests_mock,
|
||||
)
|
||||
|
@ -98,7 +106,7 @@ def activity_service(requests_mock):
|
|||
def invoice_service(requests_mock):
|
||||
responses_soap = ResponsesSoap(
|
||||
wsdl_url='https://example.org/InvoiceService?wsdl',
|
||||
wsdl_content=get_xml_file('InvoiceService.wsdl'),
|
||||
wsdl_content=get_wsdl_file('InvoiceService.wsdl'),
|
||||
settings=Settings(strict=False, xsd_ignore_sequence_order=True),
|
||||
requests_mock=requests_mock,
|
||||
)
|
||||
|
@ -110,7 +118,7 @@ def invoice_service(requests_mock):
|
|||
def site_service(requests_mock):
|
||||
responses_soap = ResponsesSoap(
|
||||
wsdl_url='https://example.org/SiteService?wsdl',
|
||||
wsdl_content=get_xml_file('SiteService.wsdl'),
|
||||
wsdl_content=get_wsdl_file('SiteService.wsdl'),
|
||||
settings=Settings(strict=False, xsd_ignore_sequence_order=True),
|
||||
requests_mock=requests_mock,
|
||||
)
|
||||
|
@ -122,7 +130,7 @@ def site_service(requests_mock):
|
|||
def ape_service():
|
||||
with ResponsesSoap(
|
||||
wsdl_url='https://example.org/ApeService?wsdl',
|
||||
wsdl_content=get_xml_file('ApeService.wsdl'),
|
||||
wsdl_content=get_wsdl_file('ApeService.wsdl'),
|
||||
settings=Settings(strict=False, xsd_ignore_sequence_order=True),
|
||||
)() as mock:
|
||||
yield mock
|
||||
|
@ -144,31 +152,31 @@ def django_db_setup(django_db_setup, django_db_blocker):
|
|||
|
||||
site_service = ResponsesSoap(
|
||||
wsdl_url='https://example.org/SiteService?wsdl',
|
||||
wsdl_content=get_xml_file('SiteService.wsdl'),
|
||||
wsdl_content=get_wsdl_file('SiteService.wsdl'),
|
||||
settings=Settings(strict=False, xsd_ignore_sequence_order=True),
|
||||
)
|
||||
|
||||
family_service = ResponsesSoap(
|
||||
wsdl_url='https://example.org/FamilyService?wsdl',
|
||||
wsdl_content=get_xml_file('FamilyService.wsdl'),
|
||||
wsdl_content=get_wsdl_file('FamilyService.wsdl'),
|
||||
settings=Settings(strict=False, xsd_ignore_sequence_order=True),
|
||||
)
|
||||
|
||||
activity_service = ResponsesSoap(
|
||||
wsdl_url='https://example.org/ActivityService?wsdl',
|
||||
wsdl_content=get_xml_file('ActivityService.wsdl'),
|
||||
wsdl_content=get_wsdl_file('ActivityService.wsdl'),
|
||||
settings=Settings(strict=False, xsd_ignore_sequence_order=True),
|
||||
)
|
||||
|
||||
ape_service = ResponsesSoap(
|
||||
wsdl_url='https://example.org/ApeService?wsdl',
|
||||
wsdl_content=get_xml_file('ApeService.wsdl'),
|
||||
wsdl_content=get_wsdl_file('ApeService.wsdl'),
|
||||
settings=Settings(strict=False, xsd_ignore_sequence_order=True),
|
||||
)
|
||||
|
||||
invoice_service = ResponsesSoap(
|
||||
wsdl_url='https://example.org/InvoiceService?wsdl',
|
||||
wsdl_content=get_xml_file('InvoiceService.wsdl'),
|
||||
wsdl_content=get_wsdl_file('InvoiceService.wsdl'),
|
||||
settings=Settings(strict=False, xsd_ignore_sequence_order=True),
|
||||
)
|
||||
|
||||
|
|
Loading…
Reference in New Issue
typo ici (srcipts)
(quelle review de qualité ;) )
(corrigé)