Projet

Général

Profil

0002-cvsdatasource-data-is-now-a-new-generation-endpoint-.patch

Lauréline Guérin, 03 octobre 2019 16:10

Télécharger (5,17 ko)

Voir les différences:

Subject: [PATCH 2/2] cvsdatasource: data is now a new-generation endpoint
 (#32121)

 passerelle/apps/csvdatasource/models.py            | 14 ++++++++++++++
 .../csvdatasource/csvdatasource_detail.html        |  7 ++++---
 passerelle/apps/csvdatasource/urls.py              |  4 ----
 tests/test_csv_datasource.py                       |  6 +++++-
 tests/test_import_export.py                        |  6 +++++-
 5 files changed, 28 insertions(+), 9 deletions(-)
passerelle/apps/csvdatasource/models.py
269 269
    def titles(self):
270 270
        return [smart_text(t.strip()) for t in self.columns_keynames.split(',')]
271 271

  
272
    @endpoint(perm='can_access', methods=['get'], name='data')
273
    def data(self, request, **kwargs):
274
        params = request.GET
275
        filters = []
276
        for column_title in [t.strip() for t in self.columns_keynames.split(',') if t]:
277
            if column_title in params.keys():
278
                query_value = request.GET.get(column_title, '')
279
                if 'case-insensitive' in params:
280
                    filters.append("%s.lower() == %r" % (column_title, query_value.lower()))
281
                else:
282
                    filters.append("%s == %r" % (column_title, query_value))
283
        query = Query(filters='\n'.join(filters))
284
        return self.execute_query(request, query, **params.dict())
285

  
272 286
    @endpoint(perm='can_access', methods=['get'],
273 287
              name='query', pattern=r'^(?P<query_name>[\w-]+)/$')
274 288
    def select(self, request, query_name, **kwargs):
passerelle/apps/csvdatasource/templates/csvdatasource/csvdatasource_detail.html
13 13
{% endblock %}
14 14

  
15 15
{% block endpoints %}
16
{% url 'generic-endpoint' connector='csvdatasource' slug=object.slug endpoint='data' as csvdatasource_data_url %}
16 17
<ul>
17 18
  <li>{% trans "Returning all file lines: "%}
18
    <a href="{% url "csvdatasource-data" slug=object.slug %}">{%  url "csvdatasource-data" slug=object.slug %}</a>
19
    <a href="{{ csvdatasource_data_url }}">{{ csvdatasource_data_url }}</a>
19 20
  </li>
20 21
  <ul>
21 22
  <li>{% trans "Returning lines containing 'abc' in 'text' column: "%}
22
    <a href="{% url "csvdatasource-data" slug=object.slug %}?q=abc">{%  url "csvdatasource-data" slug=object.slug %}?q=abc</a>
23
    <a href="{{ csvdatasource_data_url }}?q=abc">{{ csvdatasource_data_url }}?q=abc</a>
23 24
  </li>
24 25
  <li>{% trans "Same filter, but case insensitive:" %}
25
    <a href="{% url "csvdatasource-data" slug=object.slug %}?case-insensitive&q=abc">{%  url "csvdatasource-data" slug=object.slug %}?case-insensitive&q=abc</a>
26
    <a href="{{ csvdatasource_data_url }}?case-insensitive&q=abc">{{ csvdatasource_data_url }}?case-insensitive&q=abc</a>
26 27
  </li>
27 28
  </ul>
28 29
  {% for query in object.query_set.all %}
passerelle/apps/csvdatasource/urls.py
18 18

  
19 19
from .views import *
20 20

  
21
urlpatterns = [
22
    url(r'^(?P<slug>[\w,-]+)/data$', CsvDataView.as_view(), name='csvdatasource-data'),
23
]
24

  
25 21
management_urlpatterns = [
26 22
    url(r'^(?P<connector_slug>[\w,-]+)/download/$',
27 23
        CsvDownload.as_view(), name='csv-download'),
tests/test_csv_datasource.py
92 92
            apiuser=api,
93 93
            resource_type=obj_type,
94 94
            resource_pk=csv.pk)
95
        url = reverse('csvdatasource-data', kwargs={'slug': csv.slug})
95
        url = reverse('generic-endpoint', kwargs={
96
            'connector': 'csvdatasource',
97
            'slug': csv.slug,
98
            'endpoint': 'data',
99
        })
96 100
        return csv, url
97 101

  
98 102
    return maker
tests/test_import_export.py
64 64
        obj_type = ContentType.objects.get_for_model(csv)
65 65
        AccessRight.objects.create(codename='can_access', apiuser=api, resource_type=obj_type,
66 66
                                   resource_pk=csv.pk)
67
        url = reverse('csvdatasource-data', kwargs={'slug': csv.slug})
67
        url = reverse('generic-endpoint', kwargs={
68
            'connector': 'csvdatasource',
69
            'slug': csv.slug,
70
            'endpoint': 'data',
71
        })
68 72
        return csv, url
69 73

  
70 74
    return maker
71
-