PasteScript
PasteScript ist ein Befehlszeilenprogramm, das die folgenden zwei Funktionen bietet. Dieses Mal werden wir über "paster create" sprechen.
--Erstellen Sie eine Projektvorlage basierend auf der angegebenen Vorlage (Sie können Ihre eigene erstellen) (paster create
)
-Starten Sie die WSGI-Anwendung (einschließlich des WSGI-Servers und der zugehörigen Middleware-Einstellungen), die von PasteDeploy festgelegt wurde (paster serve
).
Der Engpass war, dass Python 3 lange Zeit nicht unterstützt wurde, aber PasteScript 2.0, das im letzten Monat veröffentlicht wurde, unterstützt schließlich Python 3.
paster create
Das Folgende ist ein Beispiel für die Angabe der enthaltenen Vorlage "basic_package". Die Vorlage "basic_package" erstellt ein Python-Paketprojekt, das setup.py enthält.
$ 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.Python-Paketprojekt mit py
$ ls test
setup.cfg setup.py test test.egg-info
Sie können Ihre eigene Vorlage erstellen. Ich werde die Details nicht erklären (siehe Dokumentation), aber der allgemeine Ablauf ist wie folgt.
Sie können den Dateinamen und den Inhalt der angegebenen Vorlage anhand der Argumente anpassen, die beim Generieren der Vorlage angegeben wurden.
#Reflektiert die interaktiv vorgebrachten Argumente(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',
...
)
Zu diesem Zeitpunkt wird die Template-Engine verwendet, um den Inhalt neu zu schreiben. Die zu verwendende Vorlagen-Engine lautet wie folgt, wenn Sie sich das Dokument ansehen.
use_cheetah
der benutzerdefinierten Vorlage True ist, wird Cheetah verwendet.Beides ist in Ordnung, aber Sie können auch eine benutzerdefinierte Vorlage mit Ihrer bekannten Vorlagen-Engine erstellen. Persönlich wollte ich Jinja2 verwenden, was ich gewohnt bin.
Die obige Anforderung kann realisiert werden, indem das Attribut template_renderer
der benutzerdefinierten Vorlage einer statischen Methode zugeordnet wird, die bestimmte Bedingungen erfüllt. Das Folgende ist ein Beispiel für die Verwendung von "Jinja2" als Vorlagen-Engine.
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)
...
Die Bedingungen, die die statische Methode erfüllen muss, sind wie folgt.
Dieses Beispiel ist "Jinja2", kann jedoch auf die gleiche Weise verwendet werden, solange es sich um eine Vorlagen-Engine handelt, die die neu geschriebene Zeichenfolge aus den angegebenen drei Argumenten generieren kann, damit die oben genannten Bedingungen erfüllt werden können. Ich kann nicht sicher sagen, da die anderen Engines nicht bestätigt sind, aber ich denke, die meisten Template-Engines sind in Ordnung.
Recommended Posts