示例#1
0
    def handle(self, *args, **options):
        verbosity = options['verbosity']
        database = options['database']

        flush = Flush()
        flush.handle(**options)
        if verbosity > 0:
            self.stdout.write(self.style.SUCCESS('Database flushed.'))

        for config in apps.app_configs.values():
            if path.split(path.split(config.path)[0])[1] == 'babybuddy':
                migrate = Migrate()
                options['app_label'] = config.name
                options['migration_name'] = 'zero'

                try:
                    migrate.handle(*args, **options)
                except CommandError:
                    # Ignore apps without migrations.
                    pass

        migrate = Migrate()
        options['app_label'] = None
        options['migration_name'] = None
        migrate.handle(*args, **options)

        self.UserModel._default_manager.db_manager(database).create_superuser(
            **{
                self.UserModel.USERNAME_FIELD: 'admin',
                'email': '*****@*****.**',
                'password': '******'
            }
        )
        if options['verbosity'] > 0:
            self.stdout.write('Superuser created successfully.')

        fake = Fake()
        fake.handle(*args, **options)

        if verbosity > 0:
            self.stdout.write(self.style.SUCCESS('Database reset complete.'))
示例#2
0
    def handle(self, *args, **options):
        verbosity = options["verbosity"]

        # Flush all existing database records.
        flush = Flush()
        flush.handle(**options)
        if verbosity > 0:
            self.stdout.write(self.style.SUCCESS("Database flushed."))

        # Run migrations for all Baby Buddy apps.
        for config in apps.app_configs.values():
            if path.split(path.split(config.path)[0])[1] == "babybuddy":
                migrate = Migrate()
                options["app_label"] = config.name
                options["migration_name"] = "zero"

                try:
                    migrate.handle(*args, **options)
                except CommandError:
                    # Ignore apps without migrations.
                    pass

        # Run other migrations.
        migrate = Migrate()
        options["app_label"] = None
        options["migration_name"] = None
        migrate.handle(*args, **options)

        # Clear cache.
        cache.clear()
        if verbosity > 0:
            self.stdout.write(self.style.SUCCESS("Cache cleared."))

        # Populate database with fake data.
        fake = Fake()
        fake.handle(*args, **options)

        if verbosity > 0:
            self.stdout.write(self.style.SUCCESS("Database reset complete."))
示例#3
0
    def handle(self, *app_labels, **options):
        fichiers_bz2 = sorted(
            [f for f in os.listdir(BACKUP_ROOT) if f[-4:] == ".bz2"])
        if not fichiers_bz2:
            self.stdout.write("""Aucune sauvegarde des données n'est présente,
				impossible de charger des données antérieures""")
        else:
            for num, fichier in zip(range(1,
                                          len(fichiers_bz2) + 1),
                                    fichiers_bz2):
                self.stdout.write("{}: {}".format(num, fichier))
            num = input(
                "Quelle sauvegarde voulez-vous charger? (Taper le numéro ou a pour abandon): "
            )
            while not (num == "a" or num.isnumeric()
                       and 0 < int(num) <= len(fichiers_bz2)):
                self.stdout.write("numéro inexistant, recommencez")
                num = input(
                    "Quelle sauvegarde voulez-vous charger? (Taper le numéro ou a pour abandon): "
                )
            if num == "a":
                self.stdout.write("abandon")
            else:
                num = int(num)
                fichier = fichiers_bz2[num - 1]
                date = fichier.split("_")[1].split(".")[0]
                fichier_media = "ecolle-media_{}.tar.xz".format(date)
                choix = "1"
                if os.path.isfile(os.path.join(BACKUP_ROOT, fichier_media)):
                    self.stdout.write(
                        """Il existe une sauvegarde des fichiers media associée, que voulez-vous faire?
1. l'ignorer
2. effacer tous les fichiers media existants et mettre ceux de la sauvegarde à la place
3. conserver les fichiers media existants et ajouter en plus ceux de la sauvegarde (en écrasant les doublons)
a. abandonner\n""")
                    choix = input()
                    while choix not in "a123":
                        self.stdout.write("choix invalide, recommencez")
                        choix = input()
                    if choix == "a":
                        self.stdout.write("abandon")
                    else:
                        if choix == "2":
                            repertoires = [
                                os.path.join(MEDIA_ROOT, x)
                                for x in ('programme', 'image', 'photos')
                            ]
                            for repertoire in repertoires:
                                for fichiermedia in os.listdir(repertoire):
                                    if fichiermedia != ".gitignore":
                                        os.remove(
                                            os.path.join(
                                                repertoire, fichiermedia))
                        if choix in "23":
                            self.stdout.write(
                                "Début restauration des fichiers media")
                            try:
                                archive_zip = tarfile.open(
                                    os.path.join(BACKUP_ROOT, fichier_media),
                                    "r:xz")
                                archive_zip.extractall(MEDIA_ROOT)
                                # on redonne les droits au groupe web sur les frichiers retaurés
                                try:
                                    subprocess.run(
                                        ["chgrp", "-R", "web", MEDIA_ROOT])
                                except Exception:
                                    self.stdout.write(
                                        "Problème dans l'attribution des droits des fichiers media"
                                    )
                            except Exception:
                                self.stdout.write(
                                    "Erreur lors de la restauration des fichiers media"
                                )
                            else:
                                self.stdout.write(
                                    "Restauration des fichiers media terminée")
                            finally:
                                archive_zip.close()
                if choix != "a":
                    # flush de la base de donnée puis loaddata
                    self.stdout.write(
                        "Début du nettoyage de la base de données.")
                    Flush().handle(database=DEFAULT_DB_ALIAS,
                                   verbosity=1,
                                   interactive=False)
                    self.stdout.write(
                        "Nettoyage de la base de données terminé.")
                    self.stdout.write(
                        "début insertion de la sauvegarde dans la base de données."
                    )
                    fichier_json = os.path.join(BACKUP_ROOT, 'e-colle.json')
                    with bz2.open(os.path.join(BACKUP_ROOT, fichier),
                                  'rb') as fichier_bz2:
                        with open(fichier_json, 'wb') as fichierjson:
                            fichierjson.write(
                                bz2.decompress(fichier_bz2.read()))
                    try:
                        Loaddata().handle(fichier_json,
                                          database=DEFAULT_DB_ALIAS,
                                          format="json",
                                          exclude=[],
                                          ignore=False,
                                          app_label=None,
                                          verbosity=1)
                    except Exception as e:
                        self.stdout.write(
                            "Erreur lors de l'insertion des données: {}".
                            format(str(e)))
                    else:
                        self.stdout.write(
                            "Insertion de la sauvegarde dans la base de données terminée."
                        )
                    finally:
                        os.remove(fichier_json)