[Testbot] Plone 5.0 - Python 2.7 - Build # 2074 - Fixed! - 0 failure(s)
jenkins at plone.org
jenkins at plone.org
Sun Mar 30 01:09:06 UTC 2014
-------------------------------------------------------------------------------
Plone 5.0 - Python 2.7 - Build # 2074 - Fixed!
-------------------------------------------------------------------------------
http://jenkins.plone.org/job/plone-5.0-python-2.7/2074/
-------------------------------------------------------------------------------
CHANGES
-------------------------------------------------------------------------------
Repository: plone.app.querystring
Branch: refs/heads/master
Date: 2014-01-29T10:57:01+01:00
Author: Mathias Leimgruber (maethu) <m.leimgruber at 4teamwork.ch>
Commit: https://github.com/plone/plone.app.querystring/commit/d406f22d7681c8e0e625cb728159fdfb67ec327c
Implement multipath queries.
Files changed:
M CHANGES.rst
M plone/app/querystring/queryparser.py
M plone/app/querystring/tests/testQueryParser.py
diff --git a/CHANGES.rst b/CHANGES.rst
index 2b90eb9..0d183d0 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -4,7 +4,12 @@ Changelog
1.1.2 (unreleased)
------------------
-- Nothing changed yet.
+- Implement multipath queries:
+ - Parsing a path returns always a list.
+ - Special handling for paths in parseFormquery.
+
+ Fixes https://dev.plone.org/ticket/13251
+ [mathias.leimgruber]
1.1.1 (2014-01-27)
diff --git a/plone/app/querystring/queryparser.py b/plone/app/querystring/queryparser.py
index c6023cd..a4ce36e 100644
--- a/plone/app/querystring/queryparser.py
+++ b/plone/app/querystring/queryparser.py
@@ -38,7 +38,12 @@ def parseFormquery(context, formquery, sort_on=None, sort_order=None):
kwargs = {}
parser = resolve(row.operator)
kwargs = parser(context, row)
- query.update(kwargs)
+
+ # Special path handling - since multipath queries are possible
+ if 'path' in query and 'path' in kwargs:
+ query['path']['query'].extend(kwargs['path']['query'])
+ else:
+ query.update(kwargs)
if not query:
# If the query is empty fall back onto the equality query
@@ -213,14 +218,16 @@ def _path(context, row):
if not values.startswith(nav_root):
values = nav_root + values
- query = {'query': values}
+ query = {}
if depth is not None:
query['depth'] = depth
# when a depth value is specified, a trailing slash matters on the
# query
- query['query'] = query['query'].rstrip('/')
- tmp = {row.index: query}
- return tmp
+ values = values.rstrip('/')
+
+ query['query'] = [values]
+
+ return {row.index: query}
def _relativePath(context, row):
diff --git a/plone/app/querystring/tests/testQueryParser.py b/plone/app/querystring/tests/testQueryParser.py
index e7b823f..b16af1f 100644
--- a/plone/app/querystring/tests/testQueryParser.py
+++ b/plone/app/querystring/tests/testQueryParser.py
@@ -140,7 +140,8 @@ def test_path_explicit(self):
'v': '/foo',
}
parsed = queryparser.parseFormquery(MockSite(), [data, ])
- self.assertEqual(parsed, {'path': {'query': '/%s/foo' % MOCK_SITE_ID}})
+ self.assertEqual(
+ parsed, {'path': {'query': ['/%s/foo' % MOCK_SITE_ID]}})
def test_path_computed(self):
data = {
@@ -150,7 +151,8 @@ def test_path_computed(self):
}
parsed = queryparser.parseFormquery(MockSite(), [data, ])
- self.assertEqual(parsed, {'path': {'query': '/%s/foo' % MOCK_SITE_ID}})
+ self.assertEqual(
+ parsed, {'path': {'query': ['/%s/foo' % MOCK_SITE_ID]}})
def test_path_with_depth_computed(self):
data = {
@@ -162,11 +164,47 @@ def test_path_with_depth_computed(self):
parsed = queryparser.parseFormquery(MockSite(), [data, ])
self.assertEqual(parsed, {
'path': {
- 'query': '/%s/foo' % MOCK_SITE_ID,
+ 'query': ['/%s/foo' % MOCK_SITE_ID],
'depth': 2
}
})
+ def test_multi_path(self):
+ data_1 = {
+ 'i': 'path',
+ 'o': 'plone.app.querystring.operation.string.path',
+ 'v': '/foo',
+ }
+ data_2 = {
+ 'i': 'path',
+ 'o': 'plone.app.querystring.operation.string.path',
+ 'v': '/bar',
+ }
+
+ parsed = queryparser.parseFormquery(MockSite(), [data_1, data_2])
+ self.assertEqual(
+ parsed, {'path': {'query': [
+ '/%s/foo' % MOCK_SITE_ID,
+ '/%s/bar' % MOCK_SITE_ID]}})
+
+ def test_multi_path_with_depth_computet(self):
+ data_1 = {
+ 'i': 'path',
+ 'o': 'plone.app.querystring.operation.string.path',
+ 'v': '/foo::2',
+ }
+ data_2 = {
+ 'i': 'path',
+ 'o': 'plone.app.querystring.operation.string.path',
+ 'v': '/bar::5',
+ }
+
+ parsed = queryparser.parseFormquery(MockSite(), [data_1, data_2])
+ self.assertEqual(
+ parsed, {'path': {'query': [
+ '/%s/foo' % MOCK_SITE_ID,
+ '/%s/bar' % MOCK_SITE_ID], 'depth': 2}})
+
class TestQueryGenerators(TestQueryParserBase):
Repository: plone.app.querystring
Branch: refs/heads/master
Date: 2014-03-29T17:13:45-07:00
Author: David Glick (davisagli) <david at glicksoftware.com>
Commit: https://github.com/plone/plone.app.querystring/commit/cf4326f96600a49e0ab7b14ab6c2a2426a707350
Merge pull request #19 from maethu/master
Implement multipath queries.
Files changed:
M CHANGES.rst
M plone/app/querystring/queryparser.py
M plone/app/querystring/tests/testQueryParser.py
diff --git a/CHANGES.rst b/CHANGES.rst
index 00b7c09..ac23cf7 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -4,7 +4,12 @@ Changelog
1.1.2 (unreleased)
------------------
-- Nothing changed yet.
+- Implement multipath queries:
+ - Parsing a path returns always a list.
+ - Special handling for paths in parseFormquery.
+
+ Fixes https://dev.plone.org/ticket/13251
+ [mathias.leimgruber]
1.1.1 (2014-01-27)
diff --git a/plone/app/querystring/queryparser.py b/plone/app/querystring/queryparser.py
index c6023cd..a4ce36e 100644
--- a/plone/app/querystring/queryparser.py
+++ b/plone/app/querystring/queryparser.py
@@ -38,7 +38,12 @@ def parseFormquery(context, formquery, sort_on=None, sort_order=None):
kwargs = {}
parser = resolve(row.operator)
kwargs = parser(context, row)
- query.update(kwargs)
+
+ # Special path handling - since multipath queries are possible
+ if 'path' in query and 'path' in kwargs:
+ query['path']['query'].extend(kwargs['path']['query'])
+ else:
+ query.update(kwargs)
if not query:
# If the query is empty fall back onto the equality query
@@ -213,14 +218,16 @@ def _path(context, row):
if not values.startswith(nav_root):
values = nav_root + values
- query = {'query': values}
+ query = {}
if depth is not None:
query['depth'] = depth
# when a depth value is specified, a trailing slash matters on the
# query
- query['query'] = query['query'].rstrip('/')
- tmp = {row.index: query}
- return tmp
+ values = values.rstrip('/')
+
+ query['query'] = [values]
+
+ return {row.index: query}
def _relativePath(context, row):
diff --git a/plone/app/querystring/tests/testQueryParser.py b/plone/app/querystring/tests/testQueryParser.py
index e7b823f..b16af1f 100644
--- a/plone/app/querystring/tests/testQueryParser.py
+++ b/plone/app/querystring/tests/testQueryParser.py
@@ -140,7 +140,8 @@ def test_path_explicit(self):
'v': '/foo',
}
parsed = queryparser.parseFormquery(MockSite(), [data, ])
- self.assertEqual(parsed, {'path': {'query': '/%s/foo' % MOCK_SITE_ID}})
+ self.assertEqual(
+ parsed, {'path': {'query': ['/%s/foo' % MOCK_SITE_ID]}})
def test_path_computed(self):
data = {
@@ -150,7 +151,8 @@ def test_path_computed(self):
}
parsed = queryparser.parseFormquery(MockSite(), [data, ])
- self.assertEqual(parsed, {'path': {'query': '/%s/foo' % MOCK_SITE_ID}})
+ self.assertEqual(
+ parsed, {'path': {'query': ['/%s/foo' % MOCK_SITE_ID]}})
def test_path_with_depth_computed(self):
data = {
@@ -162,11 +164,47 @@ def test_path_with_depth_computed(self):
parsed = queryparser.parseFormquery(MockSite(), [data, ])
self.assertEqual(parsed, {
'path': {
- 'query': '/%s/foo' % MOCK_SITE_ID,
+ 'query': ['/%s/foo' % MOCK_SITE_ID],
'depth': 2
}
})
+ def test_multi_path(self):
+ data_1 = {
+ 'i': 'path',
+ 'o': 'plone.app.querystring.operation.string.path',
+ 'v': '/foo',
+ }
+ data_2 = {
+ 'i': 'path',
+ 'o': 'plone.app.querystring.operation.string.path',
+ 'v': '/bar',
+ }
+
+ parsed = queryparser.parseFormquery(MockSite(), [data_1, data_2])
+ self.assertEqual(
+ parsed, {'path': {'query': [
+ '/%s/foo' % MOCK_SITE_ID,
+ '/%s/bar' % MOCK_SITE_ID]}})
+
+ def test_multi_path_with_depth_computet(self):
+ data_1 = {
+ 'i': 'path',
+ 'o': 'plone.app.querystring.operation.string.path',
+ 'v': '/foo::2',
+ }
+ data_2 = {
+ 'i': 'path',
+ 'o': 'plone.app.querystring.operation.string.path',
+ 'v': '/bar::5',
+ }
+
+ parsed = queryparser.parseFormquery(MockSite(), [data_1, data_2])
+ self.assertEqual(
+ parsed, {'path': {'query': [
+ '/%s/foo' % MOCK_SITE_ID,
+ '/%s/bar' % MOCK_SITE_ID], 'depth': 2}})
+
class TestQueryGenerators(TestQueryParserBase):
-------------------------------------------------------------------------------
More information about the Testbot
mailing list