0001-api-add-anonymize-booking-endpoint-49093.patch
chrono/agendas/management/commands/anonymize_bookings.py | ||
---|---|---|
32 | 32 |
event__start_datetime__lt=timezone.now() |
33 | 33 |
- timedelta(days=1) * F('event__agenda__anonymize_delay'), |
34 | 34 |
) |
35 | ||
36 |
bookings_to_anonymize.update( |
|
37 |
label='', |
|
38 |
user_display_label='', |
|
39 |
user_external_id='', |
|
40 |
user_name='', |
|
41 |
extra_data={}, |
|
42 |
anonymization_datetime=timezone.now(), |
|
43 |
) |
|
35 |
Booking.anonymize_bookings(bookings_to_anonymize) |
chrono/agendas/models.py | ||
---|---|---|
1136 | 1136 |
self.secondary_booking_set.update(in_waiting_list=True) |
1137 | 1137 |
self.save() |
1138 | 1138 | |
1139 |
@classmethod |
|
1140 |
def anonymize_bookings(cls, bookings_queryset): |
|
1141 |
bookings_queryset.update( |
|
1142 |
label='', |
|
1143 |
user_display_label='', |
|
1144 |
user_external_id='', |
|
1145 |
user_name='', |
|
1146 |
extra_data={}, |
|
1147 |
anonymization_datetime=now(), |
|
1148 |
) |
|
1149 | ||
1139 | 1150 |
def get_ics(self, request=None): |
1140 | 1151 |
ics = vobject.iCalendar() |
1141 | 1152 |
ics.add('prodid').value = '-//Entr\'ouvert//NON SGML Publik' |
chrono/api/urls.py | ||
---|---|---|
58 | 58 |
url(r'^booking/(?P<booking_pk>\w+)/$', views.booking, name='api-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 | ||
---|---|---|
1409 | 1409 |
suspend_booking = SuspendBooking.as_view() |
1410 | 1410 | |
1411 | 1411 | |
1412 |
class AnonymizeBooking(APIView): |
|
1413 |
permission_classes = (permissions.IsAuthenticated,) |
|
1414 | ||
1415 |
def post(self, request, booking_pk=None, format=None): |
|
1416 |
booking = get_object_or_404(Booking, pk=booking_pk) |
|
1417 |
bookings = Booking.objects.filter(Q(pk=booking.pk) | Q(primary_booking=booking.pk)) |
|
1418 |
Booking.anonymize_bookings(bookings) |
|
1419 |
response = {'err': 0, 'booking_id': booking.pk} |
|
1420 |
return Response(response) |
|
1421 | ||
1422 | ||
1423 |
anonymize_booking = AnonymizeBooking.as_view() |
|
1424 | ||
1425 | ||
1412 | 1426 |
class ResizeSerializer(serializers.Serializer): |
1413 | 1427 |
count = serializers.IntegerField(min_value=1) |
1414 | 1428 |
tests/test_api.py | ||
---|---|---|
2806 | 2806 |
app.post('/api/booking/%s/resize/' % booking.pk, params={'count': 42}, status=404) |
2807 | 2807 | |
2808 | 2808 | |
2809 |
def test_anonymize_booking(app, user): |
|
2810 |
agenda = Agenda.objects.create(label='Foo bar') |
|
2811 |
event = Event.objects.create(start_datetime=now(), places=5, agenda=agenda) |
|
2812 |
Booking.objects.create(event=event, label='not to anonymize') |
|
2813 |
booking = Booking.objects.create(event=event, label='test') |
|
2814 |
secondary_booking = Booking.objects.create(event=event, label='test secondary', primary_booking=booking) |
|
2815 |
app.authorization = ('Basic', ('john.doe', 'password')) |
|
2816 | ||
2817 |
resp = app.post('/api/booking/%s/anonymize/' % booking.pk) |
|
2818 |
assert resp.json['err'] == 0 |
|
2819 |
assert Booking.objects.filter(anonymization_datetime__isnull=False).count() == 2 |
|
2820 |
assert Booking.objects.filter(label='').count() == 2 |
|
2821 | ||
2822 | ||
2809 | 2823 |
def test_multiple_booking_api(app, some_data, user): |
2810 | 2824 |
agenda = Agenda.objects.filter(label=u'Foo bar')[0] |
2811 | 2825 |
event = [x for x in Event.objects.filter(agenda=agenda) if x.in_bookable_period()][0] |
2812 |
- |