Skip to content
This repository was archived by the owner on Apr 23, 2026. It is now read-only.

Commit 44dca4d

Browse files
authored
Merge pull request #206 from eea/develop
Community contrib to be released
2 parents cf1aa6f + 966c43c commit 44dca4d

11 files changed

Lines changed: 129 additions & 21 deletions

docs/HISTORY.txt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
11
Changelog
22
=========
33

4+
14.1 - (2020-09-02)
5+
---------------------------
6+
* Bug fix: Fix "test_doctests.Py23DocChecker" that was hidding failing doc
7+
tests by wrongly testing on "want" instead on "got".
8+
[gbastien refs #203]
9+
* Feature: In GenericSetup import profile, take into account the "purge"
10+
attribute at the <criterion> level like it is done at <criteria> level.
11+
[gbastien]
12+
413
14.0 - (2020-08-14)
514
---------------------------
615
* Upgrade step: Within "Plone > Site Setup > Add-ons" click on

eea/facetednavigation/docs/exportimport.txt

Lines changed: 65 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,7 @@ Import a xml file with purge set to False, new criteria will be added to existin
322322

323323
>>> query = {
324324
... 'import_button': 'Import',
325-
... 'import_file': preparefile('data/with_purge_false.xml'),
325+
... 'import_file': preparefile('data/criteria_with_purge_false.xml'),
326326
... 'redirect': '',
327327
... }
328328
>>> view(**query)
@@ -379,7 +379,7 @@ Importing an already existing criterion will not fail, it is just ignored and a
379379

380380
>>> query = {
381381
... 'import_button': 'Import',
382-
... 'import_file': preparefile('data/with_purge_false.xml'),
382+
... 'import_file': preparefile('data/criteria_with_purge_false.xml'),
383383
... 'redirect': '',
384384
... }
385385
>>> view(**query)
@@ -436,7 +436,7 @@ Import a xml file with purge set to True (default), existing criteria are remove
436436

437437
>>> query = {
438438
... 'import_button': 'Import',
439-
... 'import_file': preparefile('data/with_purge_true.xml'),
439+
... 'import_file': preparefile('data/criteria_with_purge_true.xml'),
440440
... 'redirect': '',
441441
... }
442442
>>> view(**query)
@@ -462,3 +462,65 @@ Import a xml file with purge set to True (default), existing criteria are remove
462462
</criterion>
463463
</criteria>
464464
</object>
465+
466+
Import a xml file with criterion purge set to False, existing criterion is left and the new is not imported
467+
468+
>>> query = {
469+
... 'import_button': 'Import',
470+
... 'import_file': preparefile('data/criterion_with_purge_false.xml'),
471+
... 'redirect': '',
472+
... }
473+
>>> view(**query)
474+
'Configuration imported'
475+
476+
>>> query = {
477+
... 'export_button': 'Export',
478+
... 'redirect': '',
479+
... }
480+
>>> print(view(**query).decode('utf-8').strip())
481+
<?xml...?>
482+
<object name="new_sandbox" meta_type="...">
483+
<criteria>
484+
<criterion name="c22">
485+
<property name="widget">daterange</property>
486+
<property name="title">Created</property>
487+
<property name="index">Date</property>
488+
<property name="default"></property>
489+
<property name="position">top</property>
490+
<property name="section">advanced</property>
491+
<property name="hidden">False</property>
492+
<property name="calYearRange">c-10:c+10</property>
493+
</criterion>
494+
</criteria>
495+
</object>
496+
497+
Import a xml file with criterion purge set to True, existing criterion is removed and the new is imported
498+
499+
>>> query = {
500+
... 'import_button': 'Import',
501+
... 'import_file': preparefile('data/criterion_with_purge_true.xml'),
502+
... 'redirect': '',
503+
... }
504+
>>> view(**query)
505+
'Configuration imported'
506+
507+
>>> query = {
508+
... 'export_button': 'Export',
509+
... 'redirect': '',
510+
... }
511+
>>> print(view(**query).decode('utf-8').strip())
512+
<?xml...?>
513+
<object name="new_sandbox" meta_type="...">
514+
<criteria>
515+
<criterion name="c22">
516+
<property name="widget">daterange</property>
517+
<property name="title">Created title changed</property>
518+
<property name="index">Date</property>
519+
<property name="default"></property>
520+
<property name="position">top</property>
521+
<property name="section">advanced</property>
522+
<property name="hidden">False</property>
523+
<property name="calYearRange">c-20:c+20</property>
524+
</criterion>
525+
</criteria>
526+
</object>

eea/facetednavigation/docs/language.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,11 @@ Set up
3232
>>> from Products.LinguaPlone.browser import controlpanel
3333
>>> controllang = controlpanel.IMultiLanguageSelectionSchema(portal)
3434
>>> controllang.available_languages
35-
[u'en']
35+
['en']
3636

3737
>>> controllang.available_languages = [u'en', u'fr']
3838
>>> controllang.available_languages
39-
[u'en', u'fr']
39+
['en', 'fr']
4040

4141
Setup sandbox
4242

eea/facetednavigation/docs/unicode.txt

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ Add some content
3737
>>> doc = sandbox.invokeFactory('News Item', 'non-ascii-folder', title='NON-ASCII Folder')
3838
>>> doc = sandbox._getOb(doc)
3939
>>> doc.setLanguage('en')
40-
>>> doc.setSubject((u'\u015etire',))
40+
>>> doc.setSubject(('étire',))
4141
>>> doc.reindexObject()
4242

4343
Let's do some search
@@ -53,7 +53,7 @@ Checkbox widget
5353

5454
>>> _ = configure(addPropertiesWidget_button='Add', wtype='checkbox',
5555
... wposition='top', title='Checkbox', catalog='portal_catalog',
56-
... index='Subject', default=[u'\u015etire'], hidden=True)
56+
... index='Subject', default=['étire'], hidden=True)
5757
>>> brains = query.query(batch=False)
5858
>>> for brain in brains:
5959
... print(brain.Title)
@@ -62,7 +62,8 @@ Checkbox widget
6262
Visible
6363

6464
>>> _ = configure(updateCriterion_button='Save', cid='c0', hidden=False)
65-
>>> brains = query.query(batch=False, c0=[u'\u015etire'])
65+
>>> request.form['c0[]'] = ['étire']
66+
>>> brains = query.query(batch=False)
6667
>>> for brain in brains:
6768
... print(brain.Title)
6869
NON-ASCII Folder
@@ -79,6 +80,7 @@ Checkbox widget
7980
Cleanup
8081

8182
>>> ICriteria(sandbox).delete('c0')
83+
>>> del request.form['c0[]']
8284

8385

8486
Radio widget
@@ -87,7 +89,7 @@ Radio widget
8789

8890
>>> _ = configure(addPropertiesWidget_button='Add', wtype='radio',
8991
... wposition='top', title='Radio', catalog='portal_catalog',
90-
... index='Subject', default=u'\u015etire', hidden=True)
92+
... index='Subject', default='étire', hidden=True)
9193
>>> brains = query.query(batch=False)
9294
>>> for brain in brains:
9395
... print(brain.Title)
@@ -96,7 +98,7 @@ Radio widget
9698
Visible
9799

98100
>>> _ = configure(updateCriterion_button='Save', cid='c0', hidden=False)
99-
>>> brains = query.query(batch=False, c0=u'\u015etire')
101+
>>> brains = query.query(batch=False, c0='étire')
100102
>>> for brain in brains:
101103
... print(brain.Title)
102104
NON-ASCII Folder
@@ -120,7 +122,7 @@ Select widget
120122

121123
>>> _ = configure(addPropertiesWidget_button='Add', wtype='select',
122124
... wposition='top', title='Select', catalog='portal_catalog',
123-
... index='Subject', default=u'\u015etire', hidden=True)
125+
... index='Subject', default='étire', hidden=True)
124126
>>> brains = query.query(batch=False)
125127
>>> for brain in brains:
126128
... print(brain.Title)
@@ -129,7 +131,7 @@ Select widget
129131
Visible
130132

131133
>>> _ = configure(updateCriterion_button='Save', cid='c0', hidden=False)
132-
>>> brains = query.query(batch=False, c0=u'\u015etire')
134+
>>> brains = query.query(batch=False, c0='étire')
133135
>>> for brain in brains:
134136
... print(brain.Title)
135137
NON-ASCII Folder
@@ -154,7 +156,7 @@ TagsCloud widget
154156

155157
>>> _ = configure(addPropertiesWidget_button='Add', wtype='tagscloud',
156158
... wposition='top', title='Tags', catalog='portal_catalog',
157-
... index='Subject', default=u'\u015etire', hidden=True)
159+
... index='Subject', default='étire', hidden=True)
158160
>>> brains = query.query(batch=False)
159161
>>> for brain in brains:
160162
... print(brain.Title)
@@ -163,7 +165,7 @@ TagsCloud widget
163165
Visible
164166

165167
>>> _ = configure(updateCriterion_button='Save', cid='c0', hidden=False)
166-
>>> brains = query.query(batch=False, c0=u'\u015etire')
168+
>>> brains = query.query(batch=False, c0='étire')
167169
>>> for brain in brains:
168170
... print(brain.Title)
169171
NON-ASCII Folder
@@ -188,7 +190,7 @@ Text widget
188190

189191
>>> _ = configure(addPropertiesWidget_button='Add', wtype='text',
190192
... wposition='top', title='Text',
191-
... index='Subject', default=u'\u015etire', hidden=True)
193+
... index='Subject', default='étire', hidden=True)
192194
>>> brains = query.query(batch=False)
193195
>>> for brain in brains:
194196
... print(brain.Title)
@@ -197,14 +199,14 @@ Text widget
197199
Visible
198200

199201
>>> _ = configure(updateCriterion_button='Save', cid='c0', hidden=False)
200-
>>> brains = query.query(batch=False, c0=u'\u015etire')
202+
>>> brains = query.query(batch=False, c0='étire')
201203
>>> for brain in brains:
202204
... print(brain.Title)
203205
NON-ASCII Folder
204206

205207
Search in current results
206208

207-
>>> brains = query.query(batch=False, c0=[u'\u015etire'])
209+
>>> brains = query.query(batch=False, c0=['étire'])
208210
>>> for brain in brains:
209211
... print(brain.Title)
210212
NON-ASCII Folder

eea/facetednavigation/exportimport/criteria.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,11 @@ def _importNode(self, node):
5858
continue
5959

6060
name = child.getAttribute('name')
61+
# check if purge at criterion level if not already at criteria level
62+
if not should_purge and child.getAttribute('purge'):
63+
should_purge_child = self._convertToBoolean(child.getAttribute('purge'))
64+
if should_purge_child and name in list(self.context.keys()):
65+
self.context.delete(name)
6166
try:
6267
# we need to find the 'position' and 'section' because
6368
# it is used to sort criteria when the criterion is added
@@ -68,7 +73,7 @@ def _importNode(self, node):
6873
if s.getAttribute('name') == 'section']
6974
section = sect[0].childNodes[0].nodeValue if sect else 'default'
7075
widget = [w for w in child.getElementsByTagName('property')
71-
if w.getAttribute('name') == 'widget']
76+
if w.getAttribute('name') == 'widget']
7277
widget = widget[0].childNodes[0].nodeValue if widget else 'text'
7378
cid = self.context.add(widget, position, section, _cid_=name)
7479
except KeyError:

eea/facetednavigation/tests/data/with_purge_false.xml renamed to eea/facetednavigation/tests/data/criteria_with_purge_false.xml

File renamed without changes.

eea/facetednavigation/tests/data/with_purge_true.xml renamed to eea/facetednavigation/tests/data/criteria_with_purge_true.xml

File renamed without changes.
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?xml version="1.0"?>
2+
<object name="sandbox" meta_type="ATFolder">
3+
<criteria purge="False">
4+
<criterion purge="False" name="c22">
5+
<property name="widget">daterange</property>
6+
<property name="title">Created title changed</property>
7+
<property name="position">top</property>
8+
<property name="section">advanced</property>
9+
<property name="hidden">False</property>
10+
<property name="index">Date</property>
11+
<property name="default"></property>
12+
<property name="calYearRange">c-20:c+20</property>
13+
</criterion>
14+
</criteria>
15+
</object>
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?xml version="1.0"?>
2+
<object name="sandbox" meta_type="ATFolder">
3+
<criteria purge="False">
4+
<criterion purge="True" name="c22">
5+
<property name="widget">daterange</property>
6+
<property name="title">Created title changed</property>
7+
<property name="position">top</property>
8+
<property name="section">advanced</property>
9+
<property name="hidden">False</property>
10+
<property name="index">Date</property>
11+
<property name="default"></property>
12+
<property name="calYearRange">c-20:c+20</property>
13+
</criterion>
14+
</criteria>
15+
</object>

eea/facetednavigation/tests/test_doctests.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@
2222
class Py23DocChecker(doctest.OutputChecker):
2323
def check_output(self, want, got, optionflags):
2424
if six.PY2:
25-
got = re.sub("u'(.*?)'", "'\\1'", want)
26-
got = re.sub(' encoding="utf-8"', '', want)
25+
got = re.sub("u'(.*?)'", "'\\1'", got)
26+
got = re.sub(' encoding="utf-8"', '', got)
2727
# want = re.sub("b'(.*?)'", "'\\1'", want)
2828
return doctest.OutputChecker.check_output(self, want, got, optionflags)
2929

0 commit comments

Comments
 (0)