Edgewall Software

source: tags/0.4.4/setup.py

Last change on this file was 711, checked in by cmlenz, 16 years ago

Ported [710] to 0.4.x branch.

  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 5.5 KB
Line 
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3#
4# Copyright (C) 2006-2007 Edgewall Software
5# All rights reserved.
6#
7# This software is licensed as described in the file COPYING, which
8# you should have received as part of this distribution. The terms
9# are also available at http://genshi.edgewall.org/wiki/License.
10#
11# This software consists of voluntary contributions made by many
12# individuals. For the exact contribution history, see the revision
13# history and logs, available at http://genshi.edgewall.org/log/.
14
15from distutils.cmd import Command
16import doctest
17from glob import glob
18import os
19try:
20    from setuptools import setup
21except ImportError:
22    from distutils.core import setup
23import sys
24
25
26class build_doc(Command):
27    description = 'Builds the documentation'
28    user_options = [
29        ('force', None,
30         "force regeneration even if no reStructuredText files have changed"),
31        ('without-apidocs', None,
32         "whether to skip the generation of API documentaton"),
33    ]
34    boolean_options = ['force', 'without-apidocs']
35
36    def initialize_options(self):
37        self.force = False
38        self.without_apidocs = False
39
40    def finalize_options(self):
41        pass
42
43    def run(self):
44        from docutils.core import publish_cmdline
45        from docutils.nodes import raw
46        from docutils.parsers import rst
47
48        docutils_conf = os.path.join('doc', 'conf', 'docutils.ini')
49        epydoc_conf = os.path.join('doc', 'conf', 'epydoc.ini')
50
51        try:
52            from pygments import highlight
53            from pygments.lexers import get_lexer_by_name
54            from pygments.formatters import HtmlFormatter
55
56            def code_block(name, arguments, options, content, lineno,
57                           content_offset, block_text, state, state_machine):
58                lexer = get_lexer_by_name(arguments[0])
59                html = highlight('\n'.join(content), lexer, HtmlFormatter())
60                return [raw('', html, format='html')]
61            code_block.arguments = (1, 0, 0)
62            code_block.options = {'language' : rst.directives.unchanged}
63            code_block.content = 1
64            rst.directives.register_directive('code-block', code_block)
65        except ImportError:
66            print 'Pygments not installed, syntax highlighting disabled'
67
68        for source in glob('doc/*.txt'):
69            dest = os.path.splitext(source)[0] + '.html'
70            if self.force or not os.path.exists(dest) or \
71                    os.path.getmtime(dest) < os.path.getmtime(source):
72                print 'building documentation file %s' % dest
73                publish_cmdline(writer_name='html',
74                                argv=['--config=%s' % docutils_conf, source,
75                                      dest])
76
77        if not self.without_apidocs:
78            try:
79                from epydoc import cli
80                old_argv = sys.argv[1:]
81                sys.argv[1:] = [
82                    '--config=%s' % epydoc_conf,
83                    '--no-private', # epydoc bug, not read from config
84                    '--simple-term',
85                    '--verbose'
86                ]
87                cli.cli()
88                sys.argv[1:] = old_argv
89
90            except ImportError:
91                print 'epydoc not installed, skipping API documentation.'
92
93
94class test_doc(Command):
95    description = 'Tests the code examples in the documentation'
96    user_options = []
97
98    def initialize_options(self):
99        pass
100
101    def finalize_options(self):
102        pass
103
104    def run(self):
105        for filename in glob('doc/*.txt'):
106            print 'testing documentation file %s' % filename
107            doctest.testfile(filename, False, optionflags=doctest.ELLIPSIS)
108
109
110setup(
111    name = 'Genshi',
112    version = '0.4.4',
113    description = 'A toolkit for stream-based generation of output for the web',
114    long_description = \
115"""Genshi is a Python library that provides an integrated set of
116components for parsing, generating, and processing HTML, XML or
117other textual content for output generation on the web. The major
118feature is a template language, which is heavily inspired by Kid.""",
119    author = 'Edgewall Software',
120    author_email = 'info@edgewall.org',
121    license = 'BSD',
122    url = 'http://genshi.edgewall.org/',
123    download_url = 'http://genshi.edgewall.org/wiki/Download',
124    zip_safe = True,
125
126    classifiers = [
127        'Development Status :: 4 - Beta',
128        'Environment :: Web Environment',
129        'Intended Audience :: Developers',
130        'License :: OSI Approved :: BSD License',
131        'Operating System :: OS Independent',
132        'Programming Language :: Python',
133        'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
134        'Topic :: Software Development :: Libraries :: Python Modules',
135        'Topic :: Text Processing :: Markup :: HTML',
136        'Topic :: Text Processing :: Markup :: XML'
137    ],
138    keywords = ['python.templating.engines'],
139    packages = ['genshi', 'genshi.filters', 'genshi.template'],
140    test_suite = 'genshi.tests.suite',
141
142    extras_require = {
143        'i18n': ['Babel>=0.8'],
144        'plugin': ['setuptools>=0.6a2']
145    },
146    entry_points = """
147    [babel.extractors]
148    genshi = genshi.filters.i18n:extract[i18n]
149   
150    [python.templating.engines]
151    genshi = genshi.template.plugin:MarkupTemplateEnginePlugin[plugin]
152    genshi-markup = genshi.template.plugin:MarkupTemplateEnginePlugin[plugin]
153    genshi-text = genshi.template.plugin:TextTemplateEnginePlugin[plugin]
154    """,
155
156    cmdclass = {'build_doc': build_doc, 'test_doc': test_doc}
157)
Note: See TracBrowser for help on using the repository browser.