[PYTHON] J'étais intéressé par les diagrammes alors j'ai essayé de l'envelopper avec un flacon

Que sont les diagrammes

C'est un logiciel qui peut dessiner un diagramme d'architecture avec python.

https://diagrams.mingrammer.com

Il y a quelques jours, je voulais faire quelque chose comme ce qui suit à propos de mes yeux, qui était la motivation que j'ai faite.

<img src='http://localhost:8080/?
with Diagram("Grouped Workers", show=False, direction="TB"):
    ELB("lb") >> [EC2("worker1"),
                  EC2("worker2"),
                  EC2("worker3"),
                  EC2("worker4"),
                  EC2("worker5")] >> RDS("events")

Pour le moment, je vais enfin y arriver

J'ai lutté pendant environ 10 heures et l'ai créé. Le code source complet est le référentiel suivant.

https://github.com/tamuto/diagrams-server

Compiler du code Python

Tout d'abord, la question est de savoir comment compiler le code source Python passé dans l'URL? est. Vous pouvez l'obtenir à partir de query_string, mais vous devez le formater puis le compiler. J'ai utilisé yapf comme bibliothèque.

PROBLEME A RESOLU: Ne pas avoir de code de saut de ligne dans query_string en premier lieu

J'avais l'intention de les faire décrire, y compris la déclaration d'importation, telle qu'elle est publiée dans des exemples. Cependant, il était attaché à query_string comme ... import EC2from ... '' , et même s'il était formaté, il ne pouvait pas être séparé (évidemment).

Changer les arguments en utilisant AST

Ici, nous avons pu implémenter le comportement attendu. Réécrivez à l'aide de NodeTransformer, compilez et exécutez avec exec. J'ai eu une erreur disant qu'il n'y avait pas de lineno sur le chemin, mais je l'ai résolu en toute sécurité avec ```ast.fix_missing_location` ``. (Je pense que je l'ai fait ...)

Demande forcée d'une icône ...

Si vous sortez avec svg, une demande d'icône sera générée séparément. Je l'ai traité de force avec la route de Flask. (Parce qu'il fonctionne dans docker, il devrait être autorisé!?)

Autres issues

J'ai fait de mon mieux pour y arriver, mais je pense qu'il y a plusieurs problèmes.

Normalement, cela devrait être écrit comme un problème ...

Pour une raison quelconque, je me suis précipité pour le sortir avec un sentiment de contre-la-montre. Après cela, je voudrais m'asseoir et répondre.

Recommended Posts

J'étais intéressé par les diagrammes alors j'ai essayé de l'envelopper avec un flacon
J'ai essayé linebot avec flacon (anaconda) + heroku
J'ai essayé de jouer avec l'image avec Pillow
J'ai essayé de "lisser" l'image avec Python + OpenCV
J'ai essayé de "différencier" l'image avec Python + OpenCV
J'ai essayé de sauvegarder les données avec discorde
J'ai essayé Flask avec des conteneurs distants de VS Code
J'ai essayé de "binariser" l'image avec Python + OpenCV
J'ai essayé de jouer avec la calculatrice avec tkinter
J'ai essayé de toucher un fichier CSV avec Python
J'ai essayé de résoudre Soma Cube avec python
J'ai essayé de résoudre le problème avec Python Vol.1
Mémo de travail que j'ai essayé i18n avec l'application Flask
J'ai essayé de frapper l'API avec le client python d'echonest
Je voulais faire fonctionner le moteur avec une tarte à la râpe, alors j'ai essayé d'utiliser la carte de commande du moteur de Waveshare
J'ai essayé de trouver l'entropie de l'image avec python
J'ai essayé la "correction gamma" de l'image avec Python + OpenCV
J'ai essayé de simuler la propagation de l'infection avec Python
J'ai essayé d'analyser les émotions de tout le roman "Weather Child" ☔️
J'ai essayé d'utiliser la bibliothèque Python de Ruby avec PyCall
J'ai essayé de trouver la moyenne de plusieurs colonnes avec TensorFlow
J'ai essayé de notifier les informations de retard de train avec LINE Notify
J'ai essayé de remplacer le disque dur Windows 10 par un SSD plus petit
J'ai essayé de sauvegarder l'historique des demandes d'API DRF avec django-request
J'ai essayé fp-growth avec python
J'ai essayé de gratter avec Python
J'ai essayé Learning-to-Rank avec Elasticsearch!
J'ai essayé le clustering avec PyCaret
J'ai essayé la bibliothèque changefinder!
J'ai essayé gRPC avec Python
J'ai essayé de gratter avec du python
J'ai essayé de l'étendre pour que la base de données puisse être utilisée avec le logiciel d'analyse de Wiire
Je ne suis pas sûr de la différence entre les modules, les packages et les bibliothèques, alors j'ai essayé de les organiser.
J'ai essayé de gratter le classement du calendrier de l'avent Qiita avec Python
[AWS / Tello] J'ai essayé de faire fonctionner le drone avec ma voix Part2
J'ai essayé de décrire le trafic en temps réel avec WebSocket
J'ai essayé de résoudre l'édition du débutant du livre des fourmis avec python
J'ai essayé d'automatiser l'arrosage du pot avec Raspberry Pi
J'ai essayé la validation croisée basée sur le résultat de la recherche de grille avec scikit-learn
J'ai essayé de traiter l'image en "style croquis" avec OpenCV
J'ai essayé d'envoyer du courrier depuis le serveur Sakura avec flask-mail
[AWS / Tello] J'ai essayé de faire fonctionner le drone avec ma voix Part1
J'ai essayé de traiter l'image dans un "style de dessin au crayon" avec OpenCV
J'ai essayé d'agrandir la taille du volume logique avec LVM
J'ai essayé d'exécuter la partie DNN d'OpenPose avec le processeur Chainer
J'ai essayé d'améliorer l'efficacité du travail quotidien avec Python
J'ai essayé le diagramme en tant que code (diagrammes) qui peut gérer le code du diagramme de configuration
J'ai essayé d'exécuter le didacticiel TensorFlow avec des commentaires (_TensorFlow_2_0_Introduction pour les débutants)
J'ai essayé le tutoriel TensorFlow 1er
J'ai essayé le roman Naro API 2
J'ai essayé de résumer des phrases avec summpy
J'ai essayé l'apprentissage automatique avec liblinear
J'ai essayé webScraping avec python.
Exécutez l'application avec Flask + Heroku
J'ai essayé de déplacer de la nourriture avec SinGAN
J'ai essayé le tutoriel TensorFlow 2ème
J'ai essayé d'implémenter DeepPose avec PyTorch