cvsdatasource: data is now a new-generation endpoint (#32121)

This commit is contained in:
Lauréline Guérin 2019-10-03 16:09:42 +02:00
parent fdcada0be0
commit ac776b7e4e
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
5 changed files with 28 additions and 9 deletions

View File

@ -269,6 +269,20 @@ class CsvDataSource(BaseResource):
def titles(self):
return [smart_text(t.strip()) for t in self.columns_keynames.split(',')]
@endpoint(perm='can_access', methods=['get'], name='data')
def data(self, request, **kwargs):
params = request.GET
filters = []
for column_title in [t.strip() for t in self.columns_keynames.split(',') if t]:
if column_title in params.keys():
query_value = request.GET.get(column_title, '')
if 'case-insensitive' in params:
filters.append("%s.lower() == %r" % (column_title, query_value.lower()))
else:
filters.append("%s == %r" % (column_title, query_value))
query = Query(filters='\n'.join(filters))
return self.execute_query(request, query, **params.dict())
@endpoint(perm='can_access', methods=['get'],
name='query', pattern=r'^(?P<query_name>[\w-]+)/$')
def select(self, request, query_name, **kwargs):

View File

@ -13,16 +13,17 @@
{% endblock %}
{% block endpoints %}
{% url 'generic-endpoint' connector='csvdatasource' slug=object.slug endpoint='data' as csvdatasource_data_url %}
<ul>
<li>{% trans "Returning all file lines: "%}
<a href="{% url "csvdatasource-data" slug=object.slug %}">{% url "csvdatasource-data" slug=object.slug %}</a>
<a href="{{ csvdatasource_data_url }}">{{ csvdatasource_data_url }}</a>
</li>
<ul>
<li>{% trans "Returning lines containing 'abc' in 'text' column: "%}
<a href="{% url "csvdatasource-data" slug=object.slug %}?q=abc">{% url "csvdatasource-data" slug=object.slug %}?q=abc</a>
<a href="{{ csvdatasource_data_url }}?q=abc">{{ csvdatasource_data_url }}?q=abc</a>
</li>
<li>{% trans "Same filter, but case insensitive:" %}
<a href="{% url "csvdatasource-data" slug=object.slug %}?case-insensitive&q=abc">{% url "csvdatasource-data" slug=object.slug %}?case-insensitive&q=abc</a>
<a href="{{ csvdatasource_data_url }}?case-insensitive&q=abc">{{ csvdatasource_data_url }}?case-insensitive&q=abc</a>
</li>
</ul>
{% for query in object.query_set.all %}

View File

@ -18,10 +18,6 @@ from django.conf.urls import include, url
from .views import *
urlpatterns = [
url(r'^(?P<slug>[\w,-]+)/data$', CsvDataView.as_view(), name='csvdatasource-data'),
]
management_urlpatterns = [
url(r'^(?P<connector_slug>[\w,-]+)/download/$',
CsvDownload.as_view(), name='csv-download'),

View File

@ -92,7 +92,11 @@ def setup():
apiuser=api,
resource_type=obj_type,
resource_pk=csv.pk)
url = reverse('csvdatasource-data', kwargs={'slug': csv.slug})
url = reverse('generic-endpoint', kwargs={
'connector': 'csvdatasource',
'slug': csv.slug,
'endpoint': 'data',
})
return csv, url
return maker

View File

@ -64,7 +64,11 @@ def setup():
obj_type = ContentType.objects.get_for_model(csv)
AccessRight.objects.create(codename='can_access', apiuser=api, resource_type=obj_type,
resource_pk=csv.pk)
url = reverse('csvdatasource-data', kwargs={'slug': csv.slug})
url = reverse('generic-endpoint', kwargs={
'connector': 'csvdatasource',
'slug': csv.slug,
'endpoint': 'data',
})
return csv, url
return maker