Projet

Général

Profil

0003-rename-parameters-to-extra-variables.patch

Frédéric Péters, 04 février 2022 08:43

Télécharger (13,6 ko)

Voir les différences:

Subject: [PATCH 3/3] rename "parameters" to "extra variables"

 ...e_parameters.py => 0053_page_variables.py} |  2 +-
 combo/data/models.py                          | 10 ++++-----
 combo/manager/forms.py                        |  6 ++---
 ...ameters.html => page_extra_variables.html} |  2 +-
 combo/manager/templates/combo/page_view.html  |  9 +++++---
 combo/manager/urls.py                         |  6 ++---
 combo/manager/views.py                        | 21 +++++++++---------
 combo/public/views.py                         |  2 +-
 tests/test_manager.py                         | 22 +++++++++----------
 tests/test_public.py                          |  6 ++---
 10 files changed, 44 insertions(+), 42 deletions(-)
 rename combo/data/migrations/{0053_page_parameters.py => 0053_page_variables.py} (91%)
 rename combo/manager/templates/combo/{page_parameters.html => page_extra_variables.html} (97%)
combo/data/migrations/0053_page_parameters.py → combo/data/migrations/0053_page_variables.py
11 11
    operations = [
12 12
        migrations.AddField(
13 13
            model_name='page',
14
            name='parameters',
14
            name='extra_variables',
15 15
            field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, default=dict),
16 16
        ),
17 17
    ]
combo/data/models.py
194 194
    order = models.PositiveIntegerField()
195 195
    exclude_from_navigation = models.BooleanField(_('Exclude from navigation'), default=True)
196 196
    redirect_url = models.CharField(_('Redirect URL'), max_length=200, blank=True)
197
    parameters = JSONField(blank=True, default=dict)
197
    extra_variables = JSONField(blank=True, default=dict)
198 198

  
199 199
    public = models.BooleanField(_('Public'), default=True)
200 200
    groups = models.ManyToManyField(Group, verbose_name=_('Groups'), blank=True)
......
642 642
    def get_last_update_time(self):
643 643
        return self.last_update_timestamp
644 644

  
645
    def get_parameters(self, request, original_context):
645
    def get_extra_variables(self, request, original_context):
646 646
        result = {}
647 647
        context = RequestContext(request)
648 648
        context.push(original_context)
649
        for key, tplt in (self.parameters or {}).items():
649
        for key, tplt in (self.extra_variables or {}).items():
650 650
            try:
651 651
                template = Template(tplt)
652 652
            except TemplateSyntaxError:
......
654 654
            result[key] = template.render(context)
655 655
        return result
656 656

  
657
    def get_parameters_keys(self):
658
        return sorted((self.parameters or {}).keys())
657
    def get_extra_variables_keys(self):
658
        return sorted((self.extra_variables or {}).keys())
659 659

  
660 660
    def is_new(self):
661 661
        return self.creation_timestamp > timezone.now() - datetime.timedelta(days=7)
combo/manager/forms.py
169 169
        field_classes = {'picture': ImageIncludingSvgField}
170 170

  
171 171

  
172
class PageEditParameterForm(forms.Form):
173
    key = forms.CharField(label=_('Property name'), required=False)
172
class PageEditExtraVariableForm(forms.Form):
173
    key = forms.CharField(label=_('Variable name'), required=False)
174 174
    value = forms.CharField(
175 175
        label=_('Value template'), widget=forms.TextInput(attrs={'size': 60}), required=False
176 176
    )
177 177

  
178 178

  
179
PageEditParameterFormSet = formset_factory(PageEditParameterForm)
179
PageEditExtraVariablesFormSet = formset_factory(PageEditExtraVariableForm)
180 180

  
181 181

  
182 182
class PageVisibilityForm(forms.ModelForm):
combo/manager/templates/combo/page_parameters.html → combo/manager/templates/combo/page_extra_variables.html
26 26
      {% endfor %}
27 27
      </tbody>
28 28
  </table>
29
  <button id="add-page-property-form" type="button">{% trans "Add another property" %}</button>
29
  <button id="add-page-property-form" type="button">{% trans "Add another" %}</button>
30 30
  <div class="buttons">
31 31
    <button class="submit-button">{% trans "Save" %}</button>
32 32
    <a class="cancel" href="{% url 'combo-manager-page-view' pk=object.pk %}">{% trans 'Cancel' %}</a>
combo/manager/templates/combo/page_view.html
14 14
{% if request.user.is_superuser %}
15 15
  <li><a class="action-add-child" rel="popup" href="{% url 'combo-manager-page-add-child' pk=object.id %}">{% trans 'Add a child page' %}</a></li>
16 16
  <li><a class="action-edit-roles" rel="popup" href="{% url 'combo-manager-page-edit-roles' pk=object.id %}">{% trans 'Manage edit roles' %}</a></li>
17
  <li><a class="action-edit-page-variables" rel="popup" href="{% url 'combo-manager-page-edit-extra-variables' pk=object.id %}">{% trans "Edit extra page variables" %}</a></li>
17 18
  <li><a rel="popup" class="action-duplicate" href="{% url 'combo-manager-page-duplicate' pk=object.id %}">{% trans 'Duplicate' %}</a></li>
18 19
  <li><a class="action-delete" rel="popup" href="{% url 'combo-manager-page-delete' pk=object.id %}">{% trans 'Delete' %}</a></li>
19 20
{% endif %}
......
90 91
(<a rel="popup" href="{% url 'combo-manager-page-edit-picture' pk=object.id %}">{% trans 'change' %}</a>)
91 92
</p>
92 93

  
94
{% if object.extra_variables %}
93 95
<p>
94
<label>{% trans 'Parameters:' %}</label>
95
{% for key in object.get_parameters_keys %}<i>{{ key }}</i>{% if not forloop.last %}, {% endif %}{% empty %}<i>{% trans 'none' context 'parameters' %}</i>{% endfor %}
96
(<a rel="popup" href="{% url 'combo-manager-page-edit-parameters' pk=object.id %}">{% trans 'change' %}</a>)
96
<label>{% trans 'Extra variables:' %}</label>
97
{% for key in object.get_extra_variables_keys %}<i>{{ key }}</i>{% if not forloop.last %}, {% endif %}{% endfor %}
98
(<a rel="popup" href="{% url 'combo-manager-page-edit-extra-variables' pk=object.id %}">{% trans 'change' %}</a>)
97 99
</p>
100
{% endif %}
98 101

  
99 102
</div>
100 103

  
combo/manager/urls.py
65 65
        name='combo-manager-page-remove-picture',
66 66
    ),
67 67
    url(
68
        r'^pages/(?P<pk>\d+)/parameters/$',
69
        views.page_edit_parameters,
70
        name='combo-manager-page-edit-parameters',
68
        r'^pages/(?P<pk>\d+)/extra-variables/$',
69
        views.page_edit_extra_variables,
70
        name='combo-manager-page-edit-extra-variables',
71 71
    ),
72 72
    url(r'^pages/(?P<pk>\d+)/delete$', staff_required(views.page_delete), name='combo-manager-page-delete'),
73 73
    url(r'^pages/(?P<pk>\d+)/export$', views.page_export, name='combo-manager-page-export'),
combo/manager/views.py
63 63
    PageAddForm,
64 64
    PageDuplicateForm,
65 65
    PageEditDescriptionForm,
66
    PageEditExtraVariablesFormSet,
66 67
    PageEditIncludeInNavigationForm,
67
    PageEditParameterFormSet,
68 68
    PageEditPictureForm,
69 69
    PageEditRedirectionForm,
70 70
    PageEditRolesForm,
......
367 367
page_remove_picture = PageRemovePictureView.as_view()
368 368

  
369 369

  
370
class PageEditParametersView(PageEditView):
371
    form_class = PageEditParameterFormSet
372
    comment = _('changed parameters')
373
    template_name = 'combo/page_parameters.html'
374
    page_title = _('Page properties')
370
class PageEditExtraVariablesView(PageEditView):
371
    form_class = PageEditExtraVariablesFormSet
372
    comment = _('changed extra variables')
373
    template_name = 'combo/page_extra_variables.html'
374
    page_title = _('Extra page variables')
375 375

  
376 376
    def get_initial(self):
377 377
        return sorted(
378
            ({'key': k, 'value': v} for k, v in self.get_object().parameters.items()), key=itemgetter('key')
378
            ({'key': k, 'value': v} for k, v in self.get_object().extra_variables.items()),
379
            key=itemgetter('key'),
379 380
        )
380 381

  
381 382
    def get_form_kwargs(self):
......
385 386

  
386 387
    def form_valid(self, form):
387 388
        self.object = self.get_object()
388
        self.object.parameters = {}
389
        self.object.extra_variables = {}
389 390
        for sub_data in form.cleaned_data:
390 391
            if not sub_data.get('key'):
391 392
                continue
392
            self.object.parameters[sub_data['key']] = sub_data['value']
393
            self.object.extra_variables[sub_data['key']] = sub_data['value']
393 394
        self.object.save()
394 395
        PageSnapshot.take(self.object, request=self.request, comment=self.comment)
395 396
        return HttpResponseRedirect(self.get_success_url())
396 397

  
397 398

  
398
page_edit_parameters = PageEditParametersView.as_view()
399
page_edit_extra_variables = PageEditExtraVariablesView.as_view()
399 400

  
400 401

  
401 402
class PageView(ManagedPageMixin, DetailView):
combo/public/views.py
104 104
        ctx['selected_user'] = get_user_from_name_id(ctx['name_id'])
105 105
    if 'page' in ctx:
106 106
        page = ctx['page']
107
        ctx.update(page.get_parameters(request, ctx))
107
        ctx.update(page.get_extra_variables(request, ctx))
108 108

  
109 109

  
110 110
@csrf_exempt
tests/test_manager.py
571 571
    assert Page.objects.get(id=page.id).picture.url in resp.text
572 572

  
573 573

  
574
def test_page_edit_parameters(app, admin_user):
574
def test_page_edit_extra_variables(app, admin_user):
575 575
    app = login(app)
576 576
    page = Page.objects.create(title='One', slug='one', template_name='standard')
577
    assert page.parameters == {}
577
    assert page.extra_variables == {}
578 578
    resp = app.get('/manage/pages/%s/' % page.id)
579
    assert resp.text.count('<i>none</i>') == 4
580
    resp = resp.click(href='.*/parameters/')
579
    assert '<label>Extra variables:</label>' not in resp.text
580
    resp = resp.click(href='.*/extra-variables/')
581 581
    resp.form['form-0-key'] = 'foo'
582 582
    resp.form['form-0-value'] = 'bar'
583 583
    resp = resp.form.submit().follow()
584 584
    page.refresh_from_db()
585
    assert page.parameters == {'foo': 'bar'}
586
    assert resp.text.count('<i>none</i>') == 3
585
    assert page.extra_variables == {'foo': 'bar'}
586
    assert '<label>Extra variables:</label>' in resp.text
587 587
    assert '<i>foo</i>' in resp
588 588

  
589
    resp = resp.click(href='.*/parameters/')
589
    resp = resp.click(href='.*/extra-variables/', index=0)
590 590
    assert resp.form['form-TOTAL_FORMS'].value == '2'
591 591
    assert resp.form['form-0-key'].value == 'foo'
592 592
    assert resp.form['form-0-value'].value == 'bar'
......
597 597
    resp.form['form-1-value'] = 'baz'
598 598
    resp = resp.form.submit().follow()
599 599
    page.refresh_from_db()
600
    assert page.parameters == {
600
    assert page.extra_variables == {
601 601
        'foo': 'bar-bis',
602 602
        'blah': 'baz',
603 603
    }
604
    assert resp.text.count('<i>none</i>') == 3
605 604
    assert '<i>blah</i>, <i>foo</i>' in resp
606 605

  
607
    resp = resp.click(href='.*/parameters/')
606
    resp = resp.click(href='.*/extra-variables/', index=0)
608 607
    assert resp.form['form-TOTAL_FORMS'].value == '3'
609 608
    assert resp.form['form-0-key'].value == 'blah'
610 609
    assert resp.form['form-0-value'].value == 'baz'
......
617 616
    resp.form['form-0-key'] = ''
618 617
    resp = resp.form.submit().follow()
619 618
    page.refresh_from_db()
620
    assert page.parameters == {
619
    assert page.extra_variables == {
621 620
        'foo': 'bar',
622 621
    }
623
    assert resp.text.count('<i>none</i>') == 3
624 622
    assert '<i>foo</i>' in resp
625 623

  
626 624

  
tests/test_public.py
1093 1093
        assert resp.context['card_foo_bar_id'] == '42'
1094 1094

  
1095 1095

  
1096
def test_page_parameters(app):
1096
def test_page_extra_variables(app):
1097 1097
    page = Page.objects.create(
1098 1098
        title='Home',
1099 1099
        slug='page',
1100 1100
        template_name='standard',
1101
        parameters={'foo': 'bar', 'bar_id': '{{ 40|add:2 }}'},
1101
        extra_variables={'foo': 'bar', 'bar_id': '{{ 40|add:2 }}'},
1102 1102
    )
1103 1103
    cell = JsonCell.objects.create(
1104 1104
        page=page,
......
1123 1123
        )
1124 1124
    assert resp.text.strip() == 'XXbarYY42ZZ'
1125 1125

  
1126
    # check sub_slug/parameters override
1126
    # check sub_slug/extra_variables override
1127 1127
    page.sub_slug = '(?P<fooo>[a-z]+)'
1128 1128
    page.save()
1129 1129
    cell.template_string = 'XX{{ foo }}YY{{ bar_id }}ZZ{{ fooo }}AA'
1130
-