#!/usr/bin/env python3 """ ScriptsManager Metadata: @description: Example script demonstrating proper parameter handling @description_long: This script shows how to properly handle all required parameters from SIDEL ScriptsManager @description_es: Script de ejemplo que demuestra el manejo adecuado de parámetros @description_it: Script di esempio che dimostra la gestione corretta dei parametri @description_fr: Script d'exemple démontrant la gestion correcte des paramètres @required_level: viewer @category: example @tags: demo,template,parameters @parameters: [] @execution_timeout: 300 @flask_port: auto """ import argparse import os import json from pathlib import Path from flask import Flask, render_template_string, request, jsonify def parse_arguments(): parser = argparse.ArgumentParser(description="SIDEL ScriptsManager Example Script") parser.add_argument("--data-dir", required=True, help="Data directory path") parser.add_argument( "--user-level", required=True, choices=["admin", "developer", "operator", "viewer"], help="User permission level", ) parser.add_argument("--port", required=True, type=int, help="Flask port number") parser.add_argument("--project-id", required=True, help="Project ID") parser.add_argument("--project-name", required=True, help="Project name") parser.add_argument( "--theme", required=True, choices=["light", "dark"], help="User theme preference", ) parser.add_argument( "--language", required=True, choices=["en", "es", "it", "fr"], help="User language preference", ) return parser.parse_args() class ScriptDataManager: def __init__(self, data_dir, project_id, project_name): self.data_dir = Path(data_dir) self.project_id = project_id self.project_name = project_name # Ensure data directory exists self.data_dir.mkdir(parents=True, exist_ok=True) # Load or create config self.config_file = self.data_dir / "config.json" self.config = self.load_config() def load_config(self): """Load configuration from JSON file.""" if self.config_file.exists(): try: with open(self.config_file, "r") as f: return json.load(f) except (json.JSONDecodeError, FileNotFoundError): pass # Default configuration return { "example_setting": "default_value", "user_preferences": {}, "execution_count": 0, } def save_config(self): """Save configuration to JSON file.""" with open(self.config_file, "w") as f: json.dump(self.config, f, indent=2) def increment_execution_count(self): """Track how many times this script has been executed.""" self.config["execution_count"] = self.config.get("execution_count", 0) + 1 self.save_config() def create_flask_app( data_manager, user_level, project_id, project_name, theme, language ): app = Flask(__name__) # Language translations translations = { "en": { "title": "SIDEL ScriptsManager - Example Script", "welcome": "Welcome to the Example Script", "project": "Project", "user_level": "User Level", "theme": "Theme", "language": "Language", "data_directory": "Data Directory", "execution_count": "Execution Count", "save_settings": "Save Settings", "example_setting": "Example Setting", "settings_saved": "Settings saved successfully!", }, "es": { "title": "SIDEL ScriptsManager - Script de Ejemplo", "welcome": "Bienvenido al Script de Ejemplo", "project": "Proyecto", "user_level": "Nivel de Usuario", "theme": "Tema", "language": "Idioma", "data_directory": "Directorio de Datos", "execution_count": "Número de Ejecuciones", "save_settings": "Guardar Configuración", "example_setting": "Configuración de Ejemplo", "settings_saved": "¡Configuración guardada exitosamente!", }, "it": { "title": "SIDEL ScriptsManager - Script di Esempio", "welcome": "Benvenuto nello Script di Esempio", "project": "Progetto", "user_level": "Livello Utente", "theme": "Tema", "language": "Lingua", "data_directory": "Directory Dati", "execution_count": "Conteggio Esecuzioni", "save_settings": "Salva Impostazioni", "example_setting": "Impostazione di Esempio", "settings_saved": "Impostazioni salvate con successo!", }, "fr": { "title": "SIDEL ScriptsManager - Script d'Exemple", "welcome": "Bienvenue dans le Script d'Exemple", "project": "Projet", "user_level": "Niveau d'Utilisateur", "theme": "Thème", "language": "Langue", "data_directory": "Répertoire de Données", "execution_count": "Nombre d'Exécutions", "save_settings": "Sauvegarder les Paramètres", "example_setting": "Paramètre d'Exemple", "settings_saved": "Paramètres sauvegardés avec succès!", }, } def get_text(key): return translations.get(language, translations["en"]).get(key, key) # HTML template with theme support html_template = """ {{ get_text('title') }}

{{ get_text('welcome') }}

{{ get_text('project') }}:
{{ project_name }} (ID: {{ project_id }})
{{ get_text('user_level') }}:
{{ user_level }}
{{ get_text('theme') }}:
{{ theme }}
{{ get_text('language') }}:
{{ language }}
{{ get_text('data_directory') }}:
{{ data_directory }}
{{ get_text('execution_count') }}:
{{ execution_count }}
{{ get_text('settings_saved') }}
""" @app.route("/") def index(): data_manager.increment_execution_count() return render_template_string( html_template, project_name=project_name, project_id=project_id, user_level=user_level, theme=theme, language=language, data_directory=str(data_manager.data_dir), execution_count=data_manager.config["execution_count"], example_setting=data_manager.config["example_setting"], get_text=get_text, ) @app.route("/save_settings", methods=["POST"]) def save_settings(): try: data = request.get_json() data_manager.config["example_setting"] = data.get("exampleSetting", "") data_manager.save_config() return jsonify({"success": True}) except Exception as e: return jsonify({"success": False, "error": str(e)}) return app if __name__ == "__main__": args = parse_arguments() print(f"[EXAMPLE] Starting with parameters:") print(f" Data Dir: {args.data_dir}") print(f" User Level: {args.user_level}") print(f" Port: {args.port}") print(f" Project: {args.project_name} (ID: {args.project_id})") print(f" Theme: {args.theme}") print(f" Language: {args.language}") # Initialize data manager data_manager = ScriptDataManager(args.data_dir, args.project_id, args.project_name) # Create Flask app app = create_flask_app( data_manager, args.user_level, args.project_id, args.project_name, args.theme, args.language, ) # Run the Flask application try: print(f"[EXAMPLE] Starting Flask server on port {args.port}") app.run(host="127.0.0.1", port=args.port, debug=False) except KeyboardInterrupt: print(f"[EXAMPLE] Script terminated by user") except Exception as e: print(f"[EXAMPLE] Error: {e}")