0001-misc-share-query-management-template-code-20535.patch
passerelle/apps/arcgis/migrations/0006_auto_20200401_1025.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
# Generated by Django 1.11.18 on 2020-04-01 08:25 |
|
3 |
from __future__ import unicode_literals |
|
4 | ||
5 |
from django.db import migrations, models |
|
6 |
import django.db.models.deletion |
|
7 | ||
8 | ||
9 |
class Migration(migrations.Migration): |
|
10 | ||
11 |
dependencies = [ |
|
12 |
('arcgis', '0005_auto_20200310_1517'), |
|
13 |
] |
|
14 | ||
15 |
operations = [ |
|
16 |
migrations.AlterField( |
|
17 |
model_name='arcgis', |
|
18 |
name='client_certificate', |
|
19 |
field=models.FileField(blank=True, null=True, upload_to='', verbose_name='TLS client certificate'), |
|
20 |
), |
|
21 |
migrations.AlterField( |
|
22 |
model_name='arcgis', |
|
23 |
name='trusted_certificate_authorities', |
|
24 |
field=models.FileField(blank=True, null=True, upload_to='', verbose_name='TLS trusted CAs'), |
|
25 |
), |
|
26 |
migrations.AlterField( |
|
27 |
model_name='query', |
|
28 |
name='resource', |
|
29 |
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='queries', to='arcgis.ArcGIS', verbose_name='Resource'), |
|
30 |
), |
|
31 |
] |
passerelle/apps/arcgis/models.py | ||
---|---|---|
244 | 244 | |
245 | 245 |
def export_json(self): |
246 | 246 |
d = super(ArcGIS, self).export_json() |
247 |
d['queries'] = [query.export_json() for query in self.query_set.all()]
|
|
247 |
d['queries'] = [query.export_json() for query in self.queries.all()]
|
|
248 | 248 |
return d |
249 | 249 | |
250 | 250 |
@classmethod |
... | ... | |
290 | 290 |
class Query(models.Model): |
291 | 291 |
resource = models.ForeignKey( |
292 | 292 |
to=ArcGIS, |
293 |
related_name='queries', |
|
293 | 294 |
verbose_name=_('Resource')) |
294 | 295 | |
295 | 296 |
name = models.CharField( |
passerelle/apps/arcgis/templates/arcgis/arcgis_detail.html | ||
---|---|---|
14 | 14 |
</ul> |
15 | 15 |
{% endif %} |
16 | 16 |
{% endblock %} |
17 | ||
18 |
{% block extra-sections %} |
|
19 |
{% if object|can_edit:request.user %} |
|
20 |
<div id="queries" class="section"> |
|
21 |
<h3>{% trans 'Queries' %}</h3> |
|
22 |
<div> |
|
23 |
{% if object.query_set.exists %} |
|
24 |
<ul class="objects-list single-links"> |
|
25 |
{% for query in object.query_set.all %} |
|
26 |
<li> |
|
27 |
<a href="{{ query.edit_url }}">{{ query.name }}</a> |
|
28 |
<a rel="popup" class="delete" href="{{ query.delete_url }}">{% trans "delete query" %}</a> |
|
29 |
</li> |
|
30 |
{% endfor %} |
|
31 |
</ul> |
|
32 |
{% else %} |
|
33 |
<p>{% trans 'No query are defined.' %}</p> |
|
34 |
{% endif %} |
|
35 |
<p> |
|
36 |
<a class="icon-plus button" href="{{ object.create_query_url }}">{% trans 'New Query' %}</a> |
|
37 |
</p> |
|
38 |
</div> |
|
39 |
</div> |
|
40 |
{% endif %} |
|
41 |
{% endblock %} |
passerelle/apps/csvdatasource/migrations/0016_auto_20200406_1702.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
# Generated by Django 1.11.18 on 2020-04-06 15:02 |
|
3 |
from __future__ import unicode_literals |
|
4 | ||
5 |
from django.db import migrations, models |
|
6 |
import django.db.models.deletion |
|
7 | ||
8 | ||
9 |
class Migration(migrations.Migration): |
|
10 | ||
11 |
dependencies = [ |
|
12 |
('csvdatasource', '0015_query_slug_unicity'), |
|
13 |
] |
|
14 | ||
15 |
operations = [ |
|
16 |
migrations.AlterField( |
|
17 |
model_name='csvdatasource', |
|
18 |
name='columns_keynames', |
|
19 |
field=models.CharField(blank=True, default='id, text', help_text='ex: id,text,data1,data2', max_length=256, verbose_name='Column keynames'), |
|
20 |
), |
|
21 |
migrations.AlterField( |
|
22 |
model_name='csvdatasource', |
|
23 |
name='csv_file', |
|
24 |
field=models.FileField(help_text='Supported file formats: csv, ods, xls, xlsx', upload_to='csv', verbose_name='Spreadsheet file'), |
|
25 |
), |
|
26 |
migrations.AlterField( |
|
27 |
model_name='query', |
|
28 |
name='resource', |
|
29 |
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='queries', to='csvdatasource.CsvDataSource'), |
|
30 |
), |
|
31 |
migrations.AlterField( |
|
32 |
model_name='query', |
|
33 |
name='structure', |
|
34 |
field=models.CharField(choices=[('array', 'Array'), ('dict', 'Dictionary'), ('keyed-distinct', 'Keyed Dictionary'), ('tuples', 'Tuples'), ('onerow', 'Single Row'), ('one', 'Single Value')], default='dict', help_text='Data structure used for the response', max_length=20, verbose_name='Structure'), |
|
35 |
), |
|
36 |
] |
passerelle/apps/csvdatasource/models.py | ||
---|---|---|
33 | 33 |
from django.conf import settings |
34 | 34 |
from django.db import models, transaction |
35 | 35 |
from django.core.exceptions import ValidationError |
36 |
from django.urls import reverse |
|
36 | 37 |
from django.utils.translation import ugettext_lazy as _ |
37 | 38 | |
38 | 39 |
from passerelle.base.models import BaseResource |
... | ... | |
61 | 62 | |
62 | 63 | |
63 | 64 |
class Query(models.Model): |
64 |
resource = models.ForeignKey('CsvDataSource', on_delete=models.CASCADE) |
|
65 |
resource = models.ForeignKey('CsvDataSource', on_delete=models.CASCADE, related_name='queries')
|
|
65 | 66 |
slug = models.SlugField(_('Name (slug)')) |
66 | 67 |
label = models.CharField(_('Label'), max_length=100) |
67 | 68 |
description = models.TextField(_('Description'), blank=True) |
... | ... | |
119 | 120 |
def import_json(cls, d): |
120 | 121 |
return cls(**d) |
121 | 122 | |
123 |
@property |
|
124 |
def name(self): |
|
125 |
return self.slug |
|
126 | ||
127 |
def delete_url(self): |
|
128 |
return reverse('csv-delete-query', |
|
129 |
kwargs={'connector_slug': self.resource.slug, 'pk': self.pk}) |
|
130 | ||
131 |
def edit_url(self): |
|
132 |
return reverse('csv-edit-query', |
|
133 |
kwargs={'connector_slug': self.resource.slug, 'pk': self.pk}) |
|
134 | ||
122 | 135 | |
123 | 136 |
class CsvDataSource(BaseResource): |
124 | 137 |
csv_file = models.FileField( |
... | ... | |
470 | 483 |
Query.objects.bulk_create(new) |
471 | 484 |
return instance |
472 | 485 | |
486 |
def create_query_url(self): |
|
487 |
return reverse('csv-new-query', kwargs={'connector_slug': self.slug}) |
|
488 | ||
473 | 489 | |
474 | 490 |
class TableRow(models.Model): |
475 | 491 |
resource = models.ForeignKey('CsvDataSource', on_delete=models.CASCADE) |
passerelle/apps/csvdatasource/templates/csvdatasource/csvdatasource_detail.html | ||
---|---|---|
23 | 23 |
<span class="description">{% trans "Returning lines containing 'abc' in 'text' column (case insensitive):" %}</span> |
24 | 24 |
<a class="example-url" href="{{ csvdatasource_data_url }}?q=abc">{{ csvdatasource_data_url }}?q=abc</a> |
25 | 25 |
</li> |
26 |
{% for query in object.query_set.all %}
|
|
26 |
{% for query in object.queries.all %}
|
|
27 | 27 |
<li class="get-method"><span class="description">{{ query.label }}:</span> |
28 | 28 |
<a class="example-url" href="{% url 'generic-endpoint' connector='csvdatasource' slug=object.slug endpoint='query' rest=query.slug %}/">{% url 'generic-endpoint' connector='csvdatasource' slug=object.slug endpoint='query' rest=query.slug %}/</a> |
29 | 29 |
{% if query.description %}— {{ query.description }}{% endif %} |
... | ... | |
31 | 31 |
{% endfor %} |
32 | 32 |
</ul> |
33 | 33 |
{% endblock %} |
34 | ||
35 |
{% block extra-sections %} |
|
36 | ||
37 |
{% if object|can_edit:request.user %} |
|
38 |
<div id="queries" class="section"> |
|
39 |
<h3>{% trans 'Queries' %}</h3> |
|
40 |
<div> |
|
41 |
{% if object.query_set.count %} |
|
42 |
<ul class="objects-list single-links"> |
|
43 |
{% for query in object.query_set.all %} |
|
44 |
<li><a href="{% url 'csv-edit-query' connector_slug=object.slug pk=query.id %}">{{ query.slug }}</a> |
|
45 |
<a rel="popup" class="delete" href="{% url 'csv-delete-query' connector_slug=object.slug pk=query.id %}">{% trans "delete query" %}</a> |
|
46 |
</li> |
|
47 |
{% endfor %} |
|
48 |
</ul> |
|
49 |
{% else %} |
|
50 |
<p>{% trans 'No query are defined.' %}</p> |
|
51 |
{% endif %} |
|
52 |
<p> |
|
53 |
<a class="icon-plus button" href="{% url 'csv-new-query' connector_slug=object.slug %}">{% trans 'New Query' %}</a> |
|
54 |
</p> |
|
55 |
</div> |
|
56 |
</div> |
|
57 |
{% endif %} |
|
58 |
{% endblock %} |
passerelle/templates/passerelle/manage/service_view.html | ||
---|---|---|
73 | 73 |
</div> |
74 | 74 |
</div> |
75 | 75 | |
76 |
{% block custom-queries %} |
|
77 |
{% if object|can_edit:request.user and object.queries is not None %} |
|
78 |
<div id="queries" class="section"> |
|
79 |
<h3>{% trans 'Queries' %}</h3> |
|
80 |
<div> |
|
81 |
{% if object.queries.exists %} |
|
82 |
<ul class="objects-list single-links"> |
|
83 |
{% for query in object.queries.all %} |
|
84 |
<li> |
|
85 |
<a href="{{ query.edit_url }}">{{ query.name }}</a> |
|
86 |
<a rel="popup" class="delete" href="{{ query.delete_url }}">{% trans "delete query" %}</a> |
|
87 |
</li> |
|
88 |
{% endfor %} |
|
89 |
</ul> |
|
90 |
{% else %} |
|
91 |
<p>{% trans 'No query are defined.' %}</p> |
|
92 |
{% endif %} |
|
93 |
<p> |
|
94 |
<a class="icon-plus button" href="{{ object.create_query_url }}">{% trans 'New Query' %}</a> |
|
95 |
</p> |
|
96 |
</div> |
|
97 |
</div> |
|
98 |
{% endif %} |
|
99 |
{% endblock %} |
|
100 | ||
76 | 101 |
{% block extra-sections %} |
77 | 102 |
{% endblock %} |
78 | 103 | |
79 |
- |