summaryrefslogtreecommitdiff
path: root/setup.py
blob: 88ce93b6296c318ad326b8b1effb935e2c4cb078 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
# Procedure to release a new version:
#
# - run tests: run tox
# - update version in setup.py (__version__)
# - update tag_build in setup.cfg
# - update changelog: docs/news.txt
# - modify setup.py: set RELEASE to True
# - check that "python setup.py sdist" contains all files tracked by
#   the SCM (Mercurial): update MANIFEST.in if needed
#
# - hg ci
# - hg tag VERSION
# - hg push
# - python2 setup.py register sdist bdist_wheel upload
# - python3 setup.py bdist_wheel upload
#
# - increment version in setup.py (__version__)
# - hg ci && hg push

# If true, then the svn revision won't be used to calculate the
# revision (set to True for real releases)
RELEASE = True

__version__ = '2.0'

from setuptools import setup, find_packages
import sys, os
sys.path.insert(0, os.path.join(os.path.dirname(__file__),
                                'paste', 'util'))
import finddata

setup(name="Paste",
      version=__version__,
      description="Tools for using a Web Server Gateway Interface stack",
      long_description="""\
These provide several pieces of "middleware" (or filters) that can be nested to build web applications.  Each
piece of middleware uses the WSGI (`PEP 333`_) interface, and should
be compatible with other middleware based on those interfaces.

.. _PEP 333: http://www.python.org/dev/peps/pep-0333.html

Includes these features...

Testing
-------

* A fixture for testing WSGI applications conveniently and in-process,
  in ``paste.fixture``

* A fixture for testing command-line applications, also in
  ``paste.fixture``

* Check components for WSGI-compliance in ``paste.lint``

Dispatching
-----------

* Chain and cascade WSGI applications (returning the first non-error
  response) in ``paste.cascade``

* Dispatch to several WSGI applications based on URL prefixes, in
  ``paste.urlmap``

* Allow applications to make subrequests and forward requests
  internally, in ``paste.recursive``

Web Application
---------------

* Run CGI programs as WSGI applications in ``paste.cgiapp``

* Traverse files and load WSGI applications from ``.py`` files (or
  static files), in ``paste.urlparser``

* Serve static directories of files, also in ``paste.urlparser``; also
  in that module serving from Egg resources using ``pkg_resources``.

Tools
-----

* Catch HTTP-related exceptions (e.g., ``HTTPNotFound``) and turn them
  into proper responses in ``paste.httpexceptions``

* Several authentication techniques, including HTTP (Basic and
  Digest), signed cookies, and CAS single-signon, in the
  ``paste.auth`` package.

* Create sessions in ``paste.session`` and ``paste.flup_session``

* Gzip responses in ``paste.gzip``

* A wide variety of routines for manipulating WSGI requests and
  producing responses, in ``paste.request``, ``paste.response`` and
  ``paste.wsgilib``

Debugging Filters
-----------------

* Catch (optionally email) errors with extended tracebacks (using
  Zope/ZPT conventions) in ``paste.exceptions``

* Catch errors presenting a `cgitb
  <http://docs.python.org/2/library/cgitb.html>`_-based
  output, in ``paste.cgitb_catcher``.

* Profile each request and append profiling information to the HTML,
  in ``paste.debug.profile``

* Capture ``print`` output and present it in the browser for
  debugging, in ``paste.debug.prints``

* Validate all HTML output from applications using the `WDG Validator
  <http://www.htmlhelp.com/tools/validator/>`_, appending any errors
  or warnings to the page, in ``paste.debug.wdg_validator``

Other Tools
-----------

* A file monitor to allow restarting the server when files have been
  updated (for automatic restarting when editing code) in
  ``paste.reloader``

* A class for generating and traversing URLs, and creating associated
  HTML code, in ``paste.url``

The official development repo is at https://bitbucket.org/ianb/paste.

For the latest changes see the `news file
<http://pythonpaste.org/news.html>`_.

""",
      classifiers=[
        "Development Status :: 5 - Production/Stable",
        "Intended Audience :: Developers",
        "License :: OSI Approved :: MIT License",
        "Programming Language :: Python",
        "Programming Language :: Python :: 3",
        "Topic :: Internet :: WWW/HTTP",
        "Topic :: Internet :: WWW/HTTP :: Dynamic Content",
        "Topic :: Software Development :: Libraries :: Python Modules",
        "Topic :: Internet :: WWW/HTTP :: WSGI",
        "Topic :: Internet :: WWW/HTTP :: WSGI :: Application",
        "Topic :: Internet :: WWW/HTTP :: WSGI :: Middleware",
        "Topic :: Internet :: WWW/HTTP :: WSGI :: Server",
        "Framework :: Paste",
        ],
      keywords='web application server wsgi',
      author="Ian Bicking",
      author_email="ianb@colorstudy.com",
      url="http://pythonpaste.org",
      license="MIT",
      packages=find_packages(exclude=['ez_setup', 'examples', 'packages', 'tests*']),
      package_data=finddata.find_package_data(
          exclude_directories=finddata.standard_exclude_directories + ('tests',)),
      namespace_packages=['paste'],
      zip_safe=False,
      test_suite='nose.collector',
      tests_require=['nose>=0.11'],
      extras_require={
        'subprocess': [],
        'hotshot': [],
        'Flup': ['flup'],
        'Paste': [],
        'openid': ['python-openid'],
        'six': [],
        },
      entry_points="""
      [paste.app_factory]
      cgi = paste.cgiapp:make_cgi_application [subprocess]
      static = paste.urlparser:make_static
      pkg_resources = paste.urlparser:make_pkg_resources
      urlparser = paste.urlparser:make_url_parser
      proxy = paste.proxy:make_proxy
      test = paste.debug.debugapp:make_test_app
      test_slow = paste.debug.debugapp:make_slow_app
      transparent_proxy = paste.proxy:make_transparent_proxy
      watch_threads = paste.debug.watchthreads:make_watch_threads

      [paste.composite_factory]
      urlmap = paste.urlmap:urlmap_factory
      cascade = paste.cascade:make_cascade

      [paste.filter_app_factory]
      error_catcher = paste.exceptions.errormiddleware:make_error_middleware
      cgitb = paste.cgitb_catcher:make_cgitb_middleware
      flup_session = paste.flup_session:make_session_middleware [Flup]
      gzip = paste.gzipper:make_gzip_middleware
      httpexceptions = paste.httpexceptions:make_middleware
      lint = paste.lint:make_middleware
      printdebug = paste.debug.prints:PrintDebugMiddleware
      profile = paste.debug.profile:make_profile_middleware [hotshot]
      recursive = paste.recursive:make_recursive_middleware
      # This isn't good enough to deserve the name egg:Paste#session:
      paste_session = paste.session:make_session_middleware
      wdg_validate = paste.debug.wdg_validate:make_wdg_validate_middleware [subprocess]
      evalerror = paste.evalexception.middleware:make_eval_exception
      auth_tkt = paste.auth.auth_tkt:make_auth_tkt_middleware
      auth_basic = paste.auth.basic:make_basic
      auth_digest = paste.auth.digest:make_digest
      auth_form = paste.auth.form:make_form
      grantip = paste.auth.grantip:make_grantip
      openid = paste.auth.open_id:make_open_id_middleware [openid]
      pony = paste.pony:make_pony
      cowbell = paste.cowbell:make_cowbell
      errordocument = paste.errordocument:make_errordocument
      auth_cookie = paste.auth.cookie:make_auth_cookie
      translogger = paste.translogger:make_filter
      config = paste.config:make_config_filter
      registry = paste.registry:make_registry_manager

      [paste.server_runner]
      http = paste.httpserver:server_runner
      """,
      )