zephir.rapports.rapport

Package zephir :: Package rapports :: Module rapport |
[frames] | no frames]

# Source Code for Module zephir.rapports.rapport

      1  # -*- coding: UTF-8 -*-
      2  ###########################################################################
      3  # Eole NG - 2007
      4  # Copyright Pole de Competence Eole  (Ministere Education - Academie Dijon)
      5  # Licence CeCill  cf /root/LicenceEole.txt
      6  # eole@ac-dijon.fr
      7  #
      8  # rapport.py
      9  #
     10  # Interface d'écriture de rapport pour Zephir
     11  #
     12  ###########################################################################
     13  import random,os
     14  from zephir.rapports import connecteur, rml
     15  from zephir import config
     16
     17 -class Rapport:
     18
     19 -    def __init__(self,server,rne_rapport=None):
     20          self.PATH = config.PATH_TEMP
     21          if not os.path.isdir(config.PATH_TEMP):
     22              os.makedirs(config.PATH_TEMP)
     23          self.connect = connecteur.Connecteur(server,rne_rapport)
     24          self.rml = rml.RML()
     25
     26 -    def rapport_global(self):
     27          """
     28          Rapport concernant le zephir dans son ensemble
     29          """
     30          xml = self.modules() + self.rml.page_break()
     31          xml += self.variantes() + self.rml.page_break()
     32          xml += self.liste_etabs() + self.rml.page_break()
     33          xml += self.detail_etabs() + self.rml.page_break()
     34          pdf_string = self.rml.page("Rapport global",xml)
     35          pdf = self.rml.dump_pdf(pdf_string)
     36          filename = os.path.join(self.PATH,"rapport.pdf")
     37          fh = open(filename,'w')
     38          fh.write(pdf)
     39          fh.close()
     40
     41
     42 -    def pdf_file(self, pdf_string):
     43          """Serialisation de la chaine pdf
     44          dans un fichier au nom aléatoire
     45          """
     46          filename = os.path.join(self.PATH, str(random.random()) + ".pdf")
     47
     48          fh = open(filename,'w')
     49          fh.write(pdf_string)
     50          fh.close()
     51
     52          return filename
     53
     54 -    def modules(self):
     55          """Liste des modules
     56          """
     57          module = self.connect.module()
     58          table = self.rml.list_to_table(module)
     59
     60          xml = self.rml.sect("Liste des modules disponibles", table )
     61
     62          return xml
     63
     64 -    def variante_module(self, id_module):
     65          """
     66          """
     67          # récupération du nom du module
     68          title = "Variantes du module : %s" % self.connect.nom_module(id_module)
     69
     70          # récupération des variantes
     71          variante = self.connect._dict_variante(id_module)
     72          xml = ""
     73          for id_variante in variante.keys():
     74              xml = self.rml.list_to_table(self.connect.get_variante(id_variante))
     75          rml_string = self.rml.sect(title, xml)
     76          return rml_string
     77
     78 -    def variantes(self):
     79          title = "Liste des variantes"
     80          xml = ""
     81          for id_module in self.connect.dict_module().keys():
     82              xml += self.variante_module(id_module)
     83          return xml
     84
     85
     86 -    def detail_etab(self, id_etab):
     87          # on ignore les établissements n'ayant pas de serveurs
     88          serveurs= self.connect.id_serveur_etab(id_etab)
     89          if serveurs == []:
     90              serveurs = ""
     91          else:
     92              serveurs= self._liste_serveurs_etab(id_etab)
     93          title = "Détails de l'établissement %s" % self.connect.nom_etab(id_etab)
     94          etab = self.connect.get_etab(id_etab)
     95          xml = self.rml.dict_to_list(etab)
     96          rml_string = self.rml.sect(title, xml)
     97          return rml_string + serveurs
     98
     99 -    def liste_etabs(self):
    100          title = "Liste des établissements"
    101          list_etab = self.connect.noms_etab()
    102          xml = self.rml.list_to_list(list_etab)
    103          rml_string = self.rml.sect(title, xml)
    104          return rml_string
    105
    106 -    def detail_etabs(self):
    107          title = "Détail des établissements ayant des serveurs"
    108          xml = ""
    109          for id_etab in self.connect.id_etab():
    110              serveurs= self.connect.id_serveur_etab(id_etab)
    111              # on ignore les établissements n'ayant pas de serveurs
    112              if serveurs != []:
    113                  xml += self.detail_etab(id_etab)
    114                  xml += self.rml.page_break()
    115          rml_string = self.rml.sect(title, xml)
    116          return rml_string
    117
    118 -    def _liste_serveurs_etab(self,id_etab):
    119          """Liste simple des serveurs d'un etab
    120          """
    121          title="Liste des serveurs de l'établissement : %s" % self.connect.nom_etab(id_etab)
    122
    123          list_serveur = self.connect.libelle_serveur_etab(id_etab)
    124          xml = self.rml.list_to_list(list_serveur)
    125
    126          return self.rml.sect(title, xml)
    127
    128 -    def serveurs_etab(self, id_etab):
    129          """liste détaillée des serveurs d'un etab
    130          """
    131          title="Liste détaillées des serveurs de l'établissement : %s" % self.connect.nom_etab(id_etab)
    132          list_serv = self.connect.id_serveur_etab(id_etab)
    133
    134          rml_string=""
    135          for id_serveur in list_serv:
    136              rml_string += self.serveur(id_serveur)
    137
    138          return self.rml.sect(title, rml_string)
    139
    140 -    def serveur(self, id_serveur):
    141          """Description détaillée d'un serveur
    142          """
    143          title = "Description du serveur : %s" % self.connect.nom_serveur(id_serveur)
    144          serveur = self.connect.get_serveur(id_serveur)
    145
    146          # rml = self.rml.dict_to_list(serveur)
    147
    148          dict_materiel = {
    149              'materiel': serveur['materiel'],
    150              'processeur': serveur['processeur'],
    151              'disque_dur': serveur['disque_dur']
    152              }
    153
    154          materiel = """<para>
    155          <i>materiel</i> : %(materiel)s ,
    156          <i>processeur</i> : %(processeur)s,
    157          <i>disque dur</i> : %(disque_dur)s
    158          </para>
    159          """ % dict_materiel
    160
    161          dict_module = {
    162              'module_actuel': serveur['module_actuel'],
    163              'module_initial' : serveur['module_initial'],
    164              'variante':serveur['variante']
    165              }
    166
    167          module = """<para>
    168          <i>module initial </i> : %(module_initial)s,
    169          <i>module actuel installé </i> : %(module_actuel)s,
    170          <i>variante du module installé </i> : %(variante)s
    171          </para>
    172          """ % dict_module
    173
    174          dict_description = {
    175              'installateur': serveur['installateur'],
    176              'tel': serveur['tel'],
    177              'remarques' : serveur['remarques'],
    178              'date_install': serveur['date_install'],
    179              'rne': serveur['rne']
    180              }
    181
    182          description = """<para>
    183          <i>installateur</i> : %(installateur)s,
    184          <i>rne établissement</i> : %(rne)s,
    185          <i>contact téléphonique</i> : %(tel)s,
    186          <i>date d'installation</i> : %(date_install)s,
    187          <i>remarques</i> : %(remarques)s
    188          </para>
    189          """ % dict_description
    190
    191          list = [description, materiel, module]
    192          xml = "".join(list)
    193
    194          return self.rml.sect(title, xml)
    195
    196 -    def pdf(self, method_name, param=""):
    197          """hack d'éval pour éviter les hooks
    198          """
    199          method = "self." + method_name + "(" + param + ")"
    200          xml = self.rml.page("Bilan de l'état du Zéphir", eval(method))
    201          pdf = self.rml.dump_pdf(xml)
    202          return self.pdf_file(pdf)
    203
    204  if __name__ == "__main__":
    205      """
    206      Si le module est exécuté tel quel,
    207      un rappport générique est créé dans le répertoire temporaire
    208      """
    209      r = Rapport()
    210      r.rapport_global()
    211      # print r.pdf("modules")
    212      # r.pdf("variante_module",1)
    213      # r.pdf("detail_etabs")
    214      # print r.pdf("detail_etab","'0210056X'")
    215