Reflect the current year in all TechnoLibre license headers across script/, test/, and docker/. Generated by Claude Code 2.1.74 model claude-sonnet-4-6 Co-Authored-By: Mathieu Benoit <mathben@technolibre.ca>
89 lines
2.8 KiB
Python
Executable file
89 lines
2.8 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
# © 2021-2026 TechnoLibre (http://www.technolibre.ca)
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
|
|
|
|
import argparse
|
|
import sys
|
|
import zipfile
|
|
|
|
|
|
def process_zip(
|
|
path_backup_zip, path_output_zip, word_to_delete, file_to_modify
|
|
):
|
|
# Ouvrir le zip d'entrée en lecture
|
|
try:
|
|
with zipfile.ZipFile(path_backup_zip, "r") as zin, zipfile.ZipFile(
|
|
path_output_zip, "w"
|
|
) as zout:
|
|
|
|
# Parcourir tous les fichiers du zip
|
|
for item in zin.infolist():
|
|
data = zin.read(item.filename)
|
|
if item.filename == file_to_modify:
|
|
|
|
try:
|
|
# On suppose un fichier texte en UTF-8
|
|
text = data.decode("utf-8")
|
|
except UnicodeDecodeError:
|
|
print(
|
|
f"Erreur : impossible de décoder {file_to_modify} en UTF-8",
|
|
file=sys.stderr,
|
|
)
|
|
sys.exit(1)
|
|
|
|
# Filtrer les lignes qui NE contiennent PAS le mot à supprimer
|
|
lines = text.splitlines(
|
|
keepends=True
|
|
) # garder les fins de lignes
|
|
filtered_lines = [
|
|
line for line in lines if word_to_delete not in line
|
|
]
|
|
new_text = "".join(filtered_lines)
|
|
new_data = new_text.encode("utf-8")
|
|
|
|
# Écrire la version modifiée dans le nouveau zip
|
|
zout.writestr(item, new_data)
|
|
else:
|
|
# Pour les autres fichiers, on recopie tel quel
|
|
zout.writestr(item, data)
|
|
|
|
except FileNotFoundError:
|
|
print(
|
|
f"Erreur : fichier zip source introuvable : {path_backup_zip}",
|
|
file=sys.stderr,
|
|
)
|
|
sys.exit(1)
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(
|
|
description="Modifier un fichier dans un zip en supprimant les lignes contenant un mot donné."
|
|
)
|
|
parser.add_argument(
|
|
"--path_backup_zip", help="Chemin vers le zip original"
|
|
)
|
|
parser.add_argument(
|
|
"--path_output_zip", help="Chemin vers le nouveau zip à créer"
|
|
)
|
|
parser.add_argument(
|
|
"--word_to_delete",
|
|
help="Mot clé à supprimer (lignes contenant ce mot seront retirées)",
|
|
)
|
|
parser.add_argument(
|
|
"--file_to_modify",
|
|
default="dump.sql",
|
|
help="Nom du fichier à modifier à l'intérieur du zip (chemin interne)",
|
|
)
|
|
|
|
args = parser.parse_args()
|
|
|
|
process_zip(
|
|
args.path_backup_zip,
|
|
args.path_output_zip,
|
|
args.word_to_delete,
|
|
args.file_to_modify,
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|