Skip to content

Commit

Permalink
[fc] Repository: plone.api
Browse files Browse the repository at this point in the history
Branch: refs/heads/master
Date: 2023-12-05T11:51:36-03:00
Author: Érico Andrei (ericof) <ericof@gmail.com>
Commit: plone/plone.api@ba7327f

Fix 'api.portal.translate' usage with country-specific language codes (Fixes #524)

Files changed:
A news/524.bugfix
M src/plone/api/portal.py
M src/plone/api/tests/test_portal.py
Repository: plone.api

Branch: refs/heads/master
Date: 2023-12-05T12:41:43-03:00
Author: Érico Andrei (ericof) <ericof@gmail.com>
Commit: plone/plone.api@3feed99

Fix isort

Files changed:
M src/plone/api/portal.py
Repository: plone.api

Branch: refs/heads/master
Date: 2023-12-05T18:55:07+01:00
Author: Maurits van Rees (mauritsvanrees) <maurits@vanrees.org>
Commit: plone/plone.api@91825e3

Merge pull request #525 from plone/issue-524-translate

Fix 'api.portal.translate' usage with country-specific language codes

Files changed:
A news/524.bugfix
M src/plone/api/portal.py
M src/plone/api/tests/test_portal.py
  • Loading branch information
mauritsvanrees committed Dec 5, 2023
1 parent 5699296 commit fe454a4
Showing 1 changed file with 41 additions and 9 deletions.
50 changes: 41 additions & 9 deletions last_commit.txt
Original file line number Diff line number Diff line change
@@ -1,19 +1,51 @@
Repository: plone.app.layout
Repository: plone.api


Branch: refs/heads/master
Date: 2023-12-05T10:07:00+01:00
Date: 2023-12-05T11:51:36-03:00
Author: Érico Andrei (ericof) <ericof@gmail.com>
Commit: https://github.com/plone/plone.api/commit/ba7327f412440c23bcbe5c6dc56eea4e581ad225

Fix 'api.portal.translate' usage with country-specific language codes (Fixes #524)

Files changed:
A news/524.bugfix
M src/plone/api/portal.py
M src/plone/api/tests/test_portal.py

b'diff --git a/news/524.bugfix b/news/524.bugfix\nnew file mode 100644\nindex 00000000..4e116b33\n--- /dev/null\n+++ b/news/524.bugfix\n@@ -0,0 +1 @@\n+Fix `api.portal.translate` usage with country-specific language codes [@ericof]\ndiff --git a/src/plone/api/portal.py b/src/plone/api/portal.py\nindex adef18d9..31c32632 100644\n--- a/src/plone/api/portal.py\n+++ b/src/plone/api/portal.py\n@@ -19,7 +19,7 @@\n from zope.interface.interfaces import IInterface\n \n import datetime as dtime\n-\n+import re\n \n logger = getLogger("plone.api.portal")\n \n@@ -419,6 +419,8 @@ def translate(msgid, domain="plone", lang=None):\n :Example: :ref:`portal-translate-example`\n """\n translation_service = get_tool("translation_service")\n+ if lang and re.match(r"\\D{2}-\\D{2}", lang):\n+ lang = f"{lang[:2]}_{lang[-2:].upper()}"\n query = {\n "msgid": msgid,\n "domain": domain,\ndiff --git a/src/plone/api/tests/test_portal.py b/src/plone/api/tests/test_portal.py\nindex 83f19886..a467ba1a 100644\n--- a/src/plone/api/tests/test_portal.py\n+++ b/src/plone/api/tests/test_portal.py\n@@ -886,3 +886,20 @@ def test_translate(self):\n ),\n "Avril",\n )\n+\n+ def test_translate_with_country_codes(self):\n+ """Test translation."""\n+ self.assertEqual(\n+ portal.translate(\n+ "Page",\n+ lang="pt-br",\n+ ),\n+ "P\xc3\xa1gina",\n+ )\n+ self.assertEqual(\n+ portal.translate(\n+ "Page",\n+ lang="pt_BR",\n+ ),\n+ "P\xc3\xa1gina",\n+ )\n'

Repository: plone.api


Branch: refs/heads/master
Date: 2023-12-05T12:41:43-03:00
Author: Érico Andrei (ericof) <ericof@gmail.com>
Commit: https://github.com/plone/plone.api/commit/3feed99ed1599ac64d3bf1212de2a6befe21af5b

Fix isort

Files changed:
M src/plone/api/portal.py

b'diff --git a/src/plone/api/portal.py b/src/plone/api/portal.py\nindex 31c32632..1aec4997 100644\n--- a/src/plone/api/portal.py\n+++ b/src/plone/api/portal.py\n@@ -21,6 +21,7 @@\n import datetime as dtime\n import re\n \n+\n logger = getLogger("plone.api.portal")\n \n try:\n'

Repository: plone.api


Branch: refs/heads/master
Date: 2023-12-05T18:55:07+01:00
Author: Maurits van Rees (mauritsvanrees) <maurits@vanrees.org>
Commit: https://github.com/plone/plone.app.layout/commit/ebbf718c2852e7eb479ba5879ee44fe6c4714146
Commit: https://github.com/plone/plone.api/commit/91825e34bd2703256a397efa6dc07ddd7d93d910

Fix KeyError `time` when missing workflow variables are added later.
Merge pull request #525 from plone/issue-524-translate

Fixes https://github.com/plone/plone.app.layout/issues/357.
Fix 'api.portal.translate' usage with country-specific language codes

Files changed:
A news/357.bugfix
M plone/app/layout/viewlets/content.py
M plone/app/layout/viewlets/content_history.pt
A news/524.bugfix
M src/plone/api/portal.py
M src/plone/api/tests/test_portal.py

b'diff --git a/news/357.bugfix b/news/357.bugfix\nnew file mode 100644\nindex 00000000..47e82fd2\n--- /dev/null\n+++ b/news/357.bugfix\n@@ -0,0 +1,3 @@\n+Fix KeyError `time` when missing workflow variables are added later.\n+Fixes `issue 357 <https://github.com/plone/plone.app.layout/issues/357>`_.\n+[maurits]\ndiff --git a/plone/app/layout/viewlets/content.py b/plone/app/layout/viewlets/content.py\nindex 28633600..efc8d4e4 100644\n--- a/plone/app/layout/viewlets/content.py\n+++ b/plone/app/layout/viewlets/content.py\n@@ -383,30 +383,43 @@ def workflowHistory(self, complete=True):\n review_history = []\n \n try:\n- # get total history\n+ # Get total history.\n+ # Note: expected variables like \'action\' may not exist:\n+ # the workflow may have started out without variables.\n review_history = workflow.getInfoFor(context, "review_history")\n \n if not complete:\n # filter out automatic transitions.\n- review_history = [r for r in review_history if r["action"]]\n+ review_history = [r for r in review_history if r.get("action")]\n else:\n review_history = list(review_history)\n \n portal_type = context.portal_type\n anon = _("label_anonymous_user", default="Anonymous User")\n-\n for r in review_history:\n r["type"] = "workflow"\n- r["transition_title"] = workflow.getTitleForTransitionOnType(\n- r["action"], portal_type\n- ) or _("Create")\n+\n+ # Get transition title.\n+ transition_title = ""\n+ action = r.get("action")\n+ if action:\n+ transition_title = workflow.getTitleForTransitionOnType(\n+ action, portal_type\n+ )\n+ if not transition_title:\n+ transition_title = _("Create")\n+ r["transition_title"] = transition_title\n+\n+ # Get state title.\n r["state_title"] = workflow.getTitleForStateOnType(\n- r["review_state"], portal_type\n+ r.get("review_state", ""), portal_type\n )\n- actorid = r["actor"]\n+\n+ # Get actor.\n+ actorid = r.get("actor")\n r["actorid"] = actorid\n if actorid is None:\n- # action performed by an anonymous user\n+ # action performed by an anonymous user, or unknown\n r["actor"] = {"username": anon, "fullname": anon}\n r["actor_home"] = ""\n else:\n@@ -509,7 +522,7 @@ def fullHistory(self):\n history = self.workflowHistory() + self.revisionHistory()\n if len(history) == 0:\n return None\n- history.sort(key=lambda x: x["time"], reverse=True)\n+ history.sort(key=lambda x: x.get("time", 0.0), reverse=True)\n return history\n \n def toLocalizedTime(self, time, long_format=None, time_only=None):\ndiff --git a/plone/app/layout/viewlets/content_history.pt b/plone/app/layout/viewlets/content_history.pt\nindex 831a9a90..71b4b735 100644\n--- a/plone/app/layout/viewlets/content_history.pt\n+++ b/plone/app/layout/viewlets/content_history.pt\n@@ -25,13 +25,13 @@\n <tal:historyitem define="\n rhComments item/comments|nothing;\n actor item/actor;\n- actor_name python:actor and actor.get(\'fullname\',\'username\') or item[\'actorid\'];\n+ actor_name python:actor and actor.get(\'fullname\',\'username\') or item.get(\'actorid\', \'\');\n actor_home item/actor_home;\n action item/transition_title;\n- action_id python:item[\'action\'] or item[\'review_state\'];\n+ action_id python:item.get(\'action\') or item.get(\'review_state\', \'\');\n effective item/effective_date|nothing;\n effectiveDate python:effective and view.toLocalizedTime(item[\'effective_date\'],long_format=True);\n- isVersion python:item[\'type\']==\'versioning\';\n+ isVersion python:item.get(\'type\', \'\')==\'versioning\';\n icons python:context.restrictedTraverse(\'@@iconresolver\');\n ">\n <tr class="historyRecord ${python:\'table-secondary\' if not isVersion else \'\'}">\n@@ -62,7 +62,7 @@\n ></span>\n </tal:actor>\n on\n- <span tal:content="python:view.toLocalizedTime(item[\'time\'],long_format=True)"\n+ <span tal:content="python:view.toLocalizedTime(item.get(\'time\', 0.0),long_format=True)"\n i18n:name="time"\n i18n:translate=""\n ></span>\n'
b'diff --git a/news/524.bugfix b/news/524.bugfix\nnew file mode 100644\nindex 00000000..4e116b33\n--- /dev/null\n+++ b/news/524.bugfix\n@@ -0,0 +1 @@\n+Fix `api.portal.translate` usage with country-specific language codes [@ericof]\ndiff --git a/src/plone/api/portal.py b/src/plone/api/portal.py\nindex adef18d9..1aec4997 100644\n--- a/src/plone/api/portal.py\n+++ b/src/plone/api/portal.py\n@@ -19,6 +19,7 @@\n from zope.interface.interfaces import IInterface\n \n import datetime as dtime\n+import re\n \n \n logger = getLogger("plone.api.portal")\n@@ -419,6 +420,8 @@ def translate(msgid, domain="plone", lang=None):\n :Example: :ref:`portal-translate-example`\n """\n translation_service = get_tool("translation_service")\n+ if lang and re.match(r"\\D{2}-\\D{2}", lang):\n+ lang = f"{lang[:2]}_{lang[-2:].upper()}"\n query = {\n "msgid": msgid,\n "domain": domain,\ndiff --git a/src/plone/api/tests/test_portal.py b/src/plone/api/tests/test_portal.py\nindex 83f19886..a467ba1a 100644\n--- a/src/plone/api/tests/test_portal.py\n+++ b/src/plone/api/tests/test_portal.py\n@@ -886,3 +886,20 @@ def test_translate(self):\n ),\n "Avril",\n )\n+\n+ def test_translate_with_country_codes(self):\n+ """Test translation."""\n+ self.assertEqual(\n+ portal.translate(\n+ "Page",\n+ lang="pt-br",\n+ ),\n+ "P\xc3\xa1gina",\n+ )\n+ self.assertEqual(\n+ portal.translate(\n+ "Page",\n+ lang="pt_BR",\n+ ),\n+ "P\xc3\xa1gina",\n+ )\n'

0 comments on commit fe454a4

Please sign in to comment.