[Checkins] SVN: z3ext.pathindex/ initial import

Nikolay Kim fafhrd at datacom.kz
Tue Mar 25 07:39:40 EDT 2008


Log message for revision 84920:
  initial import

Changed:
  A   z3ext.pathindex/
  A   z3ext.pathindex/branches/
  A   z3ext.pathindex/tags/
  A   z3ext.pathindex/trunk/
  A   z3ext.pathindex/trunk/AUTHOR.txt
  A   z3ext.pathindex/trunk/CHANGES.txt
  A   z3ext.pathindex/trunk/LICENSE.txt
  A   z3ext.pathindex/trunk/bootstrap.py
  A   z3ext.pathindex/trunk/buildout.cfg
  A   z3ext.pathindex/trunk/setup.py
  A   z3ext.pathindex/trunk/src/
  A   z3ext.pathindex/trunk/src/z3ext/
  A   z3ext.pathindex/trunk/src/z3ext/__init__.py
  A   z3ext.pathindex/trunk/src/z3ext/pathindex/
  A   z3ext.pathindex/trunk/src/z3ext/pathindex/README.txt
  A   z3ext.pathindex/trunk/src/z3ext/pathindex/__init__.py
  A   z3ext.pathindex/trunk/src/z3ext/pathindex/configure.zcml
  A   z3ext.pathindex/trunk/src/z3ext/pathindex/index.py
  A   z3ext.pathindex/trunk/src/z3ext/pathindex/interfaces.py
  A   z3ext.pathindex/trunk/src/z3ext/pathindex/tests.py

-=-

Property changes on: z3ext.pathindex/trunk
___________________________________________________________________
Name: svn:ignore
   + bin
develop-eggs
eggs
parts
coverage
.installed.cfg


Added: z3ext.pathindex/trunk/AUTHOR.txt
===================================================================
--- z3ext.pathindex/trunk/AUTHOR.txt	                        (rev 0)
+++ z3ext.pathindex/trunk/AUTHOR.txt	2008-03-25 11:39:40 UTC (rev 84920)
@@ -0,0 +1 @@
+Nikolay Kim (fafhrd91 <at> gmail <dot> com)

Added: z3ext.pathindex/trunk/CHANGES.txt
===================================================================
--- z3ext.pathindex/trunk/CHANGES.txt	                        (rev 0)
+++ z3ext.pathindex/trunk/CHANGES.txt	2008-03-25 11:39:40 UTC (rev 84920)
@@ -0,0 +1,14 @@
+=======
+CHANGES
+=======
+
+1.0.1 (2008-03-25)
+------------------
+
+- Code moved to svn.zope.org
+
+
+1.0.0 (2008-01-10)
+------------------
+
+- Initial release

Added: z3ext.pathindex/trunk/LICENSE.txt
===================================================================
--- z3ext.pathindex/trunk/LICENSE.txt	                        (rev 0)
+++ z3ext.pathindex/trunk/LICENSE.txt	2008-03-25 11:39:40 UTC (rev 84920)
@@ -0,0 +1,54 @@
+Zope Public License (ZPL) Version 2.1
+-------------------------------------
+
+A copyright notice accompanies this license document that
+identifies the copyright holders.
+
+This license has been certified as open source. It has also
+been designated as GPL compatible by the Free Software
+Foundation (FSF).
+
+Redistribution and use in source and binary forms, with or
+without modification, are permitted provided that the
+following conditions are met:
+
+1. Redistributions in source code must retain the
+   accompanying copyright notice, this list of conditions,
+   and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the accompanying
+   copyright notice, this list of conditions, and the
+   following disclaimer in the documentation and/or other
+   materials provided with the distribution.
+
+3. Names of the copyright holders must not be used to
+   endorse or promote products derived from this software
+   without prior written permission from the copyright
+   holders.
+
+4. The right to distribute this software or to use it for
+   any purpose does not give you the right to use
+   Servicemarks (sm) or Trademarks (tm) of the copyright
+   holders. Use of them is covered by separate agreement
+   with the copyright holders.
+
+5. If any files are modified, you must cause the modified
+   files to carry prominent notices stating that you changed
+   the files and the date of any change.
+
+Disclaimer
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS''
+  AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
+  NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+  AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN
+  NO EVENT SHALL THE COPYRIGHT HOLDERS BE
+  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+  OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+  DAMAGE.

Added: z3ext.pathindex/trunk/bootstrap.py
===================================================================
--- z3ext.pathindex/trunk/bootstrap.py	                        (rev 0)
+++ z3ext.pathindex/trunk/bootstrap.py	2008-03-25 11:39:40 UTC (rev 84920)
@@ -0,0 +1,52 @@
+##############################################################################
+#
+# Copyright (c) 2006 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.
+#
+##############################################################################
+"""Bootstrap a buildout-based project
+
+Simply run this script in a directory containing a buildout.cfg.
+The script accepts buildout command-line options, so you can
+use the -c option to specify an alternate configuration file.
+
+$Id$
+"""
+
+import os, shutil, sys, tempfile, urllib2
+
+tmpeggs = tempfile.mkdtemp()
+
+ez = {}
+exec urllib2.urlopen('http://peak.telecommunity.com/dist/ez_setup.py'
+                     ).read() in ez
+ez['use_setuptools'](to_dir=tmpeggs, download_delay=0)
+
+import pkg_resources
+
+cmd = 'from setuptools.command.easy_install import main; main()'
+if sys.platform == 'win32':
+    cmd = '"%s"' % cmd # work around spawn lamosity on windows
+
+ws = pkg_resources.working_set
+assert os.spawnle(
+    os.P_WAIT, sys.executable, sys.executable,
+    '-c', cmd, '-mqNxd', tmpeggs, 'zc.buildout',
+    dict(os.environ,
+         PYTHONPATH=
+         ws.find(pkg_resources.Requirement.parse('setuptools')).location
+         ),
+    ) == 0
+
+ws.add_entry(tmpeggs)
+ws.require('zc.buildout')
+import zc.buildout.buildout
+zc.buildout.buildout.main(sys.argv[1:] + ['bootstrap'])
+shutil.rmtree(tmpeggs)


Property changes on: z3ext.pathindex/trunk/bootstrap.py
___________________________________________________________________
Name: svn:keywords
   + Id

Added: z3ext.pathindex/trunk/buildout.cfg
===================================================================
--- z3ext.pathindex/trunk/buildout.cfg	                        (rev 0)
+++ z3ext.pathindex/trunk/buildout.cfg	2008-03-25 11:39:40 UTC (rev 84920)
@@ -0,0 +1,18 @@
+[buildout]
+develop = .
+parts = test coverage-test coverage-report
+
+[test]
+recipe = zc.recipe.testrunner
+eggs = z3ext.pathindex [test]
+
+[coverage-test]
+recipe = zc.recipe.testrunner
+eggs = z3ext.pathindex [test]
+defaults = ['--coverage', '../../coverage']
+
+[coverage-report]
+recipe = zc.recipe.egg
+eggs = z3c.coverage
+scripts = coverage=coverage-report
+arguments = ('coverage', 'coverage/report')

Added: z3ext.pathindex/trunk/setup.py
===================================================================
--- z3ext.pathindex/trunk/setup.py	                        (rev 0)
+++ z3ext.pathindex/trunk/setup.py	2008-03-25 11:39:40 UTC (rev 84920)
@@ -0,0 +1,73 @@
+##############################################################################
+#
+# 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 z3ext.pathindex package
+
+$Id$
+"""
+import sys, os
+from setuptools import setup, find_packages
+
+def read(*rnames):
+    return open(os.path.join(os.path.dirname(__file__), *rnames)).read()
+
+version='1.0.1dev'
+
+
+setup(name = 'z3ext.pathindex',
+      version = version,
+      author = 'Nikolay Kim',
+      author_email = 'fafhrd91 at gmail.com',
+      description = "Path Index for Catalog.",
+      long_description = (
+          'Detailed Dcoumentation\n' +
+          '======================\n'
+          + '\n\n' +
+          read('src', 'z3ext', 'pathindex', 'README.txt')
+          + '\n\n' +
+          read('CHANGES.txt')
+          ),
+      classifiers=[
+        'Development Status :: 5 - Production/Stable',
+        'Environment :: Web Environment',
+        'Intended Audience :: Developers',
+        'License :: OSI Approved :: Zope Public License',
+        'Programming Language :: Python',
+        'Natural Language :: English',
+        'Operating System :: OS Independent',
+        'Topic :: Internet :: WWW/HTTP',
+        'Framework :: Zope3'],
+      url='http://z3ext.net/',
+      license='ZPL 2.1',
+      packages=find_packages('src'),
+      package_dir = {'':'src'},
+      namespace_packages=['z3ext'],
+      install_requires = ['setuptools',
+                          'zope.component',
+                          'zope.interface',
+			  'zope.traversing',
+                          'zope.app.intid',
+                          'zope.app.catalog',
+			  'zc.catalog',
+                          ],
+     extras_require = dict(test=['ZODB3',
+                                 'zope.app.testing',
+                                 'zope.testing',
+                                 'zope.app.keyreference',
+                                 'zope.app.container',
+                                 'zope.location',
+                                 'zope.event',
+                                 ]),
+      include_package_data = True,
+      zip_safe = False
+      )


Property changes on: z3ext.pathindex/trunk/setup.py
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:keywords
   + Id

Added: z3ext.pathindex/trunk/src/z3ext/__init__.py
===================================================================
--- z3ext.pathindex/trunk/src/z3ext/__init__.py	                        (rev 0)
+++ z3ext.pathindex/trunk/src/z3ext/__init__.py	2008-03-25 11:39:40 UTC (rev 84920)
@@ -0,0 +1,6 @@
+# namespace package boilerplate
+try:
+    __import__('pkg_resources').declare_namespace(__name__)
+except ImportError, e:
+    from pkgutil import extend_path
+    __path__ = extend_path(__path__, __name__)


Property changes on: z3ext.pathindex/trunk/src/z3ext/__init__.py
___________________________________________________________________
Name: svn:keywords
   + Id

Added: z3ext.pathindex/trunk/src/z3ext/pathindex/README.txt
===================================================================
--- z3ext.pathindex/trunk/src/z3ext/pathindex/README.txt	                        (rev 0)
+++ z3ext.pathindex/trunk/src/z3ext/pathindex/README.txt	2008-03-25 11:39:40 UTC (rev 84920)
@@ -0,0 +1,86 @@
+==========
+Path index
+==========
+
+The PathIndex is an index that index object by it's traversal path
+
+    >>> from z3ext.pathindex.index import PathIndex
+    >>> index = PathIndex()
+    >>> index.documentCount()
+    0
+    >>> index.wordCount()
+    0
+    >>> index.maxValue() # doctest: +ELLIPSIS
+    Traceback (most recent call last):
+    ...
+    ValueError:...
+    >>> index.minValue() # doctest: +ELLIPSIS
+    Traceback (most recent call last):
+    ...
+    ValueError:...
+    >>> list(index.values())
+    []
+    >>> len(index.apply({'any_of': (root,)}))
+    0
+
+We can index traversable object
+
+    >>> data = {1: root,
+    ...         2: root['folder1'],
+    ...         3: root['folder1']['folder1_1'],
+    ...         4: root['folder1']['folder1_1']['folder1_1_1'],
+    ...         5: root['folder2'],
+    ...         6: root['folder2']['folder2_2'],
+    ...         7: root['folder2']['folder2_2']['folder2_2_2']
+    ... }
+
+    >>> for k, v in data.items():
+    ...     index.index_doc(k, v)
+
+
+After indexing, the statistics and values match the newly entered content.
+
+    >>> len(list(index.values()))
+    5
+    >>> index.documentCount()
+    6
+    >>> index.wordCount()
+    5
+    >>> list(index.ids())
+    [2, 3, 4, 5, 6, 7]
+
+The index supports five types of query but only 'any_of' is usefulle
+for PathIndex.  The first is 'any_of'.  It
+takes an iterable of values, and returns an iterable of document ids that
+contain any of the values.  The results are weighted.
+
+    >>> list(index.apply({'any_of':(root['folder1'],)}))
+    [3, 4]
+
+    >>> list(index.apply({'any_of':(root['folder1']['folder1_1'],)}))
+    [4]
+
+    >>> list(index.apply({'any_of':(root['folder2'],)}))
+    [6, 7]
+
+    >>> list(index.apply({'any_of':(root['folder1'], root['folder2'],)}))
+    [3, 4, 6, 7]
+
+    >>> list(index.apply({'any_of':(
+    ...   root['folder1'], root['folder1']['folder1_1'], root['folder2'],)}))
+    [3, 4, 6, 7]
+
+    >>> print index.apply({'all_of': (root,)})
+    None
+
+    >>> print index.apply({'between': (root,)})
+    None
+
+    >>> list(index.apply({'any': None}))
+    [2, 3, 4, 5, 6, 7]
+
+We can't index value that doesn't have parents
+
+    >>> index.index_doc(100, 'string')
+    >>> index.apply({'any_of': ('string',)}) is None
+    True

Added: z3ext.pathindex/trunk/src/z3ext/pathindex/__init__.py
===================================================================
--- z3ext.pathindex/trunk/src/z3ext/pathindex/__init__.py	                        (rev 0)
+++ z3ext.pathindex/trunk/src/z3ext/pathindex/__init__.py	2008-03-25 11:39:40 UTC (rev 84920)
@@ -0,0 +1 @@
+# This file is necessary to make this directory a package.


Property changes on: z3ext.pathindex/trunk/src/z3ext/pathindex/__init__.py
___________________________________________________________________
Name: svn:keywords
   + Id

Added: z3ext.pathindex/trunk/src/z3ext/pathindex/configure.zcml
===================================================================
--- z3ext.pathindex/trunk/src/z3ext/pathindex/configure.zcml	                        (rev 0)
+++ z3ext.pathindex/trunk/src/z3ext/pathindex/configure.zcml	2008-03-25 11:39:40 UTC (rev 84920)
@@ -0,0 +1,20 @@
+<configure 
+   xmlns="http://namespaces.zope.org/zope"
+   xmlns:browser="http://namespaces.zope.org/browser">
+
+  <class class=".index.PathIndex">
+    <factory id="z3ext.pathindex.PathIndex" title="Path Index" />
+
+    <require
+       permission="zope.ManageServices"
+       interface=".interfaces.ICatalogIndex
+		  zope.index.interfaces.IStatistics" />
+  </class>
+
+  <browser:addMenuItem
+     title="Path Index"
+     description="Index object path"
+     class=".index.PathIndex"
+     permission="zope.ManageServices" />
+
+</configure>

Added: z3ext.pathindex/trunk/src/z3ext/pathindex/index.py
===================================================================
--- z3ext.pathindex/trunk/src/z3ext/pathindex/index.py	                        (rev 0)
+++ z3ext.pathindex/trunk/src/z3ext/pathindex/index.py	2008-03-25 11:39:40 UTC (rev 84920)
@@ -0,0 +1,77 @@
+##############################################################################
+#
+# 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.
+#
+##############################################################################
+""" index implementation
+
+$Id$
+"""
+from zope import interface
+from zope.component import getUtility
+from zope.traversing.api import getParents
+from zope.app.intid.interfaces import IIntIds
+from zc.catalog.index import SetIndex, parseQuery
+
+from interfaces import IPathIndex
+
+
+class PathIndex(SetIndex):
+    interface.implements(IPathIndex)
+
+    def _get_values(self, value, includeValue=False):
+        try:
+            intid = getUtility(IIntIds)
+            parents = getParents(value)
+        except:
+            return None
+
+        if includeValue:
+            parents.append(value)
+
+        ids = []
+        for ob in parents:
+            id = intid.queryId(ob)
+            if id is not None:
+                ids.append(id)
+
+        if ids:
+            return ids
+        else:
+            return None
+
+    def index_doc(self, doc_id, value):
+        values = self._get_values(value)
+        if values is not None:
+            super(PathIndex, self).index_doc(doc_id, values)
+
+    def apply(self, query):
+        orig_query = query
+        query_type, query = parseQuery(query)
+        if query_type == 'any_of':
+            result = None
+            for value in query:
+                values = self._get_values(value, True)
+                if values is not None:
+                    res = super(PathIndex, self).apply({'all_of': values})
+                    if result is None:
+                        result = res
+                    else:
+                        result.update(res)
+            return result
+        elif query_type == 'all_of':
+            # this query types is useless for path index
+            return None
+        elif query_type == 'between':
+            # not implemented
+            return None
+
+        return super(PathIndex, self).apply(orig_query)


Property changes on: z3ext.pathindex/trunk/src/z3ext/pathindex/index.py
___________________________________________________________________
Name: svn:keywords
   + Id

Added: z3ext.pathindex/trunk/src/z3ext/pathindex/interfaces.py
===================================================================
--- z3ext.pathindex/trunk/src/z3ext/pathindex/interfaces.py	                        (rev 0)
+++ z3ext.pathindex/trunk/src/z3ext/pathindex/interfaces.py	2008-03-25 11:39:40 UTC (rev 84920)
@@ -0,0 +1,22 @@
+##############################################################################
+#
+# 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.
+#
+##############################################################################
+""" z3ext.pathindex interfaces
+
+$Id$
+"""
+from zope.app.catalog.interfaces import ICatalogIndex
+
+
+class IPathIndex(ICatalogIndex):
+    """ Path index interface. """


Property changes on: z3ext.pathindex/trunk/src/z3ext/pathindex/interfaces.py
___________________________________________________________________
Name: svn:keywords
   + Id

Added: z3ext.pathindex/trunk/src/z3ext/pathindex/tests.py
===================================================================
--- z3ext.pathindex/trunk/src/z3ext/pathindex/tests.py	                        (rev 0)
+++ z3ext.pathindex/trunk/src/z3ext/pathindex/tests.py	2008-03-25 11:39:40 UTC (rev 84920)
@@ -0,0 +1,97 @@
+##############################################################################
+#
+# 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.
+#
+##############################################################################
+""" z3ext.pathindex  tests
+
+$Id$
+"""
+__docformat__ = "reStructuredText"
+
+import os, sys
+import unittest, doctest
+from zope import interface
+from zope.component import provideAdapter, getSiteManager, provideUtility
+from zope.app.testing import setup
+from zope.traversing import testing
+from zope.location.interfaces import ILocation
+from zope.app.container.sample import SampleContainer
+
+from persistent import Persistent
+from persistent.interfaces import IPersistent
+from transaction import commit
+from ZODB.interfaces import IConnection
+from zope.app.intid import IntIds
+from zope.app.intid.interfaces import IIntIds
+from zope.app.keyreference.persistent import KeyReferenceToPersistent
+from zope.app.keyreference.persistent import connectionOfPersistent
+from zope.app.keyreference.interfaces import IKeyReference
+
+
+class ConnectionStub(object):
+    next = 1
+
+    def db(self):
+        return self
+
+    database_name = 'ConnectionStub'
+    
+    def add(self, ob):
+        ob._p_jar = self
+        ob._p_oid = self.next
+        self.next += 1
+
+
+class Folder(Persistent, SampleContainer):
+    interface.implements(ILocation)
+
+
+def setUp(test):
+    root = setup.placefulSetUp(site=True)
+    testing.setUp()
+
+    provideAdapter(connectionOfPersistent, (IPersistent,), IConnection)
+    provideAdapter(KeyReferenceToPersistent, (IPersistent,), IKeyReference)
+
+    utility = IntIds()
+    provideUtility(utility, IIntIds)
+
+    root._p_jar = ConnectionStub()
+
+    root['folder1'] = Folder()
+    root['folder1']['folder1_1'] = Folder()
+    root['folder1']['folder1_1']['folder1_1_1'] = Folder()
+
+    root['folder2'] = Folder()
+    root['folder2']['folder2_2'] = Folder()
+    root['folder2']['folder2_2']['folder2_2_2'] = Folder()
+
+    utility.register(root)
+    utility.register(root['folder1'])
+    utility.register(root['folder1']['folder1_1'])
+    utility.register(root['folder1']['folder1_1']['folder1_1_1'])
+    utility.register(root['folder2'])
+    utility.register(root['folder2']['folder2_2'])
+    utility.register(root['folder2']['folder2_2']['folder2_2_2'])
+    test.globs['root'] = root
+
+
+def tearDown(test):
+    setup.placefulTearDown()
+
+def test_suite():
+    return unittest.TestSuite((
+            doctest.DocFileSuite(
+                'README.txt',
+                setUp=setUp, tearDown=tearDown,
+                optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS),
+            ))


Property changes on: z3ext.pathindex/trunk/src/z3ext/pathindex/tests.py
___________________________________________________________________
Name: svn:keywords
   + Id



More information about the Checkins mailing list