Skip to content
This repository was archived by the owner on Nov 17, 2023. It is now read-only.

Commit 202aeaa

Browse files
author
daniaki
committed
private bit propagates up the tree, pagination fixes
1 parent 02f1855 commit 202aeaa

File tree

4 files changed

+180
-80
lines changed

4 files changed

+180
-80
lines changed

scoreset/forms.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,19 @@ class Meta:
5959
)
6060
)
6161

62+
def clean_replaces(self):
63+
scoreset = self.cleaned_data.get("replaces", None)
64+
experiment = self.cleaned_data.get("experiment", None)
65+
if scoreset is not None and experiment is not None:
66+
if scoreset not in experiment.scoreset_set.all():
67+
raise ValidationError(
68+
_(
69+
"Replaces field selection must be a member of the "
70+
"selected experiment."
71+
)
72+
)
73+
return scoreset
74+
6275
def __init__(self, *args, **kwargs):
6376
super(ScoreSetForm, self).__init__(*args, **kwargs)
6477

scoreset/models.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,3 +377,20 @@ def save(self, *args, **kwargs):
377377
@receiver(post_save, sender=ScoreSet)
378378
def create_permission_groups_for_scoreset(sender, instance, **kwargs):
379379
make_all_groups_for_instance(instance)
380+
381+
382+
@receiver(post_save, sender=ScoreSet)
383+
def propagate_private_bit(sender, instance, **kwargs):
384+
experiment = instance.experiment
385+
experiment_is_private = all(
386+
[s.private for s in experiment.scoreset_set.all()]
387+
)
388+
experiment.private = experiment_is_private
389+
experiment.save()
390+
391+
experimentset = experiment.experimentset
392+
experimentset_is_private = all(
393+
[e.private for e in experimentset.experiment_set.all()]
394+
)
395+
experimentset.private = experimentset_is_private
396+
experimentset.save()

scoreset/templates/scoreset/scoreset.html

Lines changed: 126 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,11 @@ <h3 style="margin: 0;">Scores dataset</h3>
145145
{% for var in scores_variants %}
146146
<tr>
147147
{% for data in var.get_ordered_scores_data %}
148-
<td> {{ data }} </td>
148+
{% if forloop.counter >= 2 %}
149+
<td> {{ data|floatformat:"-4" }} </td>
150+
{% else %}
151+
<td> {{ data }} </td>
152+
{% endif %}
149153
{% endfor %}
150154
</tr>
151155
{% endfor %}
@@ -155,43 +159,65 @@ <h3 style="margin: 0;">Scores dataset</h3>
155159

156160
<!-- Pagination -->
157161
{% if scores_variants.has_other_pages %}
158-
<ul class="pagination justify-content-end">
159-
{% if scores_variants.has_previous %}
160-
<li class="page-item">
161-
<a class="page-link"
162-
href="?scores_page={{ scores_variants.previous_page_number }}#scores">
163-
&laquo;
164-
</a>
165-
</li>
166-
{% else %}
167-
<li class="page-item disabled">
168-
<a class="page-link" href="#">
169-
<span aria-hidden="true">&laquo;</span>
170-
</a>
171-
</li>
172-
{% endif %}
162+
<div class="row">
163+
<div class="col-md-2 mt-2">
164+
<form action="?scores-per-page=#scores" method="GET">
165+
<div class="form-inline">
166+
<label for="per-page-select"> Variants per page </label>
167+
<select name="scores-per-page" id="per-page-select" onchange="this.form.submit()">
168+
{% for i in per_page_selections %}
169+
{% if i == scores_per_page %}
170+
<option value={{i}} selected="">{{i}}</option>
171+
{% else %}
172+
<option value={{i}}>{{i}}</option>
173+
{% endif %}
174+
{% endfor %}
175+
</select>
176+
</div>
177+
</form>
178+
</div>
173179

174-
{% for i in scores_page_range %}
175-
<li class="page-item">
176-
<a class="page-link" href="?scores_page={{ i }}#scores">{{ i }}</a>
177-
</li>
178-
{% endfor %}
179-
180-
{% if scores_variants.has_next %}
181-
<li class="page-item">
182-
<a class="page-link"
183-
href="?scores_page={{ scores_variants.next_page_number }}#scores">
184-
&raquo;
185-
</a>
186-
</li>
187-
{% else %}
188-
<li class="page-item disabled">
189-
<a class="page-link" href="#">
190-
<span aria-hidden="true">&raquo;</span>
191-
</a>
192-
</li>
193-
{% endif %}
194-
</ul>
180+
<div class="col-md-10">
181+
<ul class="pagination justify-content-end">
182+
{% if scores_variants.has_previous %}
183+
<li class="page-item">
184+
<a class="page-link"
185+
href="?scores_page={{ scores_variants.previous_page_number }}#scores">
186+
&laquo;
187+
</a>
188+
</li>
189+
{% else %}
190+
<li class="page-item disabled">
191+
<a class="page-link" href="#">
192+
<span aria-hidden="true">&laquo;</span>
193+
</a>
194+
</li>
195+
{% endif %}
196+
197+
{% for i in scores_page_range %}
198+
<li class="page-item">
199+
<a class="page-link" href="?scores_page={{ i }}#scores">{{ i }}</a>
200+
</li>
201+
{% endfor %}
202+
203+
{% if scores_variants.has_next %}
204+
<li class="page-item">
205+
<a class="page-link"
206+
href="?scores_page={{ scores_variants.next_page_number }}#scores">
207+
&raquo;
208+
</a>
209+
</li>
210+
{% else %}
211+
<li class="page-item disabled">
212+
<a class="page-link" href="#">
213+
<span aria-hidden="true">&raquo;</span>
214+
</a>
215+
</li>
216+
{% endif %}
217+
</ul>
218+
</div>
219+
</div>
220+
195221
{% endif %} <!-- End pagination -->
196222
{% endif %}
197223
</div>
@@ -235,7 +261,11 @@ <h3 style="margin: 0;">Counts dataset</h3>
235261
{% for var in counts_variants %}
236262
<tr>
237263
{% for data in var.get_ordered_counts_data %}
238-
<td> {{ data }} </td>
264+
{% if forloop.counter >= 2 %}
265+
<td> {{ data|floatformat:"-4" }} </td>
266+
{% else %}
267+
<td> {{ data }} </td>
268+
{% endif %}
239269
{% endfor %}
240270
</tr>
241271
{% endfor %}
@@ -245,43 +275,64 @@ <h3 style="margin: 0;">Counts dataset</h3>
245275

246276
<!-- Pagination -->
247277
{% if counts_variants.has_other_pages %}
248-
<ul class="pagination justify-content-end">
249-
{% if counts_variants.has_previous %}
250-
<li class="page-item">
251-
<a class="page-link"
252-
href="?counts_page={{ counts_variants.previous_page_number }}#counts">
253-
&laquo;
254-
</a>
255-
</li>
256-
{% else %}
257-
<li class="page-item disabled">
258-
<a class="page-link" href="#">
259-
<span aria-hidden="true">&laquo;</span>
260-
</a>
261-
</li>
262-
{% endif %}
263-
264-
{% for i in counts_page_range %}
265-
<li class="page-item">
266-
<a class="page-link" href="?counts_page={{ i }}#counts">{{ i }}</a>
267-
</li>
268-
{% endfor %}
269-
270-
{% if counts_variants.has_next %}
271-
<li class="page-item">
272-
<a class="page-link"
273-
href="?counts_page={{ counts_variants.next_page_number }}#counts">
274-
&raquo;
275-
</a>
276-
</li>
277-
{% else %}
278-
<li class="page-item disabled">
279-
<a class="page-link" href="#">
280-
<span aria-hidden="true">&raquo;</span>
281-
</a>
282-
</li>
283-
{% endif %}
284-
</ul>
278+
<div class="row">
279+
<div class="col-md-2 mt-2">
280+
<form action="?counts-per-page=#counts" method="GET">
281+
<div class="form-inline">
282+
<label for="per-page-select"> Variants per page </label>
283+
<select name="counts-per-page" id="per-page-select" onchange="this.form.submit()">
284+
{% for i in per_page_selections %}
285+
{% if i == counts_per_page %}
286+
<option value={{i}} selected="">{{i}}</option>
287+
{% else %}
288+
<option value={{i}}>{{i}}</option>
289+
{% endif %}
290+
{% endfor %}
291+
</select>
292+
</div>
293+
</form>
294+
</div>
295+
296+
<div class="col-md-10">
297+
<ul class="pagination justify-content-end">
298+
{% if counts_variants.has_previous %}
299+
<li class="page-item">
300+
<a class="page-link"
301+
href="?counts_page={{ counts_variants.previous_page_number }}#counts">
302+
&laquo;
303+
</a>
304+
</li>
305+
{% else %}
306+
<li class="page-item disabled">
307+
<a class="page-link" href="#">
308+
<span aria-hidden="true">&laquo;</span>
309+
</a>
310+
</li>
311+
{% endif %}
312+
313+
{% for i in counts_page_range %}
314+
<li class="page-item">
315+
<a class="page-link" href="?counts_page={{ i }}#counts">{{ i }}</a>
316+
</li>
317+
{% endfor %}
318+
319+
{% if counts_variants.has_next %}
320+
<li class="page-item">
321+
<a class="page-link"
322+
href="?counts_page={{ counts_variants.next_page_number }}#counts">
323+
&raquo;
324+
</a>
325+
</li>
326+
{% else %}
327+
<li class="page-item disabled">
328+
<a class="page-link" href="#">
329+
<span aria-hidden="true">&raquo;</span>
330+
</a>
331+
</li>
332+
{% endif %}
333+
</ul>
334+
</div>
335+
</div>
285336
{% endif %} <!-- End pagination -->
286337
{% endif %}
287338
</div>

scoreset/views.py

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,22 @@ def get_object(self):
7777
def get_context_data(self, **kwargs):
7878
context = super(ScoreSetDetailView, self).get_context_data(**kwargs)
7979
instance = self.get_object()
80-
variant_list = instance.variant_set.all()
81-
scores_paginator = Paginator(variant_list, per_page=2)
82-
counts_paginator = Paginator(variant_list, per_page=2)
80+
variant_list = instance.variant_set.all().order_by("hgvs")
81+
82+
try:
83+
counts_per_page = self.request.GET.get('counts-per-page', '')
84+
counts_per_page = int(counts_per_page)
85+
except:
86+
counts_per_page = 20
87+
88+
try:
89+
scores_per_page = self.request.GET.get('scores-per-page', '')
90+
scores_per_page = int(scores_per_page)
91+
except:
92+
scores_per_page = 20
93+
94+
scores_paginator = Paginator(variant_list, per_page=scores_per_page)
95+
counts_paginator = Paginator(variant_list, per_page=counts_per_page)
8396

8497
try:
8598
scores_page = self.request.GET.get('scores_page', None)
@@ -119,6 +132,10 @@ def get_context_data(self, **kwargs):
119132
context["counts_columns"] = \
120133
context['scoreset'].dataset_columns[COUNTS_KEY]
121134

135+
context["scores_per_page"] = scores_per_page
136+
context["counts_per_page"] = counts_per_page
137+
context["per_page_selections"] = [20, 50, 100]
138+
122139
return context
123140

124141

@@ -156,7 +173,7 @@ def download_scoreset_data(request, accession, dataset_key):
156173
response.status_code = 403
157174
return response
158175

159-
variants = scoreset.variant_set.all()
176+
variants = scoreset.variant_set.all().order_by("accession")
160177
columns = scoreset.dataset_columns[dataset_key]
161178

162179
def gen_repsonse():
@@ -215,7 +232,9 @@ def scoreset_create_view(request):
215232
context = {}
216233
scoreset_form = ScoreSetForm(prefix=SCORESET_FORM_PREFIX)
217234
pks = [i.pk for i in request.user.profile.administrator_experiments()]
218-
experiments = Experiment.objects.filter(pk__in=set(pks))
235+
experiments = Experiment.objects.filter(
236+
pk__in=set(pks)
237+
).order_by("accession")
219238
scoreset_form.fields["experiment"].queryset = experiments
220239

221240
pks = [i.pk for i in request.user.profile.administrator_scoresets()]

0 commit comments

Comments
 (0)