Changeset created on Wed Mar 31 14:57:58 CEST 2010 by Seek You Too
Description: Added new fieldlet AddField
AddField will add a field with the given name and value.
Also made some small improvements on Xml2Fields to always use named parameters.
Baseline version: https://meresco.svn.sourceforge.net/svnroot/meresco/meresco-core/workingsets/3.0-beta/version_1
diff --unidirectional-new-file --exclude=.svn --exclude='*.pyc' --exclude=applied --recursive --unified version_1/merescocore/components/fieldlets.py version_2/merescocore/components/fieldlets.py
--- version_1/merescocore/components/fieldlets.py 2010-03-31 14:22:02.000000000 +0200
+++ version_2/merescocore/components/fieldlets.py 2010-03-31 14:57:39.000000000 +0200
@@ -2,7 +2,7 @@
#
# Meresco Core is an open-source library containing components to build
# searchengines, repositories and archives.
-# Copyright (C) 2007-2009 Seek You Too (CQ2) http://www.cq2.nl
+# Copyright (C) 2007-2010 Seek You Too (CQ2) http://www.cq2.nl
# Copyright (C) 2007-2009 SURF Foundation. http://www.surf.nl
# Copyright (C) 2007-2009 Stichting Kennisnet Ict op school.
# http://www.kennisnetictopschool.nl
@@ -26,7 +26,7 @@
#
## end license ##
-from merescocore.framework import Transparant
+from merescocore.framework import Transparant, Observable
class _Fieldlet(Transparant):
def __init__(self, method):
@@ -36,14 +36,24 @@
class FilterField(_Fieldlet):
def addField(self, name, value):
if self._method(name):
- self.do.addField(name, value)
+ self.do.addField(name=name, value=value)
class RenameField(_Fieldlet):
def addField(self, name, value):
- self.do.addField(self._method(name), value)
+ self.do.addField(name=self._method(name), value=value)
class TransformFieldValue(_Fieldlet):
def addField(self, name, value):
newValue = self._method(value)
if newValue != None:
- self.do.addField(name, newValue)
+ self.do.addField(name=name, value=newValue)
+
+class AddField(Observable):
+ def __init__(self, name, value):
+ Observable.__init__(self)
+ self._name = name
+ self._value = value
+
+ def add(self, *args, **kwargs):
+ self.do.addField(name=self._name, value=self._value)
+
diff --unidirectional-new-file --exclude=.svn --exclude='*.pyc' --exclude=applied --recursive --unified version_1/merescocore/components/__init__.py version_2/merescocore/components/__init__.py
--- version_1/merescocore/components/__init__.py 2010-03-31 14:22:02.000000000 +0200
+++ version_2/merescocore/components/__init__.py 2010-03-31 14:57:39.000000000 +0200
@@ -33,7 +33,7 @@
from xmlpump import XmlParseAmara, XmlPrintAmara, Amara2Lxml, Lxml2Amara, XmlPrintLxml, XmlParseLxml
from contextset import ContextSetList, ContextSet
-from fieldlets import RenameField, TransformFieldValue, FilterField
+from fieldlets import RenameField, TransformFieldValue, FilterField, AddField
from fields2xml import Fields2XmlTx
from crosswalk import Crosswalk
from xsltcrosswalk import XsltCrosswalk
diff --unidirectional-new-file --exclude=.svn --exclude='*.pyc' --exclude=applied --recursive --unified version_1/merescocore/components/xml2fields.py version_2/merescocore/components/xml2fields.py
--- version_1/merescocore/components/xml2fields.py 2010-03-31 14:22:02.000000000 +0200
+++ version_2/merescocore/components/xml2fields.py 2010-03-31 14:57:39.000000000 +0200
@@ -2,7 +2,7 @@
#
# Meresco Core is an open-source library containing components to build
# searchengines, repositories and archives.
-# Copyright (C) 2007-2009 Seek You Too (CQ2) http://www.cq2.nl
+# Copyright (C) 2007-2010 Seek You Too (CQ2) http://www.cq2.nl
# Copyright (C) 2007-2009 SURF Foundation. http://www.surf.nl
# Copyright (C) 2007-2009 Stichting Kennisnet Ict op school.
# http://www.kennisnetictopschool.nl
@@ -55,7 +55,7 @@
fieldname = parentName + localName
value = aNode.text
if value and value.strip():
- self.do.addField(fieldname, value)
+ self.do.addField(name=fieldname, value=value)
for child in aNode.getchildren():
self._fillDict(child, fieldname)
diff --unidirectional-new-file --exclude=.svn --exclude='*.pyc' --exclude=applied --recursive --unified version_1/test/alltests.sh version_2/test/alltests.sh
--- version_1/test/alltests.sh 2010-03-31 14:22:01.000000000 +0200
+++ version_2/test/alltests.sh 2010-03-31 14:57:39.000000000 +0200
@@ -24,4 +24,4 @@
## end license ##
export PYTHONPATH=.
-python2.5 _alltests.py
+python2.5 _alltests.py "$@"
diff --unidirectional-new-file --exclude=.svn --exclude='*.pyc' --exclude=applied --recursive --unified version_1/test/fieldletstest.py version_2/test/fieldletstest.py
--- version_1/test/fieldletstest.py 2010-03-31 14:22:01.000000000 +0200
+++ version_2/test/fieldletstest.py 2010-03-31 14:57:39.000000000 +0200
@@ -2,7 +2,7 @@
#
# Meresco Core is an open-source library containing components to build
# searchengines, repositories and archives.
-# Copyright (C) 2007-2009 Seek You Too (CQ2) http://www.cq2.nl
+# Copyright (C) 2007-2010 Seek You Too (CQ2) http://www.cq2.nl
# Copyright (C) 2007-2009 SURF Foundation. http://www.surf.nl
# Copyright (C) 2007-2009 Stichting Kennisnet Ict op school.
# http://www.kennisnetictopschool.nl
@@ -28,8 +28,9 @@
from cq2utils import CQ2TestCase, CallTrace
from merescocore.framework import be, Observable
-from merescocore.components import RenameField, TransformFieldValue, FilterField
-
+from merescocore.components import RenameField, TransformFieldValue, FilterField, AddField, Xml2Fields
+from lxml.etree import parse
+from StringIO import StringIO
class FieldletsTest(CQ2TestCase):
def setUp(self):
@@ -48,7 +49,7 @@
dna.do.addField(name='fieldname', value="x")
self.assertEquals(1, len(self.observert.calledMethods))
- self.assertEquals("addField('fieldname.fieldname', 'x')", str(self.observert.calledMethods[0]))
+ self.assertEquals("addField(name='fieldname.fieldname', value='x')", str(self.observert.calledMethods[0]))
def testTransformFieldValueWithTransform(self):
dna = be(
@@ -62,8 +63,20 @@
dna.do.addField(name='f', value="x")
self.assertEquals(1, len(self.observert.calledMethods))
- self.assertEquals("addField('f', 'transform x')", str(self.observert.calledMethods[0]))
+ self.assertEquals("addField(name='f', value='transform x')", str(self.observert.calledMethods[0]))
+ def testAddField(self):
+ dna = be(
+ (Observable(),
+ (AddField(name='name', value='value'),
+ (self.observert, )
+ )
+ )
+ )
+
+ dna.do.add(identifier='id', partname='part', lxmlNode='data')
+ self.assertEquals(1, len(self.observert.calledMethods))
+ self.assertEquals("addField(name='name', value='value')", str(self.observert.calledMethods[0]))
def testDoNotTransformFieldValueForTransformWithNoneResult(self):
dna = be(
@@ -80,42 +93,53 @@
def testIntegration(self):
dna = be(
(Observable(),
- (self.observert,),
- (FilterField(lambda name:name in ['name1']),
- (RenameField(lambda name:'drilldown.'+name),
- (self.observert,)
- )
+ (AddField(name='addfield.name', value='addfield.value'),
+ (self.observert,)
),
- (FilterField(lambda name:name in ['name2']),
- (TransformFieldValue(lambda value: value.upper()),
- (RenameField(lambda name:'normalize.'+name),
+ (Xml2Fields(),
+ (self.observert,),
+ (FilterField(lambda name:name in ['base.name1']),
+ (RenameField(lambda name:'drilldown.'+name),
(self.observert,)
)
),
- (TransformFieldValue(lambda value: None),
- (RenameField(lambda name:'normalize2.'+name),
- (self.observert,)
- )
- ),
- (TransformFieldValue(lambda value: value),
- (RenameField(lambda name:'normalize3.'+name),
- (self.observert,)
+ (FilterField(lambda name:name in ['base.name2']),
+ (TransformFieldValue(lambda value: value.upper()),
+ (RenameField(lambda name:'normalize.'+name),
+ (self.observert,)
+ )
+ ),
+ (TransformFieldValue(lambda value: None),
+ (RenameField(lambda name:'normalize2.'+name),
+ (self.observert,)
+ )
+ ),
+ (TransformFieldValue(lambda value: value),
+ (RenameField(lambda name:'normalize3.'+name),
+ (self.observert,)
+ )
)
)
)
)
)
- dna.do.addField('name1', 'value1')
- dna.do.addField('name2', 'value2')
- dna.do.addField('name3', 'value3')
- self.assertEquals(6, len(self.observert.calledMethods))
+ inputXml = """
+ value1
+ value2
+ value3
+"""
+
+ dna.do.add(id='id', partName='part', lxmlNode=parse(StringIO(inputXml)))
+
+ self.assertEquals(7, len(self.observert.calledMethods))
self.assertEquals([
- "addField('name1', 'value1')",
- "addField('drilldown.name1', 'value1')",
- "addField('name2', 'value2')",
- "addField('normalize.name2', 'VALUE2')",
- "addField('normalize3.name2', 'value2')",
- "addField('name3', 'value3')",
+ "addField(name='addfield.name', value='addfield.value')",
+ "addField(name='base.name1', value='value1')",
+ "addField(name='drilldown.base.name1', value='value1')",
+ "addField(name='base.name2', value='value2')",
+ "addField(name='normalize.base.name2', value='VALUE2')",
+ "addField(name='normalize3.base.name2', value='value2')",
+ "addField(name='base.name3', value='value3')",
], [str(m) for m in self.observert.calledMethods])
diff --unidirectional-new-file --exclude=.svn --exclude='*.pyc' --exclude=applied --recursive --unified version_1/test/xml2fieldstest.py version_2/test/xml2fieldstest.py
--- version_1/test/xml2fieldstest.py 2010-03-31 14:22:01.000000000 +0200
+++ version_2/test/xml2fieldstest.py 2010-03-31 14:57:39.000000000 +0200
@@ -2,7 +2,7 @@
#
# Meresco Core is an open-source library containing components to build
# searchengines, repositories and archives.
-# Copyright (C) 2007-2009 Seek You Too (CQ2) http://www.cq2.nl
+# Copyright (C) 2007-2010 Seek You Too (CQ2) http://www.cq2.nl
# Copyright (C) 2007-2009 SURF Foundation. http://www.surf.nl
# Copyright (C) 2007-2009 Stichting Kennisnet Ict op school.
# http://www.kennisnetictopschool.nl
@@ -49,12 +49,12 @@
def testOneField(self):
self.observable.do.add('id0','partName', parselxml('value'))
self.assertEquals(1, len(self.observer.calledMethods))
- self.assertEquals("addField('fields.tag', 'value')", str(self.observer.calledMethods[0]))
+ self.assertEquals("addField(name='fields.tag', value='value')", str(self.observer.calledMethods[0]))
def testDoNotIncludeNamespaces(self):
self.observable.do.add('id0','partName', parselxml('value'))
self.assertEquals(1, len(self.observer.calledMethods))
- self.assertEquals("addField('fields.tag', 'value')", str(self.observer.calledMethods[0]))
+ self.assertEquals("addField(name='fields.tag', value='value')", str(self.observer.calledMethods[0]))
def testMultiLevel(self):
node = parselxml("""
@@ -63,7 +63,7 @@
""")
self.observable.do.add('id', 'legacy partname', node)
- self.assertEquals("addField('lom.general.title', 'The title')", str(self.observer.calledMethods[0]))
+ self.assertEquals("addField(name='lom.general.title', value='The title')", str(self.observer.calledMethods[0]))
def testMultipleValuesForField(self):
@@ -73,8 +73,8 @@
""")
self.observable.do.add('id', 'legacy partname', node)
self.assertEquals(2, len(self.observer.calledMethods))
- self.assertEquals("addField('tag.name', 'Name One')", str(self.observer.calledMethods[0]))
- self.assertEquals("addField('tag.name', 'Name Two')", str(self.observer.calledMethods[1]))
+ self.assertEquals("addField(name='tag.name', value='Name One')", str(self.observer.calledMethods[0]))
+ self.assertEquals("addField(name='tag.name', value='Name Two')", str(self.observer.calledMethods[1]))
def testIgnoreCommentsAndEmptyTags(self):
node = parselxml("""
@@ -86,5 +86,5 @@
""")
self.observable.do.add('id', 'legacy partname', node)
self.assertEquals(2, len(self.observer.calledMethods))
- self.assertEquals("addField('tag.name', 'Name One')", str(self.observer.calledMethods[0]))
- self.assertEquals("addField('tag.name', 'Name Two')", str(self.observer.calledMethods[1]))
+ self.assertEquals("addField(name='tag.name', value='Name One')", str(self.observer.calledMethods[0]))
+ self.assertEquals("addField(name='tag.name', value='Name Two')", str(self.observer.calledMethods[1]))