[Zope-dev] Re: BugFix to enable other products to register Splitters
Andreas Jung
Andreas Jung" <andreas@andreas-jung.com
Thu, 16 Aug 2001 07:12:34 -0400
Chris,
this is also not a good solution. The suggested way to register
Splitters would be to use the Product registry in the same way
we register indexes there.
Andreas
----- Original Message -----
From: "Chris Withers" <chrisw@nipltd.com>
To: <zope-dev@zope.org>; <andreas@zope.com>
Sent: Donnerstag, 16. August 2001 07:08
Subject: BugFix to enable other products to register Splitters
> Hi,
>
> Given the Collector is broken again, here's a mail report of a bug and
fix:
>
> The way splitters are currently implemented in PluginIndexes makes it
> practically impossible to register new types of splitter.
>
> These patches provide a registerSplitter method for the
> PluginIndexes.TextIndex.Splitter module.
>
> All the tests pass and the registerSplitter function is implicitly tested
by
> this ;-)
>
> cheers,
>
> Chris & Harry
----------------------------------------------------------------------------
----
> ---
e:\refcvs\zope\lib\python\products\pluginindexes\textindex\splitter\__init__
.py Fri Jun 01 14:47:34 2001
> +++
E:\localcvs\AlexCons\Products\PluginIndexes\TextIndex\Splitter\__init__.py
Thu Aug 16 11:43:39 2001
> @@ -1,22 +1,32 @@
> -import os,sys,exceptions
> +from ZopeSplitter import Splitter as ZopeSplitter
> +from ISO_8859_1_Splitter import Splitter as ISO_8859_1_Splitter
>
> -availableSplitters = (
> - ("ZopeSplitter" , "Zope Default Splitter"),
> - ("ISO_8859_1_Splitter" , "Werner Strobles ISO-8859-1 Splitter")
> -)
> +splitterNames = []
> +splitterMapping = {}
>
> -splitterNames = map(lambda x: x[0],availableSplitters)
> +def availableSplitters():
> + list = []
> + for name in splitterMapping.keys():
> + list.append((name,splitterMapping[name][0]))
> + return tuple(list)
>
> def getSplitter(name=None):
>
> - if not name in splitterNames and name:
> - raise exceptions.RuntimeError, "No such splitter '%s'" % name
> -
> - if not name: name = splitterNames[0]
> - if not vars().has_key(name):
> - exec( "from %s import Splitter as %s" % (name,name))
> -
> - return vars()[name]
> + if name is None:
> + name = splitterNames[0]
> +
> + try:
> + return splitterMapping[name][1]
> + except KeyError:
> + raise RuntimeError, "No such splitter '%s'" % name
>
> +def registerSplitter(name,description,module,default=0):
> + global splitterNames
> + splitterMapping[name]=(description,module)
> + if default:
> + splitterNames.insert(0,name)
> + else:
> + splitterNames.append(name)
>
> -
> +registerSplitter("ZopeSplitter", "Zope Default Splitter",
ZopeSplitter)
> +registerSplitter("ISO_8859_1_Splitter","Werner Strobles ISO-8859-1
Splitter", ISO_8859_1_Splitter)
>
----------------------------------------------------------------------------
----
> ---
e:\refcvs\zope\lib\python\products\pluginindexes\textindex\tests\testSplitte
r.py Mon Aug 06 20:23:04 2001
> +++
E:\localcvs\AlexCons\Products\PluginIndexes\TextIndex\tests\testSplitter.py
Thu Aug 16 11:49:56 2001
> @@ -119,9 +119,9 @@
> def testAvailableSplitters( self ):
> "Test available splitters"
>
> - assert len(Splitter.availableSplitters) >0
> + assert len(Splitter.availableSplitters()) >0
> assert len(Splitter.splitterNames)>0
> - assert
len(Splitter.availableSplitters)==len(Splitter.splitterNames)
> + assert
len(Splitter.availableSplitters())==len(Splitter.splitterNames)
>
>
>
> @@ -133,21 +133,11 @@
> assert result==splitted, "%s: %s vs %s" %
(sp_name,result,splitted)
>
>
> - def testZopeSplitter(self):
> - """test ZopeSplitter (this test is known to fail because it does
not support ISO stuff) """
> -
> - for text,splitted in self.testdata:
> - self._test("ZopeSplitter",text,splitted)
> -
> def testISOSplitter(self):
> """test ISOSplitter"""
>
> for text,splitted in self.testdata:
> self._test("ISO_8859_1_Splitter",text,splitted)
> -
> -# for loc in ["","ru_RU.KOI8-R"]:
> -# locale.setlocale(locale.LC_ALL , loc)
> -
>
>
> def test_suite():
>