toulouse-axel: always get all activities to optimize caching (#43815)
This commit is contained in:
parent
b37a3ddcf9
commit
f67455c390
|
@ -776,10 +776,8 @@ class ToulouseAxel(BaseResource):
|
|||
'xml_response': e.xml_response})
|
||||
return {'data': True}
|
||||
|
||||
def get_children_activities(self, dui, reference_year, activity_types=None):
|
||||
activity_types = activity_types or ['MAT', 'MIDI', 'SOIR', 'GARD']
|
||||
cache_key = 'toulouse-axel-%s-children-activities-%s-%s-%s' % (
|
||||
self.pk, dui, reference_year, '-'.join(activity_types or []))
|
||||
def get_children_activities(self, dui, reference_year):
|
||||
cache_key = 'toulouse-axel-%s-children-activities-%s-%s' % (self.pk, dui, reference_year)
|
||||
result = cache.get(cache_key)
|
||||
if result is not None:
|
||||
return result
|
||||
|
@ -788,7 +786,7 @@ class ToulouseAxel(BaseResource):
|
|||
'DUI': {
|
||||
'IDDUI': dui,
|
||||
'ANNEEREFERENCE': str(reference_year),
|
||||
'TYPESACTIVITES': ','.join(activity_types),
|
||||
'TYPESACTIVITES': 'MAT,MIDI,SOIR,GARD',
|
||||
}
|
||||
})
|
||||
except AxelError as e:
|
||||
|
@ -805,9 +803,8 @@ class ToulouseAxel(BaseResource):
|
|||
cache.set(cache_key, children_activities, 30) # 30 seconds
|
||||
return children_activities
|
||||
|
||||
def get_child_activities(self, dui, reference_year, child_id, activity_types=None):
|
||||
children_activities = self.get_children_activities(
|
||||
dui=dui, reference_year=reference_year, activity_types=activity_types)
|
||||
def get_child_activities(self, dui, reference_year, child_id):
|
||||
children_activities = self.get_children_activities(dui=dui, reference_year=reference_year)
|
||||
|
||||
if child_id not in children_activities:
|
||||
raise APIError('Child not found', err_code='not-found')
|
||||
|
@ -825,10 +822,9 @@ class ToulouseAxel(BaseResource):
|
|||
return {}
|
||||
return {child_id: bool(child.get('ACTIVITE', [])) for child_id, child in children_activities.items()}
|
||||
|
||||
def get_booking_data(self, dui, child_id, booking_date, activity_types=None):
|
||||
def get_booking_data(self, dui, child_id, booking_date):
|
||||
start_date, end_date = utils.get_week_dates_from_date(booking_date)
|
||||
cache_key = 'toulouse-axel-%s-booking-data-%s-%s-%s-%s' % (
|
||||
self.pk, dui, child_id, start_date.isoformat(), '-'.join(activity_types or []))
|
||||
cache_key = 'toulouse-axel-%s-booking-data-%s-%s-%s' % (self.pk, dui, child_id, start_date.isoformat())
|
||||
result = cache.get(cache_key)
|
||||
if result is not None:
|
||||
return result
|
||||
|
@ -839,8 +835,7 @@ class ToulouseAxel(BaseResource):
|
|||
child_activities = self.get_child_activities(
|
||||
dui=dui,
|
||||
reference_year=reference_year,
|
||||
child_id=child_id,
|
||||
activity_types=activity_types)
|
||||
child_id=child_id)
|
||||
|
||||
# then get booking of the requested week for the child
|
||||
activity_ids = [act['IDACTIVITE'] for act in child_activities.get('ACTIVITE', [])]
|
||||
|
@ -1022,10 +1017,14 @@ class ToulouseAxel(BaseResource):
|
|||
def get_activity_days_for_week(week_start_date, week_end_date):
|
||||
# ask Axel for the booking of a week (starts may be a monday, ends a friday)
|
||||
activities = self.get_booking_data(
|
||||
dui=link.dui, child_id=idpersonne, booking_date=week_start_date, activity_types=[activity_type]).get('ACTIVITE', [])
|
||||
if not activities:
|
||||
dui=link.dui, child_id=idpersonne, booking_date=week_start_date).get('ACTIVITE', [])
|
||||
activity = None
|
||||
for act in activities:
|
||||
if act['TYPEACTIVITE'] == activity_type:
|
||||
activity = act
|
||||
break
|
||||
if activity is None:
|
||||
return
|
||||
activity = activities[0]
|
||||
day_date = week_start_date
|
||||
while day_date <= week_end_date:
|
||||
day = WEEKDAYS[day_date.weekday()]
|
||||
|
@ -1072,23 +1071,27 @@ class ToulouseAxel(BaseResource):
|
|||
activities = self.get_child_activities(
|
||||
dui=link.dui,
|
||||
reference_year=reference_year,
|
||||
child_id=idpersonne,
|
||||
activity_types=[activity_type]).get('ACTIVITE', [])
|
||||
child_id=idpersonne).get('ACTIVITE', [])
|
||||
|
||||
activity = None
|
||||
for act in activities:
|
||||
if act['TYPEACTIVITE'] == activity_type:
|
||||
activity = act
|
||||
break
|
||||
if activity is None:
|
||||
return {'data': []}
|
||||
activity_days = []
|
||||
if activities:
|
||||
activity = activities[0]
|
||||
for i, day in enumerate(['monday', 'tuesday', 'wednesday', 'thursday', 'friday']):
|
||||
disabled = False
|
||||
if activity_type == 'GARD' and day != 'wednesday':
|
||||
disabled = True
|
||||
elif activity_type == 'SOIR' and day == 'wednesday':
|
||||
disabled = True
|
||||
activity_days.append({
|
||||
'id': '{}:{}:{}:{}'.format(idpersonne, activity_type, activity['IDACTIVITE'], day),
|
||||
'text': WEEKDAYS_LABELS[i],
|
||||
'disabled': disabled,
|
||||
})
|
||||
for i, day in enumerate(['monday', 'tuesday', 'wednesday', 'thursday', 'friday']):
|
||||
disabled = False
|
||||
if activity_type == 'GARD' and day != 'wednesday':
|
||||
disabled = True
|
||||
elif activity_type == 'SOIR' and day == 'wednesday':
|
||||
disabled = True
|
||||
activity_days.append({
|
||||
'id': '{}:{}:{}:{}'.format(idpersonne, activity_type, activity['IDACTIVITE'], day),
|
||||
'text': WEEKDAYS_LABELS[i],
|
||||
'disabled': disabled,
|
||||
})
|
||||
|
||||
return {'data': activity_days}
|
||||
|
||||
|
|
|
@ -2197,13 +2197,13 @@ def test_clae_children_activities_info_endpoint_bad_date_format(app, resource, v
|
|||
assert resp.json['err'] == 'bad-request'
|
||||
|
||||
|
||||
def test_clae_children_activities_info_endpoint_no_result(app, resource, child_activities_data):
|
||||
def test_clae_children_activities_info_endpoint_no_result(app, resource):
|
||||
resp = app.get('/toulouse-axel/test/clae_children_activities_info?NameID=yyy&booking_date=2020-01-20')
|
||||
assert resp.json['err_desc'] == "Person not found"
|
||||
assert resp.json['err'] == 'not-found'
|
||||
|
||||
|
||||
def test_clae_children_activities_info_endpoint(app, resource, child_activities_data):
|
||||
def test_clae_children_activities_info_endpoint(app, resource):
|
||||
Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
|
||||
filepath = os.path.join(os.path.dirname(__file__), 'data/toulouse_axel/child_activities.xml')
|
||||
with open(filepath) as xml:
|
||||
|
@ -2740,6 +2740,11 @@ def test_clae_booking_activity_possible_days_endpoint(app, resource, child_activ
|
|||
<ACTIVITE>
|
||||
<ANNEEREFERENCE>2019</ANNEEREFERENCE>
|
||||
<IDACTIVITE>A19P1M1</IDACTIVITE>
|
||||
<JOUR>00000</JOUR>
|
||||
</ACTIVITE>
|
||||
<ACTIVITE>
|
||||
<ANNEEREFERENCE>2019</ANNEEREFERENCE>
|
||||
<IDACTIVITE>A19P1M2</IDACTIVITE>
|
||||
<JOUR>10201</JOUR>
|
||||
</ACTIVITE>
|
||||
</ENFANT>
|
||||
|
@ -2750,15 +2755,15 @@ def test_clae_booking_activity_possible_days_endpoint(app, resource, child_activ
|
|||
with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_child_activities', return_value=activities):
|
||||
resp = app.get(
|
||||
'/toulouse-axel/test/clae_booking_activity_possible_days?NameID=yyy&idpersonne=3535'
|
||||
'&start_date=2020-01-20&end_date=2020-01-24&activity_type=MAT')
|
||||
'&start_date=2020-01-20&end_date=2020-01-24&activity_type=MIDI')
|
||||
assert resp.json['err'] == 0
|
||||
assert len(resp.json['data']) == 5
|
||||
assert set(resp.json['data'][0].keys()) == set(['id', 'text', 'disabled', 'prefill', 'details'])
|
||||
assert resp.json['data'][0]['id'] == '3535:MAT:A19P1M1:2020-01-20'
|
||||
assert resp.json['data'][1]['id'] == '3535:MAT:A19P1M1:2020-01-21'
|
||||
assert resp.json['data'][2]['id'] == '3535:MAT:A19P1M1:2020-01-22'
|
||||
assert resp.json['data'][3]['id'] == '3535:MAT:A19P1M1:2020-01-23'
|
||||
assert resp.json['data'][4]['id'] == '3535:MAT:A19P1M1:2020-01-24'
|
||||
assert resp.json['data'][0]['id'] == '3535:MIDI:A19P1M2:2020-01-20'
|
||||
assert resp.json['data'][1]['id'] == '3535:MIDI:A19P1M2:2020-01-21'
|
||||
assert resp.json['data'][2]['id'] == '3535:MIDI:A19P1M2:2020-01-22'
|
||||
assert resp.json['data'][3]['id'] == '3535:MIDI:A19P1M2:2020-01-23'
|
||||
assert resp.json['data'][4]['id'] == '3535:MIDI:A19P1M2:2020-01-24'
|
||||
assert resp.json['data'][0]['text'] == 'Monday 20 January 2020'
|
||||
assert resp.json['data'][1]['text'] == 'Tuesday 21 January 2020'
|
||||
assert resp.json['data'][2]['text'] == 'Wednesday 22 January 2020'
|
||||
|
@ -2812,6 +2817,7 @@ def test_clae_booking_activity_possible_days_period(app, resource, today, start_
|
|||
with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_booking_data') as activities_info:
|
||||
activities_info.return_value = {'ACTIVITE': [{
|
||||
'id': 'TOTO',
|
||||
'TYPEACTIVITE': 'MAT',
|
||||
'booking': {'days': {'monday': True, 'tuesday': True, 'wednesday': True, 'thursday': True, 'friday': True}}
|
||||
}]}
|
||||
with freezegun.freeze_time(today):
|
||||
|
@ -2867,7 +2873,7 @@ def test_clae_booking_activity_annual_possible_days_endpoint_no_result(app, reso
|
|||
@freezegun.freeze_time('2019-09-01')
|
||||
def test_clae_booking_activity_annual_possible_days_endpoint(app, resource, child_activities_data):
|
||||
Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
|
||||
activities = {'ACTIVITE': [child_activities_data['ENFANT'][0]['ACTIVITE'][0]]}
|
||||
activities = child_activities_data['ENFANT'][0]
|
||||
with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_child_activities', return_value=activities):
|
||||
resp = app.get('/toulouse-axel/test/clae_booking_activity_annual_possible_days?NameID=yyy&idpersonne=3535&activity_type=MAT')
|
||||
assert resp.json['err'] == 0
|
||||
|
@ -2898,7 +2904,6 @@ def test_clae_booking_activity_annual_possible_days_endpoint(app, resource, chil
|
|||
'disabled': False,
|
||||
},
|
||||
]
|
||||
activities = {'ACTIVITE': [child_activities_data['ENFANT'][0]['ACTIVITE'][1]]}
|
||||
with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_child_activities', return_value=activities):
|
||||
resp = app.get('/toulouse-axel/test/clae_booking_activity_annual_possible_days?NameID=yyy&idpersonne=3535&activity_type=MIDI')
|
||||
assert resp.json['err'] == 0
|
||||
|
@ -2929,7 +2934,6 @@ def test_clae_booking_activity_annual_possible_days_endpoint(app, resource, chil
|
|||
'disabled': False,
|
||||
},
|
||||
]
|
||||
activities = {'ACTIVITE': [child_activities_data['ENFANT'][0]['ACTIVITE'][2]]}
|
||||
with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_child_activities', return_value=activities):
|
||||
resp = app.get('/toulouse-axel/test/clae_booking_activity_annual_possible_days?NameID=yyy&idpersonne=3535&activity_type=SOIR')
|
||||
assert resp.json['err'] == 0
|
||||
|
@ -2960,7 +2964,6 @@ def test_clae_booking_activity_annual_possible_days_endpoint(app, resource, chil
|
|||
'disabled': False,
|
||||
},
|
||||
]
|
||||
activities = {'ACTIVITE': [child_activities_data['ENFANT'][0]['ACTIVITE'][3]]}
|
||||
with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_child_activities', return_value=activities):
|
||||
resp = app.get('/toulouse-axel/test/clae_booking_activity_annual_possible_days?NameID=yyy&idpersonne=3535&activity_type=GARD')
|
||||
assert resp.json['err'] == 0
|
||||
|
|
Loading…
Reference in New Issue