remove parsifal scripts (moved in passerelle)

This commit is contained in:
Nicolas Roche 2024-02-22 10:29:28 +01:00
parent 503ae489e6
commit 001681b70a
31 changed files with 0 additions and 1296 deletions

6
parsifal/.gitignore vendored
View File

@ -1,6 +0,0 @@
*~
*.pyc
*.xml
*.wsdl.new
*.txt
*.json

View File

@ -1 +0,0 @@
/home/nroche/src/passerelle/tests/data/toulouse_maelis/ActivityService.wsdl

View File

@ -1 +0,0 @@
/home/nroche/src/passerelle/tests/data/toulouse_maelis/ApeService.wsdl

View File

@ -1 +0,0 @@
/home/nroche/src/passerelle/tests/data/toulouse_maelis/FamilyService.wsdl

View File

@ -1 +0,0 @@
/home/nroche/src/passerelle/tests/data/toulouse_maelis/InvoiceService.wsdl

View File

@ -1,89 +0,0 @@
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 srcipts 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
----
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
'idIns': 'S10055620837'
'idIns': 'S10055620833'
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)

View File

@ -1 +0,0 @@
/home/nroche/src/passerelle/tests/data/toulouse_maelis/SiteService.wsdl

View File

@ -1,45 +0,0 @@
#!/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())

View File

@ -1,45 +0,0 @@
#!/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())

View File

@ -1,61 +0,0 @@
#!/usr/bin/python3
import argparse
import os
import requests
import subprocess
import sys
import utils
def check_one(args, service):
wsdl_url = utils.get_wsdl_url(args.env, service)
print(wsdl_url)
# previous result
wsdl_file_path = '%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)

View File

@ -1,26 +0,0 @@
#!/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())

View File

@ -1,25 +0,0 @@
#!/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())

View File

@ -1,23 +0,0 @@
#!/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())

View File

@ -1,28 +0,0 @@
#!/usr/bin/python3
from dateutil.relativedelta import relativedelta
from django.utils.dateparse import parse_date
from math import inf
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'))

View File

@ -1,28 +0,0 @@
#!/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())

View File

@ -1,85 +0,0 @@
#!/usr/bin/python3
import argparse
import json
from zeep.helpers import serialize_object
import utils
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')))
if unit['dateEnd']:
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())

View File

@ -1,52 +0,0 @@
#!/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())

View File

@ -1,76 +0,0 @@
#!/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())

View File

@ -1,71 +0,0 @@
#!/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())

View File

@ -1,100 +0,0 @@
#!/usr/bin/python3
import argparse
import json
import pprint
from zeep.helpers import serialize_object
import utils
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)

View File

@ -1,57 +0,0 @@
#!/usr/bin/python3
import argparse
import json
import utils
def check(args):
utils.configure_logging(args.verbose)
client = utils.get_client(args.env, 'Activity')
results = client.service.readActivityNatureTypeList()
# # loisirs
# natures = []
# for nature in results:
# try:
# int(nature['code'])
# except ValueError:
# is_int = False
# else:
# is_int = True
# if is_int or nature['code'] in ('P', 'L', 'S'):
# natures.append({'id': nature['code'], 'text': nature['libelle']})
# natures.sort(key=lambda x: x['text'])
# print(json.dumps(natures))
# exit()
lefts = set()
rights = set()
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 '1' <= nature['code'] <= '9':
# print(a_type['libelle'].split('-')[0].strip())
if '-' in a_type['code']:
left, right = a_type['code'].split('-')
lefts.add(left)
rights.add(right)
print('left: ' + str(sorted(list(lefts))))
print('right: ' + str(sorted(list(rights))))
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')
args = parser.parse_args()
check(args)
# left: ['ADH', 'ARE', 'JOU', 'JOU2', 'PAR', 'SOR', 'STA']
# De ce que je comprends, les types composés c'est que sur le loisir.
# Donc critère type avec :
# Adhesion, Activité Réguliére, Journée, 1/2 Journée, Parcours Santé, Sortie, Stage

View File

@ -1,32 +0,0 @@
#!/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)

View File

@ -1,35 +0,0 @@
#!/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())

View File

@ -1,28 +0,0 @@
#!/usr/bin/python3
import argparse
import json
from zeep.helpers import serialize_object
import utils
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())

View File

@ -1,53 +0,0 @@
#!/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)

View File

@ -1,35 +0,0 @@
#!/usr/bin/python3
import argparse
import utils
def check(args):
utils.configure_logging(args.verbose)
client = utils.get_client(args.env, 'Site')
ref = args.referential.title()
if 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)
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(
'referential',
help='activityNatureType derogReason level yearschool',
nargs='?',
default='yearschool'
)
check(parser.parse_args())

View File

@ -1,26 +0,0 @@
#!/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())

View File

@ -1,47 +0,0 @@
#!/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())

View File

@ -1,53 +0,0 @@
#!/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())

View File

@ -1,140 +0,0 @@
import datetime
import time
import json
import logging.config
import os
import subprocess
from lxml import etree
import requests
import zeep
from zeep.helpers import serialize_object
from zeep.transports import Transport
from zeep.wsse.username import UsernameToken
from django.core.serializers.json import DjangoJSONEncoder
class SoapFilter(logging.Filter):
def filter(elf, record):
# ignore get WSDL record
if 'HTTP Post to' in record.message:
return True
elif '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)
def diff_result(result, expected_file_path):
with open('result.json', 'w') as json_file:
json.dump(serialize_object(result), json_file, cls=DjangoJSONEncoder, indent=2)
json_file.write('\n')
cmd = 'diff %s result.json' % expected_file_path
output = subprocess.run(cmd, shell=True, check=False, stdout=None, stderr=None)
return output.returncode == 0

View File

@ -1,25 +0,0 @@
#!/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())