WebStack

Annotated README.txt

672:bebdce5d9002
2007-09-27 paulb [project @ 2007-09-27 22:50:53 by paulb] Updated release information.
paulb@68 1
Introduction
paulb@68 2
------------
paulb@68 3
paulb@301 4
WebStack is a package which provides a common API for Python Web
paulb@301 5
applications, regardless of the underlying server or framework environment.
paulb@301 6
It should be possible with WebStack to design and implement an application,
paulb@301 7
to choose a deployment environment, and then to be able to deploy the
paulb@301 8
application in a different environment later on without having to go back
paulb@301 9
and rewrite substantial parts of the application.
paulb@60 10
paulb@362 11
Quick Start
paulb@362 12
-----------
paulb@362 13
paulb@362 14
Try running the demo:
paulb@362 15
paulb@362 16
python tools/demo.py
paulb@362 17
paulb@363 18
An introductory guide to creating applications can be found in the docs
paulb@363 19
directory - see docs/index.html for the start page.
paulb@363 20
paulb@363 21
Contact, Copyright and Licence Information
paulb@363 22
------------------------------------------
paulb@363 23
paulb@363 24
The current Web page for WebStack at the time of release is:
paulb@363 25
paulb@363 26
http://www.boddie.org.uk/python/WebStack.html
paulb@363 27
paulb@363 28
Copyright and licence information can be found in the docs directory - see
paulb@413 29
docs/COPYING.txt, docs/LICENCE.txt and docs/LICENCE-PyServlet.txt for more
paulb@413 30
information.
paulb@363 31
paulb@68 32
Framework Support
paulb@68 33
-----------------
paulb@68 34
paulb@580 35
See the docs/supported-frameworks.html document for more information.
paulb@388 36
paulb@672 37
New in WebStack 1.2.6 (Changes since WebStack 1.2.5)
paulb@672 38
----------------------------------------------------
paulb@672 39
paulb@672 40
  * Improved support for Jython on Ubuntu Feisty (7.04), adding python.path
paulb@672 41
    and python.cachedir settings which respectively avoid issues with missing
paulb@672 42
    libraries (due to the separation of libraries in the Ubuntu package) and
paulb@672 43
    with failed imports (due to a read-only class cache directory).
paulb@672 44
  * Added more Jython-related documentation as suggested by Kevin Glynn.
paulb@672 45
  * Added missing request headers for CGI/WSGI environment variables.
paulb@672 46
paulb@649 47
New in WebStack 1.2.5 (Changes since WebStack 1.2.4)
paulb@649 48
----------------------------------------------------
paulb@649 49
paulb@649 50
  * Fixed mod_python status codes using a solution proposed by John Krukoff.
paulb@650 51
  * Fixed a Twisted deprecation warning when accessing port numbers, thanks to
paulb@650 52
    John Krukoff.
paulb@649 53
  * Added Ubuntu Feisty (7.04) package support.
paulb@653 54
  * Tidied up the documentation HTML.
paulb@649 55
paulb@636 56
New in WebStack 1.2.4 (Changes since WebStack 1.2.3)
paulb@636 57
----------------------------------------------------
paulb@636 58
paulb@640 59
  * Made a SessionDirectoryRepository which uses directories for data produced
paulb@640 60
    by the shelve module, rather than attempting to manipulate files produced
paulb@640 61
    by the shelve module, since the details of such files may differ between
paulb@640 62
    environments: a situation noticed by John Krukoff in an environment
paulb@640 63
    without the bsddb module installed.
paulb@636 64
paulb@631 65
New in WebStack 1.2.3 (Changes since WebStack 1.2.2)
paulb@631 66
----------------------------------------------------
paulb@631 67
paulb@631 68
  * Fixed inadvertent OpenSSL dependency, noticed by John Krukoff.
paulb@631 69
paulb@619 70
New in WebStack 1.2.2 (Changes since WebStack 1.2.1)
paulb@619 71
----------------------------------------------------
paulb@619 72
paulb@619 73
  * Added an EncodingSelector class for the setting of default encodings on
paulb@619 74
    transactions.
paulb@619 75
  * Added some documentation about path processing strategies.
paulb@625 76
  * Added a secure variant of the BaseHTTPServer provided in the adapter for
paulb@625 77
    BaseHTTPRequestHandler.
paulb@619 78
paulb@606 79
New in WebStack 1.2.1 (Changes since WebStack 1.2)
paulb@606 80
--------------------------------------------------
paulb@606 81
paulb@606 82
  * Fixed mod_python get_content_type method.
paulb@615 83
  * Fixed LoginResource form field processing; changed the field type to
paulb@615 84
    password.
paulb@615 85
  * Exposed LoginResource and LoginRedirectResource page contents as
paulb@615 86
    attributes.
paulb@615 87
  * Added documentation about extending LoginRedirectResource and using
paulb@615 88
    PathSelector to remember an application's root path.
paulb@615 89
  * Changed handle_errors to 1 throughout the examples.
paulb@606 90
paulb@542 91
New in WebStack 1.2 (Changes since WebStack 1.1.2)
paulb@542 92
--------------------------------------------------
paulb@542 93
paulb@542 94
  * Added support for Django.
paulb@542 95
  * Fixed documentation about the representation of file upload fields.
paulb@552 96
  * Changed mod_python, Java Servlet and Webware (> 0.8.1) deployment to use a
paulb@552 97
    deploy function instead of more complicated configuration mechanisms.
paulb@542 98
  * Improved mod_python deployment documentation and tools so that cleaner
paulb@542 99
    application paths/URLs can now be used.
paulb@542 100
  * Moved user and path_info default definitions into WebStack.Generic as
paulb@542 101
    class attributes.
paulb@542 102
  * Fixed encoding usage issues with path fields when using get_fields in a
paulb@542 103
    Zope environment.
paulb@550 104
  * Added a FileResource class to WebStack.Resources.Static.
paulb@565 105
  * Made DirectoryRepository convert filenames to Unicode in all cases.
paulb@568 106
  * Renamed the Apache and Java Servlet tools, making them scripts which are
paulb@568 107
    installed by setup.py.
paulb@584 108
  * Fixed CGI content charsets and languages support.
paulb@587 109
  * Fixed CGI cookie output.
paulb@587 110
  * Added URL overriding in the LoginRedirectResource.
paulb@587 111
  * Exposed a get_target function from WebStack.Resources.Login in order to
paulb@587 112
    better support alternative login resources.
paulb@592 113
  * Added improved error reporting for BaseHTTPRequestHandler, CGI, Django and
paulb@592 114
    WSGI.
paulb@597 115
  * Added a traverse_path method to the Transaction class.
paulb@597 116
  * Made a path_encoding alias for urlencoding in the initialisation of
paulb@597 117
    WebStack.Resources.ResourceMap objects.
paulb@597 118
  * Added a Selectors module to WebStack.Resources in order to support common
paulb@597 119
    resource selection patterns.
paulb@542 120
paulb@536 121
New in WebStack 1.1.2 (Changes since WebStack 1.1.1)
paulb@536 122
----------------------------------------------------
paulb@536 123
paulb@536 124
  * Fixed missing import in WebStack.Repositories.Directory.
paulb@536 125
paulb@530 126
New in WebStack 1.1.1 (Changes since WebStack 1.1)
paulb@530 127
--------------------------------------------------
paulb@530 128
paulb@530 129
  * Fixed update_path to handle the root path properly.
paulb@530 130
paulb@495 131
New in WebStack 1.1 (Changes since WebStack 1.0)
paulb@495 132
------------------------------------------------
paulb@492 133
paulb@495 134
  * Added a Repositories package to provide session-like support for
paulb@495 135
    different kinds of storage.
paulb@495 136
  * Added an explicit filesystem encoding to the Calendar example and adopted
paulb@495 137
    the DirectoryRepository from the Repositories package.
paulb@504 138
  * Added get_path_without_info, update_path and redirect methods to the
paulb@504 139
    Transaction class.
paulb@527 140
  * Added get_attributes (attribute support) to the Transaction class.
paulb@495 141
  * Added a values method to Helpers.Session.Wrapper.
paulb@528 142
  * Fixed get_processed_virtual_path_info (to match from right to left).
paulb@514 143
  * Improved/fixed exception handling in the adapters so that transactions are
paulb@514 144
    committed as the final act of an adapter experiencing an unhandled
paulb@514 145
    exception. This should result in session stores being closed properly.
paulb@517 146
  * Changed the Helpers.Session.SessionStore to use DirectoryRepository.
paulb@514 147
  * Made the "not found" behaviour of DirectoryResource more configurable.
paulb@514 148
  * Added documentation for MapResource and DirectoryResource.
paulb@492 149
  * Fixed the distribution names in the Ubuntu changelog.
paulb@492 150
paulb@409 151
New in WebStack 1.0 (Changes since WebStack 0.10)
paulb@409 152
-------------------------------------------------
paulb@409 153
paulb@474 154
  * Changed the behaviour of get_path, get_path_without_query, get_path_info,
paulb@474 155
    get_virtual_path_info, get_processed_virtual_path_info and
paulb@474 156
    get_fields_from_path to return Unicode data decoded using the optional
paulb@474 157
    encoding parameter or a common default encoding.
paulb@474 158
  * Fixed file upload values so that FileContent objects are returned for such
paulb@474 159
    fields in get_fields_from_body and get_fields.
paulb@474 160
    (Warning! Except for Twisted!)
paulb@474 161
  * Fixed the JavaServlet support so that streams and file content are
paulb@474 162
    obtained as "almost" plain strings.
paulb@474 163
  * Updated/fixed LoginResource and LoginRedirectResource to use the updated
paulb@474 164
    path API and to handle special characters properly.
paulb@474 165
  * Added convenience methods to Transaction for the decoding and encoding of
paulb@474 166
    path values (to and from Unicode objects) - see the decode_path and
paulb@474 167
    encode_path methods.
paulb@474 168
  * Added the notion of processed virtual path info - the part of the original
paulb@474 169
    path info not represented in the current virtual path info.
paulb@474 170
  * Added "pass through" behaviour to ResourceMap.MapResource (prompted by a
paulb@474 171
    patch from Scott Robinson).
paulb@474 172
  * Fixed ResourceMap.MapResource to handle non-existent resources properly
paulb@474 173
    (where the virtual path info is only one component in length).
paulb@474 174
  * Added Debian package support.
paulb@474 175
  * Added automatic session directory creation for the WebStack sessions
paulb@474 176
    implementation.
paulb@474 177
  * Added support for the repeated retrieval of sessions from the same
paulb@474 178
    WebStack session store, avoiding deadlocks.
paulb@474 179
  * Fixed the calendar example, making it perform a proper function.
paulb@474 180
  * Made the BaseHTTPRequestHandler and Twisted SimpleWithLogin applications
paulb@474 181
    include the Login application, since Konqueror (at least) does not share
paulb@474 182
    cookies across different port numbers on the same host.
paulb@474 183
  * Added the SimpleWithLogin and Login applications to the demonstration.
paulb@474 184
  * Improved the documentation, adding information on request headers, and
paulb@474 185
    describing file upload and session support limitations.
paulb@476 186
  * Improved the AOLserver-related notes for CGI and Webware, adding a patch
paulb@476 187
    for Webware in order to work around AOLserver issues.
paulb@409 188
paulb@388 189
New in WebStack 0.10 (Changes since WebStack 0.9)
paulb@388 190
-------------------------------------------------
paulb@388 191
paulb@474 192
  * Changes to make the tools/demo.py script work on Windows (and other)
paulb@474 193
    platforms (suggested by Jim Madsen).
paulb@474 194
  * Fixed end of header newlines for CGI (suggested by Matt Harrison).
paulb@474 195
  * Minor documentation fixes and improvements, adding information on
paulb@474 196
    AOLserver in the CGI and Webware notes.
paulb@474 197
  * Changed the mod_python server name method to use the server object rather
paulb@474 198
    than the connection object.
paulb@474 199
  * Added a parameter to the ResourceMap.MapResource class to permit automatic
paulb@474 200
    redirects into resource hierarchies when no trailing "/" was given in the
paulb@474 201
    URL; changed the updated virtual path info so that empty values may be set
paulb@474 202
    (the guarantee that "/" will always appear no longer applies).
paulb@474 203
  * Fixed virtual path info retrieval when the value is an empty string.
paulb@192 204
paulb@314 205
New in WebStack 0.9 (Changes since WebStack 0.8)
paulb@314 206
------------------------------------------------
paulb@314 207
paulb@474 208
  * Standardised error handling in the adapters so that tracebacks can be
paulb@474 209
    suppressed and an internal server error condition raised.
paulb@474 210
  * Added overriding of path info in transactions.
paulb@474 211
  * Added a ResourceMap resource for dispatching to different resources
paulb@474 212
    according to path components.
paulb@474 213
  * Standardised deployment for some frameworks (see docs/deploying.html).
paulb@474 214
  * Introductory documentation in XHTML format.
paulb@474 215
  * Added server name and port methods to the transaction.
paulb@474 216
  * Added a simple demonstration application, incorporating many of the
paulb@474 217
    examples and launched under a single script.
paulb@474 218
  * Fixed mod_python native sessions.
paulb@474 219
  * Fixed Zope request stream access.
paulb@474 220
  * WebStack is now licensed under the LGPL - see docs/COPYING.txt for
paulb@474 221
    details.
paulb@314 222
paulb@300 223
New in WebStack 0.8 (Changes since WebStack 0.7)
paulb@295 224
------------------------------------------------
paulb@295 225
paulb@474 226
  * Added a standard exception, EndOfResponse, which can be used to
paulb@474 227
    immediately stop the processing/production of a response; this is useful
paulb@474 228
    when resources need to issue a redirect without unnecessary content being
paulb@474 229
    generated, for example.
paulb@474 230
  * Fixed path information for Zope.
paulb@474 231
  * Added WSGI support.
paulb@474 232
  * Verified Twisted 1.3.0 support with Python 2.3.3.
paulb@295 233
paulb@300 234
New in WebStack 0.7 (Changes since WebStack 0.6)
paulb@192 235
------------------------------------------------
paulb@192 236
paulb@474 237
  * Fixed path information semantics.
paulb@474 238
  * Fixed file upload semantics.
paulb@474 239
  * Fixed content type handling for Unicode output and for interpreting
paulb@474 240
    request body fields/parameters (although some improvement remains).
paulb@474 241
  * Added a method to discover the chosen response stream encoding.
paulb@474 242
  * Fixed field/parameter retrieval so that path and body fields are distinct,
paulb@474 243
    regardless of the framework employed.
paulb@474 244
  * Added a method to get a combination of path and body fields (suggested by
paulb@474 245
    Jacob Smullyan).
paulb@474 246
  * Introduced Zope 2 support.
paulb@474 247
  * Improved Jython/Java Servlet API support (although a special PyServlet
paulb@474 248
    class must now be used, and certain libraries must be deployed with
paulb@474 249
    applications).
paulb@474 250
  * Introduced authentication/authorisation support for Jython/Java Servlet
paulb@474 251
    API.
paulb@474 252
  * Session support has been added (except for Webware 0.8.1).
paulb@474 253
  * Alternative cookie support for mod_python has been added.
paulb@474 254
  * Cookie support now supports encoded Unicode sequences for names and
paulb@474 255
    values.
paulb@68 256
paulb@300 257
New in WebStack 0.6 (Changes since WebStack 0.5)
paulb@178 258
------------------------------------------------
paulb@178 259
paulb@474 260
  * Introduced Jython/Java Servlet API support.
paulb@474 261
  * Minor fixes to example applications and to BaseHTTPRequestHandler.
paulb@178 262
paulb@300 263
New in WebStack 0.5 (Changes since WebStack 0.4)
paulb@171 264
------------------------------------------------
paulb@171 265
paulb@474 266
  * Changed request body fields/parameters so that they are now represented
paulb@474 267
    using Unicode objects rather than plain strings.
paulb@474 268
  * Introduced better support for Unicode in response streams.
paulb@171 269
paulb@300 270
New in WebStack 0.4 (Changes since WebStack 0.3)
paulb@160 271
------------------------------------------------
paulb@140 272
paulb@474 273
  * Added application definition of user identity, permitting alternative
paulb@474 274
    authentication mechanisms.
paulb@474 275
  * Improved BaseHTTPRequestHandler and mod_python reliability around fields
paulb@474 276
    from request bodies.
paulb@474 277
  * Provided stream and environment parameterisation in the CGI adapter.
paulb@474 278
  * Added LoginRedirect and Login examples.
paulb@474 279
  * Added get_path_without_query and fixed get_path behaviour.
paulb@140 280
paulb@300 281
New in WebStack 0.3 (Changes since WebStack 0.2)
paulb@160 282
------------------------------------------------
paulb@120 283
paulb@474 284
  * Added better header support for Webware (suggested by Ian Bicking).
paulb@474 285
  * Introduced CGI and Java Servlet support (the latter is currently
paulb@474 286
    broken/unfinished).
paulb@474 287
  * Introduced support for cookies.
paulb@120 288
paulb@68 289
Future Work
paulb@68 290
-----------
paulb@68 291
paulb@308 292
(Essential)
paulb@308 293
paulb@460 294
Twisted 1.3.0 does not provide file upload metadata, and Twisted Web 0.5.0
paulb@460 295
also seems to be missing this functionality. It isn't obvious whether Twisted
paulb@460 296
Web2 will just copy its predecessors and provide a similarly limited API.
paulb@460 297
Perhaps the Twisted support needs to resemble the CGI support much more when
paulb@460 298
handling fields.
paulb@460 299
paulb@308 300
JythonServlet libraries need to be configured using sys.add_package when
paulb@308 301
these do not feature in the compiled-in list. Adding such configuration to
paulb@308 302
the handler may be most appropriate (since the web.xml file can be too
paulb@308 303
arcane), but this needs testing.
paulb@308 304
paulb@580 305
The algorithm employed in the WebStack.Helpers.Auth.get_token function
paulb@580 306
should be reviewed and improved for better security.
paulb@580 307
paulb@308 308
(Important)
paulb@308 309
paulb@363 310
Field access needs testing, especially for anything using the
paulb@363 311
cgi.FieldStorage class, and the way file uploads are exposed should be
paulb@363 312
reviewed (currently the meta-data is not exposed). The acquisition of fields
paulb@363 313
from specific sources should be tested with different request methods - some
paulb@363 314
frameworks provide path fields in the body fields dictionary, others (eg.
paulb@363 315
Zope) change the fields exposed depending on request method.
paulb@248 316
paulb@363 317
Interpretation of path field encodings needs to be verified. Currently,
paulb@363 318
stray path fields are handled (eg. in WebStack.Helpers.Request) as being
paulb@363 319
ISO-8859-1, but it might be the case that some such fields might be
paulb@438 320
submitted as UTF-8. The decode_path method on Transaction does do much of the
paulb@460 321
work that is likely to be required, however. Still, a good policy for decoding
paulb@460 322
path fields, reducing the number of times one might specify the encoding in
paulb@460 323
various method calls, may be important.
paulb@438 324
paulb@438 325
An interesting test of encodings is to introduce things like the following to
paulb@438 326
the path info and query string sections of the URL: %25F0?%E6=%F8&%25F0=%F8
paulb@438 327
This should produce the following decoded result: %F0?æ=ø&%F0=ø
paulb@438 328
(The above needs to be read in ISO-8859-1 or ISO-8859-15.)
paulb@102 329
paulb@102 330
Cookie objects need defining strictly, especially since the standard library
paulb@363 331
Cookie object behaves differently to mod_python (and possibly Webware)
paulb@363 332
Cookie objects. Moreover, the set_cookie_value method needs to provide
paulb@363 333
access to the usual cookie parameters as supported by the frameworks. The
paulb@363 334
standard library Cookie module has issues with Unicode cookie names (and
paulb@363 335
possibly values) - this is worked around, but it would be best to resolve
paulb@363 336
this comprehensively.
paulb@90 337
paulb@363 338
UTF-16 (and possibly other encodings) causes problems with HTML form data
paulb@363 339
sent in POST requests using the application/x-www-form-urlencoded content
paulb@363 340
type.  This should be reviewed at a later date when proper standardisation
paulb@363 341
has taken place.
paulb@218 342
paulb@239 343
Session support, especially through WebStack.Helpers.Session, should be
paulb@248 344
reviewed and be made compatible with non-cookie mechanisms.
paulb@248 345
paulb@514 346
Locking in the session support and in DirectoryRepository should be improved.
paulb@514 347
paulb@248 348
HeaderValue objects should be employed more extensively. Thus, the header
paulb@469 349
access methods may need to change their behaviour slightly. The get_headers
paulb@469 350
method should potentially return a list for each item in the dictionary.
paulb@248 351
paulb@304 352
WSGI support could demand that a special "end of headers" method be
paulb@304 353
introduced into WebStack, thus making response output more efficient (and
paulb@304 354
probably also for other frameworks, too).
paulb@304 355
paulb@336 356
Investigate proper support for HEAD, OPTIONS and other request methods.
paulb@336 357
paulb@438 358
Consider packages for different operating systems (other than Debian).
paulb@365 359
paulb@542 360
Investigate cStringIO usage.
paulb@542 361
paulb@355 362
The location of deployed applications in the filesystem should be exposed to
paulb@355 363
those applications. (This is actually available in the __file__ module
paulb@580 364
variable.) A resource could be provided to record the "root" path and added to
paulb@617 365
a resource hierarchy or site map. Note that PathSelector records the "root"
paulb@617 366
path, although it is not automatically deployed.
paulb@580 367
paulb@580 368
(Completed/rejected)
paulb@355 369
paulb@355 370
Path information should be consistent across all frameworks, and the "path
paulb@355 371
info" value should be meaningful. (This should now be correct.)
paulb@355 372
paulb@460 373
Investigate the nicer functions in the cgi module, discarding the "magic"
paulb@460 374
stuff like FieldStorage. (These nicer functions are used by projects like
paulb@460 375
Twisted - as of 1.3.0 at least - and do not give the necessary information we
paulb@460 376
require.)
paulb@460 377
paulb@159 378
Release Procedures
paulb@159 379
------------------
paulb@159 380
paulb@159 381
Update the WebStack/__init__.py __version__ attribute.
paulb@329 382
Change the version number and package filename/directory in the documentation.
paulb@332 383
Change code examples in the documentation if appropriate.
paulb@159 384
Update the release notes (see above).
paulb@159 385
Check the setup.py file and ensure that all package directories are mentioned.
paulb@417 386
Check the release information in the PKG-INFO file and in the package
paulb@417 387
changelog (and other files).
paulb@253 388
Tag, export.
paulb@247 389
Generate the PyServlet classes.
paulb@355 390
Generate the API documentation.
paulb@384 391
Remove generated .pyc files: rm `find . -name "*.pyc"`
paulb@253 392
Archive, upload.
paulb@367 393
Upload the introductory documentation.
paulb@365 394
Update PyPI, PythonInfo Wiki, Vaults of Parnassus entries.
paulb@355 395
paulb@355 396
Generating the API Documentation
paulb@355 397
--------------------------------
paulb@355 398
paulb@363 399
In order to prepare the API documentation, it is necessary to generate some
paulb@363 400
Web pages from the Python source code. For this, the epydoc application must
paulb@475 401
be available on your system. Then, inside the distribution directory, run the
paulb@355 402
apidocs.sh tool script as follows:
paulb@355 403
paulb@355 404
./tools/apidocs.sh
paulb@355 405
paulb@355 406
Some warnings may be generated by the script, but the result should be a new
paulb@475 407
apidocs directory within the distribution directory.
paulb@472 408
paulb@472 409
Making Packages
paulb@472 410
---------------
paulb@472 411
paulb@485 412
To make Debian-based packages:
paulb@472 413
paulb@485 414
  1. Create new package directories under packages if necessary.
paulb@474 415
  2. Make a symbolic link in the distribution's root directory to keep the
paulb@649 416
     Debian tools happy. For example:
paulb@472 417
paulb@485 418
     ln -s packages/ubuntu-hoary/python2.4-webstack/debian/
paulb@649 419
     ln -s packages/ubuntu-feisty/python-webstack/debian/
paulb@472 420
paulb@474 421
  3. Run the package builder:
paulb@472 422
paulb@474 423
     dpkg-buildpackage -rfakeroot
paulb@472 424
paulb@474 425
  4. Locate and tidy up the packages in the parent directory of the
paulb@474 426
     distribution's root directory.