mon-module.py

Ceci est un exemple illustrant ce qu’on peut écrire dans les fichiers python décrivant les ECUEs.

  1#!/usr/bin/env python3
  2
  3# coding: utf-8
  4
  5import cursus
  6
  7# !!! Seulement si on utilise des variables globales à plusieurs modules.
  8from csmetzvars import lv
  9
 10# Ici, dans Variables/csmetz/, il y a un fichier lv.py qui définit des variables comme  title1 = "...",
 11# On peut l'utiliser dans ce script comme lv.title1
 12# On peut mettre d'autres toto.py dans Variables/csmetz/, leur contenu sera disponible en faisant
 13# from csmetzvars import toto
 14# pour disposer de toto.mavariable
 15
 16cursus.tracks.declare('info', 'phys', 'SDI') # Ne mettre que les tracks concernées
 17
 18with cursus.script.Module() as module:
 19
 20    # Nota: on peut varier selon les tracks, avec les expression with cursus.tracks...
 21    
 22    
 23    ####
 24    #### Déclaration de ce qui est à l'emploi du temps
 25    ####
 26
 27    # Déclaration complète:
 28    activite = module.cm('titre en francais',
 29                         ['hfb', 'jf'],              # La liste des profs, mettre [] ou None si on ne les connaît pas... ou un seul élément.
 30                         duration = 1.5,             # duree en heure du créneau mis à l'emploi du temps des élèves.
 31                         nb_teachers = 3,            # Nombre d'enseignants. S'il est supérieur au nombre déclaré, cela déclare des enseignants manquants.
 32                         hour_cost_by_teacher = 1.5, # Le coût d'une heure présentielle en HETD.
 33                         fixed_cost_by_teacher = 0., # Un coût (en HETD) forfaitaire.
 34                         face2face = 1)              # La durée de présence du prof sur le créneau (None => face2face = duration)
 35
 36    # Déclaration abbrégée: Certains arguments sont définis par défaut.
 37    cm = module.cm('titre en francais')
 38    td = module.td('titre en francais', 'jf')
 39    tp = module.tp('titre en francais', nb_teachers=2)
 40    projet = module.projet('titre en francais', None, duration = 10, nb_teachers=4, face2face = 2, fixed_cost_by_teacher = 1)
 41    exam = module.exam('Ecrit', None, duration = 3)
 42
 43    # On peut respécifier des attributs après création.
 44    cm = module.cm('titre en francais')
 45    cm.title = 'title in english'
 46    cm.teachers = (['jf', 'hfb'], 3) # (teachers, nb_teachers)
 47
 48    # Declaration pour certaines tracks (voir cursus pour plus de possibilités)
 49    
 50    with cursus.tracks.OneForEach(): # On ajoute un élément par track
 51        td = module.td('Boucles', None, duration=2)
 52        td['info'].teachers = ('hfb', 1) # spécification pour la track informatique
 53        td['phys'].teachers = ('dr',  1) # spécification pour la track physique
 54
 55    with cursus.tracks.OnlyFor('info'): # Seule la track info aura un projet.
 56        proj = module.projet('Matrices', None, nb_teachers=4, duration=10, face2face=2, fixed_cost_by_teacher = 1)
 57
 58    # On peut grouper et déclarer des séquences
 59
 60    cm1 = module.cm('titre en francais')
 61    cm2 = module.cm('titre en francais')
 62    module.group(cm1, cm2)
 63    
 64    with cursus.tracks.OneForEach(): # On ajoute un élément par track
 65        td = module.td('Boucles', None, duration=2)
 66
 67    module.seq(cm1, td)
 68
 69    # OneForEach et OnlyFor peuvent prendre des arguments.
 70    
 71    with cursus.tracks.OneForEach(['info', 'SDI'], 'phys'): 
 72        td = module.td('Boucles', None, duration=2) # 2 instances, une pour 'info' et 'SDI', l'autre pour 'phys'
 73        td['info'].teachers = ('hfb', 1) # spécification pour la track informatique/SDI (td['SDI'] aurait marché aussi)
 74        td['phys'].teachers = ('dr',  1) # spécification pour la track physique
 75
 76    with cursus.tracks.OnlyFor('info', 'SDI'): # Seule les tracks info et SDI aura un projet.
 77        proj = module.projet('Matrices', None, nb_teachers=4, duration=10, face2face=2, fixed_cost_by_teacher = 1)
 78        # une seule instance, commune aux deux tracks.
 79
 80        
 81    ####
 82    #### Descriptions du module
 83    ####
 84
 85    module.description.titre = 'titre en francais'
 86    module.description.title = 'title in english'
 87
 88    module.description.manager = 'hfb'
 89    module.description.links = {
 90        "site du cours": "https://monsite.centralesupelec.fr",
 91        "site des TPs": "https://monsite.centralesupelec.fr"
 92    }
 93
 94
 95
 96    # On ne se sert pas vraiment des ECTS pour les modules.
 97    module.description.ECTS = 2
 98    with cursus.tracks.OnlyFor('info'):
 99         module.description.ECTS = 3
100         
101    module.description.pseudo = 'titre court'
102    module.description.code   = 'SPM-INF-003'
103
104    module.description.ODDfr = 'objectif de développement durable'
105    module.description.ODDen = 'sustainable developpement goals'
106
107    # Pour les champs de catalogue, on a pour le champ x:
108    #    module.description.x        # La version par défaut si l'un des deux suivants manque.
109    #    module.description.x_md     # La version markdown (on utilisera souvent la triple quote...)
110    #    module.description.x_latex  # La version latex.
111    #
112    # !!! Attention à l'usage de la triple quote en markdown, les tabulations en début de ligne
113    # !!! peuvent être interprétées.
114
115    # Geode  Acquis d’apprentissage visés dans le cours
116
117    module.description.acquis       = "Les étudiants apprendront: confiance en soi, fierté."
118    module.description.acquis_md    = """Les étudiants apprendront:
119
120- confience en soi,
121- fierté.
122"""
123    
124    module.description.acquis_latex = """Les étudiants apprendront:
125    \\begin{itemize}
126       \\item confiance en soi,
127       \\item fierté.
128    \\end{itemize}
129    """
130
131    module.description.outcome       = 'in english...'
132    module.description.outcome_md    = '...'    
133    module.description.outcome_latex = '...'
134
135    #  Geode Présentation générale
136    
137    module.description.quoi       = "Dans ce module, nous traîterons de..." 
138    module.description.quoi_md    = "Dans ce **module**, nous traîterons de..."    
139    module.description.quoi_latex = "Dans ce {\\bf module}, nous traîterons de..." 
140    
141    module.description.what       = "This module is about..."
142    module.description.what_md    = "This **module** is about..."   
143    module.description.what_latex = "This {\\bf module} is about..." 
144    
145    # Geode Méthode pédagogique:
146    
147    module.description.comment       = "..."
148    module.description.comment_md    = "..."
149    module.description.comment_latex = "..."
150    module.description.how       = "..."
151    module.description.how_md    = "..."
152    module.description.how_latex = "..."
153
154    # Geode Moyens
155    
156    module.description.moyens       = "..."
157    module.description.moyens_md    = "..."
158    module.description.moyens_latex = "..."
159    module.description.means       = "..."
160    module.description.means_md    = "..."
161    module.description.means_latex = "..."
162
163    # Geode Prérequis
164
165    module.description.prerequis       = "..."
166    module.description.prerequis_md    = "..."
167    module.description.prerequis_latex = "..."
168    module.description.prerequisites       = "..."
169    module.description.prerequisites_md    = "..."
170    module.description.prerequisites_latex = "..."
171    
172    # Geode Contenu :
173    
174    module.description.sujets       = "..."
175    module.description.sujets_md    = "..."
176    module.description.sujets_latex = "..."
177    module.description.topics       = "..."
178    module.description.topics_md    = "..."
179    module.description.topics_latex = "..."
180
181    # Références
182
183    module.description.bibliography       = ['reference 1', 'reference 2']
184    module.description.bibliography_md    = ['reference 1', 'reference 2'] # sera bibliography par défaut
185    module.description.bibliography_latex = ['reference 1', 'reference 2'] # sera bibliography
186
187        
188    ####
189    #### Evaluation
190    ####
191    
192    module.description.modalites       = "..."
193    module.description.modalites_md    = "..."
194    module.description.modalites_latex = "..."
195    module.description.methods       = "..."
196    module.description.methods_md    = "..."
197    module.description.methods_latex = "..."
198    
199    with cursus.tracks.OnlyFor('info'): 
200        module.evaluation.modalites   = 'Sur la base du rapport de projet, rattrapable.'
201        module.evaluation.competences = ['ISIN01', 'ISIN04']
202        
203    with cursus.tracks.OnlyFor('phys'): 
204        module.evaluation.modalites   = 'Sur la base de la présence en TD, non rattrapable.'
205        module.evaluation.methods     = 'based on attendence, cannot be retaken.'
206        module.evaluation.competences = []
207        
208    with cursus.tracks.OnlyFor('SDI'): 
209        module.evaluation.modalites   = 'Examen écrit de 3h, rattrapable.'
210        module.evaluation.methods     = 'Written test (3h), can be retaken.'
211        module.evaluation.competences = ['C1', 'C7']
212
213    ###
214    ### Références croisées entre .py
215    ###
216
217    # C'est comme \label et \ref en latex.
218
219    module.label(cm1, 'toto') # l'objet cm1 est taggué par le label toto.
220    ref = module.ref('titi')  # dans un autre .py, quelqu'un a labellisé quelque chose par 'titi'...
221    module.seq(ref, cm2)      # ... et on peut déclarer que cm2 doit arriver après.