PasteScript
PasteScript est un outil de ligne de commande qui fournit les deux fonctions suivantes. Cette fois, nous parlerons de paster create
.
--Créez un modèle de projet basé sur le modèle spécifié (vous pouvez créer le vôtre) (paster create
)
-Lancement de l'application WSGI (y compris le serveur WSGI et les paramètres de middleware associés) définie par PasteDeploy (paster serve
)
Le goulot d'étranglement était qu'il n'a pas pris en charge Python 3 pendant longtemps, mais PasteScript 2.0 publié le mois dernier prend enfin en charge Python 3.
paster create
Voici un exemple de spécification du modèle inclus basic_package
. Le modèle basic_package
crée un projet de package Python qui inclut setup.py.
$ paster create -t basic_package test
Selected and implied templates:
PasteScript#basic_package A basic setuptools-enabled package
Variables:
egg: test
package: test
project: test
Enter version (Version (like 0.1)) ['']: 0.1
Enter description (One-line description of the package) ['']: test
Enter long_description (Multi-line description (in reST)) ['']: test
Enter keywords (Space-separated keywords/tags) ['']: python
Enter author (Author name) ['']: FGtatsuro
Enter author_email (Author email) ['']:
Enter url (URL of homepage) ['']:
Enter license_name (License name) ['']:
Enter zip_safe (True/False: if the package can be distributed as a .zip file) [False]:
Creating template basic_package
Creating directory ./test
Recursing into +package+
Creating ./test/test/
Copying __init__.py to ./test/test/__init__.py
Recursing into __pycache__
Creating ./test/test/__pycache__/
Copying setup.cfg to ./test/setup.cfg
Copying setup.py_tmpl to ./test/setup.py
Running /Users/tatsuro/.homesick/repos/dotfiles/home/.virtualenvs/flask-boilerplate/bin/python setup.py egg_info
# setup.Projet de package Python contenant py
$ ls test
setup.cfg setup.py test test.egg-info
Vous pouvez créer votre propre modèle. Je n'expliquerai pas les détails (voir Documentation), mais le flux général est le suivant.
paste.script.templates.Template
(ci-après dénommée modèle personnalisé).
3.1 Spécifiez la classe définie en 2 à partir du point d'entrée de setup.py
du projet en 1.Vous pouvez personnaliser le nom de fichier et le contenu du modèle spécifié par les arguments donnés lors de la génération du modèle.
#Reflète les arguments donnés de manière interactive(ex. version, description)
$ cat test/setup.py
from setuptools import setup, find_packages
import sys, os
version = '0.1'
setup(name='test',
version=version,
description="test",
long_description="""\
test""",
classifiers=[], # Get strings from http://pypi.python.org/pypi?%3Aaction=list_classifiers
keywords='python',
author='FGtatsuro',
...
)
À ce stade, le moteur de modèle est utilisé pour réécrire le contenu. Le moteur de modèle à utiliser est le suivant lorsque vous regardez le document.
L'un ou l'autre des deux convient, mais vous pouvez également créer un modèle personnalisé à l'aide de votre moteur de modèle familier. Personnellement, je voulais utiliser Jinja2, auquel je suis habitué.
La requête ci-dessus peut être réalisée en associant l'attribut template_renderer
du modèle personnalisé à une méthode statique qui satisfait certaines conditions. Voici un exemple d'utilisation de Jinja2
comme moteur de modèle.
python
# https://github.com/FGtatsuro/flask-boilerplate/blob/master/flask_boilerplate/templates.py
class Boilerplate(Template):
_template_dir = 'templates'
summary = 'A boilerplate for Flask project'
required_templates = []
vars = [
var('app_name', 'Flask application name', default=NoDefault),
var('description', 'One-line description of the package'),
var('author', 'Author name'),
var('author_email', 'Author email'),
]
@staticmethod
def template_renderer(body, context, filename=None):
return Jinja2Template(body).render(context)
...
Les conditions que la méthode statique doit remplir sont les suivantes.
Cet exemple est Jinja2
, mais il peut être utilisé de la même manière tant qu'il s'agit d'un moteur de modèle capable de générer la chaîne de caractères réécrite à partir des trois arguments donnés afin que les conditions ci-dessus puissent être satisfaites.
Je ne peux pas le dire avec certitude car les autres moteurs ne sont pas confirmés, mais je pense que la majorité des moteurs de modèles sont corrects.
Recommended Posts