Skip to content

Commit 9b4b96b

Browse files
authored
Merge branch 'main' into query_registry_listing
2 parents 6b8ad4a + b8f1594 commit 9b4b96b

File tree

17 files changed

+55
-64
lines changed

17 files changed

+55
-64
lines changed

.github/workflows/tests.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ jobs:
1010
include:
1111
- python-version: "3.8"
1212
plone-version: "5.2"
13-
- python-version: "3.8"
14-
plone-version: "6.0"
1513
- python-version: "3.9"
1614
plone-version: "6.0"
1715
- python-version: "3.10"

news/1685.internal

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Update CI. @davisagli

news/1858.bugfix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Add parse_int to handle all cases of BadRequests from ints passed in. @djay

plone-6.0.x-python3.8.cfg

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[buildout]
22
extends =
3-
https://dist.plone.org/release/6.0.12/versions.cfg
3+
https://dist.plone.org/release/6.0.14/versions.cfg
44
base.cfg
55

66
[instance]
@@ -15,3 +15,4 @@ robotframework-assertion-engine = 2.0.0
1515
robotframework-debuglibrary = 2.3.0
1616
robotframework-pythonlibcore = 4.2.0
1717
grpcio-tools = 1.59.0
18+
twine = 5.1.1

plone-6.0.x.cfg

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,11 @@
11
[buildout]
22
extends =
3-
https://dist.plone.org/release/6.0.12/versions.cfg
3+
https://dist.plone.org/release/6.0.14/versions.cfg
44
base.cfg
55

6-
[buildout:python37]
7-
parts =
8-
test
9-
code-analysis
10-
116
[instance]
127
recipe = plone.recipe.zope2instance
138
zodb-temporary-storage = off
149

1510
[versions]
16-
# Override pin from Zope. https://github.com/zopefoundation/Zope/issues/1220
17-
docutils = 0.21.2
18-
pygments = 2.14.0
19-
plone.app.linkintegrity = 4.0.3
20-
robotframework-browser = 17.5.2
21-
robotframework-assertion-engine = 2.0.0
22-
robotframework-debuglibrary = 2.3.0
23-
robotframework-pythonlibcore = 4.2.0
24-
grpcio-tools = 1.59.0
11+
twine = 5.1.1

plone-6.1.x.cfg

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,10 @@
11
[buildout]
22
extends =
3-
https://dist.plone.org/release/6.1.0a3/versions.cfg
3+
https://dist.plone.org/release/6.1.0b2/versions.cfg
44
base.cfg
55

6-
[buildout:python37]
7-
parts =
8-
test
9-
code-analysis
10-
116
[instance]
127
recipe = plone.recipe.zope2instance
138
zodb-temporary-storage = off
149

1510
[versions]
16-
# Override pin from Zope. https://github.com/zopefoundation/Zope/issues/1220
17-
docutils = 0.21.2

requirements-6.0.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
-r https://dist.plone.org/release/6.0.12/requirements.txt
1+
-r https://dist.plone.org/release/6.0.14/requirements.txt

requirements-6.1.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
-r https://dist.plone.org/release/6.1.0a3/requirements.txt
1+
-r https://dist.plone.org/release/6.1.0b2/requirements.txt

src/plone/restapi/batching.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from plone.batching.batch import Batch
22
from plone.restapi.deserializer import json_body
3+
from plone.restapi.deserializer import parse_int
34
from plone.restapi.exceptions import DeserializationError
45
from urllib.parse import parse_qsl
56
from urllib.parse import urlencode
@@ -14,14 +15,15 @@ def __init__(self, request, results):
1415
self.request = request
1516

1617
try:
17-
self.b_start = int(json_body(self.request).get("b_start", False)) or int(
18-
self.request.form.get("b_start", 0)
19-
)
20-
self.b_size = int(json_body(self.request).get("b_size", False)) or int(
21-
self.request.form.get("b_size", DEFAULT_BATCH_SIZE)
22-
)
23-
except (ValueError, DeserializationError) as e:
18+
data = json_body(request)
19+
except DeserializationError as e:
2420
raise BadRequest(e)
21+
self.b_start = parse_int(data, "b_start", False) or parse_int(
22+
self.request.form, "b_start", 0
23+
)
24+
self.b_size = parse_int(data, "b_size", False) or parse_int(
25+
self.request.form, "b_size", DEFAULT_BATCH_SIZE
26+
)
2527
self.batch = Batch(results, self.b_size, self.b_start)
2628

2729
def __iter__(self):

src/plone/restapi/deserializer/__init__.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from plone.restapi.exceptions import DeserializationError
2+
from zExceptions import BadRequest
23

34
import json
45

@@ -28,3 +29,19 @@ def boolean_value(value):
2829
2930
"""
3031
return value not in {False, "false", "False", "0", 0}
32+
33+
34+
def parse_int(data, prop, default):
35+
"""
36+
Args:
37+
data: dict from a request
38+
prop: name of a integer paramater in the dict
39+
default: default if not found
40+
41+
Returns: an integer
42+
Raises: BadRequest if not an int
43+
"""
44+
try:
45+
return int(data.get(prop, default))
46+
except (ValueError, TypeError):
47+
raise BadRequest(f"Invalid {prop}: Not an integer")

0 commit comments

Comments
 (0)