mirror of
				https://github.com/psycopg/psycopg2.git
				synced 2025-11-04 01:37:31 +03:00 
			
		
		
		
	Merge branch 'fix-562'
This commit is contained in:
		
						commit
						324e56cfa3
					
				
							
								
								
									
										2
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								NEWS
									
									
									
									
									
								
							| 
						 | 
				
			
			@ -21,6 +21,8 @@ What's new in psycopg 2.7.2
 | 
			
		|||
- Fixed `~psycopg2.extras.ReplicationCursor.consume_stream()`
 | 
			
		||||
  *keepalive_interval* argument (:ticket:`#547`).
 | 
			
		||||
- Fixed random `!SystemError` upon receiving abort signal (:ticket:`#551`).
 | 
			
		||||
- Added `~psycopg2.extras.Json` `!prepare()` method to consider connection
 | 
			
		||||
  params when adapting (:ticket:`#562`).
 | 
			
		||||
- `~psycopg2.errorcodes` map updated to PostgreSQL 10 beta 1.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -66,6 +66,7 @@ class Json(object):
 | 
			
		|||
    """
 | 
			
		||||
    def __init__(self, adapted, dumps=None):
 | 
			
		||||
        self.adapted = adapted
 | 
			
		||||
        self._conn = None
 | 
			
		||||
 | 
			
		||||
        if dumps is not None:
 | 
			
		||||
            self._dumps = dumps
 | 
			
		||||
| 
						 | 
				
			
			@ -93,9 +94,15 @@ class Json(object):
 | 
			
		|||
                "json module not available: "
 | 
			
		||||
                "you should provide a dumps function")
 | 
			
		||||
 | 
			
		||||
    def prepare(self, conn):
 | 
			
		||||
        self._conn = conn
 | 
			
		||||
 | 
			
		||||
    def getquoted(self):
 | 
			
		||||
        s = self.dumps(self.adapted)
 | 
			
		||||
        return QuotedString(s).getquoted()
 | 
			
		||||
        qs = QuotedString(s)
 | 
			
		||||
        if self._conn is not None:
 | 
			
		||||
            qs.prepare(self._conn)
 | 
			
		||||
        return qs.getquoted()
 | 
			
		||||
 | 
			
		||||
    if sys.version_info < (3,):
 | 
			
		||||
        def __str__(self):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1084,6 +1084,24 @@ class JsonTestCase(ConnectingTestCase):
 | 
			
		|||
        self.assert_(s.startswith("'"))
 | 
			
		||||
        self.assert_(s.endswith("'"))
 | 
			
		||||
 | 
			
		||||
    @skip_if_no_json_module
 | 
			
		||||
    def test_scs(self):
 | 
			
		||||
        cnn_on = self.connect(options="-c standard_conforming_strings=on")
 | 
			
		||||
        cur_on = cnn_on.cursor()
 | 
			
		||||
        self.assertEqual(
 | 
			
		||||
            cur_on.mogrify("%s", [psycopg2.extras.Json({'a': '"'})]),
 | 
			
		||||
            b'\'{"a": "\\""}\'')
 | 
			
		||||
 | 
			
		||||
        cnn_off = self.connect(options="-c standard_conforming_strings=off")
 | 
			
		||||
        cur_off = cnn_off.cursor()
 | 
			
		||||
        self.assertEqual(
 | 
			
		||||
            cur_off.mogrify("%s", [psycopg2.extras.Json({'a': '"'})]),
 | 
			
		||||
            b'E\'{"a": "\\\\""}\'')
 | 
			
		||||
 | 
			
		||||
        self.assertEqual(
 | 
			
		||||
            cur_on.mogrify("%s", [psycopg2.extras.Json({'a': '"'})]),
 | 
			
		||||
            b'\'{"a": "\\""}\'')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def skip_if_no_jsonb_type(f):
 | 
			
		||||
    return skip_before_postgres(9, 4)(f)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user