-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathOutils.py
139 lines (109 loc) · 4.16 KB
/
Outils.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
# -*- coding: utf-8 -*-
"""
Created on Mon Jun 18 22:07:16 2018
"""
import win32com.server.register,win32com.client
from pythoncom import com_error
import pickle
import time
class Document:
def __init__(self,idDoc,titre="TitreEx"):
self.idDoc = int(idDoc)
self.titre = str(titre)
self.dictZones = {}
self.idZoneCourante = 0
def DefinieZone(self,idZone,texte=""):
self.dictZones[idZone] = self.ZoneDeTexte(idZone,texte)
def AfficheDoc(self):
for idZone,Zone in self.dictZones.items():
print(idZone,":",Zone.texte)
def SupprimeZone(self,idZone):
del self.dictZones[idZone]
def AjouteTexte(self,listeTextes):
if self.dictZones == {}:
depart = 1
else:
depart = max(self.dictZones.keys())+1
for index,texte in enumerate(listeTextes):
self.DefinieZone(index+depart,texte=texte)
class ZoneDeTexte:
def __init__(self,idZone,texte=""):
self.idZone = int(idZone)
self.texte = str(texte)
class Correcteur:
def __init__(self, serveur=None,antidote=None,langue="",outil="C",versionApi="2.0"):
self.serveur = serveur
if serveur == None:
self.serveur = win32com.client.Dispatch("Correcteur.Antidote") # si on l'assigne plutôt dans les paramètres, ça bugue
self.antidote = antidote
if antidote == None:
self.antidote = win32com.client.Dispatch("Antidote.ApiOle")
self.outil = outil
self.langue = ""
self.versionApi = versionApi
def catchcom(function):
def wrapper(*args):
try:
res = function(*args)
except com_error as error:
tmp = error
hr,msg,exc,arg = tmp.args
raise com_error(str(exc[2]))
return res
return wrapper
@catchcom
def Televerse(self,doc):
self.serveur.AjouteDoc(pickle.dumps(doc))
@catchcom
def TeleverseDocs(self,docs):
pickledDocs = pickle.dumps(docs)
self.serveur.AjouteDocs(pickledDocs)
@catchcom
def Telecharge(self,idDoc):
return pickle.loads(self.serveur.RecupereDoc(idDoc))
@catchcom
def TelechargeDocs(self,idDocListe):
docs = self.serveur.RecupereDocs(pickle.dumps(idDocListe))
return pickle.loads(docs)
@catchcom
def Corrige(self,idDoc):
self.serveur.DefinieDocCourant(idDoc)
self.antidote.LanceOutilDispatch2(self.serveur,self.outil,self.langue,self.versionApi)
@catchcom
def CorrigeDoc(self,idDoc,attendre=True,d=0.5,telecharger=False):
if not attendre:
self.Corrige(self,idDoc)
else:
self.AttendreActivationApp(self.Corrige,idDoc,d=d)
if telecharger:#disponible seulement si l'app a deu le temps d'effectuer la correction
return self.Telecharge(idDoc)
@catchcom
def CorrigeDocs(self,idDocListe,attendre=True,d=0.5,telecharger=False):
res = []
for idDoc in idDocListe:
res.append(self.CorrigeDoc(idDoc,attendre=attendre,d=d,telecharger=telecharger))
return res
@catchcom
def CorrigeDeMeme(self,doc,d=0.5):
self.Televerse(doc)
self.AttendreActivationApp(self.CorrigeDoc,doc.idDoc,d=d)
return self.Telecharge(doc.idDoc)
@catchcom
def CorrigeEtAttends(self,idDoc,d=0.5):
self.AttendreActivationApp(self.CorrigeDoc,idDoc,d=d)
@catchcom
def AttendreActivationApp(self,fonction,*args,d=0.5):
tmp = self.serveur.compteActiveApplication
res = fonction(*args)
while(self.serveur.compteActiveApplication == tmp):
time.sleep(d)
return res
@catchcom
def SupprimeDoc(self,idDoc):
self.serveur.SupprimeDocs([int(idDoc)])
@catchcom
def SupprimeDocs(self,idDocListe):
self.serveur.SupprimeDocs(idDocListe)
@catchcom
def Fermeture(self):
self.antidote.ClientApiEnFermetureDispatch(self.serveur)