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]))