Projet

Général

Profil

0001-api-add-anonymize-booking-endpoint-49093.patch

Valentin Deniaud, 17 décembre 2020 18:21

Télécharger (4,81 ko)

Voir les différences:

Subject: [PATCH] api: add anonymize booking endpoint (#49093)

 .../management/commands/anonymize_bookings.py     | 10 +---------
 chrono/agendas/models.py                          | 15 +++++++++++++++
 chrono/api/urls.py                                |  1 +
 chrono/api/views.py                               | 13 +++++++++++++
 tests/test_api.py                                 | 13 +++++++++++++
 5 files changed, 43 insertions(+), 9 deletions(-)
chrono/agendas/management/commands/anonymize_bookings.py
31 31
            anonymization_datetime__isnull=True,
32 32
            creation_datetime__lt=timezone.now() - timedelta(days=1) * F('event__agenda__anonymize_delay'),
33 33
        )
34

  
35
        bookings_to_anonymize.update(
36
            label='',
37
            user_display_label='',
38
            user_external_id='',
39
            user_name='',
40
            extra_data={},
41
            anonymization_datetime=timezone.now(),
42
        )
34
        Booking.anonymize_bookings(bookings_to_anonymize)
chrono/agendas/models.py
1071 1071
            self.secondary_booking_set.update(in_waiting_list=True)
1072 1072
            self.save()
1073 1073

  
1074
    def anonymize(self):
1075
        qs = Booking.objects.filter(pk=self.pk)
1076
        Booking.anonymize_bookings(qs)
1077

  
1078
    @classmethod
1079
    def anonymize_bookings(cls, bookings_queryset):
1080
        bookings_queryset.update(
1081
            label='',
1082
            user_display_label='',
1083
            user_external_id='',
1084
            user_name='',
1085
            extra_data={},
1086
            anonymization_datetime=now(),
1087
        )
1088

  
1074 1089
    def get_ics(self, request=None):
1075 1090
        ics = vobject.iCalendar()
1076 1091
        ics.add('prodid').value = '-//Entr\'ouvert//NON SGML Publik'
chrono/api/urls.py
58 58
    url(r'^booking/(?P<booking_pk>\w+)/$', views.booking),
59 59
    url(r'^booking/(?P<booking_pk>\w+)/cancel/$', views.cancel_booking, name='api-cancel-booking'),
60 60
    url(r'^booking/(?P<booking_pk>\w+)/accept/$', views.accept_booking, name='api-accept-booking'),
61
    url(r'^booking/(?P<booking_pk>\w+)/anonymize/$', views.anonymize_booking, name='api-anonymize-booking'),
61 62
    url(r'^booking/(?P<booking_pk>\w+)/suspend/$', views.suspend_booking, name='api-suspend-booking'),
62 63
    url(r'^booking/(?P<booking_pk>\w+)/resize/$', views.resize_booking, name='api-resize-booking'),
63 64
    url(r'^booking/(?P<booking_pk>\w+)/ics/$', views.booking_ics, name='api-booking-ics'),
chrono/api/views.py
1282 1282
suspend_booking = SuspendBooking.as_view()
1283 1283

  
1284 1284

  
1285
class AnonymizeBooking(APIView):
1286
    permission_classes = (permissions.IsAuthenticated,)
1287

  
1288
    def post(self, request, booking_pk=None, format=None):
1289
        booking = get_object_or_404(Booking, id=booking_pk)
1290
        booking.anonymize()
1291
        response = {'err': 0, 'booking_id': booking.id}
1292
        return Response(response)
1293

  
1294

  
1295
anonymize_booking = AnonymizeBooking.as_view()
1296

  
1297

  
1285 1298
class ResizeSerializer(serializers.Serializer):
1286 1299
    count = serializers.IntegerField(min_value=1)
1287 1300

  
tests/test_api.py
2506 2506
    app.post('/api/booking/%s/resize/' % booking.pk, params={'count': 42}, status=404)
2507 2507

  
2508 2508

  
2509
def test_anonymize_booking(app, some_data, user):
2510
    agenda_id = Agenda.objects.filter(label=u'Foo bar')[0].pk
2511
    event = Event.objects.filter(agenda_id=agenda_id).exclude(start_datetime__lt=now())[0]
2512
    booking = Booking.objects.create(event=event, label='test')
2513
    app.authorization = ('Basic', ('john.doe', 'password'))
2514

  
2515
    resp = app.post('/api/booking/%s/anonymize/' % booking.pk)
2516
    assert resp.json['err'] == 0
2517
    booking.refresh_from_db()
2518
    assert booking.label == ''
2519
    assert booking.anonymization_datetime
2520

  
2521

  
2509 2522
def test_multiple_booking_api(app, some_data, user):
2510 2523
    agenda = Agenda.objects.filter(label=u'Foo bar')[0]
2511 2524
    event = [x for x in Event.objects.filter(agenda=agenda) if x.in_bookable_period()][0]
2512
-