diff --git a/avisstage/management/commands/nettoie_lieux.py b/avisstage/management/commands/nettoie_lieux.py index dab740d..abf3195 100644 --- a/avisstage/management/commands/nettoie_lieux.py +++ b/avisstage/management/commands/nettoie_lieux.py @@ -20,7 +20,7 @@ class Command(BaseCommand): if options.get('apply', False): rundb = True else: - print u"Les modifications ne seront pas appliquées" + print(u"Les modifications ne seront pas appliquées") min_lieu = options.get('min_lieu', 0) @@ -28,16 +28,16 @@ class Command(BaseCommand): lproches = Lieu.objects.filter(id__lt=lieu.id, coord__distance_lte=(lieu.coord, 5)) if len(lproches) == 0: continue - print u"Doublons possibles pour %s (id=%d, %d avis) :" % (lieu, lieu.id, lieu.avislieu_set.count()) + print(u"Doublons possibles pour %s (id=%d, %d avis) :" % (lieu, lieu.id, lieu.avislieu_set.count())) for plieu in lproches: pprint = u" > %s (id=%d, %d avis)" % (plieu, plieu.id, plieu.avislieu_set.count()) if plieu.nom == lieu.nom and plieu.ville == lieu.ville and plieu.type_lieu == lieu.type_lieu: - print u"%s %s" % (pprint, self.style.SUCCESS(u'-> Suppression')) + print(u"%s %s" % (pprint, self.style.SUCCESS(u'-> Suppression'))) if rundb: for avis in plieu.avislieu_set.all(): avis.lieu = lieu avis.save() plieu.delete() else: - print u"%s %s" % (pprint, self.style.WARNING(u'-> À supprimer manuellement')) + print(u"%s %s" % (pprint, self.style.WARNING(u'-> À supprimer manuellement'))) self.stdout.write(self.style.SUCCESS(u'Nettoyage des lieux effectué')) diff --git a/avisstage/management/commands/nettoie_stages.py b/avisstage/management/commands/nettoie_stages.py index 0bbc8ac..8d7704e 100644 --- a/avisstage/management/commands/nettoie_stages.py +++ b/avisstage/management/commands/nettoie_stages.py @@ -30,7 +30,7 @@ class Command(BaseCommand): if options.get('apply', False): rundb = True else: - print u"Les modifications ne seront pas appliquées" + print(u"Les modifications ne seront pas appliquées") min_stage = options.get('min_stage', 0) @@ -52,15 +52,15 @@ class Command(BaseCommand): problems += [(avis, alen), lieuset[aid]] lieuset[aid] = (avis, alen) if len(todel) > 0: - print u"Doublons détectés dans %s" % (stage,) + print(u"Doublons détectés dans %s" % (stage,)) for avis, alen in todel: - print u" > Suppression de l'avis sur %s de %d mots" % \ - (avis.lieu, alen) + print(u" > Suppression de l'avis sur %s de %d mots" % \ + (avis.lieu, alen)) if rundb: avis.delete() if len(problems) > 0: self.stdout.write(self.style.WARNING(u"Réparation impossible de %s (id=%d)" % (stage, stage.id))) for avis, alen in problems: - print u" > Avis sur %s de %d mots" % \ - (avis.lieu, alen) + print(u" > Avis sur %s de %d mots" % \ + (avis.lieu, alen)) self.stdout.write(self.style.SUCCESS(u'Nettoyage des stages effectué')) diff --git a/avisstage/management/commands/supprime_lieu.py b/avisstage/management/commands/supprime_lieu.py index c6a223c..3b138b1 100644 --- a/avisstage/management/commands/supprime_lieu.py +++ b/avisstage/management/commands/supprime_lieu.py @@ -21,12 +21,12 @@ class Command(BaseCommand): if options.get('apply', False): rundb = True else: - print u"Les modifications ne seront pas appliquées" + print(u"Les modifications ne seront pas appliquées") plieu = Lieu.objects.get(id=options['del_lieu']) lieu = Lieu.objects.get(id=options['repl_lieu']) - print u"Suppression de %s (id=%d, %d avis)" % (plieu, plieu.id, plieu.avislieu_set.count()) - print u"Remplacement par %s (id=%d, %d avis)" % (lieu, lieu.id, lieu.avislieu_set.count()) + print(u"Suppression de %s (id=%d, %d avis)" % (plieu, plieu.id, plieu.avislieu_set.count())) + print(u"Remplacement par %s (id=%d, %d avis)" % (lieu, lieu.id, lieu.avislieu_set.count())) if rundb: for avis in plieu.avislieu_set.all(): avis.lieu = lieu diff --git a/avisstage/models.py b/avisstage/models.py index 873e3bf..e15ddba 100644 --- a/avisstage/models.py +++ b/avisstage/models.py @@ -40,7 +40,7 @@ class Normalien(models.Model): verbose_name = u"Profil élève" verbose_name_plural = u"Profils élèves" - def __unicode__(self): + def __str__(self): return u"%s (%s)" % (self.nom, self.user.username) # Liste des stages publiés @@ -131,7 +131,7 @@ class Lieu(models.Model): def type_lieu_fem(self): return TYPE_LIEU_DICT.get(self.type_lieu, ("lieu", False))[1] - def __unicode__(self): + def __str__(self): return u"%s (%s)" % (self.nom, self.ville) class Meta: @@ -150,7 +150,7 @@ class StageMatiere(models.Model): verbose_name = "Matière des stages" verbose_name_plural = "Matières des stages" - def __unicode__(self): + def __str__(self): return self.nom # @@ -221,7 +221,7 @@ class Stage(models.Model): def get_absolute_url(self): return reverse('avisstage:stage', self) - def __unicode__(self): + def __str__(self): return u"%s (par %s)" % (self.sujet, self.auteur.user.username) def update_stats(self, save=True): @@ -263,7 +263,7 @@ class AvisStage(models.Model): les_plus = models.TextField(u"Les plus de cette expérience", blank=True) les_moins = models.TextField(u"Les moins de cette expérience", blank=True) - def __unicode__(self): + def __str__(self): return u"Avis sur {%s} par %s" % (self.stage.sujet, self.stage.auteur.user.username) # Liste des champs d'avis, couplés à leur nom (pour l'affichage) @@ -292,7 +292,7 @@ class AvisLieu(models.Model): verbose_name = "Avis sur un lieu de stage" verbose_name_plural = "Avis sur un lieu de stage" - def __unicode__(self): + def __str__(self): return u"Avis sur {%s} par %s" % (self.lieu.nom, self.stage.auteur.user_id) # Liste des champs d'avis, couplés à leur nom (pour l'affichage) diff --git a/avisstage/sass/screen.scss b/avisstage/sass/screen.scss index bd13125..3a493b3 100644 --- a/avisstage/sass/screen.scss +++ b/avisstage/sass/screen.scss @@ -542,6 +542,8 @@ ul.as-selections { div.as-results { position: relative; + z-index: 2; + ul { position: absolute; width: 100%; diff --git a/avisstage/static/css/screen.css b/avisstage/static/css/screen.css index f91e8d5..480b638 100644 --- a/avisstage/static/css/screen.css +++ b/avisstage/static/css/screen.css @@ -900,28 +900,29 @@ ul.as-selections .as-original input { /* line 543, ../../sass/screen.scss */ div.as-results { position: relative; + z-index: 2; } -/* line 545, ../../sass/screen.scss */ +/* line 547, ../../sass/screen.scss */ div.as-results ul { position: absolute; width: 100%; background: #fff; border: 1px solid #d2ebad; } -/* line 552, ../../sass/screen.scss */ +/* line 554, ../../sass/screen.scss */ div.as-results ul li { padding: 3px 5px; } -/* line 558, ../../sass/screen.scss */ +/* line 560, ../../sass/screen.scss */ div.as-results ul li.as-result-item.active { background: #fddeb5; } -/* line 563, ../../sass/screen.scss */ +/* line 565, ../../sass/screen.scss */ div.as-results ul li.as-message { font-style: italic; } -/* line 573, ../../sass/screen.scss */ +/* line 575, ../../sass/screen.scss */ .window { display: none; position: fixed; @@ -932,11 +933,11 @@ div.as-results ul li.as-message { left: 0; z-index: 50; } -/* line 583, ../../sass/screen.scss */ +/* line 585, ../../sass/screen.scss */ .window.visible { display: block; } -/* line 587, ../../sass/screen.scss */ +/* line 589, ../../sass/screen.scss */ .window .window-bg { background: #000; opacity: 0.7; @@ -947,7 +948,7 @@ div.as-results ul li.as-message { top: 0; z-index: -1; } -/* line 598, ../../sass/screen.scss */ +/* line 600, ../../sass/screen.scss */ .window .window-content { position: relative; margin: 0 auto; @@ -961,11 +962,11 @@ div.as-results ul li.as-message { max-height: 100%; overflow: auto; } -/* line 612, ../../sass/screen.scss */ +/* line 614, ../../sass/screen.scss */ .window .window-content form label, .window .window-content form .label { width: 150px; } -/* line 618, ../../sass/screen.scss */ +/* line 620, ../../sass/screen.scss */ .window .window-closer { position: absolute; top: 0; @@ -973,65 +974,65 @@ div.as-results ul li.as-message { padding: 12px; z-index: 3; } -/* line 624, ../../sass/screen.scss */ +/* line 626, ../../sass/screen.scss */ .window .window-closer:after { content: "×"; } -/* line 635, ../../sass/screen.scss */ +/* line 637, ../../sass/screen.scss */ #lieu_widget .lieu-ui { position: relative; } -/* line 637, ../../sass/screen.scss */ +/* line 639, ../../sass/screen.scss */ #lieu_widget .lieu-ui .map { height: 400px; width: 100%; } -/* line 641, ../../sass/screen.scss */ +/* line 643, ../../sass/screen.scss */ #lieu_widget .lieu-ui.hidden { display: none; } -/* line 644, ../../sass/screen.scss */ +/* line 646, ../../sass/screen.scss */ #lieu_widget .lieu-ui .masked { visibility: hidden; } -/* line 649, ../../sass/screen.scss */ +/* line 651, ../../sass/screen.scss */ #lieu_widget .lieu-choixmodif { display: none; } -/* line 654, ../../sass/screen.scss */ +/* line 656, ../../sass/screen.scss */ #lieu_widget.modif .lieu-choixmodif { display: unset; } -/* line 659, ../../sass/screen.scss */ +/* line 661, ../../sass/screen.scss */ #lieu_widget.modif .lieu-ui, #lieu_widget.attente .lieu-ui { display: none; } -/* line 666, ../../sass/screen.scss */ +/* line 668, ../../sass/screen.scss */ #lieu_widget.edit .lieu-ui .lieu-acinput { display: none; } -/* line 669, ../../sass/screen.scss */ +/* line 671, ../../sass/screen.scss */ #lieu_widget.edit .lieu-ui .map { height: 200px; } -/* line 675, ../../sass/screen.scss */ +/* line 677, ../../sass/screen.scss */ #lieu_widget #avis_lieu_vide { display: none; } -/* line 679, ../../sass/screen.scss */ +/* line 681, ../../sass/screen.scss */ #lieu_widget .message { background: #fddeb5; padding: 5px; font-style: italic; font-size: 0.9em; } -/* line 685, ../../sass/screen.scss */ +/* line 687, ../../sass/screen.scss */ #lieu_widget .message.hidden { display: none; } -/* line 691, ../../sass/screen.scss */ +/* line 693, ../../sass/screen.scss */ a.lieu-change { color: #fff; background: #f99b20; @@ -1044,25 +1045,25 @@ a.lieu-change { border-radius: 5px; margin-right: 7px; } -/* line 703, ../../sass/screen.scss */ +/* line 705, ../../sass/screen.scss */ a.lieu-change.ajout:before { content: "+"; margin-right: 5px; } -/* line 709, ../../sass/screen.scss */ +/* line 711, ../../sass/screen.scss */ #stages-map { width: 100%; height: 600px; max-height: 90vh; } -/* line 716, ../../sass/screen.scss */ +/* line 718, ../../sass/screen.scss */ #id_stage-thematiques { display: none; } -/* line 722, ../../sass/screen.scss */ +/* line 724, ../../sass/screen.scss */ .homeh1 { display: flex; justify-content: space-between; @@ -1072,26 +1073,26 @@ a.lieu-change.ajout:before { border-bottom: 3px solid #000; margin-bottom: 15px; } -/* line 731, ../../sass/screen.scss */ +/* line 733, ../../sass/screen.scss */ .homeh1 h1 { margin-bottom: 3px; } -/* line 735, ../../sass/screen.scss */ +/* line 737, ../../sass/screen.scss */ .homeh1 > * { display: inline-block; } -/* line 738, ../../sass/screen.scss */ +/* line 740, ../../sass/screen.scss */ .homeh1 p { text-align: right; } -/* line 743, ../../sass/screen.scss */ +/* line 745, ../../sass/screen.scss */ .betacadre { background: #fa6cae; padding: 10px; } -/* line 748, ../../sass/screen.scss */ +/* line 750, ../../sass/screen.scss */ .entrer { background: #fff; max-width: 500px; @@ -1100,84 +1101,84 @@ a.lieu-change.ajout:before { margin: 15px auto; } -/* line 756, ../../sass/screen.scss */ +/* line 758, ../../sass/screen.scss */ article.promo { display: block; font-size: 1.1em; } -/* line 760, ../../sass/screen.scss */ +/* line 762, ../../sass/screen.scss */ article.promo .explications { display: table; } -/* line 763, ../../sass/screen.scss */ +/* line 765, ../../sass/screen.scss */ article.promo .explications:first-child { direction: rtl; } -/* line 765, ../../sass/screen.scss */ +/* line 767, ../../sass/screen.scss */ article.promo .explications:first-child > * { direction: ltr; } -/* line 770, ../../sass/screen.scss */ +/* line 772, ../../sass/screen.scss */ article.promo .explications > div { display: table-cell; vertical-align: middle; text-align: center; } -/* line 775, ../../sass/screen.scss */ +/* line 777, ../../sass/screen.scss */ article.promo .explications > div p { margin: 15px 15px; } -/* line 783, ../../sass/screen.scss */ +/* line 785, ../../sass/screen.scss */ .faq-toc { font-family: "Lato", sans-serif; display: block; max-width: 700px; margin: 0 auto; } -/* line 788, ../../sass/screen.scss */ +/* line 790, ../../sass/screen.scss */ .faq-toc ul { margin: 20px; } -/* line 792, ../../sass/screen.scss */ +/* line 794, ../../sass/screen.scss */ .faq-toc ul li a { color: #000; display: block; padding: 5px; } -/* line 798, ../../sass/screen.scss */ +/* line 800, ../../sass/screen.scss */ .faq-toc ul li.toc-h1 { display: none; } -/* line 802, ../../sass/screen.scss */ +/* line 804, ../../sass/screen.scss */ .faq-toc ul li.toc-h2 a { background: #fcc883; } -/* line 806, ../../sass/screen.scss */ +/* line 808, ../../sass/screen.scss */ .faq-toc ul li.toc-h3 a { padding-left: 10px; background: #fff; font-weight: normal; } -/* line 812, ../../sass/screen.scss */ +/* line 814, ../../sass/screen.scss */ .faq-toc ul li a:hover { color: #395214; background: #bce085 !important; } -/* line 821, ../../sass/screen.scss */ +/* line 823, ../../sass/screen.scss */ .faq article { background: #fff; padding: 15px; } -/* line 824, ../../sass/screen.scss */ +/* line 826, ../../sass/screen.scss */ .faq article h2 { background-color: #fcc883; color: #ae6505; margin: -15px; padding: 15px; } -/* line 831, ../../sass/screen.scss */ +/* line 833, ../../sass/screen.scss */ .faq article h3 { color: #0f4c82; background-color: #9dcbf3; @@ -1185,19 +1186,19 @@ article.promo .explications > div p { margin-top: 30px; padding: 10px 15px; } -/* line 838, ../../sass/screen.scss */ +/* line 840, ../../sass/screen.scss */ .faq article h3:nth-child(2) { margin-top: 0; } -/* line 843, ../../sass/screen.scss */ +/* line 845, ../../sass/screen.scss */ .faq article ul { padding-left: 20px; } -/* line 845, ../../sass/screen.scss */ +/* line 847, ../../sass/screen.scss */ .faq article ul li { list-style: initial; } -/* line 850, ../../sass/screen.scss */ +/* line 852, ../../sass/screen.scss */ .faq article p, .faq article ul { font-family: "Lato", sans-serif; font-size: 18px; @@ -1206,20 +1207,20 @@ article.promo .explications > div p { margin-right: 5%; } -/* line 864, ../../sass/screen.scss */ +/* line 866, ../../sass/screen.scss */ table.stats { width: 100%; background: #fff; margin: 20px 0; cellspacing: 1px; } -/* line 869, ../../sass/screen.scss */ +/* line 871, ../../sass/screen.scss */ table.stats th { font-weight: bold; border-top: 1px solid #000; border-bottom: 1px solid #999; } -/* line 874, ../../sass/screen.scss */ +/* line 876, ../../sass/screen.scss */ table.stats td, table.stats th { padding: 5px 3px; text-align: center; diff --git a/avisstage/templates/avisstage/formulaires/stage.html b/avisstage/templates/avisstage/formulaires/stage.html index e4c04b7..27e66ed 100644 --- a/avisstage/templates/avisstage/formulaires/stage.html +++ b/avisstage/templates/avisstage/formulaires/stage.html @@ -16,6 +16,7 @@ + + {% endblock %} {% block content %} diff --git a/avisstage/templatetags/avisstage_tags.py b/avisstage/templatetags/avisstage_tags.py index 3118e4f..7f9d03c 100644 --- a/avisstage/templatetags/avisstage_tags.py +++ b/avisstage/templatetags/avisstage_tags.py @@ -18,8 +18,6 @@ def feedback_widget(): @register.filter def typonazisme(value): - #print value - #return value value = re.sub(r'(\w)\s*([?!:])', u'\\1 \\2', value) value = re.sub(r'(\w)\s*([,.])', u'\\1\\2', value) value = re.sub(r'([?!:,.])(\w)', u'\\1 \\2', value) diff --git a/avisstage/utils.py b/avisstage/utils.py index 4f08e52..78e2e18 100644 --- a/avisstage/utils.py +++ b/avisstage/utils.py @@ -1,4 +1,6 @@ # coding: utf-8 +from functools import reduce + def choices_length (choices): return reduce (lambda m, choice: max (m, len (choice[0])), choices, 0) diff --git a/avisstage/views.py b/avisstage/views.py index f9c92a9..de18409 100644 --- a/avisstage/views.py +++ b/avisstage/views.py @@ -130,7 +130,7 @@ def manage_stage(request, pk=None): avis_stage_form.instance.stage = stage avis_stage_form.save() avis_lieu_formset.save() - print request.POST + print(request.POST) if "continuer" in request.POST: if pk is None: return redirect(reverse('avisstage:stage_edit',kwargs={'pk':stage.id})) @@ -158,7 +158,7 @@ def save_lieu(request): if request.method == "POST": pk = request.POST.get("id", None) - print request.POST + print(request.POST) jitter = False if pk is None or pk == '': lieu = Lieu() diff --git a/avisstage/views_search.py b/avisstage/views_search.py index 448a2d3..c46ac5d 100644 --- a/avisstage/views_search.py +++ b/avisstage/views_search.py @@ -64,7 +64,7 @@ def cherche(**kwargs): # Champ générique : recherche dans tous les champs if field_relevant("generique"): - #print "Filtre generique", kwargs['generique'] + #print("Filtre generique", kwargs['generique']) dsl = dsl.query( "match", _all={"query": kwargs["generique"], @@ -117,7 +117,7 @@ def cherche(**kwargs): if use_dsl: filtres &= Q(id__in=[s.meta.id for s in dsl.scan()]) - #print filtres + #print(filtres) resultat = Stage.objects.filter(filtres) tri = 'pertinence' @@ -178,7 +178,8 @@ def recherche_resultats(request): stageids = [] if cached is None: - stages = stages[stageids.start_index()-1:stageids.end_index()] + stages = stages[max(0, stageids.start_index()-1): + stageids.end_index()] else: stages = Stage.objects.filter(id__in=stageids) diff --git a/experiENS/settings_dev.py b/experiENS/settings_dev.py index ba98c0e..b1a2e13 100644 --- a/experiENS/settings_dev.py +++ b/experiENS/settings_dev.py @@ -1,6 +1,6 @@ -from settings_base import * +from .settings_base import * -from secrets import SECRET_KEY +from .secrets import SECRET_KEY DEBUG = True diff --git a/experiENS/settings_prod.py b/experiENS/settings_prod.py index 0e5a6be..5d3922a 100644 --- a/experiENS/settings_prod.py +++ b/experiENS/settings_prod.py @@ -1,6 +1,6 @@ -from settings_base import * +from .settings_base import * -from secrets import SECRET_KEY +from .secrets import SECRET_KEY import os, sys from django.core.urlresolvers import reverse_lazy diff --git a/requirements-dev.txt b/requirements-dev.txt index d115872..d0211e1 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -1,2 +1,3 @@ +-r requirements.txt #spatialite-bin django-debug-toolbar diff --git a/requirements.txt b/requirements.txt index f52c4b6..0a5d3fa 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,11 +1,11 @@ -django -django-cas-ng -django-taggit -python-ldap -django-tinymce -django-braces -django-taggit-autosuggest -pytz -django-tastypie -lxml -git+https://github.com/sabricot/django-elasticsearch-dsl +django==1.11.* +django-cas-ng==3.5.* +django-taggit==0.22.* +python-ldap==3.0.* +django-tinymce==2.7.* +django-braces==1.12.* +django-taggit-autosuggest==0.3.* +pytz==2018.* +django-tastypie==0.14.* +lxml==4.2.* +django-elasticsearch-dsl==0.4.*