99from itertools import repeat
1010from contextlib import suppress
1111from typing import Any , TypeVar
12+ from operator import methodcaller
1213from typing_extensions import Annotated
1314from dataclasses import field , dataclass
1415from inspect import Parameter , Signature , isclass
@@ -95,29 +96,10 @@ class Option:
9596 calls : list [methodcaller ] = field (default_factory = list )
9697
9798
98- class methodcaller :
99- __slots__ = ("_name" , "_args" , "_kwargs" )
100-
101- def __init__ (self , name , / , * args , ** kwargs ):
102- self ._name = name
103- if not isinstance (self ._name , str ):
104- raise TypeError ("method name must be a string" )
105- self ._args = args
106- self ._kwargs = kwargs
107-
108- def __call__ (self , obj ):
109- return getattr (obj , self ._name )(* self ._args , ** self ._kwargs )
110-
111- def __eq__ (self , value : object , / ) -> bool :
112- return isinstance (value , methodcaller ) and all (
113- getattr (self , attr ) == getattr (value , attr ) for attr in self .__slots__
114- )
115-
116-
11799def compile_dependency (statement : ExecutableReturnsRows , option : Option ) -> Any :
118100 from . import async_scoped_session
119101
120- async def dependency (* , __session : async_scoped_session , ** params : Any ):
102+ async def __dependency (* , __session : async_scoped_session , ** params : Any ):
121103 if option .stream :
122104 result = await __session .stream (statement , params )
123105 else :
@@ -137,7 +119,7 @@ async def dependency(*, __session: async_scoped_session, **params: Any):
137119
138120 return result
139121
140- dependency .__signature__ = Signature (
122+ __dependency .__signature__ = Signature (
141123 [
142124 Parameter (
143125 "__session" , Parameter .KEYWORD_ONLY , annotation = async_scoped_session
@@ -150,7 +132,7 @@ async def dependency(*, __session: async_scoped_session, **params: Any):
150132 ]
151133 )
152134
153- return Depends (dependency )
135+ return Depends (__dependency )
154136
155137
156138def generic_issubclass (scls : Any , cls : Any ) -> Any :
@@ -239,16 +221,16 @@ def is_editable(plugin: Plugin) -> bool:
239221 with suppress (PackageNotFoundError ):
240222 dist = distribution (plugin .name .replace ("_" , "-" ))
241223
242- if not ( dist or plugin .module .__file__ is None ) :
224+ if not dist and plugin .module .__file__ :
243225 path = Path (plugin .module .__file__ )
244226 for name in pkgs .get (plugin .module_name .split ("." )[0 ], ()):
245227 dist = distribution (name )
246- if path in map ( methodcaller ( " locate" ), dist .files or ()):
228+ if path in ( file . locate () for file in dist .files or ()):
247229 break
248230 else :
249231 dist = None
250232
251- if dist is None :
233+ if not dist :
252234 return True
253235
254236 # https://github.com/pdm-project/pdm/blob/fee1e6bffd7de30315e2134e19f9a6f58e15867c/src/pdm/utils.py#L361-L374
@@ -263,12 +245,10 @@ def is_editable(plugin: Plugin) -> bool:
263245 return direct_url_data .get ("dir_info" , {}).get ("editable" , False )
264246
265247
266- def get_subclasses (cls : type [_T ]) -> set [type [_T ]]:
267- subclasses = set ()
248+ def get_subclasses (cls : type [_T ]) -> Generator [type [_T ], None , None ]:
249+ yield from cls . __subclasses__ ()
268250 for subclass in cls .__subclasses__ ():
269- subclasses .add (subclass )
270- subclasses .update (get_subclasses (subclass ))
271- return subclasses
251+ yield from get_subclasses (subclass )
272252
273253
274254if sys .version_info >= (3 , 10 ):
0 commit comments