Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 1 addition & 6 deletions docs/portal.md
Original file line number Diff line number Diff line change
Expand Up @@ -205,12 +205,7 @@ api.portal.send_email(
%
% self.assertEqual(len(mailhost.messages), 1)
%
% try:
% # Python 3
% from email import message_from_bytes
% except ImportError:
% # Python 2
% from email import message_from_string as message_from_bytes
% from email import message_from_bytes
% msg = message_from_bytes(mailhost.messages[0])
% self.assertEqual(msg['To'], 'bob@plone.org')
% self.assertEqual(msg['From'], 'noreply@plone.org')
Expand Down
1 change: 1 addition & 0 deletions news/592.bugfix.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Clean up. @ale-rt
4 changes: 2 additions & 2 deletions src/plone/api/content.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
import transaction
import uuid

_marker = []
_marker = object()

# Maximum number of attempts to generate a unique random ID
MAX_UNIQUE_ID_ATTEMPTS = 100
Expand Down Expand Up @@ -753,7 +753,7 @@ def iter_ancestors(obj=None, function=None, interface=None, stop_at=_marker):
#
# This is useful if we want to have an empty iterator when checking
# for ancestors in the portal.
return iter(())
yield from ()

chain = aq_chain(aq_inner(obj))

Expand Down
5 changes: 0 additions & 5 deletions src/plone/api/portal.py
Original file line number Diff line number Diff line change
Expand Up @@ -170,11 +170,6 @@ def send_email(
# formataddr probably got confused by special characters.
sender = from_address

# If the mail headers are not properly encoded we need to extract
# them and let MailHost manage the encoding.
if isinstance(body, str):
body = body.encode(encoding)

host = get_tool("MailHost")
host.send(
body,
Expand Down
9 changes: 1 addition & 8 deletions src/plone/api/tests/test_portal.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

from datetime import date
from datetime import datetime
from email import message_from_bytes
from packaging import version
from plone.api import content
from plone.api import env
Expand All @@ -25,14 +26,6 @@
import DateTime
import unittest

try:
# Python 3
from email import message_from_bytes
except ImportError:
# Python 2
from email import message_from_string as message_from_bytes
Comment thread
ale-rt marked this conversation as resolved.


HAS_PLONE5 = version.parse(env.plone_version()) >= version.parse("5.0b2")


Expand Down
15 changes: 11 additions & 4 deletions src/plone/api/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -438,9 +438,16 @@ def revoke_roles(username=None, user=None, obj=None, roles=None):
if user is None:
raise InvalidParameterError("User could not be found")

roles = set(roles)

if "Anonymous" in roles or "Authenticated" in roles:
try:
roles_set = set(roles)
if not all(isinstance(role, str) for role in roles_set):
raise InvalidParameterError(
"Roles must be an iterable containing only strings"
)
except TypeError:
raise InvalidParameterError("Roles must be an iterable containing only strings")

if "Anonymous" in roles_set or "Authenticated" in roles_set:
raise InvalidParameterError

inherit = True
Expand All @@ -454,7 +461,7 @@ def revoke_roles(username=None, user=None, obj=None, roles=None):
if role not in ["Anonymous", "Authenticated"]
}

roles = list(actual_roles - roles)
roles = list(actual_roles - roles_set)

if obj is None:
user.setSecurityProfile(roles=roles)
Expand Down