blob: 7fe263d7fc62ae955ecb90d80b787f2b24ab78b4 [file] [log] [blame]
Armin Ronacherde478f62007-02-28 22:35:04 +01001# -*- coding: utf-8 -*-
Armin Ronacher58293062008-02-11 15:36:22 +01002"""
Armin Ronacher203bfcb2008-04-24 21:54:44 +02003Jinja2
4~~~~~~
Armin Ronacher58293062008-02-11 15:36:22 +01005
Armin Ronacher203bfcb2008-04-24 21:54:44 +02006Jinja2 is a template engine written in pure Python. It provides a
7`Django`_ inspired non-XML syntax but supports inline expressions and
8an optional `sandboxed`_ environment.
Armin Ronacher58293062008-02-11 15:36:22 +01009
10Nutshell
11--------
12
13Here a small example of a Jinja template::
14
15 {% extends 'base.html' %}
16 {% block title %}Memberlist{% endblock %}
17 {% block content %}
18 <ul>
19 {% for user in users %}
Armin Ronacher203bfcb2008-04-24 21:54:44 +020020 <li><a href="{{ user.url }}">{{ user.username }}</a></li>
Armin Ronacher58293062008-02-11 15:36:22 +010021 {% endfor %}
22 </ul>
23 {% endblock %}
24
25Philosophy
26----------
27
28Application logic is for the controller but don't try to make the life
29for the template designer too hard by giving him too few functionality.
30
Armin Ronacher203bfcb2008-04-24 21:54:44 +020031For more informations visit the new `jinja2 webpage`_ and `documentation`_.
Armin Ronacher58293062008-02-11 15:36:22 +010032
Armin Ronacher203bfcb2008-04-24 21:54:44 +020033The `Jinja2 tip`_ is installable via `easy_install` with ``easy_install
34Jinja2==dev``.
Armin Ronacher58293062008-02-11 15:36:22 +010035
36.. _sandboxed: http://en.wikipedia.org/wiki/Sandbox_(computer_security)
37.. _Django: http://www.djangoproject.com/
Armin Ronacher203bfcb2008-04-24 21:54:44 +020038.. _jinja webpage: http://jinja2.pocoo.org/
39.. _documentation: http://jinja2.pocoo.org/documentation/index.html
40.. _Jinja tip: http://dev.pocoo.org/hg/jinja2-main/archive/tip.tar.gz#egg=Jinja2-dev
Armin Ronacher58293062008-02-11 15:36:22 +010041"""
Armin Ronacher0830e252007-03-22 23:45:30 +010042import os
Armin Ronacherd15a4dc2007-05-28 18:16:16 +020043import sys
Armin Ronacher0830e252007-03-22 23:45:30 +010044import ez_setup
45ez_setup.use_setuptools()
Armin Ronacheree2c18e2007-04-20 22:39:04 +020046
Armin Ronacherbd33f112008-04-18 09:17:32 +020047from setuptools import setup, Extension, Feature
48from distutils.command.build_ext import build_ext
49from distutils.errors import CCompilerError, DistutilsPlatformError
Armin Ronacherde478f62007-02-28 22:35:04 +010050
Armin Ronacher0830e252007-03-22 23:45:30 +010051
Armin Ronachere21ced22007-03-22 23:57:10 +010052def list_files(path):
53 for fn in os.listdir(path):
54 if fn.startswith('.'):
55 continue
56 fn = os.path.join(path, fn)
57 if os.path.isfile(fn):
58 yield fn
59
60
Armin Ronacher203bfcb2008-04-24 21:54:44 +020061def get_terminal_width():
62 """Return the current terminal dimensions."""
63 try:
64 from struct import pack, unpack
65 from fcntl import ioctl
66 from termios import TIOCGWINSZ
67 s = pack('HHHH', 0, 0, 0, 0)
68 return unpack('HHHH', ioctl(sys.stdout.fileno(), TIOCGWINSZ, s))[1]
69 except:
70 return 80
71
72
Armin Ronacherbd33f112008-04-18 09:17:32 +020073class optional_build_ext(build_ext):
74 """This class allows C extension building to fail."""
75
76 def run(self):
77 try:
78 build_ext.run(self)
79 except DistutilsPlatformError:
80 self._unavailable()
81
82 def build_extension(self, ext):
83 try:
84 build_ext.build_extension(self, ext)
85 except CCompilerError, x:
86 self._unavailable()
87
88 def _unavailable(self):
Armin Ronacher203bfcb2008-04-24 21:54:44 +020089 width = get_terminal_width()
90 print '*' * width
Armin Ronacherbd33f112008-04-18 09:17:32 +020091 print """WARNING:
92An optional C extension could not be compiled, speedups will not be
93available."""
Armin Ronacher203bfcb2008-04-24 21:54:44 +020094 print '*' * width
Armin Ronacherbd33f112008-04-18 09:17:32 +020095
96
Armin Ronacherde478f62007-02-28 22:35:04 +010097setup(
Armin Ronacher203bfcb2008-04-24 21:54:44 +020098 name='Jinja2',
Armin Ronacher4a3038d2008-04-07 18:46:27 +020099 version='2.0dev',
Armin Ronacher015b0c92007-11-11 00:10:17 +0100100 url='http://jinja.pocoo.org/',
101 license='BSD',
102 author='Armin Ronacher',
103 author_email='armin.ronacher@active-4.com',
104 description='A small but fast and easy to use stand-alone template '
105 'engine written in pure python.',
Armin Ronacherbd33f112008-04-18 09:17:32 +0200106 long_description=__doc__,
Armin Ronachere21ced22007-03-22 23:57:10 +0100107 # jinja is egg safe. But because we distribute the documentation
108 # in form of html and txt files it's a better idea to extract the files
Armin Ronacher015b0c92007-11-11 00:10:17 +0100109 zip_safe=False,
110 classifiers=[
Armin Ronacherf59bac22008-04-20 13:11:43 +0200111 'Development Status :: 4 Beta',
Armin Ronacherde478f62007-02-28 22:35:04 +0100112 'Environment :: Web Environment',
113 'Intended Audience :: Developers',
114 'License :: OSI Approved :: BSD License',
115 'Operating System :: OS Independent',
116 'Programming Language :: Python',
Armin Ronacher8ebf1f92007-03-03 11:22:18 +0100117 'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
118 'Topic :: Software Development :: Libraries :: Python Modules',
119 'Topic :: Text Processing :: Markup :: HTML'
120 ],
Armin Ronacher4a3038d2008-04-07 18:46:27 +0200121 packages=['jinja2'],
Armin Ronacher015b0c92007-11-11 00:10:17 +0100122 data_files=[
Armin Ronacher7ceced52008-05-03 10:15:31 +0200123 ##('docs', list(list_files('docs/_build/html')))
Armin Ronacher0830e252007-03-22 23:45:30 +0100124 ],
Armin Ronacherbd33f112008-04-18 09:17:32 +0200125 features={
126 'speedups': Feature("optional C speed-enhancements",
127 standard=True,
128 ext_modules=[
129 Extension('jinja2._speedups', ['jinja2/_speedups.c'])
130 ]
131 )
132 },
Armin Ronacher2b60fe52008-04-21 08:23:59 +0200133 extras_require={'i18n': ['Babel>=0.8']},
Armin Ronacherf59bac22008-04-20 13:11:43 +0200134 entry_points="""
135 [babel.extractors]
Armin Ronacherb5124e62008-04-25 00:36:14 +0200136 jinja2 = jinja.ext:babel_extract[i18n]
Armin Ronacherf59bac22008-04-20 13:11:43 +0200137 """
Armin Ronacherde478f62007-02-28 22:35:04 +0100138)