From 8bb4ac0f8da1494efde63b0ef296132460274b3e Mon Sep 17 00:00:00 2001 From: Nowa Ammerlaan Date: Thu, 2 Jan 2025 15:14:31 +0100 Subject: [PATCH 1/2] type_hinting/utils.py: python3.13 removes collections.abc instead use _collections_abc for the alias Bug: https://github.com/python-rope/rope/issues/801 Signed-off-by: Nowa Ammerlaan --- rope/base/oi/type_hinting/utils.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/rope/base/oi/type_hinting/utils.py b/rope/base/oi/type_hinting/utils.py index b0a7aff97..2381c8472 100644 --- a/rope/base/oi/type_hinting/utils.py +++ b/rope/base/oi/type_hinting/utils.py @@ -1,6 +1,7 @@ from __future__ import annotations import logging +import sys from typing import TYPE_CHECKING, Optional, Union import rope.base.utils as base_utils @@ -81,7 +82,10 @@ def resolve_type( """ Find proper type object from its name. """ - deprecated_aliases = {"collections": "collections.abc"} + if sys.version_info < (3, 13): + deprecated_aliases = {"collections": "collections.abc"} + else: + deprecated_aliases = {"collections": "_collections_abc"} ret_type = None logging.debug("Looking for %s", type_name) if "." not in type_name: From 90e2451d2dc67923f63ba66ea6e35718537bff9e Mon Sep 17 00:00:00 2001 From: Nowa Ammerlaan Date: Thu, 2 Jan 2025 15:15:46 +0100 Subject: [PATCH 2/2] autoimport/sqlite.py: python3.13 iterdir() raises PermissionError The PermissionError is now raised earlier when we initialize the iterdir object instead of when we attempt to get the next() Closes: https://github.com/python-rope/rope/issues/801 Signed-off-by: Nowa Ammerlaan --- rope/contrib/autoimport/sqlite.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/rope/contrib/autoimport/sqlite.py b/rope/contrib/autoimport/sqlite.py index 54a6d03cf..f06fdaca3 100644 --- a/rope/contrib/autoimport/sqlite.py +++ b/rope/contrib/autoimport/sqlite.py @@ -569,14 +569,17 @@ def filter_folders(folder: Path) -> bool: return list(OrderedDict.fromkeys(folder_paths)) def _safe_iterdir(self, folder: Path): - dirs = folder.iterdir() - while True: - try: - yield next(dirs) - except PermissionError: - pass - except StopIteration: - break + try: + dirs = folder.iterdir() + while True: + try: + yield next(dirs) + except PermissionError: + pass + except StopIteration: + break + except PermissionError: + pass def _get_available_packages(self) -> List[Package]: packages: List[Package] = [