mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +00:00 
			
		
		
		
	gh-136021: Make type_params a required parameter for typing._eval_type (#136332)
				
					
				
			This commit is contained in:
		
							parent
							
								
									77a8bd29da
								
							
						
					
					
						commit
						c89f76e6c4
					
				
					 3 changed files with 4 additions and 32 deletions
				
			
		| 
						 | 
					@ -6309,31 +6309,6 @@ def foo(a: 'whatevers') -> {}:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class InternalsTests(BaseTestCase):
 | 
					class InternalsTests(BaseTestCase):
 | 
				
			||||||
    def test_deprecation_for_no_type_params_passed_to__evaluate(self):
 | 
					 | 
				
			||||||
        with self.assertWarnsRegex(
 | 
					 | 
				
			||||||
            DeprecationWarning,
 | 
					 | 
				
			||||||
            (
 | 
					 | 
				
			||||||
                "Failing to pass a value to the 'type_params' parameter "
 | 
					 | 
				
			||||||
                "of 'typing._eval_type' is deprecated"
 | 
					 | 
				
			||||||
            )
 | 
					 | 
				
			||||||
        ) as cm:
 | 
					 | 
				
			||||||
            self.assertEqual(typing._eval_type(list["int"], globals(), {}), list[int])
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        self.assertEqual(cm.filename, __file__)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        f = ForwardRef("int")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        with self.assertWarnsRegex(
 | 
					 | 
				
			||||||
            DeprecationWarning,
 | 
					 | 
				
			||||||
            (
 | 
					 | 
				
			||||||
                "Failing to pass a value to the 'type_params' parameter "
 | 
					 | 
				
			||||||
                "of 'typing.ForwardRef._evaluate' is deprecated"
 | 
					 | 
				
			||||||
            )
 | 
					 | 
				
			||||||
        ) as cm:
 | 
					 | 
				
			||||||
            self.assertIs(f._evaluate(globals(), {}, recursive_guard=frozenset()), int)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        self.assertEqual(cm.filename, __file__)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def test_collect_parameters(self):
 | 
					    def test_collect_parameters(self):
 | 
				
			||||||
        typing = import_helper.import_fresh_module("typing")
 | 
					        typing = import_helper.import_fresh_module("typing")
 | 
				
			||||||
        with self.assertWarnsRegex(
 | 
					        with self.assertWarnsRegex(
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -437,10 +437,7 @@ def __repr__(self):
 | 
				
			||||||
        return '<sentinel>'
 | 
					        return '<sentinel>'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
_sentinel = _Sentinel()
 | 
					def _eval_type(t, globalns, localns, type_params, *, recursive_guard=frozenset(),
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def _eval_type(t, globalns, localns, type_params=_sentinel, *, recursive_guard=frozenset(),
 | 
					 | 
				
			||||||
               format=None, owner=None):
 | 
					               format=None, owner=None):
 | 
				
			||||||
    """Evaluate all forward references in the given type t.
 | 
					    """Evaluate all forward references in the given type t.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -448,9 +445,6 @@ def _eval_type(t, globalns, localns, type_params=_sentinel, *, recursive_guard=f
 | 
				
			||||||
    recursive_guard is used to prevent infinite recursion with a recursive
 | 
					    recursive_guard is used to prevent infinite recursion with a recursive
 | 
				
			||||||
    ForwardRef.
 | 
					    ForwardRef.
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
    if type_params is _sentinel:
 | 
					 | 
				
			||||||
        _deprecation_warning_for_no_type_params_passed("typing._eval_type")
 | 
					 | 
				
			||||||
        type_params = ()
 | 
					 | 
				
			||||||
    if isinstance(t, _lazy_annotationlib.ForwardRef):
 | 
					    if isinstance(t, _lazy_annotationlib.ForwardRef):
 | 
				
			||||||
        # If the forward_ref has __forward_module__ set, evaluate() infers the globals
 | 
					        # If the forward_ref has __forward_module__ set, evaluate() infers the globals
 | 
				
			||||||
        # from the module, and it will probably pick better than the globals we have here.
 | 
					        # from the module, and it will probably pick better than the globals we have here.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,3 @@
 | 
				
			||||||
 | 
					Make ``type_params`` parameter required in :func:`!typing._eval_type` after
 | 
				
			||||||
 | 
					a deprecation period for not providing this parameter. Also remove the
 | 
				
			||||||
 | 
					:exc:`DeprecationWarning` for the old behavior.
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue