Skip to content

Commit

Permalink
Python3 fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
MrTango committed Sep 20, 2019
1 parent e127427 commit c933338
Show file tree
Hide file tree
Showing 24 changed files with 159 additions and 345 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -60,3 +60,4 @@ docs/Makefile
/reports
/.coverage.py27-Plone51
*.sublime-project
/.coverage.*
2 changes: 1 addition & 1 deletion UPGRADE.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ Plone 5.1 / Python 2.7
##### Behaviors

- Newsletter: Plone users/groups as recipients
- Newsletter: Collection as source
- Newsletter: Collection as source [make sure existing Collections have the behavior set with values]


- Implement CT's methods mostly as views/utilities instead of instance methods
Expand Down
2 changes: 1 addition & 1 deletion constraints.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
-c constraints_plone51.txt
-c constraints_plone52.txt
3 changes: 2 additions & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,12 +45,13 @@
'Products.CMFPlone',
'plone.app.registry',
'plone.resource',
'beautifulsoup4',
'setuptools',
'stoneagehtml',
'plone.protect>=3.1.1',
'emails',
'premailer',
'html2text',
'email_validator',
],
extras_require=dict(
test=[
Expand Down
54 changes: 24 additions & 30 deletions src/Products/EasyNewsletter/browser/registration.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
# -*- coding: utf-8 -*-
from AccessControl.SecurityManagement import newSecurityManager
from Acquisition import aq_inner
from email.MIMEText import MIMEText
from email_validator import EmailNotValidError
from email_validator import validate_email
from logging import getLogger
from plone import api
from plone.i18n.normalizer.interfaces import IIDNormalizer
Expand All @@ -12,18 +13,16 @@
from Products.EasyNewsletter.content.newsletter_subscriber import INewsletterSubscriber
from Products.EasyNewsletter.interfaces import IENLRegistrationTool
from Products.EasyNewsletter.utils.base import execute_under_special_role
from Products.EasyNewsletter.utils.mail import get_email_charset
from Products.EasyNewsletter.utils.mail import get_portal_mail_settings
from Products.Five.browser import BrowserView
from Products.statusmessages.interfaces import IStatusMessage
from Products.validation.validators.BaseValidators import EMAIL_RE
from zExceptions import BadRequest
from zope.component import getMultiAdapter
from zope.component import queryUtility
from zope.interface import alsoProvides

import emails
import OFS
import re


try:
Expand All @@ -34,7 +33,6 @@


logger = getLogger("ENL Registration")
EMAIL_RE = "^" + EMAIL_RE


class SubscriberView(BrowserView):
Expand Down Expand Up @@ -66,8 +64,19 @@ def portal_url(self):
def register_subscriber(self):
"""
"""
charset = get_email_charset()
messages = IStatusMessage(self.request)
path_to_easynewsletter = self.request.get("newsletter")
# remove leading slash from paths like: /mynewsletter
path_to_easynewsletter = path_to_easynewsletter.strip("/")
newsletter_container = self.portal.unrestrictedTraverse(path_to_easynewsletter)

subscriber = self.request.get("subscriber")
try:
validate_email(subscriber)
except EmailNotValidError as e:
messages.addStatusMessage(_("Please enter a valid email address.\n{0}".format(e)), "error")
return self._msg_redirect(newsletter_container)

lastname = self.request.get("name", "")
firstname = self.request.get("firstname", "")
name_prefix = self.request.get("name_prefix", "")
Expand All @@ -78,20 +87,7 @@ def register_subscriber(self):
nl_language = self.request.get("nl_language", current_language)
salutation = self.request.get("salutation", "")
organization = self.request.get("organization", "")
path_to_easynewsletter = self.request.get("newsletter")
# remove leading slash from paths like: /mynewsletter
path_to_easynewsletter = path_to_easynewsletter.strip("/")
newsletter_container = self.portal.unrestrictedTraverse(path_to_easynewsletter)
messages = IStatusMessage(self.request)

if not subscriber:
messages.addStatusMessage(_("Please enter a valid email address."), "error")
return self._msg_redirect(newsletter_container)

mo = re.search(EMAIL_RE, subscriber)
if not mo:
messages.addStatusMessage(_("Please enter a valid email address."), "error")
return self._msg_redirect(newsletter_container)
norm = queryUtility(IIDNormalizer)
normalized_subscriber = norm.normalize(subscriber)
if normalized_subscriber in newsletter_container.objectIds():
Expand Down Expand Up @@ -134,11 +130,12 @@ def register_subscriber(self):
settings = get_portal_mail_settings()
msg_sender = settings.email_from_address
msg_receiver = subscriber
msg = MIMEText(msg_text, "plain", charset)
msg["To"] = msg_receiver
msg["From"] = msg_sender
msg["Subject"] = msg_subject
# msg.epilogue = ''
msg = emails.Message(
text=msg_text,
subject=msg_subject,
mail_from=msg_sender,
mail_to=msg_receiver,
)
self.portal.MailHost.send(msg.as_string())

messages.addStatusMessage(
Expand Down Expand Up @@ -223,15 +220,15 @@ def _requestReset(self, userid): # noqa
return retval


class RegistrationData(OFS.SimpleItem.SimpleItem):
class RegistrationData(OFS.SimpleItem.Item):
""" holds data from ENL registration form
"""

def __init__(self, id, **kw):
self.id = id
for key, value in kw.items():
setattr(self, key, value)
super(RegistrationData, self).__init__(id)
#super(RegistrationData, self).__init__()

@property
def title(self):
Expand Down Expand Up @@ -263,10 +260,7 @@ def send_unsubscribe_email(self, subscriber):
unsubscribe_url = (
self.newsletter_url + "/unsubscribe?subscriber=" + subscriber_brain.UID
)
msg_text = """%s: %s""" % (
newsletter.unsubscribe_string,
unsubscribe_url,
)
msg_text = """%s: %s""" % (newsletter.unsubscribe_string, unsubscribe_url)
settings = get_portal_mail_settings()
api.portal.send_email(
recipient=subscriber,
Expand Down
2 changes: 1 addition & 1 deletion src/Products/EasyNewsletter/content/newsletter.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

def get_default_output_template():
registry = getUtility(IRegistry)
templates_keys = registry.get("Products.EasyNewsletter.output_templates").keys()
templates_keys = list(registry.get("Products.EasyNewsletter.output_templates"))
if not templates_keys:
return
if "output_default" not in templates_keys:
Expand Down
8 changes: 4 additions & 4 deletions src/Products/EasyNewsletter/issuedatafetcher.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
from BeautifulSoup import BeautifulSoup
from bs4 import BeautifulSoup
from html2text import HTML2Text
from plone import api
from Products.CMFPlone.utils import safe_unicode
Expand Down Expand Up @@ -99,9 +99,9 @@ def _unsubscribe_info(self, receiver):
unsubscribe_link, unsubscribe_text
)
return {
"link": unsubscribe_link.decode("utf8"),
"text": unsubscribe_text.decode("utf8"),
"html": unsubscribe_markup.decode("utf8"),
"link": safe_unicode(unsubscribe_link),
"text": safe_unicode(unsubscribe_text),
"html": safe_unicode(unsubscribe_markup),
}

def _render_output_html(self):
Expand Down
2 changes: 1 addition & 1 deletion src/Products/EasyNewsletter/profiles/default/metadata.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='UTF-8'?>
<metadata>
<version>4003</version>
<version>4004</version>
<dependencies>
<dependency>profile-plone.app.dexterity:default</dependency>
</dependencies>
Expand Down
21 changes: 10 additions & 11 deletions src/Products/EasyNewsletter/upgrades/4001.zcml
Original file line number Diff line number Diff line change
Expand Up @@ -3,25 +3,24 @@
xmlns:zcml="http://namespaces.zope.org/zcml"
i18n_domain="Products.EasyNewsletter">

<gs:registerProfile
name="4001"
title="Products.EasyNewsletter (4001)"
directory="4001"
for="Products.CMFPlone.interfaces.IMigratingPloneSiteRoot"
description='Configuration for version 4001'
provides="Products.GenericSetup.interfaces.EXTENSION"
/>
<gs:registerProfile name="4001"
title="Products.EasyNewsletter (4001)"
directory="4001"
for="Products.CMFPlone.interfaces.IMigratingPloneSiteRoot"
description='Configuration for version 4001'
provides="Products.GenericSetup.interfaces.EXTENSION" />

<gs:upgradeSteps source="4000"
destination="4001"
profile="Products.EasyNewsletter:default">

<gs:upgradeStep title="Run Python upgrade steps" description="" handler=".4001.upgrade" /> -->
<gs:upgradeStep title="Run Python upgrade steps"
description=""
handler=".v4001.upgrade" />

<gs:upgradeDepends title="Run GS upgrade profile"
description=""
import_profile="Products.EasyNewsletter.upgrades:4001"
/>
import_profile="Products.EasyNewsletter.upgrades:4001" />

</gs:upgradeSteps>
</configure>
21 changes: 10 additions & 11 deletions src/Products/EasyNewsletter/upgrades/4002.zcml
Original file line number Diff line number Diff line change
Expand Up @@ -3,25 +3,24 @@
xmlns:zcml="http://namespaces.zope.org/zcml"
i18n_domain="Products.EasyNewsletter">

<gs:registerProfile
name="4002"
title="Products.EasyNewsletter (4002)"
directory="4002"
for="Products.CMFPlone.interfaces.IMigratingPloneSiteRoot"
description='Configuration for version 4002'
provides="Products.GenericSetup.interfaces.EXTENSION"
/>
<gs:registerProfile name="4002"
title="Products.EasyNewsletter (4002)"
directory="4002"
for="Products.CMFPlone.interfaces.IMigratingPloneSiteRoot"
description='Configuration for version 4002'
provides="Products.GenericSetup.interfaces.EXTENSION" />

<gs:upgradeSteps source="4001"
destination="4002"
profile="Products.EasyNewsletter:default">

<gs:upgradeStep title="Run Python upgrade steps" description="" handler=".4002.upgrade" /> -->
<gs:upgradeStep title="Run Python upgrade steps"
description=""
handler=".v4002.upgrade" />

<gs:upgradeDepends title="Run GS upgrade profile"
description=""
import_profile="Products.EasyNewsletter.upgrades:4002"
/>
import_profile="Products.EasyNewsletter.upgrades:4002" />

</gs:upgradeSteps>
</configure>
9 changes: 0 additions & 9 deletions src/Products/EasyNewsletter/upgrades/4003.py

This file was deleted.

21 changes: 10 additions & 11 deletions src/Products/EasyNewsletter/upgrades/4003.zcml
Original file line number Diff line number Diff line change
Expand Up @@ -3,25 +3,24 @@
xmlns:zcml="http://namespaces.zope.org/zcml"
i18n_domain="Products.EasyNewsletter">

<gs:registerProfile
name="4003"
title="Products.EasyNewsletter (4003)"
directory="4003"
for="Products.CMFPlone.interfaces.IMigratingPloneSiteRoot"
description='Configuration for version 4003'
provides="Products.GenericSetup.interfaces.EXTENSION"
/>
<gs:registerProfile name="4003"
title="Products.EasyNewsletter (4003)"
directory="4003"
for="Products.CMFPlone.interfaces.IMigratingPloneSiteRoot"
description='Configuration for version 4003'
provides="Products.GenericSetup.interfaces.EXTENSION" />

<gs:upgradeSteps source="4002"
destination="4003"
profile="Products.EasyNewsletter:default">

<gs:upgradeStep title="Run Python upgrade steps" description="" handler=".4003.upgrade" /> -->
<gs:upgradeStep title="Run Python upgrade steps"
description=""
handler=".v4003.upgrade" />

<gs:upgradeDepends title="Run GS upgrade profile"
description=""
import_profile="Products.EasyNewsletter.upgrades:4003"
/>
import_profile="Products.EasyNewsletter.upgrades:4003" />

</gs:upgradeSteps>
</configure>
26 changes: 26 additions & 0 deletions src/Products/EasyNewsletter/upgrades/4004.zcml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<configure xmlns="http://namespaces.zope.org/zope"
xmlns:gs="http://namespaces.zope.org/genericsetup"
xmlns:zcml="http://namespaces.zope.org/zcml"
i18n_domain="Products.EasyNewsletter">

<gs:registerProfile name="4004"
title="Products.EasyNewsletter (4004)"
directory="4004"
for="Products.CMFPlone.interfaces.IMigratingPloneSiteRoot"
description='Configuration for version 4004'
provides="Products.GenericSetup.interfaces.EXTENSION" />

<gs:upgradeSteps source="4003"
destination="4004"
profile="Products.EasyNewsletter:default">

<gs:upgradeStep title="Run Python upgrade steps"
description=""
handler=".v4004.upgrade" />

<gs:upgradeDepends title="Run GS upgrade profile"
description=""
import_profile="Products.EasyNewsletter.upgrades:4004" />

</gs:upgradeSteps>
</configure>
1 change: 1 addition & 0 deletions src/Products/EasyNewsletter/upgrades/configure.zcml
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@
<include file="4001.zcml" />
<include file="4002.zcml" />
<include file="4003.zcml" />
<include file="4004.zcml" />
</configure>
9 changes: 9 additions & 0 deletions src/Products/EasyNewsletter/upgrades/v4001.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# -*- coding: utf-8 -*-

from . import logger


def upgrade(context):
"""
"""
logger.info("Running Python upgrade steps")
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# from . import logger


def upgrade(setup_tool):
def upgrade(setup_tool=None):
"""
"""
# logger.info("Running Python upgrade steps")
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# from . import logger


def upgrade(setup_tool):
def upgrade(setup_tool=None):
"""
"""
# logger.info("Running Python upgrade steps")
14 changes: 14 additions & 0 deletions src/Products/EasyNewsletter/upgrades/v4004.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# -*- coding: utf-8 -*-

from . import logger
from plone import api


def upgrade(setup_tool=None):
"""
"""
logger.info("Set default aggregation_template on existing Collections")
brains = api.content.find(portal_type="Collection")
for brain in brains:
collection = brains.getObject()
collection.aggregation_template = "aggregation_generic_listing"
Loading

0 comments on commit c933338

Please sign in to comment.