Skip to content

Commit 54c98b1

Browse files
committed
Safe Annotations
1 parent a3b2445 commit 54c98b1

5 files changed

Lines changed: 43 additions & 35 deletions

File tree

src/rez/package_repository.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
PackageFamilyResourceT = TypeVar("PackageFamilyResourceT", bound=PackageFamilyResource)
2828

2929

30-
def get_package_repository_types():
30+
def get_package_repository_types() -> list[str]:
3131
"""Returns the available package repository implementations."""
3232
return plugin_manager.get_plugins('package_repository')
3333

@@ -116,7 +116,7 @@ def clear_caches(self) -> None:
116116
self.pool.clear_caches()
117117

118118
@cached_property
119-
def uid(self) -> tuple[str, str]:
119+
def uid(self) -> tuple:
120120
"""Returns a unique identifier for this repository.
121121
122122
This must be a persistent identifier, for example a filepath, or
@@ -435,7 +435,7 @@ def get_last_release_time(self, package_family_resource: PackageFamilyResourceT
435435
"""
436436
return 0
437437

438-
def make_resource_handle(self, resource_key: str, **variables) -> ResourceHandle:
438+
def make_resource_handle(self, resource_key: str, **variables: Any) -> ResourceHandle:
439439
"""Create a `ResourceHandle`
440440
441441
Nearly all `ResourceHandle` creation should go through here, because it
@@ -460,14 +460,14 @@ def make_resource_handle(self, resource_key: str, **variables) -> ResourceHandle
460460
return ResourceHandle(resource_key, variables)
461461

462462
@overload
463-
def get_resource(self, resource_key: type[ResourceT], **variables) -> ResourceT:
463+
def get_resource(self, resource_key: type[ResourceT], **variables: Any) -> ResourceT:
464464
pass
465465

466466
@overload
467-
def get_resource(self, resource_key: str, **variables) -> Resource:
467+
def get_resource(self, resource_key: str, **variables: Any) -> Resource:
468468
pass
469469

470-
def get_resource(self, resource_key: str | type[Resource], **variables) -> Resource:
470+
def get_resource(self, resource_key: str | type[Resource], **variables: Any) -> Resource:
471471
"""Get a resource.
472472
473473
Attempts to get and return a cached version of the resource if
@@ -528,7 +528,7 @@ def get_package_payload_path(self, package_name: str, package_version: str | Ver
528528
"""
529529
raise NotImplementedError
530530

531-
def _uid(self) -> tuple[str, str]:
531+
def _uid(self) -> tuple:
532532
"""Unique identifier implementation.
533533
534534
You may need to provide your own implementation. For example, consider
@@ -624,7 +624,7 @@ def are_same(self, path_1: str, path_2: str) -> bool:
624624
return (repo_1.uid == repo_2.uid)
625625

626626
def get_resource(self, resource_key: str, repository_type: str,
627-
location: str, **variables) -> Resource:
627+
location: str, **variables: Any) -> Resource:
628628
"""Get a resource.
629629
630630
Attempts to get and return a cached version of the resource if
@@ -671,7 +671,7 @@ def clear_caches(self) -> None:
671671
self.repositories.clear()
672672
self.pool.clear_caches()
673673

674-
def _get_repository(self, path: str, **repo_args) -> PackageRepository:
674+
def _get_repository(self, path: str, **repo_args: Any) -> PackageRepository:
675675
repo_type, location = path.split('@', 1)
676676
cls = plugin_manager.get_plugin_class('package_repository', repo_type, PackageRepository)
677677
repo = cls(location, self.pool, **repo_args)

src/rez/rex_bindings.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from __future__ import annotations
1414

1515
from rez.rex import ActionInterpreter
16-
from rez.version import VersionRange
16+
from rez.version import VersionRange, Version, VersionToken
1717
from rez.version import Requirement
1818

1919

@@ -57,7 +57,7 @@ class VersionBinding(Binding):
5757
>>> v.as_tuple():
5858
(1, 2, '3alpha')
5959
"""
60-
def __init__(self, version) -> None:
60+
def __init__(self, version: Version) -> None:
6161
super(VersionBinding, self).__init__()
6262
self.__version = version
6363

@@ -86,8 +86,8 @@ def __getitem__(self, i):
8686
except IndexError:
8787
return None
8888

89-
def __getitem(self, i):
90-
def _convert(t):
89+
def __getitem(self, i: int | slice):
90+
def _convert(t: VersionToken) -> str | int:
9191
s = str(t)
9292
if s.isdigit() and (s[0] != '0' or s == '0'):
9393
return int(s)

src/rez/utils/memcached.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ def __bool__(self) -> bool:
3939

4040
logger = config.debug_printer("memcache")
4141

42-
def __init__(self, servers, debug: bool = False) -> None:
42+
def __init__(self, servers: str | list[str], debug: bool = False) -> None:
4343
"""Create a memcached client.
4444
4545
Args:
@@ -58,7 +58,7 @@ def __bool__(self) -> bool:
5858
return bool(self.servers)
5959

6060
@property
61-
def client(self):
61+
def client(self) -> Client_:
6262
"""Get the native memcache client.
6363
6464
Returns:
@@ -68,7 +68,7 @@ def client(self):
6868
self._client = Client_(self.servers)
6969
return self._client
7070

71-
def test_servers(self):
71+
def test_servers(self) -> set[str]:
7272
"""Test that memcached servers are servicing requests.
7373
7474
Returns:
@@ -83,7 +83,7 @@ def test_servers(self):
8383
responders.add(server)
8484
return responders
8585

86-
def set(self, key, val, time: int=0, min_compress_len: int=0) -> None:
86+
def set(self, key: str, val: Any, time: int=0, min_compress_len: int=0) -> None:
8787
"""See memcache.Client."""
8888
if not self.servers:
8989
return
@@ -98,7 +98,7 @@ def set(self, key, val, time: int=0, min_compress_len: int=0) -> None:
9898
min_compress_len=min_compress_len)
9999
self.logger("SET: %s", key)
100100

101-
def get(self, key):
101+
def get(self, key: str) -> Any | Client._Miss:
102102
"""See memcache.Client.
103103
104104
Returns:
@@ -122,7 +122,7 @@ def get(self, key):
122122
self.logger("MISS: %s", key)
123123
return self.miss
124124

125-
def delete(self, key) -> None:
125+
def delete(self, key: str) -> None:
126126
"""See memcache.Client."""
127127
if self.servers:
128128
key = self._qualified_key(key)
@@ -149,7 +149,7 @@ def flush(self, hard: bool = False) -> None:
149149
tag = "flushed" + tag
150150
self.current = tag
151151

152-
def get_stats(self):
152+
def get_stats(self) -> list[tuple]:
153153
"""Get server statistics.
154154
155155
Returns:
@@ -167,7 +167,7 @@ def disconnect(self) -> None:
167167
self._client.disconnect_all()
168168
# print("Disconnected memcached client %s" % str(self))
169169

170-
def _qualified_key(self, key) -> str:
170+
def _qualified_key(self, key: str) -> str:
171171
"""
172172
Qualify cache key so that:
173173
* changes to schemas don't break compatibility (cache_interface_version)
@@ -181,15 +181,15 @@ def _qualified_key(self, key) -> str:
181181
key
182182
)
183183

184-
def _get_stats(self, stat_args=None):
184+
def _get_stats(self, stat_args=None) -> list[tuple]:
185185
return self.client.get_stats(stat_args=stat_args)
186186

187187
@classmethod
188-
def _key_hash(cls, key):
188+
def _key_hash(cls, key: str) -> str:
189189
return md5(key.encode("utf-8")).hexdigest()
190190

191191
@classmethod
192-
def _debug_key_hash(cls, key):
192+
def _debug_key_hash(cls, key: str) -> str:
193193
import re
194194
h = cls._key_hash(key)[:16]
195195
value = "%s:%s" % (h, key)
@@ -213,7 +213,7 @@ def acquire(self, servers, debug: bool = False) -> tuple[Client, tuple[tuple, bo
213213
self.clients[key] = [client, 1]
214214
return client, key
215215

216-
def release(self, key) -> None:
216+
def release(self, key: tuple[tuple, bool]) -> None:
217217
entry = self.clients.get(key)
218218
assert entry
219219

@@ -405,5 +405,5 @@ def forget() -> None:
405405

406406

407407
class DoNotCache(object):
408-
def __init__(self, result) -> None:
408+
def __init__(self, result: Any) -> None:
409409
self.result = result

src/rez/version/_version.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import copy
1111
import string
1212
import re
13-
from typing import cast, Any, Callable, Generic, Iterable, TypeVar, TYPE_CHECKING
13+
from typing import cast, Any, Callable, Generic, Iterable, TypeVar, TYPE_CHECKING, overload
1414

1515
if TYPE_CHECKING:
1616
from typing_extensions import Self
@@ -410,7 +410,15 @@ def as_tuple(self) -> tuple[str, ...]:
410410
def __len__(self) -> int:
411411
return len(self.tokens or [])
412412

413+
@overload
413414
def __getitem__(self, index: int) -> VersionToken:
415+
pass
416+
417+
@overload
418+
def __getitem__(self, index: slice) -> list[VersionToken]:
419+
pass
420+
421+
def __getitem__(self, index: int | slice) -> VersionToken | list[VersionToken]:
414422
try:
415423
return (self.tokens or [])[index]
416424
except IndexError:

src/rezplugins/package_repository/filesystem.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@
5959
format_version = 2
6060

6161

62-
def check_format_version(filename, data) -> None:
62+
def check_format_version(filename: str, data: dict[str, Any]) -> None:
6363
format_version_ = data.pop("format_version", None)
6464

6565
if format_version_ is not None:
@@ -165,7 +165,7 @@ def state_handle(self) -> int | None:
165165
return None
166166

167167
@property
168-
def base(self) -> str | None:
168+
def base(self) -> str:
169169
# Note: '_redirected_base' is a special attribute set by the build
170170
# process in order to perform pre-install/release package testing. See
171171
# `LocalBuildProcess._run_tests()`
@@ -497,7 +497,7 @@ class FileSystemPackageRepository(
497497
def name(cls) -> str:
498498
return "filesystem"
499499

500-
def __init__(self, location, resource_pool, disable_memcache=None,
500+
def __init__(self, location: str, resource_pool: ResourcePool, disable_memcache: bool | None = None,
501501
disable_pkg_ignore: bool = False) -> None:
502502
"""Create a filesystem package repository.
503503
@@ -562,7 +562,7 @@ def __init__(self, location, resource_pool, disable_memcache=None,
562562
)
563563
self._get_version_dirs = decorator2(self._get_version_dirs)
564564

565-
def _uid(self):
565+
def _uid(self) -> tuple:
566566
t = ["filesystem", self.location]
567567
if os.path.exists(self.location):
568568
st = os.stat(self.location)
@@ -720,7 +720,7 @@ def unignore_package(self, pkg_name: str, pkg_version: Version) -> int:
720720
else:
721721
return -1
722722

723-
def remove_package(self, pkg_name: str, pkg_version) -> bool:
723+
def remove_package(self, pkg_name: str, pkg_version: Version) -> bool:
724724
# ignore it first, so a partially deleted pkg is not visible
725725
i = self.ignore_package(pkg_name, pkg_version)
726726
if i == -1:
@@ -980,7 +980,7 @@ def _copy(self, **kwargs) -> Self:
980980
return repo_copy
981981

982982
@contextmanager
983-
def _lock_package(self, package_name: str, package_version: str | Version | None = None):
983+
def _lock_package(self, package_name: str, package_version: str | Version | None = None) -> Iterator[None]:
984984
from rez.vendor.lockfile import NotLocked
985985

986986
if _settings.file_lock_type == 'default':
@@ -1079,7 +1079,7 @@ def _get_version_dirs__key(self, root: str) -> str:
10791079

10801080
def _get_version_dirs(self, root: str) -> list[str]:
10811081
# Ignore a version if there is a .ignore<version> file next to it
1082-
def ignore_dir(name):
1082+
def ignore_dir(name: str) -> bool:
10831083
if self.disable_pkg_ignore:
10841084
return False
10851085
else:
@@ -1552,5 +1552,5 @@ def _delete_stale_build_tagfiles(self, family_path: str) -> None:
15521552
os.remove(tagfilepath)
15531553

15541554

1555-
def register_plugin():
1555+
def register_plugin() -> type[FileSystemPackageRepository]:
15561556
return FileSystemPackageRepository

0 commit comments

Comments
 (0)