#!/usr/bin/env python3 # ---------------------------------- # Création de nouvel article de blog # ---------------------------------- # Exemple de commande : # # python new_article.py --blog_dir=cipherbliss_blog --lang=fr --title="article_title" # ################################ import os from datetime import datetime import argparse import sys from website_config import configs_sites # Configuration des arguments de la ligne de commande parser = argparse.ArgumentParser(description="Générer un nouvel article en mode orgmode.") parser.add_argument("--title", nargs="?", help="Le titre de l'article.") parser.add_argument("--lang", nargs="?", default="fr", help="La langue de l'article (par défaut : fr pour Français ou en pour English).") parser.add_argument("--blog_dir", nargs="?", default=None, help="Le nom du dossier de blog (sous source/). Si non spécifié, une liste de dossiers disponibles sera proposée.") parser.add_argument("--year_prefix_in_slug", nargs="?", default=True, help="Ajouter l'année au début du slug.") args = parser.parse_args() # Définition du dossier de base pour les blogs base_blog_dir = "sources/" year_prefix_in_slug = args.year_prefix_in_slug # Si aucun dossier de blog n'est spécifié, proposer une sélection if args.blog_dir is None: available_dirs = [d for d in os.listdir(base_blog_dir) if os.path.isdir(os.path.join(base_blog_dir, d))] if not available_dirs: print("Aucun dossier de blog trouvé sous", base_blog_dir) exit(1) print("Sélectionnez un dossier de blog :") for i, dir_name in enumerate(available_dirs, start=1): print(f"{i}. {dir_name}") choice = input("Entrez le numéro de votre choix : ") try: choice = int(choice) if choice < 1 or choice > len(available_dirs): raise ValueError args.blog_dir = available_dirs[choice - 1] except ValueError: print("Choix invalide. Annulation.") exit(1) if args.title is None or not len(args.title): args.title = input("Entrez le titre de votre nouvel article: ") if args.title is None: print("Vous n'avez pas choisi de titre d'article") exit(1) # Vérification de l'existence du dossier de blog blog_path = os.path.join(base_blog_dir, args.blog_dir) if not os.path.exists(blog_path): print(f"Le dossier de blog '{args.blog_dir}' n'existe pas sous '{base_blog_dir}'.") create_dir = input("Créer le dossier? (o/n) : ") if create_dir.lower() == 'o': os.makedirs(blog_path) print(f"Dossier '{args.blog_dir}' créé sous '{base_blog_dir}'.") else: print("Annulation de la création de l'article.") exit(1) # Génération du nom de fichier org avec la date et le slug now = datetime.now() # date_string = now.strftime("%Y-%m-%d") date_string = now.strftime("%Y%m%d%H%M%S") date_string_full = now.strftime("%Y-%m-%d %H:%M:%S") # date_string_full = now.strftime("%Y%m%d%H%M%S") slug = '' if args.title: slug = args.title.lower().replace(" ", "-") slug = slug.replace("--", "-") slug = slug.replace("--", "-") if year_prefix_in_slug: schema_slug = f"{now.year}/{slug}" else: schema_slug = slug # Obtenir le chemin absolu du répertoire du script script_dir = os.path.dirname(os.path.abspath(__file__)) # Ajouter le répertoire du script au path Python sys.path.append(script_dir) # Maintenant importer make_article try: from utils.maker import make_article except ImportError: print("Erreur: Impossible de trouver le module maker.py dans le dossier utils/") print("Vérifiez que le fichier utils/maker.py existe et est accessible") sys.exit(1) import uuid def create_uuid_property(): uuid_value = uuid.uuid4() return uuid_value # Créer le dossier de langue s'il n'existe pas lang_dir = os.path.join(base_blog_dir, args.blog_dir, f"lang_{args.lang}") if not os.path.exists(lang_dir): os.makedirs(lang_dir) print(f"Dossier de langue '{lang_dir}' créé.") # Définir le nom du fichier filename = os.path.join(lang_dir, f"{date_string}__{slug}.org") # Écriture du fichier org with open(filename, "w") as f: uuid = create_uuid_property() config={ 'uuid': uuid, 'slug': slug, 'NDD': configs_sites[args.blog_dir]['NDD'], 'title': args.title, 'date_string_full': date_string_full, 'date_string': date_string, 'schema_slug': schema_slug, 'blog_dir': args.blog_dir, 'lang': args.lang, # Ajout de la langue dans la config } content = make_article(config) if content: f.write(content) else: print("Erreur: Impossible de générer le contenu de l'article.") exit(1) print(f"Le fichier '{filename}' a été créé avec succès.")