1 |
|
2 |
|
3 | import csv
|
4 | import os
|
5 | import re
|
6 | import owncloud
|
7 |
|
8 |
|
9 |
|
10 |
|
11 | ParamCSVFile = '/folder/.../fichier.csv'
|
12 | ParamFolder = '/folder/.../pdf/'
|
13 | ParamOwncloudAdress = 'http://ncloud.zaclys.com/'
|
14 | ParamOwncloudLogin = 'MonIdentifiant'
|
15 | ParamOwncloudPass = 'MonMotDePasse'
|
16 | ParamQuizName = 'Interro (2017-07-13)'
|
17 |
|
18 |
|
19 |
|
20 |
|
21 | class Student:
|
22 | |
23 | - name
|
24 | - surname
|
25 | - class or group
|
26 | - identification number
|
27 | - owncloud username"""
|
28 |
|
29 | def __init__(self, name='', surname='', group='', idnumber='', idowncloud='', quizname=''):
|
30 |
|
31 | self.name = name
|
32 | self.surname = surname
|
33 | self.group = group
|
34 | self.idnumber = idnumber
|
35 | self.idowncloud = idowncloud
|
36 | self.quizname = quizname
|
37 |
|
38 | def print(self):
|
39 |
|
40 | print('{0:15} {1:15} {2:10} {3:8} {4:15} {5}'.format(
|
41 | self.name,
|
42 | self.surname,
|
43 | self.group,
|
44 | self.idnumber,
|
45 | self.idowncloud,
|
46 | self.quizname))
|
47 |
|
48 | def ReadStudents(ParamCSVFile):
|
49 | |
50 | Renvoie un dictionnaire associant à chaque numéro d'étudiant
|
51 | un étudiant (objet Student)"""
|
52 | DictOfStudents = {}
|
53 | with open(ParamCSVFile, newline='') as csvfile:
|
54 | tableau = csv.DictReader(csvfile, delimiter=':')
|
55 | for row in tableau:
|
56 | StudentObj = Student( name = row["name"],
|
57 | surname = row["surname"],
|
58 | group = row["group"],
|
59 | idnumber = row["idnumber"],
|
60 | idowncloud = row["idowncloud"])
|
61 | DictOfStudents[StudentObj.idnumber] = StudentObj
|
62 | return DictOfStudents
|
63 |
|
64 | def recap(DictOfStudents):
|
65 |
|
66 | Student('name', 'surname', 'group', 'idnumber', 'idowncloud', 'quizname').print()
|
67 | for StudentId, StudentObj in DictOfStudents.items():
|
68 | StudentObj.print()
|
69 |
|
70 |
|
71 |
|
72 |
|
73 | def ReadQuiz(ParamFolder):
|
74 |
|
75 | ListOfQuiz = []
|
76 | for File in os.listdir(ParamFolder):
|
77 | if File.lower().endswith(('.pdf','.jpg')):
|
78 | ListOfQuiz.append(File)
|
79 | return ListOfQuiz
|
80 |
|
81 |
|
82 |
|
83 |
|
84 | def AssociateQuizToStudent(ListOfQuiz, DictOfStudents):
|
85 | |
86 | Met à jour le champ correspondant pour chaque objet Student du dictionnaire
|
87 | Renvoie le dictionnaire des étudiants."""
|
88 | for QuizName in ListOfQuiz:
|
89 | RegularExpression = re.compile('[0-9]+')
|
90 | IdNumber = re.search(RegularExpression,QuizName).group()
|
91 | try:
|
92 | DictOfStudents[IdNumber].quizname = QuizName
|
93 | except:
|
94 | pass
|
95 |
|
96 | return DictOfStudents
|
97 |
|
98 |
|
99 |
|
100 |
|
101 | def UploadAndShareQuiz(DictOfStudents, ParamOwncloudAdress, ParamOwncloudLogin, ParamOwncloudPass, ParamFolder):
|
102 |
|
103 | oc = owncloud.Client(ParamOwncloudAdress)
|
104 | oc.login(ParamOwncloudLogin,ParamOwncloudPass)
|
105 | FichiersEnvoyes = ''
|
106 | folder1 = 'Interros Maths/'
|
107 | try:
|
108 | oc.mkdir(folder1)
|
109 | print('Dossier ' + folder1 + ' créé')
|
110 | except:
|
111 | pass
|
112 | for StudentId, StudentObj in DictOfStudents.items():
|
113 | if StudentObj.quizname != '':
|
114 |
|
115 | folder2 = StudentObj.group + '/'
|
116 | folder3 = ( StudentObj.surname
|
117 | + ' ' + StudentObj.name
|
118 | + ' (' + StudentObj.idnumber + ')'
|
119 | +' - Interros Maths/')
|
120 | StudentFolder = folder1 + folder2 + folder3
|
121 | NewQuizName = ( ParamQuizName + ' - '
|
122 | + StudentObj.surname
|
123 | + ' ' + StudentObj.name
|
124 | + ' (' + StudentObj.idnumber + ')')
|
125 | NewFilePath = (StudentFolder
|
126 | + NewQuizName
|
127 | + '.' + StudentObj.quizname.split(".")[-1])
|
128 | try:
|
129 | oc.mkdir(folder1 + folder2)
|
130 | print('Dossier ' + folder2 + ' créé')
|
131 | except:
|
132 | pass
|
133 | try:
|
134 | oc.mkdir(StudentFolder)
|
135 | print('Dossier ' + StudentFolder + ' créé')
|
136 | except:
|
137 | pass
|
138 |
|
139 | oc.put_file(NewFilePath,
|
140 | ParamFolder + StudentObj.quizname)
|
141 |
|
142 | IsShared = False
|
143 | for FileShare in oc.get_shares(StudentFolder):
|
144 | if FileShare.get_share_with() == StudentObj.idowncloud:
|
145 | IsShared = True
|
146 | break
|
147 | if IsShared == False:
|
148 | if '@' in StudentObj.idowncloud:
|
149 | oc.share_file_with_user(StudentFolder, StudentObj.idowncloud + '/',
|
150 | remote_user=True)
|
151 | else:
|
152 | oc.share_file_with_user(StudentFolder, StudentObj.idowncloud)
|
153 | FichiersEnvoyes = FichiersEnvoyes + NewFilePath + '\n'
|
154 | return FichiersEnvoyes
|
155 |
|
156 |
|
157 |
|
158 |
|
159 | print('1) Lecture du fichier CSV\n')
|
160 | DictOfStudents = ReadStudents(ParamCSVFile)
|
161 |
|
162 |
|
163 | print('\n2) Lecture des fichiers des interros\n')
|
164 | ListOfQuiz = ReadQuiz(ParamFolder)
|
165 |
|
166 |
|
167 | print('\n3) Association des fichiers à chaque étudiant\n')
|
168 | DictOfStudents = AssociateQuizToStudent(ListOfQuiz, DictOfStudents)
|
169 |
|
170 |
|
171 | print('\n4) Création des dossiers et partages\n')
|
172 | FichiersEnvoyes = UploadAndShareQuiz(DictOfStudents, ParamOwncloudAdress, ParamOwncloudLogin, ParamOwncloudPass, ParamFolder)
|
173 | print(FichiersEnvoyes)
|