<commit_before>import sys
import platform
import subprocess
from getpass import getpass

liste_echecs = []
liste_echecs_config = []

install_command = "apt"

def aptinstall(package):
    return subprocess.run(
        ["sudo",install_command, "install", package])

def pipinstall(package):
    return subprocess.run(
        ["sudo","-H","pip3", "install", package])

def configpostgresl():
    from pexpect import spawn, TIMEOUT
    from ecolle.config import DB_PASSWORD, DB_NAME, DB_USER, DB_PORT, DB_HOST
    if DB_PASSWORD =="":
        return
    print("-"*20)
    print("configuration de la base de données")
    p=spawn("sudo -i -u postgres", encoding="utf8")
    passwd = getpass("[sudo] mot de passe: ")
    p.sendline(passwd)
    p.sendline("createuser -PE {}".format(DB_USER))
    p.expect("Enter password for new role: ")
    p.sendline("{}".format(DB_PASSWORD))
    p.expect("Enter it again: ")
    p.sendline("{}".format(DB_PASSWORD))
    i = p.expect(['createuser: creation of new role failed: ERROR:  role "e-colle" already exists',TIMEOUT],timeout=2)
    if i==0:
        print("l'utilisateur e-colle existe déjà")
        maj = input("Voulez-vous mettre à jour son mot de passe? O/N (N): ")
        if maj not in "nN":
            p.sendline("dropuser e-colle")
            p.sendline("createuser -PE e-colle")
            p.expect("Enter password for new role: ")
            p.sendline("{}".format(DB_PASSWORD))
            p.expect("Enter it again: ")
            p.sendline("{}".format(DB_PASSWORD))
            print("mot de passe mis à jour")
    p.sendline("createdb -O {} {} -h {} -E UTF8 {}".format(DB_USER, "" if not DB_PORT else ("-p " + DB_PORT), DB_HOST, DB_NAME))
    i = p.expect(['createdb: database creation failed: ERROR:  database "e-colle" already exists',TIMEOUT],timeout=2)
    if i==0:
        print("la base de données e-colle existe déjà")
        maj = input("Voulez-vous l'effacer et la recréer? O/N (N): ")
        if maj not in "nN":
            p.sendline("dropdb e-colle")
            p.sendline("createdb -O {} {} -h {} -E UTF8 {}".format(DB_USER, "" if not DB_PORT else ("-p " + DB_PORT), DB_HOST, DB_NAME))
            print("base de données recréée")
    p.sendline("exit")
    p.close

def configmysql():
    from pexpect import spawn, TIMEOUT
    from ecolle.config import DB_PASSWORD, DB_NAME, DB_USER, DB_PORT, DB_HOST
    if DB_PASSWORD =="":
        return
    print("-"*20)
    print("configuration de la base de données")
    p=spawn("sudo mysql", encoding="utf8")
    passwd = getpass("[sudo] mot de passe: ")
    p.sendline(passwd)
    p.sendline("CREATE USER '{}' IDENTIFIED BY '{}';".format(DB_USER, DB_PASSWORD))
    i = p.expect(['ERROR',TIMEOUT],timeout=2)
    if i==0:
        print("l'utilisateur e-colle existe déjà")
        maj = input("Voulez-vous mettre à jour son mot de passe? O/N (N): ")
        if maj not in "nN":
            p.sendline("DROP USER `{}`;".format(DB_USER))
            p.sendline("CREATE USER '{}' IDENTIFIED BY '{}';".format(DB_USER, DB_PASSWORD))
            print("mot de passe mis à jour")
    p.sendline("CREATE DATABASE `{}` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;".format(DB_NAME))
    i = p.expect(["ERROR",TIMEOUT],timeout=2)
    if i==0:
        print("la base de données e-colle existe déjà")
        maj = input("Voulez-vous l'effacer et la recréer? O/N (N): ")
        if maj not in "nN":
            p.sendline("DROP DATABASE `{}`;".format(DB_NAME))
            p.sendline("CREATE DATABASE `{}` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;".format(DB_NAME))
            print("base de données recréée")
    p.sendline("GRANT ALL PRIVILEGES ON `{}`.* TO `{}` WITH GRANT OPTION;".format(DB_NAME, DB_USER))
    i = p.expect(["ERROR",TIMEOUT],timeout=2)
    if i==0:
        print("erreur dans la modification des privilèges")
    p.sendline("exit")
    p.close()

def configsqlite():
    from pexpect import spawn
    print("-"*20)
    print("configuration de la base de données")
    p=spawn("sqlite3 e-colle.db",encoding="utf8")
    print("base de données créée")
    p.sendline(".quit")

def installapache():
    print("-"*20)
    print("installation de apache2")
    completedProcess = aptinstall("apache2")
    if completedProcess.returncode:
        print("échec de l'installation d'apache2")
        liste_echecs.append("apache2")
    print("-"*20)
    print("installation de libapache2-mod-wsgi-py3")
    completedProcess = aptinstall("libapache2-mod-wsgi-py3")
    if completedProcess.returncode:
        print("échec de l'installation de libapache2-mod-wsgi-py3")
        liste_echecs.append("libapache2-mod-wsgi-py3")
    if "apache2" not in liste_echecs and "libapache2-mod-wsgi-py3" not in liste_echecs:
        configapache()

def configapache():
    code1 = subprocess.run(["sudo","a2enmod","wsgi"]).returncode # activation du mod wsgi
    # lecture de e-colle.conf
    subprocess.run(["sudo","python3","apacheconf.py"])
    code2 = subprocess.run(["sudo","a2ensite","e-colle.conf"]).returncode # activation du site
    if not(code1 or code2):
        droits()
    subprocess.run(["sudo","service","apache2","reload"])

def droits():
    print("gestion des droits d'apache")
    p = subprocess.Popen("whoami",shell=True,stdout=subprocess.PIPE)
    user = str(p.communicate()[0], encoding="utf8").strip()
    subprocess.run(["sudo","groupadd","web"]) # création du group web
    subprocess.run(["sudo","adduser",user,"web"]) # ajout de l'utilisateur courant au groupe web
    subprocess.run(["sudo","adduser","www-data","web"]) # ajout de l'utilisateur www-data (apache) au groupe web
    subprocess.run(["sudo","chown","-R","{}:web".format(user),"../e-colle"]) # tout le répertoire e-colle est associé au group web
    print("changement des droits effectué")


def main():
    global install_command
    if platform.system().lower() != 'linux':
        print("cette commande ne fonctionne que sous linux")
        return
    if sys.version[:3] < '3.5':
        print("Il vous faut une version de de Python >= 3.5")
        return
    p = subprocess.Popen("command -v apt",shell=True,stdout=subprocess.PIPE)
    result = p.communicate()[0]
    if result != bytes(0):
        install_command = "apt"
    else:
        p = subprocess.Popen("command -v yum",shell=True,stdout=subprocess.PIPE)
        result = p.communicate()[0]
        if result != bytes(0):
            install_command = "yum"
        else:
            print("impossible d'exécuter le script sous ce système d'exploitation")
            return
    print("installation des logiciels / biliothèques python nécessaires")
    print("-"*20)
    print("installation de python3-pip")
    completedProcess = aptinstall("python3-pip")
    if completedProcess.returncode:
        print("échec de l'installation de pip")
        liste_echecs.append("python3-pip")
    else:
        print("installation des bibliothèques python requises")
        for bibli in ["django","pexpect","reportlab","unidecode","pillow","qrcode"]:
            print("-"*20)
            completedProcess = pipinstall(bibli)
            if completedProcess.returncode:
                print("échec de l'installation de " + bibli)
                liste_echecs.append(bibli)
    print("-"*20)
    print("installation de mysqlclient")
    completedProcess = aptinstall("libmysqlclient-dev")
    completedProcess = pipinstall("mysqlclient")
    if completedProcess.returncode:
        print("échec de l'installation de mysqlclient")
        liste_echecs.append("mysqlclient")
    print("-"*20)
    print("installation de psycopg2")
    completedProcess = aptinstall("llibpq-dev")
    completedProcess = pipinstall("psycopg2")
    if completedProcess.returncode:
        print("échec de l'installation de psycipg2")
        liste_echecs.append("psycopg2")
    print("-"*20)
    init = input("Avez-vous initialisé les données du fichier de configuration\n\
        à l'aide de la commande 'python3 manage.py initdata' ?\n\
        Si ce n'est pas le cas, voulez-vous le faire maintenant?\n\
        (très fortement conseillé) o/n: ")
    while init == "" or init not in "oOnN":
        init = input("réponse incorrecte, voulez-vous exécuter l'initialisation\n\
            du fichier de configuration? o/n: ")
    if init in "oO":
        print("initialisation du fichier de configuration")
        completedProcess = subprocess.run(["python3","manage.py","initdata"])
        if completedProcess.returncode:
            print("l'initialisation des données de donfiguration a échoué, il faudra le faire à la main")
        else:
            print("l'initialisation des données de configuration a été effectuée avec succès")<commit_msg>correction coquille (llibpq-dev au lieu de libpq-dev)<commit_after>import sys
import platform
import subprocess
from getpass import getpass

liste_echecs = []
liste_echecs_config = []

install_command = "apt"

def aptinstall(package):
    return subprocess.run(
        ["sudo",install_command, "install", package])

def pipinstall(package):
    return subprocess.run(
        ["sudo","-H","pip3", "install", package])

def configpostgresl():
    from pexpect import spawn, TIMEOUT
    from ecolle.config import DB_PASSWORD, DB_NAME, DB_USER, DB_PORT, DB_HOST
    if DB_PASSWORD =="":
        return
    print("-"*20)
    print("configuration de la base de données")
    p=spawn("sudo -i -u postgres", encoding="utf8")
    passwd = getpass("[sudo] mot de passe: ")
    p.sendline(passwd)
    p.sendline("createuser -PE {}".format(DB_USER))
    p.expect("Enter password for new role: ")
    p.sendline("{}".format(DB_PASSWORD))
    p.expect("Enter it again: ")
    p.sendline("{}".format(DB_PASSWORD))
    i = p.expect(['createuser: creation of new role failed: ERROR:  role "e-colle" already exists',TIMEOUT],timeout=2)
    if i==0:
        print("l'utilisateur e-colle existe déjà")
        maj = input("Voulez-vous mettre à jour son mot de passe? O/N (N): ")
        if maj not in "nN":
            p.sendline("dropuser e-colle")
            p.sendline("createuser -PE e-colle")
            p.expect("Enter password for new role: ")
            p.sendline("{}".format(DB_PASSWORD))
            p.expect("Enter it again: ")
            p.sendline("{}".format(DB_PASSWORD))
            print("mot de passe mis à jour")
    p.sendline("createdb -O {} {} -h {} -E UTF8 {}".format(DB_USER, "" if not DB_PORT else ("-p " + DB_PORT), DB_HOST, DB_NAME))
    i = p.expect(['createdb: database creation failed: ERROR:  database "e-colle" already exists',TIMEOUT],timeout=2)
    if i==0:
        print("la base de données e-colle existe déjà")
        maj = input("Voulez-vous l'effacer et la recréer? O/N (N): ")
        if maj not in "nN":
            p.sendline("dropdb e-colle")
            p.sendline("createdb -O {} {} -h {} -E UTF8 {}".format(DB_USER, "" if not DB_PORT else ("-p " + DB_PORT), DB_HOST, DB_NAME))
            print("base de données recréée")
    p.sendline("exit")
    p.close

def configmysql():
    from pexpect import spawn, TIMEOUT
    from ecolle.config import DB_PASSWORD, DB_NAME, DB_USER, DB_PORT, DB_HOST
    if DB_PASSWORD =="":
        return
    print("-"*20)
    print("configuration de la base de données")
    p=spawn("sudo mysql", encoding="utf8")
    passwd = getpass("[sudo] mot de passe: ")
    p.sendline(passwd)
    p.sendline("CREATE USER '{}' IDENTIFIED BY '{}';".format(DB_USER, DB_PASSWORD))
    i = p.expect(['ERROR',TIMEOUT],timeout=2)
    if i==0:
        print("l'utilisateur e-colle existe déjà")
        maj = input("Voulez-vous mettre à jour son mot de passe? O/N (N): ")
        if maj not in "nN":
            p.sendline("DROP USER `{}`;".format(DB_USER))
            p.sendline("CREATE USER '{}' IDENTIFIED BY '{}';".format(DB_USER, DB_PASSWORD))
            print("mot de passe mis à jour")
    p.sendline("CREATE DATABASE `{}` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;".format(DB_NAME))
    i = p.expect(["ERROR",TIMEOUT],timeout=2)
    if i==0:
        print("la base de données e-colle existe déjà")
        maj = input("Voulez-vous l'effacer et la recréer? O/N (N): ")
        if maj not in "nN":
            p.sendline("DROP DATABASE `{}`;".format(DB_NAME))
            p.sendline("CREATE DATABASE `{}` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;".format(DB_NAME))
            print("base de données recréée")
    p.sendline("GRANT ALL PRIVILEGES ON `{}`.* TO `{}` WITH GRANT OPTION;".format(DB_NAME, DB_USER))
    i = p.expect(["ERROR",TIMEOUT],timeout=2)
    if i==0:
        print("erreur dans la modification des privilèges")
    p.sendline("exit")
    p.close()

def configsqlite():
    from pexpect import spawn
    print("-"*20)
    print("configuration de la base de données")
    p=spawn("sqlite3 e-colle.db",encoding="utf8")
    print("base de données créée")
    p.sendline(".quit")

def installapache():
    print("-"*20)
    print("installation de apache2")
    completedProcess = aptinstall("apache2")
    if completedProcess.returncode:
        print("échec de l'installation d'apache2")
        liste_echecs.append("apache2")
    print("-"*20)
    print("installation de libapache2-mod-wsgi-py3")
    completedProcess = aptinstall("libapache2-mod-wsgi-py3")
    if completedProcess.returncode:
        print("échec de l'installation de libapache2-mod-wsgi-py3")
        liste_echecs.append("libapache2-mod-wsgi-py3")
    if "apache2" not in liste_echecs and "libapache2-mod-wsgi-py3" not in liste_echecs:
        configapache()

def configapache():
    code1 = subprocess.run(["sudo","a2enmod","wsgi"]).returncode # activation du mod wsgi
    # lecture de e-colle.conf
    subprocess.run(["sudo","python3","apacheconf.py"])
    code2 = subprocess.run(["sudo","a2ensite","e-colle.conf"]).returncode # activation du site
    if not(code1 or code2):
        droits()
    subprocess.run(["sudo","service","apache2","reload"])

def droits():
    print("gestion des droits d'apache")
    p = subprocess.Popen("whoami",shell=True,stdout=subprocess.PIPE)
    user = str(p.communicate()[0], encoding="utf8").strip()
    subprocess.run(["sudo","groupadd","web"]) # création du group web
    subprocess.run(["sudo","adduser",user,"web"]) # ajout de l'utilisateur courant au groupe web
    subprocess.run(["sudo","adduser","www-data","web"]) # ajout de l'utilisateur www-data (apache) au groupe web
    subprocess.run(["sudo","chown","-R","{}:web".format(user),"../e-colle"]) # tout le répertoire e-colle est associé au group web
    print("changement des droits effectué")


def main():
    global install_command
    if platform.system().lower() != 'linux':
        print("cette commande ne fonctionne que sous linux")
        return
    if sys.version[:3] < '3.5':
        print("Il vous faut une version de de Python >= 3.5")
        return
    p = subprocess.Popen("command -v apt",shell=True,stdout=subprocess.PIPE)
    result = p.communicate()[0]
    if result != bytes(0):
        install_command = "apt"
    else:
        p = subprocess.Popen("command -v yum",shell=True,stdout=subprocess.PIPE)
        result = p.communicate()[0]
        if result != bytes(0):
            install_command = "yum"
        else:
            print("impossible d'exécuter le script sous ce système d'exploitation")
            return
    print("installation des logiciels / biliothèques python nécessaires")
    print("-"*20)
    print("installation de python3-pip")
    completedProcess = aptinstall("python3-pip")
    if completedProcess.returncode:
        print("échec de l'installation de pip")
        liste_echecs.append("python3-pip")
    else:
        print("installation des bibliothèques python requises")
        for bibli in ["django","pexpect","reportlab","unidecode","pillow","qrcode"]:
            print("-"*20)
            completedProcess = pipinstall(bibli)
            if completedProcess.returncode:
                print("échec de l'installation de " + bibli)
                liste_echecs.append(bibli)
    print("-"*20)
    print("installation de mysqlclient")
    completedProcess = aptinstall("libmysqlclient-dev")
    completedProcess = pipinstall("mysqlclient")
    if completedProcess.returncode:
        print("échec de l'installation de mysqlclient")
        liste_echecs.append("mysqlclient")
    print("-"*20)
    print("installation de psycopg2")
    completedProcess = aptinstall("libpq-dev")
    completedProcess = pipinstall("psycopg2")
    if completedProcess.returncode:
        print("échec de l'installation de psycipg2")
        liste_echecs.append("psycopg2")
    print("-"*20)
    init = input("Avez-vous initialisé les données du fichier de configuration\n\
        à l'aide de la commande 'python3 manage.py initdata' ?\n\
        Si ce n'est pas le cas, voulez-vous le faire maintenant?\n\
        (très fortement conseillé) o/n: ")
    while init == "" or init not in "oOnN":
        init = input("réponse incorrecte, voulez-vous exécuter l'initialisation\n\
            du fichier de configuration? o/n: ")
    if init in "oO":
        print("initialisation du fichier de configuration")
        completedProcess = subprocess.run(["python3","manage.py","initdata"])
        if completedProcess.returncode:
            print("l'initialisation des données de donfiguration a échoué, il faudra le faire à la main")
        else:
            print("l'initialisation des données de configuration a été effectuée avec succès")
{'fraction_non_alphanumeric': 0.14188142111002697, 'fraction_numerical': 0.01010158985249383, 'mean_word_length': 3.165431508486732, 'pattern_counts': {'":': 16, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 4, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5466187', 'n_tokens_mistral': 5814, 'n_tokens_neox': 5742, 'n_words': 1401}