Projet

Général

Profil

0001-agendas-allow-custom-event-api-text-53661.patch

Valentin Deniaud, 06 mai 2021 15:28

Télécharger (5,18 ko)

Voir les différences:

Subject: [PATCH] agendas: allow custom event api text (#53661)

 .../0083_agenda_event_display_template.py     | 24 +++++++++++++++++++
 chrono/agendas/models.py                      |  7 ++++++
 chrono/api/views.py                           |  5 +++-
 chrono/manager/forms.py                       |  2 ++
 tests/test_api.py                             |  8 ++++++-
 5 files changed, 44 insertions(+), 2 deletions(-)
 create mode 100644 chrono/agendas/migrations/0083_agenda_event_display_template.py
chrono/agendas/migrations/0083_agenda_event_display_template.py
1
# Generated by Django 2.2.19 on 2021-05-06 13:27
2

  
3
from django.db import migrations, models
4

  
5

  
6
class Migration(migrations.Migration):
7

  
8
    dependencies = [
9
        ('agendas', '0082_text_to_jsonb'),
10
    ]
11

  
12
    operations = [
13
        migrations.AddField(
14
            model_name='agenda',
15
            name='event_display_template',
16
            field=models.CharField(
17
                default='',
18
                help_text='Change event text displayed to users. For example, "{{ event.label }} - {{ event.start_datetime }}" will show event datetime after label.',
19
                max_length=256,
20
                verbose_name='Event display template',
21
            ),
22
            preserve_default=False,
23
        ),
24
    ]
chrono/agendas/models.py
204 204
        _('Booking form URL'), max_length=200, blank=True, validators=[django_template_validator]
205 205
    )
206 206
    desk_simple_management = models.BooleanField(default=False)
207
    event_display_template = models.CharField(
208
        _('Event display template'),
209
        max_length=256,
210
        help_text=_(
211
            'Change event text displayed to users. For example, "{{ event.label }} - {{ event.start_datetime }}" will show event datetime after label.'
212
        ),
213
    )
207 214

  
208 215
    class Meta:
209 216
        ordering = ['label']
chrono/api/views.py
23 23
from django.db.models import Prefetch, Q
24 24
from django.http import Http404, HttpResponse
25 25
from django.shortcuts import get_object_or_404
26
from django.template import Context, Template
26 27
from django.urls import reverse
27 28
from django.utils.dateparse import parse_date, parse_datetime
28 29
from django.utils.encoding import force_text
......
400 401
def get_event_detail(request, event, agenda=None, min_places=1):
401 402
    agenda = agenda or event.agenda
402 403
    event_text = force_text(event)
403
    if event.label and event.primary_event is not None:
404
    if agenda.event_display_template:
405
        event_text = Template(agenda.event_display_template).render(Context({'event': event}))
406
    elif event.label and event.primary_event is not None:
404 407
        event_text = '%s (%s)' % (
405 408
            event.label,
406 409
            date_format(localtime(event.start_datetime), 'DATETIME_FORMAT'),
chrono/manager/forms.py
86 86
            'anonymize_delay',
87 87
            'default_view',
88 88
            'booking_form_url',
89
            'event_display_template',
89 90
        ]
90 91

  
91 92
    def __init__(self, *args, **kwargs):
92 93
        super(AgendaEditForm, self).__init__(*args, **kwargs)
93 94
        if kwargs['instance'].kind != 'events':
94 95
            del self.fields['booking_form_url']
96
            del self.fields['user_display_template']
95 97
            self.fields['default_view'].choices = [
96 98
                (k, v) for k, v in self.fields['default_view'].choices if k != 'open_events'
97 99
            ]
tests/test_api.py
514 514
        assert 'data' in resp.json
515 515

  
516 516

  
517
@pytest.mark.freeze_time('2021-05-06 14:00')
517 518
def test_datetime_api_label(app):
518 519
    agenda = Agenda.objects.create(label='Foo bar', kind='events', minimal_booking_delay=0)
519 520
    Event.objects.create(
......
524 525
        agenda=agenda,
525 526
    )
526 527
    resp = app.get('/api/agenda/%s/datetimes/' % agenda.slug)
527
    assert 'Hello world' in [x['text'] for x in resp.json['data']]
528
    assert 'Hello world' == resp.json['data'][0]['text']
529

  
530
    agenda.event_display_template = '{{ event.label }} - {{ event.start_datetime }}'
531
    agenda.save()
532
    resp = app.get('/api/agenda/%s/datetimes/' % agenda.slug)
533
    assert 'Hello world - May 7, 2021, 4 p.m.' == resp.json['data'][0]['text']
528 534

  
529 535

  
530 536
def test_datetime_api_urls(app):
531
-