mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +00:00 
			
		
		
		
	bpo-37915: Fix comparison between tzinfo objects and timezone objects (GH-15390)
https://bugs.python.org/issue37915 Automerge-Triggered-By: @pablogsal
This commit is contained in:
		
							parent
							
								
									8889627b53
								
							
						
					
					
						commit
						4be11c009a
					
				
					 3 changed files with 10 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -413,6 +413,11 @@ def test_offset_boundaries(self):
 | 
			
		|||
                with self.assertRaises(ValueError):
 | 
			
		||||
                    timezone(delta)
 | 
			
		||||
 | 
			
		||||
    def test_comparison_with_tzinfo(self):
 | 
			
		||||
        # Constructing tzinfo objects directly should not be done by users
 | 
			
		||||
        # and serves only to check the bug described in bpo-37915
 | 
			
		||||
        self.assertNotEqual(timezone.utc, tzinfo())
 | 
			
		||||
        self.assertNotEqual(timezone(timedelta(hours=1)), tzinfo())
 | 
			
		||||
 | 
			
		||||
#############################################################################
 | 
			
		||||
# Base class for testing a particular aspect of timedelta, time, date and
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
Fix a segmentation fault that appeared when comparing instances of
 | 
			
		||||
``datetime.timezone`` and ``datetime.tzinfo`` objects. Patch by Pablo
 | 
			
		||||
Galindo.
 | 
			
		||||
| 
						 | 
				
			
			@ -32,6 +32,7 @@
 | 
			
		|||
#define PyTZInfo_Check(op) PyObject_TypeCheck(op, &PyDateTime_TZInfoType)
 | 
			
		||||
#define PyTZInfo_CheckExact(op) (Py_TYPE(op) == &PyDateTime_TZInfoType)
 | 
			
		||||
 | 
			
		||||
#define PyTimezone_Check(op) PyObject_TypeCheck(op, &PyDateTime_TimeZoneType)
 | 
			
		||||
 | 
			
		||||
/*[clinic input]
 | 
			
		||||
module datetime
 | 
			
		||||
| 
						 | 
				
			
			@ -3745,7 +3746,7 @@ timezone_richcompare(PyDateTime_TimeZone *self,
 | 
			
		|||
{
 | 
			
		||||
    if (op != Py_EQ && op != Py_NE)
 | 
			
		||||
        Py_RETURN_NOTIMPLEMENTED;
 | 
			
		||||
    if (!PyTZInfo_Check(other)) {
 | 
			
		||||
    if (!PyTimezone_Check(other)) {
 | 
			
		||||
        Py_RETURN_NOTIMPLEMENTED;
 | 
			
		||||
    }
 | 
			
		||||
    return delta_richcompare(self->offset, other->offset, op);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue