[Checkins] SVN: z3c.versionedresource/trunk/ * Feature: Implemented SVN Version Manager.
Stephan Richter
srichter at gmail.com
Thu Jul 30 12:23:26 EDT 2009
Log message for revision 102376:
* Feature: Implemented SVN Version Manager.
* Feature: Updated to work with latest package versions.
Get ready for release.
Changed:
U z3c.versionedresource/trunk/CHANGES.txt
U z3c.versionedresource/trunk/buildout.cfg
U z3c.versionedresource/trunk/setup.py
U z3c.versionedresource/trunk/src/z3c/versionedresource/README.txt
U z3c.versionedresource/trunk/src/z3c/versionedresource/list.py
U z3c.versionedresource/trunk/src/z3c/versionedresource/resource.py
U z3c.versionedresource/trunk/src/z3c/versionedresource/tests/test_doc.py
U z3c.versionedresource/trunk/src/z3c/versionedresource/version.py
-=-
Modified: z3c.versionedresource/trunk/CHANGES.txt
===================================================================
--- z3c.versionedresource/trunk/CHANGES.txt 2009-07-30 11:44:45 UTC (rev 102375)
+++ z3c.versionedresource/trunk/CHANGES.txt 2009-07-30 16:23:25 UTC (rev 102376)
@@ -2,11 +2,17 @@
CHANGES
=======
-Version 0.4.1 (unreleased)
+Version 0.5.0 (2009-07-30)
+--------------------------
-* Bug: Fix registering of Resources and move configure.zcml to overrides.zcml,
- because it overrides the zope.app.publisher's registration.
+* Feature: Implemented SVN Version Manager.
+* Feature: Updated to work with latest package versions.
+
+* Bug: Fix registering of ``Resources`` and move ``configure.zcml`` to
+ ``overrides.zcml``, because it overrides the ``zope.app.publisher``'s
+ registration.
+
Version 0.4.0 (2008-09-27)
--------------------------
Modified: z3c.versionedresource/trunk/buildout.cfg
===================================================================
--- z3c.versionedresource/trunk/buildout.cfg 2009-07-30 11:44:45 UTC (rev 102375)
+++ z3c.versionedresource/trunk/buildout.cfg 2009-07-30 16:23:25 UTC (rev 102376)
@@ -1,13 +1,7 @@
[buildout]
develop = .
parts = test coverage-test coverage-report resource-list python
-index = http://download.zope.org/zope3.4
-find-links = http://pypi.python.org/pypi/zope.app.publisher/3.5.0
-versions = versions
-[versions]
-zope.app.publisher = 3.5.0
-
[test]
recipe = zc.recipe.testrunner
eggs = z3c.versionedresource [test]
Modified: z3c.versionedresource/trunk/setup.py
===================================================================
--- z3c.versionedresource/trunk/setup.py 2009-07-30 11:44:45 UTC (rev 102375)
+++ z3c.versionedresource/trunk/setup.py 2009-07-30 16:23:25 UTC (rev 102376)
@@ -23,7 +23,7 @@
setup (
name='z3c.versionedresource',
- version='0.5.0dev',
+ version='0.5.0',
author = "Stephan Richter and the Zope Community",
author_email = "zope3-dev at zope.org",
description = "Versioned Resources",
Modified: z3c.versionedresource/trunk/src/z3c/versionedresource/README.txt
===================================================================
--- z3c.versionedresource/trunk/src/z3c/versionedresource/README.txt 2009-07-30 11:44:45 UTC (rev 102375)
+++ z3c.versionedresource/trunk/src/z3c/versionedresource/README.txt 2009-07-30 16:23:25 UTC (rev 102376)
@@ -47,7 +47,16 @@
Clearly, there is not much to version managers and they are only interesting
within the larger context of this package.
+An advanced implementation of the version manager uses the SVN revision number
+to produce the version string. You simply pass in a working path and the
+version is computed:
+ >>> import os
+ >>> manager = version.SVNVersionManager(os.path.dirname(__file__))
+ >>> manager
+ <SVNVersionManager 'r...'>
+
+
Versioned Resource Traversal
----------------------------
Modified: z3c.versionedresource/trunk/src/z3c/versionedresource/list.py
===================================================================
--- z3c.versionedresource/trunk/src/z3c/versionedresource/list.py 2009-07-30 11:44:45 UTC (rev 102375)
+++ z3c.versionedresource/trunk/src/z3c/versionedresource/list.py 2009-07-30 16:23:25 UTC (rev 102376)
@@ -57,7 +57,7 @@
if not isinstance(res, DirectoryResource):
# Avoid duplicate paths
if res() not in paths:
- paths.append(res())
+ paths.append(unicode(res()))
# For directory resources, we want to walk the tree.
baseURL = res()
path = res.context.path
Modified: z3c.versionedresource/trunk/src/z3c/versionedresource/resource.py
===================================================================
--- z3c.versionedresource/trunk/src/z3c/versionedresource/resource.py 2009-07-30 11:44:45 UTC (rev 102375)
+++ z3c.versionedresource/trunk/src/z3c/versionedresource/resource.py 2009-07-30 16:23:25 UTC (rev 102376)
@@ -17,11 +17,16 @@
"""
__docformat__ = "reStructuredText"
import zope.component
+import zope.interface
+import zope.site.hooks
+import zope.traversing.browser.absoluteurl
from zope.publisher.interfaces import NotFound
+from zope.publisher.interfaces.browser import IBrowserRequest
from zope.app.publisher.browser import resource, resources
from zope.app.publisher.browser import directoryresource
from zope.app.publisher.browser import fileresource
from zope.app.publisher.browser import pagetemplateresource
+from zope.traversing.browser.interfaces import IAbsoluteURL
from z3c.versionedresource import interfaces
class Resources(resources.Resources):
@@ -42,17 +47,39 @@
return res
-class VersionedResourceBase(object):
+class AbsoluteURL(zope.traversing.browser.absoluteurl.AbsoluteURL):
+ zope.interface.implementsOnly(IAbsoluteURL)
+ zope.component.adapts(interfaces.IVersionedResource, IBrowserRequest)
- def _createUrl(self, baseUrl, name):
+ def __init__(self, context, request):
+ self.context = context
+ self.request = request
+
+ def __str__(self):
+ name = self.context.__name__
+ if name.startswith('++resource++'):
+ name = name[12:]
+
+ site = zope.site.hooks.getSite()
+ base = zope.component.queryMultiAdapter(
+ (site, self.request), IAbsoluteURL, name="resource")
+ if base is None:
+ url = str(zope.component.getMultiAdapter(
+ (site, self.request), IAbsoluteURL))
+ else:
+ url = str(base)
+
vm = zope.component.queryUtility(interfaces.IVersionManager)
- return '%s/@@/%s/%s' %(baseUrl, vm.version, name)
-class Resource(VersionedResourceBase, resource.Resource):
- pass
+ return '%s/@@/%s/%s' % (url, vm.version, name)
-class FileResource(VersionedResourceBase, fileresource.FileResource):
+class Resource(resource.Resource):
+ zope.interface.implements(interfaces.IVersionedResource)
+
+class FileResource(fileresource.FileResource):
+ zope.interface.implements(interfaces.IVersionedResource)
+
# 10 years expiration date
cacheTimeout = 10 * 365 * 24 * 3600
@@ -66,8 +93,8 @@
resourceClass = FileResource
-class DirectoryResource(VersionedResourceBase,
- directoryresource.DirectoryResource):
+class DirectoryResource(directoryresource.DirectoryResource):
+ zope.interface.implements(interfaces.IVersionedResource)
resource_factories = {
'.gif': ImageResourceFactory,
Modified: z3c.versionedresource/trunk/src/z3c/versionedresource/tests/test_doc.py
===================================================================
--- z3c.versionedresource/trunk/src/z3c/versionedresource/tests/test_doc.py 2009-07-30 11:44:45 UTC (rev 102375)
+++ z3c.versionedresource/trunk/src/z3c/versionedresource/tests/test_doc.py 2009-07-30 16:23:25 UTC (rev 102376)
@@ -23,6 +23,7 @@
from zope.testing import doctest
from zope.app.testing import placelesssetup
from zope.publisher.interfaces.browser import IDefaultBrowserLayer
+from zope.app.publisher.browser.resource import AbsoluteURL
from z3c.versionedresource import interfaces, resource
class ITestLayer(IDefaultBrowserLayer):
@@ -51,11 +52,16 @@
name,
os.stat(path).st_size)
+def setUp(test):
+ placelesssetup.setUp(test)
+ zope.component.provideAdapter(AbsoluteURL)
+ zope.component.provideAdapter(resource.AbsoluteURL)
+
def test_suite():
return unittest.TestSuite((
doctest.DocFileSuite(
'../README.txt',
- setUp=placelesssetup.setUp, tearDown=placelesssetup.tearDown,
+ setUp=setUp, tearDown=placelesssetup.tearDown,
globs = {'ls': ls, 'unregister': unregister},
optionflags=doctest.NORMALIZE_WHITESPACE | doctest.ELLIPSIS),
))
Modified: z3c.versionedresource/trunk/src/z3c/versionedresource/version.py
===================================================================
--- z3c.versionedresource/trunk/src/z3c/versionedresource/version.py 2009-07-30 11:44:45 UTC (rev 102375)
+++ z3c.versionedresource/trunk/src/z3c/versionedresource/version.py 2009-07-30 16:23:25 UTC (rev 102376)
@@ -16,7 +16,7 @@
$Id$
"""
__docformat__ = "reStructuredText"
-
+import subprocess
import zope.interface
from zope.schema.fieldproperty import FieldProperty
from z3c.versionedresource import interfaces
@@ -32,3 +32,18 @@
def __repr__(self):
return '<%s %r>' %(self.__class__.__name__, self.version)
+
+class SVNVersionManager(VersionManager):
+ zope.interface.implements(interfaces.IVersionManager)
+
+ COMMAND = 'svnversion -n %s'
+
+ def __init__(self, path):
+ process = subprocess.Popen(
+ [self.COMMAND %path],
+ shell=True, close_fds=True,
+ stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ status = process.wait()
+ if status != 0:
+ print process.stderr.read()
+ self.version = 'r' + process.stdout.read()
More information about the Checkins
mailing list