[Checkins] SVN: Sandbox/philikon/five.publication/trunk/ Initial import of five.publication (Zope 2 on zope.publisher). Highly experimental.

Philipp von Weitershausen philikon at philikon.de
Wed Aug 1 21:22:24 EDT 2007


Log message for revision 78542:
  Initial import of five.publication (Zope 2 on zope.publisher). Highly experimental.
  It's just a prototype. You've been warned.
  

Changed:
  A   Sandbox/philikon/five.publication/trunk/
  A   Sandbox/philikon/five.publication/trunk/Products/
  A   Sandbox/philikon/five.publication/trunk/buildout.cfg
  A   Sandbox/philikon/five.publication/trunk/deploy.ini
  A   Sandbox/philikon/five.publication/trunk/etc/
  A   Sandbox/philikon/five.publication/trunk/etc/site.zcml
  A   Sandbox/philikon/five.publication/trunk/etc/zope.conf
  A   Sandbox/philikon/five.publication/trunk/five/
  A   Sandbox/philikon/five.publication/trunk/five/__init__.py
  A   Sandbox/philikon/five.publication/trunk/five/publication/
  A   Sandbox/philikon/five.publication/trunk/five/publication/__init__.py
  A   Sandbox/philikon/five.publication/trunk/five/publication/configure.zcml
  A   Sandbox/philikon/five.publication/trunk/five/publication/publication.py
  A   Sandbox/philikon/five.publication/trunk/five/publicationdemo/
  A   Sandbox/philikon/five.publication/trunk/five/publicationdemo/__init__.py
  A   Sandbox/philikon/five.publication/trunk/five/publicationdemo/application.py
  A   Sandbox/philikon/five.publication/trunk/log/
  A   Sandbox/philikon/five.publication/trunk/setup.py
  A   Sandbox/philikon/five.publication/trunk/var/

-=-

Property changes on: Sandbox/philikon/five.publication/trunk
___________________________________________________________________
Name: svn:ignore
   + five.publication.egg-info
bin
parts
eggs
develop-eggs
build
dist
.installed.cfg


Added: Sandbox/philikon/five.publication/trunk/buildout.cfg
===================================================================
--- Sandbox/philikon/five.publication/trunk/buildout.cfg	                        (rev 0)
+++ Sandbox/philikon/five.publication/trunk/buildout.cfg	2007-08-02 01:22:24 UTC (rev 78542)
@@ -0,0 +1,28 @@
+[buildout]
+develop = .
+parts = interpreter app runzope test
+
+[interpreter]
+recipe = zc.recipe.egg
+interpreter = python
+eggs = five.publication
+
+[app]
+# 
+recipe = zc.recipe.egg
+eggs = five.publication
+       Paste
+       PasteScript
+       PasteDeploy
+       z3c.evalexception
+
+[runzope]
+# old fashioned ZServer + ZPublisher
+recipe = zc.recipe.egg:script
+eggs = five.publication
+entry-points = runzope=Zope2.Startup.run:run
+initialization = sys.argv.extend(['-C', '${buildout:directory}/etc/zope.conf'])
+
+[test]
+recipe = zc.recipe.testrunner
+eggs = five.publication

Added: Sandbox/philikon/five.publication/trunk/deploy.ini
===================================================================
--- Sandbox/philikon/five.publication/trunk/deploy.ini	                        (rev 0)
+++ Sandbox/philikon/five.publication/trunk/deploy.ini	2007-08-02 01:22:24 UTC (rev 78542)
@@ -0,0 +1,12 @@
+[filter-app:main]
+use = egg:z3c.evalexception
+next = zope
+
+[app:zope]
+use = egg:five.publication#demo
+conf = etc/zope.conf
+
+[server:main]
+use = egg:Paste#http
+host = 127.0.0.1
+port = 8080

Added: Sandbox/philikon/five.publication/trunk/etc/site.zcml
===================================================================
--- Sandbox/philikon/five.publication/trunk/etc/site.zcml	                        (rev 0)
+++ Sandbox/philikon/five.publication/trunk/etc/site.zcml	2007-08-02 01:22:24 UTC (rev 78542)
@@ -0,0 +1,19 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope"
+    xmlns:meta="http://namespaces.zope.org/meta"
+    xmlns:five="http://namespaces.zope.org/five">
+
+  <include package="Products.Five" file="meta.zcml" />
+  <five:loadProducts file="meta.zcml"/>
+
+  <meta:redefinePermission from="zope2.Public" to="zope.Public" />
+
+  <include package="five.publication" />
+  <include package="Products.Five" />
+  <five:loadProducts />
+  <five:loadProductsOverrides />
+
+  <securityPolicy
+      component="Products.Five.security.FiveSecurityPolicy" />
+
+</configure>


Property changes on: Sandbox/philikon/five.publication/trunk/etc/site.zcml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Sandbox/philikon/five.publication/trunk/etc/zope.conf
===================================================================
--- Sandbox/philikon/five.publication/trunk/etc/zope.conf	                        (rev 0)
+++ Sandbox/philikon/five.publication/trunk/etc/zope.conf	2007-08-02 01:22:24 UTC (rev 78542)
@@ -0,0 +1,1125 @@
+###############################################################################
+# Welcome to Zope 2.
+###############################################################################
+#
+# This is the Zope configuration file.  The Zope configuration file
+# shows what the default configuration directives are, and show
+# examples for each directive.  To declare a directive, make sure that
+# you add it to a line that does not begin with '#'.  Note that comments
+# are only allowed at the beginning of a line: you may not add comments
+# after directive text on the same line.
+#
+# Note for Developers
+# ===================
+#
+# This file is *not* auto-generated. If you create a new directive you
+# very likely want to include an example of how to use the new
+# directive in this file.
+#
+# You shouldn't modify 'zope.conf.in' to change
+# configuration. Instead, you should make a copy into 'zope.conf' and
+# modify that to avoid checking in changes to this file by mistake.
+
+# ZConfig "defines" used for later textual substitution
+
+# XXX ack, have to hard-code this path?
+%define INSTANCE /Users/philipp/dev/five.publication
+
+# Directive: instancehome
+#
+# Description:
+#     The path to the data files, local product files, import directory,
+#     and Extensions directory used by Zope.
+#
+# Required (no default)
+#
+# Example:
+#
+#    instancehome /home/chrism/projects/sessions
+
+instancehome $INSTANCE
+
+# Directive: clienthome
+#
+# Description:
+#     The directory in which a running Zope's process identifier files are
+#     placed.
+#
+# Default: $INSTANCE/var
+#
+# Example:
+#
+#    clienthome /home/chrism/projects/sessions/var
+
+
+# Directive: path
+#
+# Description:
+#     Name of a directory which should be inserted into the
+#     the beginning of Python's module search path.  This directive
+#     may be specified as many times as needed to insert additional
+#     directories.  The set of directories specified is inserted into the
+#     beginning of the module search path in the order which they are specified
+#     here.  Note that the processing of this directive may happen too late
+#     under some circumstances; it is recommended that you use the PYTHONPATH
+#     environment variable if using this directive doesn't work for you.
+#
+# Default: $INSTANCE/lib/python
+#
+# Example:
+#
+#    path $INSTANCE/mypymodules
+
+
+# Directive: products
+#
+# Description:
+#     Name of a directory that contains additional Product packages.  This
+#     directive may be used as many times as needed to add additional
+#     collections of products.  Each directory identified will be
+#     added to the __path__ of the Products package.  All Products are
+#     initialized in ascending alphabetical order by product name.  If
+#     two products with the same name exist in two Products directories,
+#     the order in which the packages appear here defines the load
+#     order.  The master Products directory exists in Zope's software home,
+#     and cannot be removed from the products path (and should not be added
+#     to it here).
+#
+# Default: $INSTANCE/Products
+#
+# Example:
+#
+#    products /home/chrism/projects/myproducts
+
+
+# Directive: environment
+#
+# Description:
+#     A section which can be used to define arbitrary key-value pairs
+#     for use as environment variables during Zope's run cycle.  It
+#     is not recommended to set system-related environment variables such as
+#     PYTHONPATH within this section.
+#
+# Default: unset
+#
+# Example:
+#
+#    <environment>
+#      MY_PRODUCT_ENVVAR foobar
+#    </environment>
+
+# Directive: debug-mode
+#
+# Description:
+#     A switch which controls several aspects of Zope operation useful for
+#     developing under Zope.  When debug mode is on:
+#
+#     - The process will not detach from the controlling terminal
+#
+#     - Errors in product initialization will cause startup to fail
+#       (instead of writing error messages to the event log file).
+#
+#     - Filesystem-based scripts such as skins, PageTemplateFiles, and
+#       DTMLFiles can be edited while the server is running and the server
+#       will detect these changes in real time.  When this switch is
+#       off, you must restart the server to see the changes.
+#
+#     Setting this to 'off' when Zope is in a production environment is
+#     encouraged, as it speeds execution (sometimes dramatically).
+#
+# Default: off
+#
+# Example:
+#
+    debug-mode on
+
+
+# Directive: effective-user
+#
+# Description:
+#     If you intend to run Zope as the "root" user, you must supply this
+#     directive with an effective username or userid number to which Zope
+#     will 'suid' after the server ports are bound. This directive only
+#     has effect under UNIX and if Zope is started as the root user.
+#
+# Default: unset
+#
+# Example:
+#
+#    effective-user chrism
+
+
+# Directive: enable-product-installation
+#
+# Description:
+#     If this directive is turned on, Zope performs 'product installation'
+#     (the registration of Python modules in various Products directories)
+#     at startup. Turning this off can speed Zope/ZEO startup time,
+#     but it can also cause your Control_Panel Product list to become
+#     desynchronized with the contents of your Products
+#     directories.  NOTE: Zope *must* be started at least once with
+#     this directive set to "on" or you will receive an error.  If using ZEO,
+#     at least one ZEO client must be run with this directive set to "on"
+#     once, the others can have it turned off.
+#     NOTE: If your main storage is mounted read-only,
+#     you must set this directive to "off".
+#
+# Default: on
+#
+# Example:
+#
+#    enable-product-installation off
+
+# Directive: locale
+#
+# Description:
+#     Enable locale (internationalization) support by supplying a locale
+#     name to be used. See your operating system documentation for locale
+#     information specific to your system. If your Python module does not
+#     support the locale module, or if the requested locale is not
+#     supported by your system, an error will be raised and Zope will not
+#     start.
+#
+# Default: unset
+#
+# Example:
+#
+#    locale fr_FR
+
+
+# Directive: datetime-format
+#
+# Description:
+#     Set this variable either to "us" or "international" to force the
+#     DateTime module to parse date strings either with
+#     month-before-days-before-year ("us") or
+#     days-before-month-before-year ("international").  The default
+#     behaviour of DateTime (when this setting is left unset) is to
+#     parse dates as US dates.
+#
+# Default: us
+#
+# Example:
+#
+#    datetime-format international
+
+
+# Directive: zserver-threads
+#
+# Description:
+#     Specify the number of threads that Zope's ZServer web server will use
+#     to service requests. The default is 4.
+#
+# Default: 4
+#
+# Example:
+#
+#    zserver-threads 10
+
+
+# Directive: python-check-interval
+#
+# Description:
+#     Specify an integer representing the Python interpreter "check
+#     interval" This interval determines how often the interpreter checks
+#     for periodic things such as thread switches and signal handlers. The
+#     Zope default is 500, but you may want to experiment with other values
+#     in order to attempt to increae performance in your particular
+#     environment.
+#
+# Default: 500
+#
+# Example:
+#
+#    python-check-interval 1000
+
+
+# Directive: zserver-read-only-mode
+#
+# Description:
+#     If this directive is set to 'on', it will cause Zope to inhibit the
+#     creation of log files and pid files. Access and event log files will
+#     be presented on standard output. Setting this directive 'on' causes
+#     pcgi, fastcgi, and daemon-related directives to have no effect.
+#
+# Default: off
+#
+# Example:
+#
+#    zserver-read-only-mode on
+
+
+# Directive: pid-filename
+#
+# Description:
+#     The path to the file in which the Zope process id(s) will be written.
+#     This defaults to client-home/Z2.pid.
+#
+# Default: CLIENT_HOME/Z2.pid
+#
+# Example:
+#
+#    pid-filename /home/chrism/projects/sessions/var/Z2.pid
+
+
+# Directive: lock-filename
+#
+# Description:
+#     The path to a "lock file" which will be locked by Zope while it's
+#     running.  This file is used by zopectl.py to determine if Zope is
+#     currently running.  This defaults to CLIENT_HOME/Z2.lock.
+#
+# Default: CLIENT_HOME/Z2.lock
+#
+# Example:
+#
+#    lock-filename /home/chrism/projects/sessions/var/Z2.lock
+
+
+# Directive: mime-types
+#
+# Description:
+#     Tells Zope about additional mime.types files that should be
+#     loaded.  The files have the same format as the mime.types file
+#     distributed with Apache.  The "mime-types" setting may be given
+#     more than once in the configuration file.
+#
+# Example:
+#
+#     mime-types  $INSTANCE/etc/mime.types
+
+
+# Directive: structured-text-header-level
+#
+# Description:
+#     Set the default starting HTML header level for structured text
+#     documents. The default is 3, which implies that top-level headers
+#     will be created with an <H3> tag.
+#
+# Default: 3
+#
+# Example:
+#
+#    structured-text-header-level 1
+
+# Directive: rest-input-encoding
+#
+# Description:
+#    Specifies the input encoding of re-StructuredText documents
+#    (e.g. 'utf-8', 'iso-8859-15' or any other valid encoding recognized
+#    by Python).  The default is your Python's default encoding.
+#
+# Default: unset (uses system default)
+#
+# Example:
+#
+#    rest-input-encoding iso-8859-15
+
+# Directive: rest-output-encoding
+#
+# Description:
+#    Specifies the output encoding of re-StructuredText documents
+#    (e.g. 'utf-8', 'iso-8859-15' or any other valid encoding recognized
+#    by Python).  The default is your Python's default encoding.
+#
+# Default: unset (uses system default)
+#
+# Example:
+#
+#    rest-output-encoding iso-8859-15
+
+# Directive: rest-header-level
+#
+# Description:
+#     Set the default starting HTML header level for restructured text
+#     documents. The default is 3, which implies that top-level headers
+#     will be created with an <H3> tag.
+#
+# Default: 3
+#
+# Example:
+#
+#    rest-header-level 2
+
+# Directive: rest-language-code
+#
+# Description:
+#    Language code used for some internal translations inside of the docutils
+#    package and for DTD bibliographic elements mapping. See
+#    lib/python/docutils/languages/ for a list of supported language codes.
+#
+# Default: en
+#
+# Example:
+#
+#    rest-language-code de
+
+# Directive: cgi-environment
+#
+# Description:
+#     A section which allows a user to define arbitrary key-value pairs for
+#     use as the initial CGI environment variables. This is useful
+#     when you want to proxy requests from another web server to Zserver,
+#     and would like Zserver's CGI environment to reflect the CGI
+#     environment of the other web server.
+#
+# Default: unset
+#
+# Example:
+#
+# <cgi-environment>
+#   HTTPS_SERVER Foobar Server 1.0
+#   HTTPS_PORT 443
+# </cgi-environment>
+
+
+
+# Directive: dns-server
+#
+# Description:
+#     Specify the IP address of your DNS server in order to cause resolved
+#     hostnames to be written to Zope's access log. By default, Zope will
+#     not resolve hostnames unless this is set.
+#
+# Default: unset
+#
+# Example:
+#
+#    dns-server 127.0.0.1
+
+
+# Directive: ip-address
+#
+# Description:
+#     The default IP address on which Zope's various server protocol
+#     implementations will listen for requests. If this is unset, Zope
+#     will listen on all IP addresses supported by the machine. This
+#     directive can be overridden on a per-server basis in the servers
+#     section.
+#
+# Default: unset
+#
+# Example:
+#
+#    ip-address 127.0.0.1
+
+
+# Directive: http-realm
+#
+# Description:
+#     The HTTP "Realm" header value sent by this Zope instance. This value
+#     often shows up in basic authentication dialogs.
+#
+# Default: Zope
+#
+# Example:
+#
+#    http-realm Slipknot
+
+
+# Directive: cgi-maxlen
+#
+# Description:
+#     Set this value to limit the amount of form data being processed 
+#     by Zope to prevent DoS attacks.
+#
+# Default: 0 (= no restrictions)
+#
+# Example:
+#
+#    cgi-maxlen 10000
+
+
+# Directive: http-header-max-length
+#
+# Description:
+#     Maximum number of bytes allowed within a HTTP request header. The request
+#     is discarded and considered as a DoS attack if the header size exceeds
+#     this limit.
+#
+# Default: 8192
+#
+# Example:
+#
+#     http-header-max-length 16384
+
+# Directive: enable-ms-author-via
+#
+# Description:
+#     Set this directive to 'true' to enable the "MS-Author-Via" header
+#     in response to an OPTIONS WebDAV request. Early versions of
+#     Microsoft Web Folders and Microsoft Office require this header to
+#     be present to be able to connect to Zope via WebDAV.
+#
+#     This is disabled by default since it makes a lot of standards-compliant
+#     things unhappy AND it tricks Microsoft Office into trying to edit Office
+#     files stored in Zope via WebDAV even when the user isn't allowed to edit
+#     them and is only trying to download them.
+#
+#     Check this collector entry for more information:
+#     http://www.zope.org/Collectors/Zope/1441
+#
+#     Recent versions of Microsoft Web Folders, updated after January
+#     2005, do not require this header anymore, and instead require a
+#     "Public" header to be present in reply to the OPTIONS WebDAV
+#     request.
+#     (http://www.redmountainsw.com/wordpress/archives/webfolders-zope)
+# 
+#     To get a recent Microsoft Web Folders implementation, refer to
+#     Microsoft KB Article 907306.
+#     (Software Update for Web Folders: May 18, 2007).
+#
+# Default: off
+#
+# Example:
+#
+#    enable-ms-author-via on
+
+# Directive: enable-ms-public-header
+#
+# Description:
+#     Set this directive to 'on' to enable sending the "Public" header
+#     in response to an WebDAV OPTIONS request.
+#
+#     Though recent WebDAV drafts mention this header, the original
+#     WebDAV RFC did not mention it as part of the standard. Very few
+#     web servers out there include this header in their replies, most
+#     notably IIS and Netscape Enterprise 3.6.
+#
+#     Since many best practices documents out in the web mention
+#     turning off this header with the subject of "Mask Your Web Server
+#     For Enhanced Security", this setting is off by
+#     default. Presumably malicious people might take the presence of
+#     this header as indication of an IIS Web Server and try to attack
+#     your site, so be careful when turning it on.
+#
+#     Recent versions of Microsoft Web Folders, updated after January
+#     2005, *do* require this header to be present in reply to the
+#     OPTIONS WebDAV request.
+#     (http://www.redmountainsw.com/wordpress/archives/webfolders-zope)
+#
+#     To get a recent Microsoft Web Folders implementation, refer to
+#     Microsoft KB Article 907306.
+#     (Software Update for Web Folders: May 18, 2007).
+#
+# Default: off
+#
+# Example:
+#
+#    enable-ms-public-header on
+
+# Directive: automatically-quote-dtml-request-data
+#
+# Description:
+#     Set this directive to 'off' in order to disable the autoquoting of
+#     implicitly retrieved REQUEST data by DTML code which contains a '<'
+#     when used in <dtml-var> construction. When this directive is 'on',
+#     all data implicitly retrieved from the REQUEST in DTML (as opposed to
+#     addressing REQUEST.somevarname directly) that contains a '<' will be
+#     HTML-quoted when interpolated via a <dtml-var> or &dtml- construct. This
+#     mitigates the possibility that DTML programmers will leave their
+#     sites open to a "client-side trojan" attack.
+#
+# Default: on
+#
+# Example:
+#
+#    automatically-quote-dtml-request-data on
+
+# Directive: trusted-proxy
+#
+# Description:
+#     Define one or more 'trusted-proxies' directives, each of which is a
+#     hostname or an IP address.  The set of definitions comprises a list
+#     of front-end proxies that are trusted to supply an accurate
+#     X-Forwarded-For header to Zope.  If a connection comes from
+#     a trusted proxy, Zope will trust any X-Forwarded header to contain
+#     the user's real IP address for the purposes of address-based
+#     authentication restriction.
+#
+# Default: unset
+#
+# Example:
+#
+#    trusted-proxy www.example.com
+#    trusted-proxy 192.168.1.1
+
+# Directive: publisher-profile-file
+#
+# Description:
+#    Names a file on the filesystem which causes Zope's Python
+#    profiling capabilities to be enabled.  For more information, see
+#    the Debug Information - > Profiling tab of Zope's Control_Panel
+#    via the Zope Management Interface.  IMPORTANT: setting this
+#    filename will cause Zope code to be executed much more slowly
+#    than normal.  This should not be enabled in production.
+#
+# Default: unset
+#
+# Example:
+#
+#    publisher-profile-file $INSTANCE/var/profile.dat
+
+
+# Directive: security-policy-implementation
+#
+# Description:
+#     The default Zope security machinery is implemented in C.  Change
+#     this to "python" to use the Python version of the Zope security
+#     machinery.  This setting may impact performance but is useful
+#     for debugging purposes.  See also the "verbose-security" option
+#     below.
+#
+# Default: C
+#
+# Example:
+#
+#    security-policy-implementation python
+
+# Directive: skip-authentication-checking
+#
+# Description:
+#     Set this directive to 'on' to cause Zope to skip checks related
+#     to authentication, for servers which serve only anonymous content.
+#     Only works if security-policy-implementation is 'C'.
+#
+# Default: off
+#
+# Example:
+#
+#    skip-authentication-checking on
+
+
+# Directive: skip-ownership-checking
+#
+# Description:
+#     Set this directive to 'on' to cause Zope to ignore ownership checking
+#     when attempting to execute "through the web" code. By default, this
+#     directive is on in order to prevent 'trojan horse' security problems
+#     whereby a user with less privilege can cause a user with more
+#     privilege to execute dangerous code.
+#
+# Default: off
+#
+# Example:
+#
+#    skip-ownership-checking on
+
+
+# Directive: verbose-security
+#
+# Description:
+#     By default, Zope reports authorization failures in a terse manner in
+#     order to avoid revealing unnecessary information.  This option
+#     modifies the Zope security policy to report more information about
+#     the reason for authorization failures.  It's designed for debugging.
+#     If you enable this option, you must also set the
+#     'security-policy-implementation' to 'python'.
+#
+# Default: off
+#
+# Example:
+#
+#    security-policy-implementation python
+#    verbose-security on
+
+
+# Directive: maximum-number-of-session-objects
+#
+# Description:
+#     An integer value representing the number of items to use as a
+#     "maximum number of subobjects" value of the
+#     '/temp_folder/session_data' transient object container.
+#
+# Default: 1000
+#
+# Example:
+#
+#    maximum-number-of-session-objects 10000
+
+
+# Directive: session-add-notify-script-path
+#
+# Description:
+#     An optional fill Zope path name of a callable object to be set as the
+#     "script to call on object addition" of the sessioN_data transient
+#     object container created in the /temp_folder folder at startup.
+#
+# Default: unset
+#
+# Example:
+#
+#    session-add-notify-script-path /scripts/add_notifier
+
+
+# Directive: session-delete-notify-script-path
+#
+# Description:
+#     An optional fill Zope path name of a callable object to be set as the
+#     "script to call on object deletion" of the sessioN_data transient
+#     object container created in the /temp_folder folder at startup.
+#
+# Default: unset
+#
+# Example:
+#
+#    session-delete-notify-script-path /scripts/del_notifier
+
+
+# Directive: session-timeout-minutes
+#
+# Description:
+#     An integer value representing the number of minutes to be used as the
+#     "data object timeout" of the '/temp_folder/session_data' transient
+#     object container.
+#
+# Default: 20
+#
+# Example:
+#
+#    session-timeout-minutes 30
+
+
+# Directive: session-resolution-seconds
+#
+# Description:
+#    An integer value representing the number of seconds to be used as the
+#    "timeout resolution" of the '/temp_folder/session_data' transient
+#    object container.
+#
+# Default: 20
+#
+# Example:
+#
+#    session-resolution-seconds 60
+
+
+# Directive: suppress-all-access-rules
+#
+# Description:
+#     If this directive is set to on, no access rules in your Zope site
+#     will be executed. This is useful if you "lock yourself out" of a
+#     particular part of your site by setting an improper access rule.
+#
+# Default: off
+#
+# Example:
+#
+#    suppress-all-access-rules on
+
+
+# Directive: suppress-all-site-roots
+#
+# Description:
+#     If this directive is set to on, no site roots in your Zope site will
+#     be effective. This is useful if you "lock yourself out" of a
+#     particular part of your site by setting an improper site root.
+#
+# Default: off
+#
+# Example:
+#
+#    suppress-all-site-roots on
+
+
+# Directive: database-quota-size
+#
+# Description:
+#     Set this directive to an integer in bytes in order to place a hard
+#     limit on the size which the default FileStorage-backed Zope database
+#     can grow. Additions to the database will not be permitted once this
+#     filesize is exceeded.
+#
+# Default: unset
+#
+# Example:
+#
+#    database-quota-size 1000000
+
+
+# Directive: read-only-database
+#
+# Description:
+#     This causes the main Zope FileStorage-backed ZODB to be opened in
+#     read-only mode.
+#
+# Default: off
+#
+# Example:
+#
+#    read-only-database on
+
+
+# Directive: zeo-client-name
+#
+# Description:
+#     If you want a persistent ZEO client cache which retains cache
+#     contents across ClientStorage restarts, you need to define a
+#     zeo-client-name.  If you use ZEO and you don't set a
+#     zeo-client-name, the client cache is stored in temporary files
+#     which are removed when the ClientStorage shuts down.  The value
+#     of zeo-client-name is used to uniquely identify the local cache
+#     files created if this Zope is a ZEO client.
+#
+# Default: unset
+#
+# Example:
+#
+#    zeo-client-name zeo1
+
+
+# Directives: logger
+#
+# Description:
+#     This area should define one or more "logger" sections of the
+#     names "access", "event", and "trace".  The "access" logger logs
+#     Zope server access.  The "event" logger logs Zope event
+#     information.  The "trace" logger logs detailed server request
+#     information (for debugging purposes only).  Each logger section
+#     may contain a "level" name/value pair which indicates the level
+#     of logging detail to capture for this logger.  The default level
+#     is INFO.  Level may be any of "CRITICAL", 'ERROR", WARN", "INFO",
+#     "DEBUG", and "ALL".  Each logger section may additionally contain
+#     one or more "handler" sections which indicates a types of log
+#     "handlers" (file, syslog, NT event log, etc) to be used for the
+#     logger being defined.  There are 5 types of handlers: logfile,
+#     syslog, win32-eventlog, http-handler, email-notifier.  Each
+#     handler type has its own set of allowable subkeys which define
+#     aspects of the handler.  All handler sections also allow for the
+#     specification of a "format" (the log message format string), a
+#     "dateformat" (the log message format for date strings), and a
+#     "level", which has the same semantics of the overall logger
+#     level but overrides the logger's level for the handler it's
+#     defined upon.  XXXX much more detail necessary here
+#
+# Default:
+#
+#     The access log will log to the file <instancehome>/log/Z2.log at
+#     level INFO, the event log will log to the file
+#     <instancehome>/log/event.log at level INFO, and the trace log
+#     will not be written anywhere.
+
+<eventlog>
+  level info
+  <logfile>
+    path $INSTANCE/log/event.log
+    level info
+  </logfile>
+</eventlog>
+
+<logger access>
+  level WARN
+  <logfile>
+    path $INSTANCE/log/Z2.log
+    format %(message)s
+  </logfile>
+</logger>
+
+# <logger trace>
+#   level WARN
+#   <logfile>
+#     path $INSTANCE/log/trace.log
+#     format %(message)s
+#   </logfile>
+# </logger>
+
+
+# Directive: conflict-error-log-level
+#
+# Description:
+#     Specifies at which level conflict errors are logged. Conflict
+#     errors, when occuring in small numbers, are a normal part of the
+#     Zope optimistic transaction conflict resolution algorithms. They
+#     are retried automatically a few times, and are therefore usually
+#     not visible by the user. You can specify 'notset' if you don't
+#     want them logged, or use any other logger level (see above).
+#
+# Default: info
+#
+# Example:
+#
+#    conflict-error-log-level blather
+
+
+# Directive: warnfilter
+#
+# Description:
+#     A section that allows you to define a warning filter.
+#     The following keys are valid within a warnfilter section:
+#
+#      action:  one of the following strings:
+#
+#           "error"   turn matching warnings into exceptions
+#           "ignore"  never print matching warnings
+#           "always"  always print matching warnings
+#           "default" print the first occurrence of matching warnings
+#                     for each location where the warning is issued
+#           "module"  print the first occurrence of matching warnings
+#                     for each module where the warning is issued
+#           "once"    print only the first occurrence of matching
+#                     warnings, regardless of location
+#
+#      message:  a string containing a regular expression that the
+#                warning message must match (the match is compiled to
+#                always be case-insensitive)
+#
+#      category: a Python dotted-path classname (must be a subclass of
+#                Warning) of which the warning category must be a subclass in
+#                order to match
+#
+#      module:   a string containing a regular expression that the
+#                module name must match (the match is compiled to be
+#                case-sensitive)
+#
+#      lineno:   an integer that the line number where the warning
+#                occurred must match, or 0 to match all line numbers
+#
+#     All keys within a warnfilter section are optional.  More than
+#     one warnfilter section may be specified.
+#
+# Default: unset
+#
+# Example:
+#
+#    <warnfilter>
+#       action ignore
+#       category exceptions.DeprecationWarning
+#    </warnfilter>
+
+
+# Directive: max-listen-sockets
+#
+# Description:
+#     The maximum number of sockets that ZServer will attempt to open
+#     in order to service incoming connections.
+#
+# Default: 1000
+#
+# Example:
+#
+#    max-listen-sockets 500
+
+
+# Directives: port-base
+#
+# Description:
+#     Offset applied to the port numbers used for ZServer
+#     configurations.  For example, if the http-server port is 8080 and
+#     the port-base is 1000, the HTTP server will listen on port 9080.
+#     This makes it easy to change the complete set of ports used by a
+#     Zope server process
+#
+# Default:
+#
+#     0
+#
+# Example:
+#
+#     port-base 1000
+
+
+# Directive: large-file-threshold
+#
+# Description:
+#     Requests bigger than this size get saved into a temporary file
+#     instead of being read completely into memory.
+#
+# Default: 512K
+#
+# Example:
+#
+#    large-file-threshold 1Mb
+
+# Directive: default-zpublisher-encoding
+#
+# Description:
+#     This controls what character set is used to encode unicode
+#     data that reaches ZPublisher without any other specified encoding.
+#
+# Default: iso-8859-15
+#
+# Example:
+#
+#    default-zpublisher-encoding utf-8
+
+# Directives: servers
+#
+# Description:
+#     A set of sections which allow the specification of Zope's various
+#     ZServer servers.  8 different server types may be defined:
+#     http-server, ftp-server, webdav-source-server, persistent-cgi,
+#     fast-cgi, monitor-server, icp-server, and clock-server.  If no servers
+#     are defined, the default servers are used.
+#
+#     Ports may be specified using the 'address' directive either in simple
+#     form (80) or in complex form including hostname 127.0.0.1:80.  If the
+#     hostname is "left off", the default-ip-address is used as the hostname.
+#
+#     Port numbers are offset by the setting of port-base.
+#
+#     To run the monitor-server an emergency user must be defined 
+#     (through an 'access' file).
+#
+# Default:
+#
+#     An HTTP server starts on port 8080.
+
+<http-server>
+  # valid keys are "address" and "force-connection-close"
+  address 8080
+
+  # force-connection-close on
+  #
+  # You can also use the WSGI interface between ZServer and ZPublisher:
+  # use-wsgi on
+  #
+  # To defer the opening of the HTTP socket until the end of the 
+  # startup phase: 
+  # fast_listen false
+  #
+</http-server>
+
+# Examples:
+#
+#  <ftp-server>
+#    # valid key is "address"
+#    address 8021
+#  </ftp-server>
+#
+#  <webdav-source-server>
+#    # valid keys are "address" and "force-connection-close"
+#    address 1980
+#    force-connection-close off
+#  </webdav-source-server>
+#
+#  <persistent-cgi>
+#    # valid key is "path"
+#    path somefile
+#  </persistent-cgi>
+#
+#  <fast-cgi>
+#    # valid key is "address"; the address may be hostname:port, port,
+#    # or a path for a Unix-domain socket
+#    address somefile
+#  </fast-cgi>
+#
+#  <monitor-server>
+#    # valid keys are "address"
+#    address 8099
+#  </monitor-server>
+#
+#  <icp-server>
+#    # valid key is "address"
+#    address 888
+#  </icp-server>
+#
+#  <clock-server>
+#    # starts a clock which calls /foo/bar every 30 seconds
+#    method /foo/bar
+#    period 30
+#    user admin
+#    password 123
+#  </clock-server>
+#
+#  <server>
+#    # This uses Twisted as the web-server. You must install Twisted 
+#    # separately. You can't run Twisted and ZServer at same time.
+#    address 8080
+#    type Zope2-HTTP
+#  </server>
+
+
+# Database (zodb_db) section
+#
+# Description:
+#     A database section allows the definition of custom database and
+#     storage types.  More than one zodb_db section can be defined.
+#
+# Default: unset.
+#          IMPORTANT: At least one database with a mount-point of "/"
+#          must be specified for Zope to start properly.
+
+<zodb_db main>
+    # Main FileStorage database
+    <filestorage>
+      path $INSTANCE/var/Data.fs
+    </filestorage>
+    mount-point /
+</zodb_db>
+
+<zodb_db temporary>
+    # Temporary storage database (for sessions)
+    <temporarystorage>
+      name temporary storage for sessioning
+    </temporarystorage>
+    mount-point /temp_folder
+    container-class Products.TemporaryFolder.TemporaryContainer
+</zodb_db>
+
+# Other storage examples
+#
+# ZEO client storage:
+#
+# <zodb_db main>
+#   mount-point /
+#   # ZODB cache, in number of objects
+#   cache-size 5000
+#   <zeoclient>
+#     server localhost:8100
+#     storage 1
+#     name zeostorage
+#     var $INSTANCE/var
+#     # ZEO client cache, in bytes
+#     cache-size 20MB
+#     # Uncomment to have a persistent disk cache
+#     #client zeo1
+#   </zeoclient>
+# </zodb_db>
+
+# Product configuration (product-config) section(s)
+#
+# Description:
+#    Add-on products may need to allow the user to specify policy /
+#    configuration.  Such policies may be expressed as a set of
+#    name-value pairs, grouped into a named section (there may
+#    be many such sections, typically one per product).
+#    These sections will be captured in an attribute, 'product_config'
+#    of the top-level config object, under the key corresponding to
+#    the section name.  E.g., the sample section below would be
+#    parsed into a dict, {'bar': 'baz'}, available as
+#    config.product_config['foo']
+#
+#    Products may also register their own section types, extending
+#    
+#
+# Example: 
+#
+# 1. Simple "bag of strings" section:
+#
+#    <product-config foo>
+#       bar baz
+#    </product-config>
+#
+# 2. Custom section type
+#
+#    Products/Foo/component.xml:
+#
+#    <component>
+#     <description>
+#       Some product-specific hackery.
+#     </description>
+#     <sectiontype name="myproduct" implements="zope.product.base">
+#      <description>
+#       Product-specific configuration.
+#      </description>
+#      <key name="foo" />
+#     </sectiontype>
+#    </component>
+#
+#    In zope.conf:
+#
+#    %import Products.Foo
+#
+#    <myproduct bar>
+#      foo qux
+#    </myproduct>

Added: Sandbox/philikon/five.publication/trunk/five/__init__.py
===================================================================
--- Sandbox/philikon/five.publication/trunk/five/__init__.py	                        (rev 0)
+++ Sandbox/philikon/five.publication/trunk/five/__init__.py	2007-08-02 01:22:24 UTC (rev 78542)
@@ -0,0 +1,17 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""This is a namespace package
+"""
+import pkg_resources
+pkg_resources.declare_namespace('zope')


Property changes on: Sandbox/philikon/five.publication/trunk/five/__init__.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Sandbox/philikon/five.publication/trunk/five/publication/__init__.py
===================================================================
--- Sandbox/philikon/five.publication/trunk/five/publication/__init__.py	                        (rev 0)
+++ Sandbox/philikon/five.publication/trunk/five/publication/__init__.py	2007-08-02 01:22:24 UTC (rev 78542)
@@ -0,0 +1 @@
+# make this directory a package


Property changes on: Sandbox/philikon/five.publication/trunk/five/publication/__init__.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Sandbox/philikon/five.publication/trunk/five/publication/configure.zcml
===================================================================
--- Sandbox/philikon/five.publication/trunk/five/publication/configure.zcml	                        (rev 0)
+++ Sandbox/philikon/five.publication/trunk/five/publication/configure.zcml	2007-08-02 01:22:24 UTC (rev 78542)
@@ -0,0 +1,15 @@
+<configure xmlns="http://namespaces.zope.org/zope">
+
+  <include package="zope.app.publication" file="meta.zcml" />
+
+  <publisher
+      name="Browser"
+      factory=".publication.RequestPublicationFactory"
+      methods="*"
+      mimetypes="*"
+      priority="0"
+      />
+
+  <adapter factory=".publication.BrowserPublisher" />
+
+</configure>


Property changes on: Sandbox/philikon/five.publication/trunk/five/publication/configure.zcml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Sandbox/philikon/five.publication/trunk/five/publication/publication.py
===================================================================
--- Sandbox/philikon/five.publication/trunk/five/publication/publication.py	                        (rev 0)
+++ Sandbox/philikon/five.publication/trunk/five/publication/publication.py	2007-08-02 01:22:24 UTC (rev 78542)
@@ -0,0 +1,196 @@
+import transaction
+import zope.interface
+import zope.component
+import zope.event
+import zope.publisher.browser
+
+from zope.component import queryMultiAdapter
+from zope.security.management import newInteraction, endInteraction
+from zope.traversing.namespace import namespaceLookup
+from zope.traversing.namespace import nsParse
+from zope.traversing.interfaces import TraversalError
+from zope.publisher.interfaces import IPublishTraverse, IPublication, NotFound
+from zope.publisher.interfaces.browser import IBrowserPublisher, IBrowserRequest
+
+from zope.app.publisher.browser import queryDefaultViewName
+from zope.app.publication.interfaces import IRequestPublicationFactory
+from zope.app.publication.interfaces import BeforeTraverseEvent
+from zope.app.publication.interfaces import EndRequestEvent
+from zope.app.publication.zopepublication import Cleanup
+
+import ZPublisher.BaseRequest
+from ZPublisher.mapply import mapply
+from ZPublisher.BaseRequest import RequestContainer
+
+class BrowserRequest(zope.publisher.browser.BrowserRequest):
+
+    def __init__(self, *args, **kw):
+        super(BrowserRequest, self).__init__(*args, **kw)
+        self.__setupLegacy()
+
+    def __setupLegacy(self):
+        self._environ['URL'] = str(self.URL)
+        self._environ['REQUEST'] = self
+
+        # TODO need to support PATHn, BASEn, BASEPATHn, etc.
+        self._environ['BASEPATH1'] = self.getURL()
+        self._environ['BASE0'] = self.getURL()
+        self._environ['URL1'] = self.getURL()
+
+        # TODO need to remember PARENTS during traversal
+        self._environ['PARENTS'] = []
+
+class BrowserPublication(object):
+    zope.interface.implements(IPublication)
+
+    root_name = 'Application'
+
+    def __init__(self, db):
+        self.db = db
+
+    def beforeTraversal(self, request):
+        newInteraction(request)
+        transaction.begin()
+
+    def getApplication(self, request):
+        # Open the database.
+        conn = self.db.open()
+        cleanup = Cleanup(conn.close)
+        request.hold(cleanup)  # Close the connection on request.close()
+
+        # Get the application object.
+        root = conn.root()
+        app = root.get(self.root_name, None)
+
+        app = app.__of__(RequestContainer(REQUEST=request))
+        request['PARENTS'].append(app)
+
+        return app
+
+    def callTraversalHooks(self, request, ob):
+        zope.event.notify(BeforeTraverseEvent(ob, request))
+
+    def traverseName(self, request, ob, name):
+        bpth = getattr(object, '__before_publishing_traverse__', None)
+        if bpth is not None:
+            bpth(object, self)
+
+        # mostly lifted from zope.app.publication.publicationtraverse
+        lookup_name = name
+
+        if name and name[:1] in '@+':
+            # Process URI segment parameters.
+            ns, lookup_name = nsParse(name)
+            if ns:
+                try:
+                    subobject = namespaceLookup(ns, lookup_name, ob, request)
+                except TraversalError:
+                    raise NotFound(ob, name)
+
+                return subobject
+
+        if lookup_name == '.':
+            return ob
+
+        if IPublishTraverse.providedBy(ob):
+            subobject = ob.publishTraverse(request, lookup_name)
+        else:
+            # self is marker
+            adapter = queryMultiAdapter((ob, request), IPublishTraverse,
+                                        default=self)
+            if adapter is not self:
+                subobject = adapter.publishTraverse(request, lookup_name)
+            else:
+                raise NotFound(ob, name, request)
+
+        request['PARENTS'].append(subobject)
+        return subobject
+
+    def getDefaultTraversal(self, request, ob):
+        if IBrowserPublisher.providedBy(ob):
+            return ob.browserDefault(request)
+        else:
+            adapter = queryMultiAdapter((ob, request), IBrowserPublisher)
+            if adapter is not None:
+                ob, path = adapter.browserDefault(request)
+                return ob, path
+            else:
+                return ob, None
+
+    def afterTraversal(self, request, ob):
+        pass #XXX
+
+    def callObject(self, request, ob):
+        def missing_name(name, context):
+            if name == 'self':
+                return ob
+            #XXX what to do here?
+            #raise TypeError('XXX')
+        
+        return mapply(ob, request.getPositionalArguments(), request,
+                      missing_name=missing_name, context=request)
+
+    def afterCall(self, request, ob):
+        if request.method == 'HEAD':
+            request.response.setResult('')
+
+    def handleException(self, object, request, exc_info, retry_allowed=1):
+        transaction.abort()
+
+    def endRequest(self, request, ob):
+        endInteraction()
+        zope.event.notify(EndRequestEvent(ob, request))
+
+class RequestPublicationFactory(object):
+    zope.interface.implements(IRequestPublicationFactory)
+
+    def canHandle(self, environment):
+        return True
+
+    def __call__(self):
+        return BrowserRequest, BrowserPublication
+
+class BrowserPublisher(ZPublisher.BaseRequest.DefaultPublishTraverse):
+    zope.component.adapts(None, IBrowserRequest)
+    zope.interface.implements(IBrowserPublisher)
+
+    def __init__(self, context, request):
+        self.context = context
+        self.request = request
+
+    def browserDefault(self, request):
+        # Support for old __browser_default__
+        if hasattr(self.context, '__browser_default__'):
+            return self.context.__browser_default__(request)
+
+        # If there's a default view name set and the view for this
+        # default view exists, we'll use that.
+        default_name = queryDefaultViewName(self.context, request)
+        if (default_name is not None and
+            queryMultiAdapter((self.context, request), name=default_name)
+            is not None):
+            # Adding '@@' here forces this to be a view.
+            # A neater solution might be desireable.
+            return self.context, ('@@' + default_name,)
+
+        # Otherwise it's index_html...
+        if getattr(self.context, 'index_html', None) is not None:
+            return self.context, ('index_html',)
+
+        # ... before __call__.
+        return self.context, ()
+
+
+    # XXX ZPublisher's DefaultPublishTraverse.publishTraverse seems to
+    # do all the right things already.
+    def XXXpublishTraverse(self, request, name):
+        marker = object()
+        subobj = getattr(self.context, name, marker)
+        if subobj is not marker:
+            return subobj
+
+        view = queryMultiAdapter((self.context, request), name=name)
+        if view is not None:
+            return view
+
+        raise NotFound(self.context, name)


Property changes on: Sandbox/philikon/five.publication/trunk/five/publication/publication.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Sandbox/philikon/five.publication/trunk/five/publicationdemo/__init__.py
===================================================================
--- Sandbox/philikon/five.publication/trunk/five/publicationdemo/__init__.py	                        (rev 0)
+++ Sandbox/philikon/five.publication/trunk/five/publicationdemo/__init__.py	2007-08-02 01:22:24 UTC (rev 78542)
@@ -0,0 +1 @@
+# make this directory a package


Property changes on: Sandbox/philikon/five.publication/trunk/five/publicationdemo/__init__.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Sandbox/philikon/five.publication/trunk/five/publicationdemo/application.py
===================================================================
--- Sandbox/philikon/five.publication/trunk/five/publicationdemo/application.py	                        (rev 0)
+++ Sandbox/philikon/five.publication/trunk/five/publicationdemo/application.py	2007-08-02 01:22:24 UTC (rev 78542)
@@ -0,0 +1,32 @@
+import sys, os
+import ZConfig
+import zope.event
+import App.config
+import Zope2.Startup
+from zope.app.wsgi import WSGIPublisherApplication
+from zope.app.appsetup.interfaces import DatabaseOpened, ProcessStarting
+
+def application_factory(global_conf, conf='zope.conf'):
+    # load 'zope.conf' configuration
+    schema_xml = os.path.join(
+        os.path.dirname(Zope2.Startup.__file__), 'zopeschema.xml')
+    schema = ZConfig.loadSchema(schema_xml)
+    options, handlers = ZConfig.loadConfig(
+        schema, os.path.join(global_conf['here'], conf))
+
+    # read global settings from configuration file
+    App.config.setConfiguration(options)
+
+    starter = Zope2.Startup.get_starter()
+    starter.setConfiguration(options)
+
+    starter.setupInitialLogging()
+    starter.setupLocale()
+    starter.setupSecurityOptions()
+    starter.setupInterpreter()
+    Zope2.startup()  # open ZODB, initialize Products, etc.
+    starter.setupFinalLogging()
+
+    db = Zope2.DB  # XXX ick
+    zope.event.notify(ProcessStarting())
+    return WSGIPublisherApplication(db)


Property changes on: Sandbox/philikon/five.publication/trunk/five/publicationdemo/application.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Sandbox/philikon/five.publication/trunk/setup.py
===================================================================
--- Sandbox/philikon/five.publication/trunk/setup.py	                        (rev 0)
+++ Sandbox/philikon/five.publication/trunk/setup.py	2007-08-02 01:22:24 UTC (rev 78542)
@@ -0,0 +1,48 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Setup for the five.publisher package
+"""
+import os
+from setuptools import setup, find_packages
+
+setup(name='five.publication',
+      version = '0.1',
+      url='http://cheeseshop.python.org/pypi/five.publication',
+      license='ZPL 2.1',
+      author='Zope Corporation and Contributors',
+      author_email='zope-dev at zope.org',
+      description="Run Zope 2 web applications on the WSGI-enabled object "
+                  "object publishing framework of zope.publisher",
+      long_description="",
+
+      packages=find_packages(),
+
+      install_requires=['setuptools',
+                        'Zope2',
+                        'ZODB3', # for the transaction package
+                        'zope.publisher',
+                        'zope.event',
+                        'zope.interface',
+                        'zope.component',
+                        'zope.traversing',
+                        'zope.security',
+                        'zope.app.publication',
+                        ],
+      include_package_data=True,
+      zip_safe=False,
+      entry_points = """
+      [paste.app_factory]
+      demo = five.publicationdemo.application:application_factory
+      """
+      )


Property changes on: Sandbox/philikon/five.publication/trunk/setup.py
___________________________________________________________________
Name: svn:eol-style
   + native



More information about the Checkins mailing list