From 45ef48ab5136dcede29433b743dcac7b7c4e5aa4 Mon Sep 17 00:00:00 2001 From: gforcada Date: Tue, 21 Jan 2025 16:20:17 +0100 Subject: [PATCH] [fc] Repository: plonetheme.barceloneta Branch: refs/heads/master Date: 2025-01-20T22:24:44+01:00 Author: Maurits van Rees (mauritsvanrees) Commit: https://github.com/plone/plonetheme.barceloneta/commit/39423e5ff2da2ca371387922190713bfed07cab1 Fix DeprecationWarnings. Files changed: A news/4090.bugfix M plonetheme/barceloneta/profiles/default/registry/tinymce.xml Repository: plonetheme.barceloneta Branch: refs/heads/master Date: 2025-01-21T16:20:17+01:00 Author: Gil Forcada Codinachs (gforcada) Commit: https://github.com/plone/plonetheme.barceloneta/commit/5aae816ada6f367ad281709d309743893d5fc5e3 Merge pull request #388 from plone/maurits-warnings Fix DeprecationWarnings. Files changed: A news/4090.bugfix M plonetheme/barceloneta/profiles/default/registry/tinymce.xml --- last_commit.txt | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/last_commit.txt b/last_commit.txt index d2fe356243..e10f73b9fc 100644 --- a/last_commit.txt +++ b/last_commit.txt @@ -1,40 +1,34 @@ -Repository: Products.PlonePAS +Repository: plonetheme.barceloneta Branch: refs/heads/master -Date: 2025-01-20T18:06:32+01:00 +Date: 2025-01-20T22:24:44+01:00 Author: Maurits van Rees (mauritsvanrees) -Commit: https://github.com/plone/Products.PlonePAS/commit/b39b85867a54b331e82b2a2cb61c364f9e867f59 +Commit: https://github.com/plone/plonetheme.barceloneta/commit/39423e5ff2da2ca371387922190713bfed07cab1 -Fix ResourceWarnings for unclosed files and fix DeprecationWarnings. +Fix DeprecationWarnings. Files changed: A news/4090.bugfix -M src/Products/PlonePAS/interfaces/plugins.py -M src/Products/PlonePAS/pas.py -M src/Products/PlonePAS/tests/test_membershiptool.py -M src/Products/PlonePAS/utils.py +M plonetheme/barceloneta/profiles/default/registry/tinymce.xml -b'diff --git a/news/4090.bugfix b/news/4090.bugfix\nnew file mode 100644\nindex 00000000..6e56224f\n--- /dev/null\n+++ b/news/4090.bugfix\n@@ -0,0 +1 @@\n+Fix ResourceWarnings for unclosed files and fix DeprecationWarnings. [maurits]\ndiff --git a/src/Products/PlonePAS/interfaces/plugins.py b/src/Products/PlonePAS/interfaces/plugins.py\nindex cdecb9b1..4a8d83a5 100644\n--- a/src/Products/PlonePAS/interfaces/plugins.py\n+++ b/src/Products/PlonePAS/interfaces/plugins.py\n@@ -42,7 +42,7 @@ def getRolesInContext(user, object):\n o Include *both* local roles assigned directly to us *and* those\n assigned to our groups.\n \n- o Ripped off from AccessControl.User.BasicUser, which provides\n+ o Ripped off from AccessControl.users.BasicUser, which provides\n no other extension mechanism. :(\n """\n \ndiff --git a/src/Products/PlonePAS/pas.py b/src/Products/PlonePAS/pas.py\nindex b960f073..07a93325 100644\n--- a/src/Products/PlonePAS/pas.py\n+++ b/src/Products/PlonePAS/pas.py\n@@ -405,7 +405,7 @@ def _getAllLocalRoles(self, context):\n \n \n def authenticate(self, name, password, request):\n- """See AccessControl.User.BasicUserFolder.authenticate\n+ """See AccessControl.userfolder:BasicUserFolder.authenticate\n \n Products.PluggableAuthService.PluggableAuthService does not provide this\n method, BasicUserFolder documents it as "Private UserFolder object\ndiff --git a/src/Products/PlonePAS/tests/test_membershiptool.py b/src/Products/PlonePAS/tests/test_membershiptool.py\nindex c380e73d..52101924 100644\n--- a/src/Products/PlonePAS/tests/test_membershiptool.py\n+++ b/src/Products/PlonePAS/tests/test_membershiptool.py\n@@ -1,11 +1,12 @@\n from AccessControl import getSecurityManager\n from AccessControl import Unauthorized\n-from AccessControl.User import nobody\n+from AccessControl.users import nobody\n from Acquisition import aq_base\n from Acquisition import aq_parent\n from DateTime import DateTime\n from io import BytesIO\n from OFS.Image import Image\n+from pathlib import Path\n from plone.app.testing import login\n from plone.app.testing import logout\n from plone.app.testing import PLONE_SITE_ID\n@@ -28,7 +29,6 @@\n from zope.component import adapter\n from zope.component import getGlobalSiteManager\n \n-import os\n import unittest\n \n \n@@ -205,10 +205,10 @@ def addMember(self, username, fullname, email, roles, last_login_time):\n )\n \n def makeRealImage(self):\n+ # Note: the caller is responsible for calling \'close\' in this image after use.\n import Products.PlonePAS as ppas\n \n- pas_path = os.path.dirname(ppas.__file__)\n- path = os.path.join(pas_path, "tool.gif")\n+ path = Path(ppas.__file__).parent / "tool.gif"\n image = open(path, "rb")\n image_upload = dummy.FileUpload(dummy.FieldStorage(image))\n return image_upload\n@@ -242,6 +242,7 @@ def testChangeOwnMemberPortrait(self):\n self.assertEqual(\n self.membership.getPersonalPortrait(TEST_USER_ID).meta_type, "Image"\n )\n+ image.close()\n \n def testChangeOwnMemberPortraitWithEmailUsers(self):\n member_id = "member2@host.com"\n@@ -264,6 +265,7 @@ def testChangeOwnMemberPortraitWithEmailUsers(self):\n self.assertEqual(\n self.membership.getPersonalPortrait(member_id).meta_type, "Image"\n )\n+ image.close()\n \n def testCannotChangeOtherMemberPortrait(self):\n # A normal member should not be able to change the portrait of\n@@ -274,6 +276,7 @@ def testCannotChangeOtherMemberPortrait(self):\n self.assertRaises(\n Unauthorized, self.membership.changeMemberPortrait, image, "joe"\n )\n+ image.close()\n \n def testChangeMemberPortraitAsManager(self):\n # Managers should be able to change the portrait of another\n@@ -285,6 +288,7 @@ def testChangeMemberPortraitAsManager(self):\n self.membership.changeMemberPortrait(image, "joe")\n self.assertEqual(self.membership.getPersonalPortrait("joe").getId(), "joe")\n self.assertEqual(self.membership.getPersonalPortrait("joe").meta_type, "Image")\n+ image.close()\n \n def testDeleteOwnPersonalPortrait(self):\n # Should delete the portrait image\n@@ -297,6 +301,7 @@ def testDeleteOwnPersonalPortrait(self):\n self.assertEqual(\n self.membership.getPersonalPortrait(TEST_USER_ID).getId(), "defaultUser.png"\n )\n+ image.close()\n \n def testCannotDeleteOtherPersonalPortrait(self):\n # A normal member should not be able to delete the portrait of\n@@ -307,6 +312,7 @@ def testCannotDeleteOtherPersonalPortrait(self):\n self.membership.changeMemberPortrait(image, "joe")\n setRoles(self.portal, TEST_USER_ID, ["Member"])\n self.assertRaises(Unauthorized, self.membership.deletePersonalPortrait, "joe")\n+ image.close()\n \n def testDeleteOtherPersonalPortraitAsManager(self):\n # Managers should be able to change the portrait of another\n@@ -319,6 +325,7 @@ def testDeleteOtherPersonalPortraitAsManager(self):\n self.assertEqual(\n self.membership.getPersonalPortrait("joe").getId(), "defaultUser.png"\n )\n+ image.close()\n \n def testGetPersonalPortraitWithoutPassingId(self):\n # Should return the logged in users portrait if no id is given\n@@ -326,6 +333,7 @@ def testGetPersonalPortraitWithoutPassingId(self):\n self.membership.changeMemberPortrait(image, TEST_USER_ID)\n self.assertEqual(self.membership.getPersonalPortrait().getId(), TEST_USER_ID)\n self.assertEqual(self.membership.getPersonalPortrait().meta_type, "Image")\n+ image.close()\n \n def testPortraitForNonStandardUserId(self):\n # Some characters in a user id can give problems for getting\n@@ -346,6 +354,7 @@ def testPortraitForNonStandardUserId(self):\n self.membership.changeMemberPortrait(image, user_id)\n self.assertEqual(self.membership.getPersonalPortrait().getId(), safe_id)\n self.assertEqual(self.membership.getPersonalPortrait().meta_type, "Image")\n+ image.close()\n \n # Other users should be able to see your portrait.\n login(self.portal, TEST_USER_NAME)\n@@ -372,6 +381,7 @@ def testPortraitForNonStandardUserId(self):\n self.assertEqual(\n self.membership.getPersonalPortrait(user_id).getId(), "defaultUser.png"\n )\n+ manager_image.close()\n \n def testListMembers(self):\n # Should return the members list\n@@ -670,8 +680,10 @@ def testGetBadMembers(self):\n self.portal.portal_memberdata._setPortrait(empty_file, TEST_USER_ID)\n self.assertEqual(self.membership.getBadMembers(), [])\n # And a good image\n- self.membership.changeMemberPortrait(self.makeRealImage(), TEST_USER_ID)\n+ image = self.makeRealImage()\n+ self.membership.changeMemberPortrait(image, TEST_USER_ID)\n self.assertEqual(self.membership.getBadMembers(), [])\n+ image.close()\n \n def test_credentials_updated_event(self):\n events_fired = []\ndiff --git a/src/Products/PlonePAS/utils.py b/src/Products/PlonePAS/utils.py\nindex d3987e2d..3a715597 100644\n--- a/src/Products/PlonePAS/utils.py\n+++ b/src/Products/PlonePAS/utils.py\n@@ -49,7 +49,7 @@ def scale_image(image_file, max_size=None, default_format=None):\n from an input file\n \n >>> from Products.PlonePAS import config\n- >>> import os\n+ >>> from pathlib import Path\n >>> from io import BytesIO\n >>> from Products.PlonePAS.utils import scale_image\n >>> from PIL import Image\n@@ -57,12 +57,11 @@ def scale_image(image_file, max_size=None, default_format=None):\n Let\'s make a couple test images and see how it works (all are\n 100x100), the gif is paletted mode::\n \n- >>> pas_path = os.path.dirname(config.__file__)\n- >>> pjoin = os.path.join\n- >>> path = pjoin(pas_path, \'tests\', \'images\')\n- >>> orig_jpg = open(pjoin(path, \'test.jpg\'), \'rb\')\n- >>> orig_png = open(pjoin(path, \'test.png\'), \'rb\')\n- >>> orig_gif = open(pjoin(path, \'test.gif\'), \'rb\')\n+ >>> pas_path = Path(config.__file__).parent\n+ >>> path = pas_path / \'tests\' / \'images\'\n+ >>> orig_jpg = (path / \'test.jpg\').open(\'rb\')\n+ >>> orig_png = (path / \'test.png\').open(\'rb\')\n+ >>> orig_gif = (path / \'test.gif\').open(\'rb\')\n \n We\'ll also make some evil non-images, including one which\n masquerades as a jpeg (which would trick OFS.Image)::\n@@ -133,9 +132,9 @@ def scale_image(image_file, max_size=None, default_format=None):\n >>> img.size\n (50, 50)\n \n- orig_jpg.close()\n- orig_png.close()\n- orig_gif.close()\n+ >>> orig_jpg.close()\n+ >>> orig_png.close()\n+ >>> orig_gif.close()\n \n """\n from PIL import Image\n' +b'diff --git a/news/4090.bugfix b/news/4090.bugfix\nnew file mode 100644\nindex 00000000..8528aefb\n--- /dev/null\n+++ b/news/4090.bugfix\n@@ -0,0 +1 @@\n+Fix DeprecationWarnings. [maurits]\ndiff --git a/plonetheme/barceloneta/profiles/default/registry/tinymce.xml b/plonetheme/barceloneta/profiles/default/registry/tinymce.xml\nindex f67580d1..d865bddc 100644\n--- a/plonetheme/barceloneta/profiles/default/registry/tinymce.xml\n+++ b/plonetheme/barceloneta/profiles/default/registry/tinymce.xml\n@@ -1,6 +1,6 @@\n \n \n- \n \n' -Repository: Products.PlonePAS +Repository: plonetheme.barceloneta Branch: refs/heads/master -Date: 2025-01-21T15:55:04+01:00 +Date: 2025-01-21T16:20:17+01:00 Author: Gil Forcada Codinachs (gforcada) -Commit: https://github.com/plone/Products.PlonePAS/commit/42e9f1fe9a1de37059afd478c13c5f6f8c5a3fe2 +Commit: https://github.com/plone/plonetheme.barceloneta/commit/5aae816ada6f367ad281709d309743893d5fc5e3 -Merge pull request #97 from plone/maurits-warnings +Merge pull request #388 from plone/maurits-warnings -Fix ResourceWarnings for unclosed files and fix DeprecationWarnings. +Fix DeprecationWarnings. Files changed: A news/4090.bugfix -M src/Products/PlonePAS/interfaces/plugins.py -M src/Products/PlonePAS/pas.py -M src/Products/PlonePAS/tests/test_membershiptool.py -M src/Products/PlonePAS/utils.py +M plonetheme/barceloneta/profiles/default/registry/tinymce.xml -b'diff --git a/news/4090.bugfix b/news/4090.bugfix\nnew file mode 100644\nindex 00000000..6e56224f\n--- /dev/null\n+++ b/news/4090.bugfix\n@@ -0,0 +1 @@\n+Fix ResourceWarnings for unclosed files and fix DeprecationWarnings. [maurits]\ndiff --git a/src/Products/PlonePAS/interfaces/plugins.py b/src/Products/PlonePAS/interfaces/plugins.py\nindex cdecb9b1..4a8d83a5 100644\n--- a/src/Products/PlonePAS/interfaces/plugins.py\n+++ b/src/Products/PlonePAS/interfaces/plugins.py\n@@ -42,7 +42,7 @@ def getRolesInContext(user, object):\n o Include *both* local roles assigned directly to us *and* those\n assigned to our groups.\n \n- o Ripped off from AccessControl.User.BasicUser, which provides\n+ o Ripped off from AccessControl.users.BasicUser, which provides\n no other extension mechanism. :(\n """\n \ndiff --git a/src/Products/PlonePAS/pas.py b/src/Products/PlonePAS/pas.py\nindex b960f073..07a93325 100644\n--- a/src/Products/PlonePAS/pas.py\n+++ b/src/Products/PlonePAS/pas.py\n@@ -405,7 +405,7 @@ def _getAllLocalRoles(self, context):\n \n \n def authenticate(self, name, password, request):\n- """See AccessControl.User.BasicUserFolder.authenticate\n+ """See AccessControl.userfolder:BasicUserFolder.authenticate\n \n Products.PluggableAuthService.PluggableAuthService does not provide this\n method, BasicUserFolder documents it as "Private UserFolder object\ndiff --git a/src/Products/PlonePAS/tests/test_membershiptool.py b/src/Products/PlonePAS/tests/test_membershiptool.py\nindex c380e73d..52101924 100644\n--- a/src/Products/PlonePAS/tests/test_membershiptool.py\n+++ b/src/Products/PlonePAS/tests/test_membershiptool.py\n@@ -1,11 +1,12 @@\n from AccessControl import getSecurityManager\n from AccessControl import Unauthorized\n-from AccessControl.User import nobody\n+from AccessControl.users import nobody\n from Acquisition import aq_base\n from Acquisition import aq_parent\n from DateTime import DateTime\n from io import BytesIO\n from OFS.Image import Image\n+from pathlib import Path\n from plone.app.testing import login\n from plone.app.testing import logout\n from plone.app.testing import PLONE_SITE_ID\n@@ -28,7 +29,6 @@\n from zope.component import adapter\n from zope.component import getGlobalSiteManager\n \n-import os\n import unittest\n \n \n@@ -205,10 +205,10 @@ def addMember(self, username, fullname, email, roles, last_login_time):\n )\n \n def makeRealImage(self):\n+ # Note: the caller is responsible for calling \'close\' in this image after use.\n import Products.PlonePAS as ppas\n \n- pas_path = os.path.dirname(ppas.__file__)\n- path = os.path.join(pas_path, "tool.gif")\n+ path = Path(ppas.__file__).parent / "tool.gif"\n image = open(path, "rb")\n image_upload = dummy.FileUpload(dummy.FieldStorage(image))\n return image_upload\n@@ -242,6 +242,7 @@ def testChangeOwnMemberPortrait(self):\n self.assertEqual(\n self.membership.getPersonalPortrait(TEST_USER_ID).meta_type, "Image"\n )\n+ image.close()\n \n def testChangeOwnMemberPortraitWithEmailUsers(self):\n member_id = "member2@host.com"\n@@ -264,6 +265,7 @@ def testChangeOwnMemberPortraitWithEmailUsers(self):\n self.assertEqual(\n self.membership.getPersonalPortrait(member_id).meta_type, "Image"\n )\n+ image.close()\n \n def testCannotChangeOtherMemberPortrait(self):\n # A normal member should not be able to change the portrait of\n@@ -274,6 +276,7 @@ def testCannotChangeOtherMemberPortrait(self):\n self.assertRaises(\n Unauthorized, self.membership.changeMemberPortrait, image, "joe"\n )\n+ image.close()\n \n def testChangeMemberPortraitAsManager(self):\n # Managers should be able to change the portrait of another\n@@ -285,6 +288,7 @@ def testChangeMemberPortraitAsManager(self):\n self.membership.changeMemberPortrait(image, "joe")\n self.assertEqual(self.membership.getPersonalPortrait("joe").getId(), "joe")\n self.assertEqual(self.membership.getPersonalPortrait("joe").meta_type, "Image")\n+ image.close()\n \n def testDeleteOwnPersonalPortrait(self):\n # Should delete the portrait image\n@@ -297,6 +301,7 @@ def testDeleteOwnPersonalPortrait(self):\n self.assertEqual(\n self.membership.getPersonalPortrait(TEST_USER_ID).getId(), "defaultUser.png"\n )\n+ image.close()\n \n def testCannotDeleteOtherPersonalPortrait(self):\n # A normal member should not be able to delete the portrait of\n@@ -307,6 +312,7 @@ def testCannotDeleteOtherPersonalPortrait(self):\n self.membership.changeMemberPortrait(image, "joe")\n setRoles(self.portal, TEST_USER_ID, ["Member"])\n self.assertRaises(Unauthorized, self.membership.deletePersonalPortrait, "joe")\n+ image.close()\n \n def testDeleteOtherPersonalPortraitAsManager(self):\n # Managers should be able to change the portrait of another\n@@ -319,6 +325,7 @@ def testDeleteOtherPersonalPortraitAsManager(self):\n self.assertEqual(\n self.membership.getPersonalPortrait("joe").getId(), "defaultUser.png"\n )\n+ image.close()\n \n def testGetPersonalPortraitWithoutPassingId(self):\n # Should return the logged in users portrait if no id is given\n@@ -326,6 +333,7 @@ def testGetPersonalPortraitWithoutPassingId(self):\n self.membership.changeMemberPortrait(image, TEST_USER_ID)\n self.assertEqual(self.membership.getPersonalPortrait().getId(), TEST_USER_ID)\n self.assertEqual(self.membership.getPersonalPortrait().meta_type, "Image")\n+ image.close()\n \n def testPortraitForNonStandardUserId(self):\n # Some characters in a user id can give problems for getting\n@@ -346,6 +354,7 @@ def testPortraitForNonStandardUserId(self):\n self.membership.changeMemberPortrait(image, user_id)\n self.assertEqual(self.membership.getPersonalPortrait().getId(), safe_id)\n self.assertEqual(self.membership.getPersonalPortrait().meta_type, "Image")\n+ image.close()\n \n # Other users should be able to see your portrait.\n login(self.portal, TEST_USER_NAME)\n@@ -372,6 +381,7 @@ def testPortraitForNonStandardUserId(self):\n self.assertEqual(\n self.membership.getPersonalPortrait(user_id).getId(), "defaultUser.png"\n )\n+ manager_image.close()\n \n def testListMembers(self):\n # Should return the members list\n@@ -670,8 +680,10 @@ def testGetBadMembers(self):\n self.portal.portal_memberdata._setPortrait(empty_file, TEST_USER_ID)\n self.assertEqual(self.membership.getBadMembers(), [])\n # And a good image\n- self.membership.changeMemberPortrait(self.makeRealImage(), TEST_USER_ID)\n+ image = self.makeRealImage()\n+ self.membership.changeMemberPortrait(image, TEST_USER_ID)\n self.assertEqual(self.membership.getBadMembers(), [])\n+ image.close()\n \n def test_credentials_updated_event(self):\n events_fired = []\ndiff --git a/src/Products/PlonePAS/utils.py b/src/Products/PlonePAS/utils.py\nindex d3987e2d..3a715597 100644\n--- a/src/Products/PlonePAS/utils.py\n+++ b/src/Products/PlonePAS/utils.py\n@@ -49,7 +49,7 @@ def scale_image(image_file, max_size=None, default_format=None):\n from an input file\n \n >>> from Products.PlonePAS import config\n- >>> import os\n+ >>> from pathlib import Path\n >>> from io import BytesIO\n >>> from Products.PlonePAS.utils import scale_image\n >>> from PIL import Image\n@@ -57,12 +57,11 @@ def scale_image(image_file, max_size=None, default_format=None):\n Let\'s make a couple test images and see how it works (all are\n 100x100), the gif is paletted mode::\n \n- >>> pas_path = os.path.dirname(config.__file__)\n- >>> pjoin = os.path.join\n- >>> path = pjoin(pas_path, \'tests\', \'images\')\n- >>> orig_jpg = open(pjoin(path, \'test.jpg\'), \'rb\')\n- >>> orig_png = open(pjoin(path, \'test.png\'), \'rb\')\n- >>> orig_gif = open(pjoin(path, \'test.gif\'), \'rb\')\n+ >>> pas_path = Path(config.__file__).parent\n+ >>> path = pas_path / \'tests\' / \'images\'\n+ >>> orig_jpg = (path / \'test.jpg\').open(\'rb\')\n+ >>> orig_png = (path / \'test.png\').open(\'rb\')\n+ >>> orig_gif = (path / \'test.gif\').open(\'rb\')\n \n We\'ll also make some evil non-images, including one which\n masquerades as a jpeg (which would trick OFS.Image)::\n@@ -133,9 +132,9 @@ def scale_image(image_file, max_size=None, default_format=None):\n >>> img.size\n (50, 50)\n \n- orig_jpg.close()\n- orig_png.close()\n- orig_gif.close()\n+ >>> orig_jpg.close()\n+ >>> orig_png.close()\n+ >>> orig_gif.close()\n \n """\n from PIL import Image\n' +b'diff --git a/news/4090.bugfix b/news/4090.bugfix\nnew file mode 100644\nindex 00000000..8528aefb\n--- /dev/null\n+++ b/news/4090.bugfix\n@@ -0,0 +1 @@\n+Fix DeprecationWarnings. [maurits]\ndiff --git a/plonetheme/barceloneta/profiles/default/registry/tinymce.xml b/plonetheme/barceloneta/profiles/default/registry/tinymce.xml\nindex f67580d1..d865bddc 100644\n--- a/plonetheme/barceloneta/profiles/default/registry/tinymce.xml\n+++ b/plonetheme/barceloneta/profiles/default/registry/tinymce.xml\n@@ -1,6 +1,6 @@\n \n \n- \n \n'