Index: /quintagroup.canonicalpath/tags/0.4/README.txt
===================================================================
--- /quintagroup.canonicalpath/tags/0.4/README.txt (revision 1712)
+++ /quintagroup.canonicalpath/tags/0.4/README.txt (revision 1712)
@@ -0,0 +1,4 @@
+Introduction
+============
+
+
Index: /quintagroup.canonicalpath/tags/0.4/docs/HISTORY.txt
===================================================================
--- /quintagroup.canonicalpath/tags/0.4/docs/HISTORY.txt (revision 1712)
+++ /quintagroup.canonicalpath/tags/0.4/docs/HISTORY.txt (revision 1712)
@@ -0,0 +1,18 @@
+Changelog
+=========
+
+0.4 (2010-02-11)
+----------------
+
+* Reregistered base adatapter for OFS.interface.ITraversable [mylan]
+* Rewrite indexer registration with help of plone.indexer [mylan]
+* Removed metadata registration in portal catalog [mylan]
+* Added tests [mylan]
+* Added README [mylan]
+
+
+0.1 (2009-03-13)
+----------------
+
+* Initial release
+
Index: /quintagroup.canonicalpath/tags/0.4/quintagroup.canonicalpath-configure.zcml
===================================================================
--- /quintagroup.canonicalpath/tags/0.4/quintagroup.canonicalpath-configure.zcml (revision 1712)
+++ /quintagroup.canonicalpath/tags/0.4/quintagroup.canonicalpath-configure.zcml (revision 1712)
@@ -0,0 +1,1 @@
+
Index: /quintagroup.canonicalpath/tags/0.4/quintagroup/__init__.py
===================================================================
--- /quintagroup.canonicalpath/tags/0.4/quintagroup/__init__.py (revision 1712)
+++ /quintagroup.canonicalpath/tags/0.4/quintagroup/__init__.py (revision 1712)
@@ -0,0 +1,6 @@
+# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages
+try:
+ __import__('pkg_resources').declare_namespace(__name__)
+except ImportError:
+ from pkgutil import extend_path
+ __path__ = extend_path(__path__, __name__)
Index: /quintagroup.canonicalpath/tags/0.4/quintagroup/canonicalpath/README.txt
===================================================================
--- /quintagroup.canonicalpath/tags/0.4/quintagroup/canonicalpath/README.txt (revision 1712)
+++ /quintagroup.canonicalpath/tags/0.4/quintagroup/canonicalpath/README.txt (revision 1712)
@@ -0,0 +1,18 @@
+quintagroup.canonicalpath Package Readme
+========================================
+
+Canonical path serves for possibility to define path, which may be
+different from standard Physical path in portal. It's uses by such
+products as quintagroup.seoptimizer (for defining canonical url of the
+object), quintagroup.plonegooglesitemaps (on google sitemap
+generation).
+
+This package intended for bring *canonical_path* property to any
+traversable object. For that it defines ICanonicalPath interface, and
+register basic adapter for ITraversable.
+
+Also package register canonical_path indexer for possible usage in
+catalog (ZCatalog).
+
+Default adapter return path from portal root, i.e. for
+`/plone/front-page` *canonical_path* will be `/front-page`.
Index: /quintagroup.canonicalpath/tags/0.4/quintagroup/canonicalpath/__init__.py
===================================================================
--- /quintagroup.canonicalpath/tags/0.4/quintagroup/canonicalpath/__init__.py (revision 1712)
+++ /quintagroup.canonicalpath/tags/0.4/quintagroup/canonicalpath/__init__.py (revision 1712)
@@ -0,0 +1,1 @@
+#
Index: /quintagroup.canonicalpath/tags/0.4/quintagroup/canonicalpath/adapters.py
===================================================================
--- /quintagroup.canonicalpath/tags/0.4/quintagroup/canonicalpath/adapters.py (revision 1712)
+++ /quintagroup.canonicalpath/tags/0.4/quintagroup/canonicalpath/adapters.py (revision 1712)
@@ -0,0 +1,21 @@
+from zope.interface import implements
+from zope.component import adapts
+
+from OFS.interfaces import ITraversable
+from Products.CMFCore.utils import getToolByName
+
+from quintagroup.canonicalpath.interfaces import ICanonicalPath
+
+
+class canonicalPathAdapter(object):
+ """Adapts base content to canonical path.
+ """
+ adapts(ITraversable)
+ implements(ICanonicalPath)
+
+ def __init__(self, context):
+ self.context = context
+
+ def canonical_path(self):
+ purl = getToolByName(self.context,'portal_url')
+ return '/'+'/'.join(purl.getRelativeContentPath(self.context))
Index: /quintagroup.canonicalpath/tags/0.4/quintagroup/canonicalpath/catalog.py
===================================================================
--- /quintagroup.canonicalpath/tags/0.4/quintagroup/canonicalpath/catalog.py (revision 1712)
+++ /quintagroup.canonicalpath/tags/0.4/quintagroup/canonicalpath/catalog.py (revision 1712)
@@ -0,0 +1,14 @@
+from zope.interface import Interface
+from zope.component import queryAdapter
+from plone.indexer.decorator import indexer
+
+from interfaces import ICanonicalPath
+
+@indexer(Interface)
+def canonical_path(obj, **kwargs):
+ """Return canonical_path property for the object.
+ """
+ cpath = queryAdapter(obj, interface=ICanonicalPath)
+ if cpath:
+ return cpath.canonical_path()
+ return None
Index: /quintagroup.canonicalpath/tags/0.4/quintagroup/canonicalpath/configure.zcml
===================================================================
--- /quintagroup.canonicalpath/tags/0.4/quintagroup/canonicalpath/configure.zcml (revision 1712)
+++ /quintagroup.canonicalpath/tags/0.4/quintagroup/canonicalpath/configure.zcml (revision 1712)
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
Index: /quintagroup.canonicalpath/tags/0.4/quintagroup/canonicalpath/interfaces.py
===================================================================
--- /quintagroup.canonicalpath/tags/0.4/quintagroup/canonicalpath/interfaces.py (revision 1712)
+++ /quintagroup.canonicalpath/tags/0.4/quintagroup/canonicalpath/interfaces.py (revision 1712)
@@ -0,0 +1,9 @@
+from zope.interface import Interface
+
+class ICanonicalPath(Interface):
+ """canonical_path provider interface
+ """
+
+ def canonical_path():
+ """Return canonical path for the object
+ """
Index: /quintagroup.canonicalpath/tags/0.4/quintagroup/canonicalpath/tests.py
===================================================================
--- /quintagroup.canonicalpath/tags/0.4/quintagroup/canonicalpath/tests.py (revision 1712)
+++ /quintagroup.canonicalpath/tags/0.4/quintagroup/canonicalpath/tests.py (revision 1712)
@@ -0,0 +1,76 @@
+import unittest
+
+from zope.testing import doctestunit
+from zope.component import testing
+from zope.component import queryAdapter, queryMultiAdapter
+from plone.indexer.interfaces import IIndexableObject
+from Testing import ZopeTestCase as ztc
+
+from Products.Five import zcml
+from Products.Five import fiveconfigure
+from Products.CMFCore.utils import getToolByName
+from Products.PloneTestCase import PloneTestCase as ptc
+from Products.PloneTestCase.layer import PloneSite
+
+from Products.Archetypes.tests.utils import makeContent
+
+from quintagroup.canonicalpath.interfaces import ICanonicalPath
+
+class TestCase(ptc.PloneTestCase):
+ class layer(PloneSite):
+ @classmethod
+ def setUp(cls):
+ import quintagroup.canonicalpath
+ fiveconfigure.debug_mode = True
+ zcml.load_config('configure.zcml', quintagroup.canonicalpath)
+ fiveconfigure.debug_mode = False
+
+ptc.setupPloneSite()
+
+class TestAdapter(TestCase):
+
+ def afterSetUp(self):
+ self.loginAsPortalOwner()
+ self.my_doc = makeContent(self.portal, portal_type='Document', id='my_doc')
+ self.purl = getToolByName(self.portal, 'portal_url')
+ self.catalog = getToolByName(self.portal, 'portal_catalog')
+ self.logout()
+
+ def testAdapter4Portal(self):
+ cpadapter = queryAdapter(self.portal, ICanonicalPath)
+ self.assertFalse(cpadapter is None,
+ "Can't get canonical path adapter for the plone site object")
+
+
+ portal_cp = '/'+'/'.join(self.purl.getRelativeContentPath(self.portal))
+ adcp = cpadapter.canonical_path()
+ self.assertTrue(adcp == portal_cp, "Canonical path adapter return '%s' "\
+ "for portal, must be: '%s'" % (adcp, portal_cp) )
+
+
+ def testAdapter4AT(self):
+ cpadapter = queryAdapter(self.my_doc, ICanonicalPath)
+ self.assertFalse(cpadapter is None,
+ "Can't get canonical path adapter for the Document object")
+
+ mydoc_cp = '/'+'/'.join(self.purl.getRelativeContentPath(self.my_doc))
+ adcp = cpadapter.canonical_path()
+ self.assertTrue(adcp == mydoc_cp, "Canonical path adapter return '%s' "\
+ "for document, must be: '%s'" % (adcp, mydoc_cp) )
+
+
+ def testIndexerRegistration(self):
+ wrapper = queryMultiAdapter((self.portal, self.catalog), IIndexableObject)
+ self.assertFalse(wrapper is None, "No indexer registered for portal object")
+
+ wrapper = queryMultiAdapter((self.my_doc, self.catalog), IIndexableObject)
+ self.assertFalse(wrapper is None, "No indexer registered for document object")
+
+
+def test_suite():
+ return unittest.TestSuite([
+ unittest.makeSuite(TestAdapter),
+ ])
+
+if __name__ == '__main__':
+ unittest.main(defaultTest='test_suite')
Index: /quintagroup.canonicalpath/tags/0.4/quintagroup/canonicalpath/version.txt
===================================================================
--- /quintagroup.canonicalpath/tags/0.4/quintagroup/canonicalpath/version.txt (revision 1712)
+++ /quintagroup.canonicalpath/tags/0.4/quintagroup/canonicalpath/version.txt (revision 1712)
@@ -0,0 +1,1 @@
+0.2
Index: /quintagroup.canonicalpath/tags/0.4/setup.cfg
===================================================================
--- /quintagroup.canonicalpath/tags/0.4/setup.cfg (revision 1712)
+++ /quintagroup.canonicalpath/tags/0.4/setup.cfg (revision 1712)
@@ -0,0 +1,3 @@
+[egg_info]
+tag_build = dev
+tag_svn_revision = true
Index: /quintagroup.canonicalpath/tags/0.4/setup.py
===================================================================
--- /quintagroup.canonicalpath/tags/0.4/setup.py (revision 1712)
+++ /quintagroup.canonicalpath/tags/0.4/setup.py (revision 1712)
@@ -0,0 +1,36 @@
+from setuptools import setup, find_packages
+import os
+
+version = '0.4'
+
+tests_require=['zope.testing']
+setup(name='quintagroup.canonicalpath',
+ version=version,
+ description="Bring canonical path calculation functionality",
+ long_description=open("README.txt").read() + "\n" +
+ open(os.path.join("docs", "HISTORY.txt")).read(),
+ # Get more strings from http://www.python.org/pypi?%3Aaction=list_classifiers
+ classifiers=[
+ "Programming Language :: Python",
+ "Topic :: Software Development :: Libraries :: Python Modules",
+ ],
+ keywords='canonical path plone quintagroup',
+ author='Quintagroup',
+ author_email='support@quintagroup.com',
+ url='http://svn.quintagroup.com/products/quintagroup.canonicalpath',
+ license='GPL',
+ packages=find_packages(exclude=['ez_setup']),
+ namespace_packages=['quintagroup'],
+ include_package_data=True,
+ zip_safe=False,
+ install_requires=[
+ 'setuptools',
+ ],
+ tests_require=tests_require,
+ extras_require=dict(tests=tests_require),
+ test_suite = 'quintagroup.canonicalpath.tests.test_suite',
+ entry_points="""
+ # -*- Entry points: -*-
+ """,
+ )
+