IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Générer du code à partir d'une template


Sujet :

Python

  1. #1
    Membre confirmé Avatar de fma38
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 119
    Par défaut Générer du code à partir d'une template
    Bonjour,

    Pour mon framework KNX, je vais finalement mettre en place une génération de code depuis un template.

    Pour ça, je me base un peu sur Django. Mais dans mon cas, c'est plus simple. Voici en gros l'arborescence que je veux obtenir à partir de mon template :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    mydevice/
        admin.py
        mydevice/
            __init__.py
            config.py
            device.py
            fb/
                __init__.py
    Les choses à modifier dynamiquement sont :

    - le nom des répertoires mydevice/
    - une chaîne toute simple dans le fichier admin.py

    Comment feriez-vous ça ?

    Pour le premier point, quelle arborescence template adopter (nom des répertoires et emplacement dans les sources) ? Comment écrire le setup.py pour placer ça dans un endroit sioux pour pouvoir le retrouver facilement à l'exécution du générateur ?

    Pour le second point, quel outil utiliser pour faire le remplacement dans le fichier ?

    D'une manière générale, avez-vous d'autres conseils pour ce genre de chose ?

    Merci d'avance.

  2. #2
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Salut,

    je ne suis pas sûr d'avoir compris ton problème, mais s'il n'y a pas trop de traitement à faire sur le template, on peut utiliser une solution simple comme celle là. Sinon, il y a un module spécialisé, cheetah, de mémoire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    TEMPLATE = """mydevice
        ##admin##.py
        mydevice
            ##init##.py
            config.py
            device.py
            fb
                ##init##.py
    """
     
    text = TEMPLATE.replace("##admin##", "toto").replace("##init##", "titi")
    print text
    A+

    Pfeuh

  3. #3
    Membre confirmé Avatar de fma38
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 119
    Par défaut
    Oui, le traitement se limite à peu près à ça.

    Le fichier est un poil plus long, mais rien n'empèche de faire comme dans ton exemple.

    Cheetah, c'est très bien, mais ça fait une dépendance un peu lourde pour pas grand chose. Y'a pas un truc light intégré à python, par hasard ?

    Sinon, pour les fichiers qu'il suffit de copier, comment organiseriez-vous ça, et comment faire la copie ? Avec les outils de shutil ?

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 591
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 591
    Par défaut
    Salut,

    Pourquoi passer par des templates pour générer des scripts Python (i.e. du texte) qu'il faudra ensuite importer, activer,... plutôt que de définir directement une hiérarchie de classes qu'on pourra surcharger, dériver,... adapter a partir du contenu d'une base de données,...?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre confirmé Avatar de fma38
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 119
    Par défaut
    Euh, base de données ? Oulà, mal à la tête

    Non, sans rire, c'est un peu overkill. Le template va juste servir à générer un script où le path vers le répertoire contenant le device sera pré-établi. Exactement comme fait Django avec son manage.py.

    S'il existe un micro-template intégré à python, OK, sinon, un coup de replace ira bien.

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 591
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 591
    Par défaut
    Citation Envoyé par fma38 Voir le message
    Euh, base de données ? Oulà, mal à la tête
    Comment appelez vous la structure hiérarchique présentée dans votre premier post?

    Non, sans rire, c'est un peu overkill. Le template va juste servir à générer un script où le path vers le répertoire contenant le device sera pré-établi. Exactement comme fait Django avec son manage.py.
    L'overkill est de passer par la génération de scripts plutôt qu'instancier une classe en lui passant un paramètre "path".

    S'il existe un micro-template intégré à python, OK, sinon, un coup de replace ira bien.
    Allez voir si ce que sait faire la class Template du module string est "assez bonne" pour vous. Les format de bases fonctionnent aussi.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre confirmé Avatar de fma38
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 119
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    L'overkill est de passer par la génération de scripts plutôt qu'instancier une classe en lui passant un paramètre "path".
    Ben, justement, c'est le path que je veux écrire en dur dans le script ! Donc s'il faut toujours le passer en paramètre, je suis de retour à la case départ

    Et puis comme dit, c'est pour générer quelques fichiers de code initiaux dans lesquels l'utilisateur va ajouter des choses.

    Merci pour le lien sur string.Template !

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 591
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 591
    Par défaut
    Citation Envoyé par fma38 Voir le message
    Ben, justement, c'est le path que je veux écrire en dur dans le script ! Donc s'il faut toujours le passer en paramètre, je suis de retour à la case départ !
    Dans le post initial vous parliez (sans le savoir?) de templates d'applications, pfeuh vous a propose un gestionnaire de template (Cheetah) "classique", in fine un .replace semble suffire.
    Pourquoi pas, mais c'est quand même un peu n'importe quoi.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Membre confirmé Avatar de fma38
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 119
    Par défaut
    Oui, effectivement, c'est un template d'application. Je ne connaissais pas le terme.

    Je ne dis pas que Cheetah n'est pas bien (je l'ai utilisé par la passé pour un petit projet), mais ça fait une dépendance un peu lourde pour le besoin...

Discussions similaires

  1. Générer un diagramme à partir d'une DTD
    Par nice dans le forum Valider
    Réponses: 5
    Dernier message: 25/04/2006, 18h53
  2. [WD9] Générer du code à partir de l'AGL
    Par Romanops dans le forum WinDev
    Réponses: 2
    Dernier message: 11/04/2006, 17h28
  3. Générer un PDF à partir d'une page ASP
    Par Poussy-Puce dans le forum ASP
    Réponses: 1
    Dernier message: 30/03/2006, 18h45
  4. [JpGraph] Générer un graphique à partir d'une requête
    Par shun dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 31/01/2006, 20h24
  5. Réponses: 9
    Dernier message: 14/12/2005, 19h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo