@@ -939,48 +939,49 @@ def get_annotations(
939
939
if not eval_str :
940
940
return dict (ann )
941
941
942
- if isinstance (obj , type ):
943
- # class
944
- obj_globals = None
945
- module_name = getattr (obj , "__module__" , None )
946
- if module_name :
947
- module = sys .modules .get (module_name , None )
948
- if module :
949
- obj_globals = getattr (module , "__dict__" , None )
950
- obj_locals = dict (vars (obj ))
951
- unwrap = obj
952
- elif isinstance (obj , types .ModuleType ):
953
- # module
954
- obj_globals = getattr (obj , "__dict__" )
955
- obj_locals = None
956
- unwrap = None
957
- elif callable (obj ):
958
- # this includes types.Function, types.BuiltinFunctionType,
959
- # types.BuiltinMethodType, functools.partial, functools.singledispatch,
960
- # "class funclike" from Lib/test/test_inspect... on and on it goes.
961
- obj_globals = getattr (obj , "__globals__" , None )
962
- obj_locals = None
963
- unwrap = obj
964
- else :
965
- obj_globals = obj_locals = unwrap = None
966
-
967
- if unwrap is not None :
968
- while True :
969
- if hasattr (unwrap , "__wrapped__" ):
970
- unwrap = unwrap .__wrapped__
971
- continue
972
- if functools := sys .modules .get ("functools" ):
973
- if isinstance (unwrap , functools .partial ):
974
- unwrap = unwrap .func
942
+ if globals is None or locals is None :
943
+ if isinstance (obj , type ):
944
+ # class
945
+ obj_globals = None
946
+ module_name = getattr (obj , "__module__" , None )
947
+ if module_name :
948
+ module = sys .modules .get (module_name , None )
949
+ if module :
950
+ obj_globals = getattr (module , "__dict__" , None )
951
+ obj_locals = dict (vars (obj ))
952
+ unwrap = obj
953
+ elif isinstance (obj , types .ModuleType ):
954
+ # module
955
+ obj_globals = getattr (obj , "__dict__" )
956
+ obj_locals = None
957
+ unwrap = None
958
+ elif callable (obj ):
959
+ # this includes types.Function, types.BuiltinFunctionType,
960
+ # types.BuiltinMethodType, functools.partial, functools.singledispatch,
961
+ # "class funclike" from Lib/test/test_inspect... on and on it goes.
962
+ obj_globals = getattr (obj , "__globals__" , None )
963
+ obj_locals = None
964
+ unwrap = obj
965
+ else :
966
+ obj_globals = obj_locals = unwrap = None
967
+
968
+ if unwrap is not None :
969
+ while True :
970
+ if hasattr (unwrap , "__wrapped__" ):
971
+ unwrap = unwrap .__wrapped__
975
972
continue
976
- break
977
- if hasattr (unwrap , "__globals__" ):
978
- obj_globals = unwrap .__globals__
979
-
980
- if globals is None :
981
- globals = obj_globals
982
- if locals is None :
983
- locals = obj_locals
973
+ if functools := sys .modules .get ("functools" ):
974
+ if isinstance (unwrap , functools .partial ):
975
+ unwrap = unwrap .func
976
+ continue
977
+ break
978
+ if hasattr (unwrap , "__globals__" ):
979
+ obj_globals = unwrap .__globals__
980
+
981
+ if globals is None :
982
+ globals = obj_globals
983
+ if locals is None :
984
+ locals = obj_locals
984
985
985
986
# "Inject" type parameters into the local namespace
986
987
# (unless they are shadowed by assignments *in* the local namespace),
0 commit comments