0002-cvsdatasource-data-is-now-a-new-generation-endpoint-.patch
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 |
- |