# Module `bloc1Pack.HTML_global`

Générer un fichier HTML contenant toutes les données du fichier initial sous la forme d’un tableau (balise table) statique. Étant donné le nombre important de lignes du tableau initial, 66 096, on fait le choix de générer plusieurs fichiers HTML pour séparer ce tableau en sous-tableaux et ainsi afficher toutes les données sur plusieurs pages. Ainsi le navigateur est soulagé et l'affichage plus rapide !

- Le tableau doit être trié selon :
  - les régions (colonne AB), index 27
  - puis les départements (colonne AA), index 25
  - puis le code de la commune (colonne I), index 8
  - puis le nom de l’établissement (colonne B) index 1
- La ligne des titres doit visuellement se démarquer
- Les autres lignes doivent être alternativement sur fond gris clair et blanc

Expand source code

    #!/usr/bin/python3
    #-*- coding: utf8 -*-

    # @author : Sébastien LOZANO

    """Générer un fichier HTML contenant toutes les données du fichier initial sous la forme d’un tableau (balise table) statique. Étant donné le nombre important de lignes du tableau initial, 66 096, on fait le choix de générer plusieurs fichiers HTML pour séparer ce tableau en sous-tableaux et ainsi afficher toutes les données sur plusieurs pages. Ainsi le navigateur est soulagé et l'affichage plus rapide !

        * Le tableau doit être trié selon :
            * les régions (colonne AB), index 27
            * puis les départements (colonne AA), index 25
            * puis le code de la commune (colonne I), index 8
            * puis le nom de l’établissement (colonne B) index 1
        * La ligne des titres doit visuellement se démarquer
        * Les autres lignes doivent être alternativement sur fond gris clair et blanc
    """
    pass

    # On fait les imports nécessaires selon le contexte
    if __name__ == "__main__":
        import PY_functions as b1f
        import HTML_constantes as html_const
    else:
        import bloc1Pack.PY_functions as b1f
        import bloc1Pack.HTML_constantes as html_const

    ############################################################################################################
    # Importation des bibliotheques
    ############################################################################################################
    from operator import itemgetter # Pour la gestion du tri des listes de tuples
    import os # Notamment pour générer la documentation et la création de répertoires

    ############################################################################################################
    # Générer un fichier HTML contenant toutes les données du fichier initial sous la forme
    # d’un tableau (balise table) statique
    #===> Le tableau doit être trié selon :
    #   ===> les régions (colonne AB), index 27
    #   ===> puis les départements (colonne AA), index 25
    #   ===> puis le code de la commune (colonne I), index 8
    #   ===> puis le nom de l’établissement (colonne B) index 1
    #   Le tri pourra se faire avec la fonction de tri de Python,
    #   prenant en argument une fonction de comparaison ad hoc.
    #===> La ligne des titres doit visuellement se démarquer
    #===> Les autres lignes doivent être alternativement sur fond gris clair et blanc
    #
    # Étant donné le nombre important de lignes du fichier csv,
    # On crée un fichier HTML pour subdiviser les données du fichier csv
    # et ainsi diminuer le temps de chargement
    ############################################################################################################

    # Le tableau global a été extrait dans le module bloc1Pack.PY_functions dans la variable global_list_of_tuples_tab
    # On commence par trier les données comme demandé avec la fonction de tri de python
    # On supprime l'entete
    global_list_of_tuples_tab_trie = b1f.global_list_of_tuples_tab[1:]
    # Puis on trie
    global_list_of_tuples_tab_trie = sorted(global_list_of_tuples_tab_trie,key=itemgetter(27,25,8,1))

    # Le tableau global a été extrait dans le module bloc1Pack.PY_functions dans la variable global_list_of_tuples_tab
    # On va le découper et récupérer les morceaux dans une liste de listes
    # afin de pouvoir découper les pages HTML et diminuer le temps de chargement
    # On génère 40 fichiers
    nb_parts = 40
    # La méthode cut_list du sous module bloc1Pack.PY_functions divise une liste
    # en liste de sous-listes
    lists_of_tuples_tab_trie = b1f.cut_list(global_list_of_tuples_tab_trie,nb_parts)

    def create_page(filename: str,index: str):
        """Crée un fichier HTML pour chaque liste de tuples issue du découpage de l'extraction du fichier csv global.

            `Paramètres`

                * filename : Une chaine de caractères correspondant à lapartie commune des fichiers HTML.
                * index : Une chaine de caractères contenant l'index du tuple contenant les données.

            `Sorties`

                * Un fichier HTML

            `Notes`
                Cette fonction permet de générer automatiquement les pages contenant toutes les données du fiochier csv global
                et la navigation entre celles-ci.
        """
        pass

        # On définit les index précédents et suivants pour gérer la navigation
        if (index == str(nb_parts)):
            indexPrec = int(index)-1
            indexSuiv = 1
        elif (index == '1'):
            indexPrec = nb_parts
            indexSuiv = int(index)+1
        else:
            indexPrec = int(index)-1
            indexSuiv = int(index)+1

        # On crée le dossier qui va accueillir les fichiers HTML si il n'existe pas
        if not os.path.exists("./pagesWeb/"):
            os.mkdir("./pagesWeb/")

        #On ouvre en écriture le fichier html qui va recevoir le code
        fichierHTML1 = open("./pagesWeb/tableauComplet_"+index+".html", "w")

        # On ajoute le doctype et le head
        for elt in html_const.docTypeHeadStyle:
            fichierHTML1.writelines(elt)

        # On ouvre le body
        fichierHTML1.writelines([
        "<body>\n"
        ])

        # On ajoute les éléments de la barre de navigation
        for elt in html_const.barreDeNavigation:
            fichierHTML1.writelines(elt)

        fichierHTML1.writelines([
            """
            <script>
                // Pour aller directement à une page donnée indiquée par l'utilisateur
                function directement_page(n) {
                    let cible = document.getElementById("nb_direct");
                    cible.innerHTML = `<a class="suivButton" href="./tableauComplet_${n}.html"><span>en cliquant ici !</span></a>`;
                };
            </script>
            """
        ])
        # On ajoute une partie spécifique
        fichierHTML1.writelines([
        "<h2>TABLEAU AVEC TOUTES LES DONNÉES DU FICHIER INITIAL SUR "+str(nb_parts)+" PAGES</h2>\n",
        "<h3><a class=\"precButton\" href=\"./tableauComplet_"+str(indexPrec)+".html\" target=\"_self\"><span>Vers la page "+str(indexPrec)+"</span></a> <span class=\"currentButton\"> Vous êtes page "+index+"</span> <a class=\"suivButton\" href=\"./tableauComplet_"+str(indexSuiv)+".html\" target=\"_self\"><span> Vers la page "+str(indexSuiv)+"</span></a></h3>\n",
        "<h4>Changer la valeur pour aller directement à la page <input id=\"direct_input\" type=\"number\" step=\"1\" value=\""+index+"\" min=\"1\" max=\"40\" onchange=\"directement_page(this.value)\"> <span id=\"nb_direct\"></span> </h4>"
        ])

        # On ouvre le tableau HTML
        fichierHTML1.writelines([
        "<table>\n",
        ])

        # On affiche les entetes
        fichierHTML1.writelines(["<tr>"])
        for colonnes in b1f.global_list_of_tuples_tab[0]:
            fichierHTML1.writelines(["<th>{}</th>".format(colonnes)])
        fichierHTML1.writelines(["</tr>\n"])

        # On affiche le reste
        # compteur de ligne pour la couleur du background
        cpt = 1
        for lignes in lists_of_tuples_tab_trie[int(index)-1]:
            if (cpt%2 == 0):
                fichierHTML1.writelines(["<tr class=\"evenNthChildBackground\">"])
            else:
                fichierHTML1.writelines(["<tr class=\"oddNthChildBackground\">"])
            cpt+=1
            for colonnes in lignes:
                fichierHTML1.writelines(["<td>{}</td>".format(colonnes)])
            fichierHTML1.writelines(["</tr>\n"])

        # On ferme le tableau HTML et le body
        fichierHTML1.writelines([
        """
        </table>\n
        </body>\n
        </html>\n
        """
        ])

        #On ferme le fichier
        fichierHTML1.close()

    def main():
        """Fonction principale qui sera appelée pour générer l'ensemble des pages du site.

        """
        pass

        # On numérote les pages de 1 à nb_parts
        for i in range(1,nb_parts+1) :
            create_page("./pagesWeb/tableauComplet_",str(i))

    if __name__ == "__main__":
        main()

## Functions

`def create_page(filename: str, index: str)`

  Crée un fichier HTML pour chaque liste de tuples issue du découpage de l'extraction du fichier csv global.

  `Paramètres`

      * filename : Une chaine de caractères correspondant à lapartie commune des fichiers HTML.
      * index : Une chaine de caractères contenant l'index du tuple contenant les données.

  `Sorties`

      * Un fichier HTML

  `Notes` Cette fonction permet de générer automatiquement les pages contenant toutes les données du fiochier csv global et la navigation entre celles-ci.

  Expand source code

      def create_page(filename: str,index: str):
          """Crée un fichier HTML pour chaque liste de tuples issue du découpage de l'extraction du fichier csv global.

              `Paramètres`

                  * filename : Une chaine de caractères correspondant à lapartie commune des fichiers HTML.
                  * index : Une chaine de caractères contenant l'index du tuple contenant les données.

              `Sorties`

                  * Un fichier HTML

              `Notes`
                  Cette fonction permet de générer automatiquement les pages contenant toutes les données du fiochier csv global
                  et la navigation entre celles-ci.
          """
          pass

          # On définit les index précédents et suivants pour gérer la navigation
          if (index == str(nb_parts)):
              indexPrec = int(index)-1
              indexSuiv = 1
          elif (index == '1'):
              indexPrec = nb_parts
              indexSuiv = int(index)+1
          else:
              indexPrec = int(index)-1
              indexSuiv = int(index)+1

          # On crée le dossier qui va accueillir les fichiers HTML si il n'existe pas
          if not os.path.exists("./pagesWeb/"):
              os.mkdir("./pagesWeb/")

          #On ouvre en écriture le fichier html qui va recevoir le code
          fichierHTML1 = open("./pagesWeb/tableauComplet_"+index+".html", "w")

          # On ajoute le doctype et le head
          for elt in html_const.docTypeHeadStyle:
              fichierHTML1.writelines(elt)

          # On ouvre le body
          fichierHTML1.writelines([
          "<body>\n"
          ])

          # On ajoute les éléments de la barre de navigation
          for elt in html_const.barreDeNavigation:
              fichierHTML1.writelines(elt)

          fichierHTML1.writelines([
              """
              <script>
                  // Pour aller directement à une page donnée indiquée par l'utilisateur
                  function directement_page(n) {
                      let cible = document.getElementById("nb_direct");
                      cible.innerHTML = `<a class="suivButton" href="./tableauComplet_${n}.html"><span>en cliquant ici !</span></a>`;
                  };
              </script>
              """
          ])
          # On ajoute une partie spécifique
          fichierHTML1.writelines([
          "<h2>TABLEAU AVEC TOUTES LES DONNÉES DU FICHIER INITIAL SUR "+str(nb_parts)+" PAGES</h2>\n",
          "<h3><a class=\"precButton\" href=\"./tableauComplet_"+str(indexPrec)+".html\" target=\"_self\"><span>Vers la page "+str(indexPrec)+"</span></a> <span class=\"currentButton\"> Vous êtes page "+index+"</span> <a class=\"suivButton\" href=\"./tableauComplet_"+str(indexSuiv)+".html\" target=\"_self\"><span> Vers la page "+str(indexSuiv)+"</span></a></h3>\n",
          "<h4>Changer la valeur pour aller directement à la page <input id=\"direct_input\" type=\"number\" step=\"1\" value=\""+index+"\" min=\"1\" max=\"40\" onchange=\"directement_page(this.value)\"> <span id=\"nb_direct\"></span> </h4>"
          ])

          # On ouvre le tableau HTML
          fichierHTML1.writelines([
          "<table>\n",
          ])

          # On affiche les entetes
          fichierHTML1.writelines(["<tr>"])
          for colonnes in b1f.global_list_of_tuples_tab[0]:
              fichierHTML1.writelines(["<th>{}</th>".format(colonnes)])
          fichierHTML1.writelines(["</tr>\n"])

          # On affiche le reste
          # compteur de ligne pour la couleur du background
          cpt = 1
          for lignes in lists_of_tuples_tab_trie[int(index)-1]:
              if (cpt%2 == 0):
                  fichierHTML1.writelines(["<tr class=\"evenNthChildBackground\">"])
              else:
                  fichierHTML1.writelines(["<tr class=\"oddNthChildBackground\">"])
              cpt+=1
              for colonnes in lignes:
                  fichierHTML1.writelines(["<td>{}</td>".format(colonnes)])
              fichierHTML1.writelines(["</tr>\n"])

          # On ferme le tableau HTML et le body
          fichierHTML1.writelines([
          """
          </table>\n
          </body>\n
          </html>\n
          """
          ])

          #On ferme le fichier
          fichierHTML1.close()

`def main()`

  Fonction principale qui sera appelée pour générer l'ensemble des pages du site.

  Expand source code

      def main():
          """Fonction principale qui sera appelée pour générer l'ensemble des pages du site.

          """
          pass

          # On numérote les pages de 1 à nb_parts
          for i in range(1,nb_parts+1) :
              create_page("./pagesWeb/tableauComplet_",str(i))