Skip to content
Snippets Groups Projects
Commit d83de377 authored by florimondmanca's avatar florimondmanca
Browse files

remove showcase_site app

parent 3e75392e
No related branches found
No related tags found
No related merge requests found
Showing
with 0 additions and 617 deletions
......@@ -6,7 +6,6 @@ from api.auth import obtain_auth_token
from core import views as core_views
from profiles import views as profiles_views
from register import views as register_views
from showcase_site import views as showcase_site_views
from tutoring import views as tutoring_views
from users import views as users_views
from visits import views as visits_views
......@@ -44,15 +43,6 @@ router.register('visit-participants', visits_views.VisitParticipantsViewSet,
base_name='visit-participants')
router.register('places', visits_views.PlaceViewSet)
# Showcase site views
router.register('articles', showcase_site_views.ArticleViewSet)
router.register('categories', showcase_site_views.CategoryViewSet)
router.register('testimonies', showcase_site_views.TestimonyViewSet)
router.register('keyfigures', showcase_site_views.KeyFigureViewSet)
router.register('partners', showcase_site_views.PartnerViewSet)
router.register('actions', showcase_site_views.ActionViewSet)
# Core views
router.register('documents', core_views.DocumentViewSet)
......
......@@ -6,14 +6,10 @@ from django.core.management import call_command
from django.core.management.base import BaseCommand
from django.db import transaction
import showcase_site.models
import users.models
import profiles.models
import visits.models
from profiles.factory import StudentFactory, TutorFactory, TutorInGroupFactory
from showcase_site.factory import (ArticleFactory, CategoryFactory,
KeyFigureFactory, PartnerFactory,
TestimonyFactory)
from visits.factory import PlaceFactory, VisitFactory
from .utils import DataLoader, SeqDataLoader, get_model, watcher
......@@ -28,8 +24,6 @@ class Command(BaseCommand):
get_model,
(
StudentFactory, TutorFactory,
CategoryFactory, ArticleFactory, TestimonyFactory,
KeyFigureFactory, PartnerFactory,
VisitFactory, PlaceFactory,
)
))
......@@ -89,44 +83,6 @@ class Command(BaseCommand):
if not self.known_tutor:
TutorInGroupFactory.create(**self.known_tutor_data)
def create_categories(self):
category_titles = [
title for title in ('Annonces', 'Sorties', 'Focus Europe')
if not showcase_site.models.Category.objects.filter(title=title)
]
if not category_titles:
return
for title in category_titles:
CategoryFactory.create(title=title)
def add_random_categories(self, article):
ids = tuple(showcase_site.models.Category.objects
.values_list('id', flat=True))
amount = min(len(ids), random.randint(0, 3))
rand_ids = random.sample(ids, amount)
categories = showcase_site.models.Category.objects.filter(
id__in=rand_ids)
for category in categories:
article.categories.add(category)
else:
self.stdout.write('Added {} categories to {}'
.format(categories.count(), article))
def create_articles(self):
for image in SeqDataLoader('article-{i}.jpg', 5):
article = ArticleFactory.create(image=image)
self.add_random_categories(article)
article.save()
def create_testimonies(self):
TestimonyFactory.create_batch(3)
def create_key_figures(self):
KeyFigureFactory.create_batch(4)
def create_partners(self):
PartnerFactory.create_batch(6)
def create_visits(self):
with DataLoader().load('visit-factsheet.pdf') as fact_sheet:
for image in SeqDataLoader('visit-{i}.jpg', 8):
......@@ -152,11 +108,6 @@ class Command(BaseCommand):
def create(self):
self.create_students()
self.create_tutors()
self.create_categories()
self.create_articles()
self.create_testimonies()
self.create_key_figures()
self.create_partners()
self.create_visits()
self.add_visit_organizers()
......
......@@ -66,7 +66,6 @@ PROJECT_APPS = [
'users.apps.UsersConfig',
'profiles.apps.ProfilesConfig',
'tutoring.apps.TutoringConfig',
'showcase_site.apps.ShowcaseSiteConfig',
'visits.apps.VisitsConfig',
'register.apps.RegisterConfig',
'api.apps.ApiConfig',
......
"""Showcase site admin panel configuration."""
from django.contrib import admin
from django.utils.html import format_html
from adminsortable2.admin import SortableAdminMixin
from .models import Action, Article, Category, KeyFigure, Partner, Testimony
# Register your models here.
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
"""Article admin panel."""
readonly_fields = ('slug', 'published', 'modified',)
list_display = ('title', 'published', 'modified', 'pinned', 'active',)
list_filter = ('published', 'pinned', 'categories', 'active',)
autocomplete_fields = ('categories',)
# reorganize fields
fieldsets = (
(None, {
'fields': ('title', 'slug', 'categories'),
}),
('Dates', {
'fields': ('published', 'modified',),
}),
('Édition', {
'fields': ('image', 'display_image', 'introduction', 'content',),
}),
('Visibilité', {
'fields': ('pinned', 'active',),
}),
)
@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
"""Category admin panel."""
list_display = ('title', 'get_num_articles',)
search_fields = ('title',)
def get_num_articles(self, obj):
"""Get number of articles in this category."""
return obj.article_set.count()
get_num_articles.short_description = "Nombre d'articles"
@admin.register(Testimony)
class TestimonyAdmin(admin.ModelAdmin):
"""Testimony admin panel."""
list_display = ('__str__', 'source', 'created',)
fields = ('quote', 'source',)
list_filter = ('created',)
@admin.register(KeyFigure)
class KeyFigureAdmin(SortableAdminMixin, admin.ModelAdmin):
"""Key figure admin panel.
Key figures can be sorted through a drag'n'drop interface (thanks
to django-admin-sortable2).
"""
@admin.register(Partner)
class PartnerAdmin(admin.ModelAdmin):
"""Partner admin panel."""
list_display = ('__str__', 'thumbnail', 'get_website', 'premium', 'active')
list_filter = ('active', 'premium',)
def get_website(self, obj):
"""Return safe link to partner's website."""
return format_html('<a target="_blank" href="{}">{}</a>',
obj.website, obj.website)
get_website.short_description = 'Site internet'
def thumbnail(self, obj):
"""Return thumbnail of partner's logo."""
return format_html(
'<img src="{}" alt="{}" style="max-width: 100px; height: auto;">',
obj.logo.url, obj.name)
thumbnail.short_description = 'Logo'
@admin.register(Action)
class ActionAdmin(SortableAdminMixin, admin.ModelAdmin):
"""Action points admin panel."""
list_display = ('__str__', 'thumbnail', 'highlight')
from django.apps import AppConfig
class ShowcaseSiteConfig(AppConfig):
name = 'showcase_site'
verbose_name = 'Site vitrine'
def ready(self):
from . import signals # noqa
Retour sur Focus Europe 2017
Il est l'heure de faire le bilan de cette édition 2017 de Focus Europe, qui a emmené les tutorés à Prague. L'équipe organisatrice vous a préparé une belle brochette de photos ainsi qu'un montage souvenir !
L'aventure démarre le 23 avril 2017. Les lycéens se rendent sur le campus de CentraleSupélec et se préparent au grand départ ! Les bus sont à l'heure, les tuteurs font l'appel. Les parents sont aussi au rendez-vous. Pour certains, ce voyage sera la première sortie de France !
Rendez-vous l'année prochaine pour découvrir une nouvelle capitale !
Journée de Clôture 2017
La fin de l'année scolaire sonne aussi la fin du tutorat pour les tutorés. Pour fêter cette belle année passée ensemble, les tutorés et les tuteurs se sont retrouvés ce samedi 5 juin sur le campus de CentraleSupélec.
Cette journée était placée sous le signe de la bonne humeur. Les lycéens ont été accueillis dès 10h00 à l'entrée du bâtiment Olivier du campus de Châtenay-Malabry. Après avoir dégusté un petit déjeuner, direction la grande conférence prévue ce matin. L'invité est de marque : Bernard Dupont est venu conseiller les lycéens sur leur avenir.
Rendez-vous à la rentrée pour de nouvelles aventures !
OSER et Véolia signent un nouveau partenariat
Depuis le 11 décembre 2017, OSER peut compter sur un nouveau partenaire. Véolia est un grand groupe de la gestion énergétique et sanitaire, et s'engage à nos côtés pour favoriser le tissu social.
OSER et Véolia se sont naturellement rapprochés, partageant les mêmes valeurs de solidarité. Nous avons le même objectif : faire que tous puissent avoir accès aux études supérieures, quel que soit son milieu socio-économique d'origine.
À l'année prochaine pour de nouveaux partenariats !
"""Showcase site factories."""
import random
import factory
import factory.django
import pytz
from django.contrib.auth import get_user_model
from . import models
User = get_user_model()
utc = pytz.UTC
class ArticleFactory(factory.DjangoModelFactory):
"""Article object factory."""
class Meta: # noqa
model = models.Article
title = factory.Faker('sentence', locale='fr')
content = factory.Faker('text', max_nb_chars=2000, locale='fr')
introduction = factory.Faker('text', max_nb_chars=200, locale='fr')
published = factory.Faker('date')
pinned = factory.Iterator((True, False, False, False))
class CategoryFactory(factory.DjangoModelFactory):
"""Category object factory."""
class Meta: # noqa
model = models.Category
exclude = ('_title',)
_title = factory.Faker('word')
@factory.lazy_attribute
def title(self):
"""Category title is subject to a unique constraint.
Add a random number if the fake title already exists.
"""
if models.Category.objects.filter(title=self._title).exists():
return self._title + str(random.randint(0, 100))
return self._title
class TestimonyFactory(factory.DjangoModelFactory):
"""Testimony object factory."""
class Meta: # noqa
model = models.Testimony
source = factory.Faker('name', locale='fr')
quote = factory.Faker('text', max_nb_chars=200, locale='fr')
class KeyFigureFactory(factory.DjangoModelFactory):
"""Key figure object factory."""
class Meta: # noqa
model = models.KeyFigure
figure = factory.LazyFunction(lambda: random.randint(10, 200))
description = factory.Faker('text', max_nb_chars=60, locale='fr')
order = factory.Sequence(lambda n: n)
class PartnerFactory(factory.DjangoModelFactory):
"""Partner object factory."""
class Meta: # noqa
model = models.Partner
name = factory.Faker('company', locale='fr')
website = factory.Faker('url')
logo = factory.Faker('image_url', height=320)
# 40% of partnerships will be premium on average
premium = factory.LazyFunction(
lambda: random.choices([True, False], weights=[.4, .6])[0])
# 90% of partnerships will be active on average
active = factory.LazyFunction(
lambda: random.choices([True, False], weights=[.9, .1])[0])
class ActionFactory(factory.DjangoModelFactory):
"""Action object factory."""
class Meta: # noqa
model = models.Action
title = factory.Faker('text', max_nb_chars=30)
description = factory.Faker('text', max_nb_chars=300)
key_figure = factory.Faker('text', max_nb_chars=100)
highlight = factory.LazyFunction(
lambda: random.choices([True, False], weights=[.6, .4])[0]
)
# Generated by Django 2.0.3 on 2018-03-17 15:20
from django.db import migrations, models
import markdownx.models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Article',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(help_text="Titre de l'article", max_length=300, verbose_name='titre')),
('slug', models.SlugField(help_text="Un court identifiant généré après la création de l'article.", max_length=100, unique=True)),
('content', markdownx.models.MarkdownxField(help_text="Contenu complet de l'article", verbose_name='contenu')),
('published', models.DateTimeField(auto_now_add=True, verbose_name='date de publication')),
('image', models.ImageField(blank=True, null=True, upload_to='', verbose_name='illustration')),
('pinned', models.BooleanField(default=False, verbose_name='épinglé')),
],
options={
'verbose_name': 'article',
'ordering': ('-published',),
},
),
migrations.CreateModel(
name='Category',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=100, unique=True, verbose_name='titre')),
],
options={
'verbose_name': 'catégorie',
'ordering': ('title',),
},
),
migrations.CreateModel(
name='KeyFigure',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('figure', models.PositiveIntegerField(help_text='Un nombre entier positif. Exemple : 60', verbose_name='chiffre')),
('description', models.CharField(help_text="Une courte description du chiffre (sera convertie en minuscules). Exemple : millions d'amis.", max_length=100)),
('order', models.PositiveIntegerField(default=0, verbose_name='ordre')),
],
options={
'verbose_name': 'chiffre clé',
'verbose_name_plural': 'chiffres clés',
'ordering': ('order',),
},
),
migrations.CreateModel(
name='Partner',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=200, verbose_name='nom')),
('website', models.URLField(null=True, verbose_name='site internet')),
('logo', models.ImageField(help_text='Image PNG avec arrière-plan transparent. Dimensions recommandées : hauteur = 320px. ', null=True, upload_to='')),
('premium', models.BooleanField(default=False, help_text='Cocher si ce partenaire est un partenaire privilégié. Il sera davantage mis en avant sur le site. Exemple : les organismes de subventions peuvent être des partenaires secondaires et les entreprises des partenaires principaux.', verbose_name='partenaire privilégié')),
('active', models.BooleanField(default=True, help_text='Cocher si le partenariat est actif. Les partenariats inactifs ne seront pas affichés sur le site.', verbose_name='actif')),
],
options={
'verbose_name': 'partenaire',
'ordering': ('-active', '-premium', 'name'),
},
),
migrations.CreateModel(
name='Testimony',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('content', models.TextField(verbose_name='contenu')),
('author_name', models.CharField(help_text="Nom de l'auteur", max_length=300, verbose_name='auteur')),
('author_position', models.CharField(help_text="Position de l'auteur (lycéen, professeur…)", max_length=300, verbose_name='position')),
('created', models.DateField(auto_now_add=True, verbose_name='date de création')),
],
options={
'verbose_name': 'témoignage',
'ordering': ('-created', 'author_name'),
},
),
migrations.AddField(
model_name='article',
name='categories',
field=models.ManyToManyField(blank=True, help_text="Catégories auxquelles rattacher l'article", to='showcase_site.Category', verbose_name='catégories'),
),
]
# Generated by Django 2.0.3 on 2018-03-19 20:27
from django.db import migrations, models
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('showcase_site', '0001_initial'),
]
operations = [
migrations.AlterModelOptions(
name='partner',
options={'ordering': ('-active', '-premium', '-start_date', 'name'), 'verbose_name': 'partenaire'},
),
migrations.AddField(
model_name='partner',
name='start_date',
field=models.DateField(default=django.utils.timezone.now, help_text="Quand ce partenariat a-t-il débuté ? Cette information est stockée à des fins d'historiques.", verbose_name='début du partenariat'),
),
migrations.AlterField(
model_name='article',
name='image',
field=models.ImageField(blank=True, null=True, upload_to='articles/', verbose_name='illustration'),
),
migrations.AlterField(
model_name='partner',
name='logo',
field=models.ImageField(help_text='Image PNG avec arrière-plan transparent. Dimensions recommandées : hauteur = 320px. ', null=True, upload_to='partners/'),
),
]
# Generated by Django 2.0.3 on 2018-03-19 21:54
from django.db import migrations, models
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('showcase_site', '0002_auto_20180319_2127'),
]
operations = [
migrations.AlterField(
model_name='partner',
name='start_date',
field=models.DateField(blank=True, default=django.utils.timezone.now, help_text='Laisser vide si inconnu. (Cette information est stockée pour historique uniquement.)', null=True, verbose_name='début du partenariat'),
),
]
# Generated by Django 2.0.3 on 2018-03-25 11:38
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('showcase_site', '0003_auto_20180319_2254'),
]
operations = [
migrations.AlterModelOptions(
name='article',
options={'ordering': ('-pinned', '-published'), 'verbose_name': 'article'},
),
]
# Generated by Django 2.0.3 on 2018-03-25 12:42
from django.db import migrations, models
import markdownx.models
class Migration(migrations.Migration):
dependencies = [
('showcase_site', '0004_auto_20180325_1338'),
]
operations = [
migrations.CreateModel(
name='Action',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=30, verbose_name='titre')),
('thumbnail', models.ImageField(blank=True, help_text="Une petite image représentant l'action. Format recommandé : 200x200", null=True, upload_to='actions/', verbose_name='illustration')),
('description', markdownx.models.MarkdownxField()),
('key_figure', models.TextField(blank=True, default='', help_text="Enoncer un chiffre clé à propos de cette action. Exemple : 'En 2018, 18 sorties ont été organisées dans des lieux tels que…'", verbose_name='chiffre clé')),
('highlight', models.BooleanField(default=True, help_text="Cochez pour afficher cette action sur la page d'accueil. Pour un affichage optimal, assurez-vous alors d'avoir renseigné une illustration.", verbose_name='mettre en avant')),
('order', models.PositiveIntegerField(default=0, verbose_name='ordre')),
],
options={
'verbose_name': 'action clé',
'verbose_name_plural': 'actions clés',
'ordering': ('order',),
},
),
]
# Generated by Django 2.0.3 on 2018-04-07 10:51
from django.db import migrations
import markdownx.models
class Migration(migrations.Migration):
dependencies = [
('showcase_site', '0005_action'),
]
operations = [
migrations.AlterField(
model_name='action',
name='description',
field=markdownx.models.MarkdownxField(help_text="Un texte libre décrivant le point d'action. Markdown est supporté."),
),
]
# Generated by Django 2.0.3 on 2018-04-08 11:18
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('showcase_site', '0006_auto_20180407_1251'),
]
operations = [
migrations.AlterModelOptions(
name='testimony',
options={'ordering': ('-created', 'source'), 'verbose_name': 'témoignage'},
),
migrations.RemoveField(
model_name='testimony',
name='author_name',
),
migrations.RemoveField(
model_name='testimony',
name='author_position',
),
migrations.RemoveField(
model_name='testimony',
name='content',
),
migrations.AddField(
model_name='testimony',
name='quote',
field=models.TextField(default='', verbose_name='citation'),
preserve_default=False,
),
migrations.AddField(
model_name='testimony',
name='source',
field=models.CharField(default='', help_text="Nom et qualité de l'auteur ou de la source de ce témoignage.", max_length=300, verbose_name='source'),
preserve_default=False,
),
]
# Generated by Django 2.0.3 on 2018-04-08 12:12
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('showcase_site', '0007_auto_20180408_1318'),
]
operations = [
migrations.AlterField(
model_name='testimony',
name='created',
field=models.DateField(auto_now_add=True, verbose_name='ajouté le'),
),
]
# Generated by Django 2.0.3 on 2018-04-11 21:19
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('showcase_site', '0008_auto_20180408_1412'),
]
operations = [
migrations.AddField(
model_name='article',
name='display_image',
field=models.BooleanField(default=True, help_text="Cocher pour que l'illustration soit affichée sous le chapeau introductif de l'article.", verbose_name="afficher l'illustration"),
),
migrations.AddField(
model_name='article',
name='modified',
field=models.DateTimeField(auto_now=True, help_text="Date et heure de la dernière modification de l'article", verbose_name='modifié le'),
),
]
# Generated by Django 2.0.3 on 2018-04-11 21:28
from django.db import migrations, models
import markdownx.models
class Migration(migrations.Migration):
dependencies = [
('showcase_site', '0009_auto_20180411_2319'),
]
operations = [
migrations.AlterModelOptions(
name='article',
options={'ordering': ('archived', '-pinned', '-published'), 'verbose_name': 'article'},
),
migrations.AddField(
model_name='article',
name='archived',
field=models.BooleanField(default=False, help_text="Cocher pour que l'article soit archivé. Il ne sera plus affiché sur le site.", verbose_name='archivé'),
),
migrations.AlterField(
model_name='article',
name='content',
field=markdownx.models.MarkdownxField(help_text="Contenu complet de l'article (Markdown est supporté).", verbose_name='contenu'),
),
migrations.AlterField(
model_name='article',
name='modified',
field=models.DateTimeField(auto_now=True, verbose_name='modifié le'),
),
migrations.AlterField(
model_name='article',
name='pinned',
field=models.BooleanField(default=False, help_text="Cocher pour que l'article soit épinglé et affiché en priorité.", verbose_name='épinglé'),
),
migrations.AlterField(
model_name='article',
name='published',
field=models.DateTimeField(auto_now_add=True, verbose_name='publié le'),
),
]
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment