blob: d2eac94bc5e5ca5ea83808f52b7e965631113e2f [file] [log] [blame]
Armin Ronacherde478f62007-02-28 22:35:04 +01001# -*- coding: utf-8 -*-
Armin Ronacher58293062008-02-11 15:36:22 +01002"""
3jinja
4~~~~~
5
6Jinja is a `sandboxed`_ template engine written in pure Python. It
7provides a `Django`_ like non-XML syntax and compiles templates into
8executable python code. It's basically a combination of Django templates
9and python code.
10
11Nutshell
12--------
13
14Here a small example of a Jinja template::
15
16 {% extends 'base.html' %}
17 {% block title %}Memberlist{% endblock %}
18 {% block content %}
19 <ul>
20 {% for user in users %}
21 <li><a href="{{ user.url|e }}">{{ user.username|e }}</a></li>
22 {% endfor %}
23 </ul>
24 {% endblock %}
25
26Philosophy
27----------
28
29Application logic is for the controller but don't try to make the life
30for the template designer too hard by giving him too few functionality.
31
32For more informations visit the new `jinja webpage`_ and `documentation`_.
33
34Note
35----
36
37This is the Jinja 1.0 release which is completely incompatible with the
38old "pre 1.0" branch. The old branch will still receive security updates
39and bugfixes but the 1.0 branch will be the only version that receives
40support.
41
42If you have an application that uses Jinja 0.9 and won't be updated in
43the near future the best idea is to ship a Jinja 0.9 checkout together
44with the application.
45
46The `Jinja tip`_ is installable via `easy_install` with ``easy_install
47Jinja==dev``.
48
49.. _sandboxed: http://en.wikipedia.org/wiki/Sandbox_(computer_security)
50.. _Django: http://www.djangoproject.com/
51.. _jinja webpage: http://jinja.pocoo.org/
52.. _documentation: http://jinja.pocoo.org/documentation/index.html
53.. _Jinja tip: http://dev.pocoo.org/hg/jinja-main/archive/tip.tar.gz#egg=Jinja-dev
54"""
Armin Ronacher0830e252007-03-22 23:45:30 +010055import os
Armin Ronacherd15a4dc2007-05-28 18:16:16 +020056import sys
Armin Ronacher0830e252007-03-22 23:45:30 +010057import ez_setup
58ez_setup.use_setuptools()
Armin Ronacheree2c18e2007-04-20 22:39:04 +020059
60from distutils.command.build_ext import build_ext
Armin Ronacherbc3d2d82007-10-19 15:49:56 +020061from distutils.errors import CCompilerError, DistutilsError
Armin Ronacheree2c18e2007-04-20 22:39:04 +020062from setuptools import setup, Extension, Feature
Armin Ronacherde478f62007-02-28 22:35:04 +010063
Armin Ronacher0830e252007-03-22 23:45:30 +010064
Armin Ronachere21ced22007-03-22 23:57:10 +010065def list_files(path):
66 for fn in os.listdir(path):
67 if fn.startswith('.'):
68 continue
69 fn = os.path.join(path, fn)
70 if os.path.isfile(fn):
71 yield fn
72
73
Armin Ronacheree2c18e2007-04-20 22:39:04 +020074class optional_build_ext(build_ext):
75
Armin Ronacherbc3d2d82007-10-19 15:49:56 +020076 def run(self):
77 try:
78 build_ext.run(self)
79 except DistutilsError, e:
80 self.compiler = None
81 self._setup_error = e
82
Armin Ronacheree2c18e2007-04-20 22:39:04 +020083 def build_extension(self, ext):
84 try:
Armin Ronacherbc3d2d82007-10-19 15:49:56 +020085 if self.compiler is None:
86 raise self._setup_error
Armin Ronacheree2c18e2007-04-20 22:39:04 +020087 build_ext.build_extension(self, ext)
88 except CCompilerError, e:
89 print '=' * 79
90 print 'INFORMATION'
Armin Ronacherd15a4dc2007-05-28 18:16:16 +020091 print ' the speedup extension could not be compiled, Jinja will'
Armin Ronacheree2c18e2007-04-20 22:39:04 +020092 print ' fall back to the native python classes.'
93 print '=' * 79
Armin Ronacherd15a4dc2007-05-28 18:16:16 +020094 except:
95 e = sys.exc_info()[1]
96 print '=' * 79
97 print 'WARNING'
98 print ' could not compile optional speedup extension. This is'
99 print ' is not a real problem because Jinja provides a native'
100 print ' implementation of those classes but for best performance'
101 print ' you could try to reinstall Jinja after fixing this'
102 print ' problem: %s' % e
103 print '=' * 79
Armin Ronacheree2c18e2007-04-20 22:39:04 +0200104
105
Armin Ronacherde478f62007-02-28 22:35:04 +0100106setup(
Armin Ronacher015b0c92007-11-11 00:10:17 +0100107 name='Jinja',
Armin Ronacher1c199192007-11-18 10:21:27 +0100108 version='1.3',
Armin Ronacher015b0c92007-11-11 00:10:17 +0100109 url='http://jinja.pocoo.org/',
110 license='BSD',
111 author='Armin Ronacher',
112 author_email='armin.ronacher@active-4.com',
113 description='A small but fast and easy to use stand-alone template '
114 'engine written in pure python.',
Armin Ronacher58293062008-02-11 15:36:22 +0100115 long_description = __doc__,
Armin Ronachere21ced22007-03-22 23:57:10 +0100116 # jinja is egg safe. But because we distribute the documentation
117 # in form of html and txt files it's a better idea to extract the files
Armin Ronacher015b0c92007-11-11 00:10:17 +0100118 zip_safe=False,
119 classifiers=[
Armin Ronacherde478f62007-02-28 22:35:04 +0100120 'Development Status :: 5 - Production/Stable',
121 'Environment :: Web Environment',
122 'Intended Audience :: Developers',
123 'License :: OSI Approved :: BSD License',
124 'Operating System :: OS Independent',
125 'Programming Language :: Python',
Armin Ronacher8ebf1f92007-03-03 11:22:18 +0100126 'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
127 'Topic :: Software Development :: Libraries :: Python Modules',
128 'Topic :: Text Processing :: Markup :: HTML'
129 ],
Armin Ronacher015b0c92007-11-11 00:10:17 +0100130 keywords=['python.templating.engines'],
Armin Ronacher21dce512007-11-27 01:07:20 +0100131 packages=['jinja', 'jinja.translators', 'jinja.contrib'],
Armin Ronacher015b0c92007-11-11 00:10:17 +0100132 data_files=[
Armin Ronacher99e5baa2007-11-17 21:56:19 +0100133 ('docs/html', list(list_files('docs/html'))),
Armin Ronacher72bb2572007-03-23 17:24:48 +0100134 ('docs/txt', list(list_files('docs/src')))
Armin Ronacher0830e252007-03-22 23:45:30 +0100135 ],
Armin Ronacher21580912007-04-17 17:13:10 +0200136 entry_points='''
137 [python.templating.engines]
138 jinja = jinja.plugin:BuffetPlugin
139 ''',
Armin Ronacher015b0c92007-11-11 00:10:17 +0100140 extras_require={'plugin': ['setuptools>=0.6a2']},
141 features={
Armin Ronachera7804ef2007-06-15 18:03:21 +0200142 'speedups': Feature(
143 'optional C-speed enhancements',
Armin Ronacher825e5222007-11-16 16:16:23 +0100144 standard=True,
145 ext_modules=[
Armin Ronachera7804ef2007-06-15 18:03:21 +0200146 Extension('jinja._speedups', ['jinja/_speedups.c'])
147 ]
148 ),
149 'extended-debugger': Feature(
150 'extended debugger',
Armin Ronacher825e5222007-11-16 16:16:23 +0100151 standard=True,
152 ext_modules=[
Armin Ronachera7804ef2007-06-15 18:03:21 +0200153 Extension('jinja._debugger', ['jinja/_debugger.c'])
154 ]
155 )
156 },
Armin Ronacher015b0c92007-11-11 00:10:17 +0100157 cmdclass={'build_ext': optional_build_ext}
Armin Ronacherde478f62007-02-28 22:35:04 +0100158)