|
2 | 2 | from sqlobject import col |
3 | 3 | from sqlobject import dberrors |
4 | 4 | from sqlobject import sqlbuilder |
5 | | -from sqlobject.compat import PY2, unicode_type |
| 5 | +from sqlobject.compat import PY2 |
6 | 6 | from sqlobject.converters import registerConverter, sqlrepr |
7 | 7 | from sqlobject.dbconnection import DBAPI |
8 | 8 |
|
@@ -86,15 +86,13 @@ def __init__(self, dsn=None, host=None, port=None, db=None, |
86 | 86 | registerConverter(type(self.module.Binary('')), |
87 | 87 | PsycoBinaryConverter) |
88 | 88 | elif driver == 'pygresql': |
89 | | - from pg import escape_bytea |
| 89 | + from pg import escape_bytea as pg_escape_bytea |
90 | 90 | self.createBinary = \ |
91 | | - lambda value, escape_bytea=escape_bytea: escape_bytea(value) |
92 | | - elif type(self.module.Binary) in ( |
93 | | - type, type(PostgresBinaryConverter)) and \ |
94 | | - type(self.module.Binary(b'')) not in (bytes, unicode_type): |
95 | | - # Register a converter for Binary type. |
| 91 | + lambda value, pg_escape_bytea=pg_escape_bytea: \ |
| 92 | + pg_escape_bytea(value) |
| 93 | + elif driver in ('py-postgresql', 'pypostgresql'): |
96 | 94 | registerConverter(type(self.module.Binary(b'')), |
97 | | - PostgresBinaryConverter) |
| 95 | + PypostgresBinaryConverter) |
98 | 96 |
|
99 | 97 | self.db = db |
100 | 98 | self.user = user |
@@ -541,11 +539,12 @@ def PsycoBinaryConverter(value, db): |
541 | 539 | return str(value) |
542 | 540 |
|
543 | 541 |
|
544 | | -if PY2: |
545 | | - def PostgresBinaryConverter(value, db): |
546 | | - assert db == 'postgres' |
547 | | - return sqlrepr(bytes(value), db) |
548 | | -else: |
549 | | - def PostgresBinaryConverter(value, db): |
550 | | - assert db == 'postgres' |
551 | | - return sqlrepr(value.decode('latin1'), db) |
| 542 | +def escape_bytea(value): |
| 543 | + return ''.join( |
| 544 | + ['\\' + (x[2:].rjust(3, '0')) for x in (oct(ord(c)) for c in value)] |
| 545 | + ) |
| 546 | + |
| 547 | + |
| 548 | +def PypostgresBinaryConverter(value, db): |
| 549 | + assert db == 'postgres' |
| 550 | + return sqlrepr(escape_bytea(value.decode('latin1')), db) |
0 commit comments