Skip to content

Commit 990d601

Browse files
peeyushguptaGeert Vanderkelen
authored and
Geert Vanderkelen
committed
BUG20106629: Support Django Safetext and SafeBytes type
We this fix we support Django SafeText and SafeBytes type fields. A test case has been added for BUG#20106629. (cherry picked from commit 18b69e4)
1 parent 8b05e4a commit 990d601

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

lib/mysql/connector/django/base.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,12 @@ def _DATETIME_to_python(self, value, dsc=None):
9898
dt = dt.replace(tzinfo=timezone.utc)
9999
return dt
100100

101+
def _safetext_to_mysql(self, value):
102+
return self._str_to_mysql(value)
103+
104+
def _safebytes_to_mysql(self, value):
105+
return self._bytes_to_mysql(value)
106+
101107

102108
class CursorWrapper(object):
103109
"""Wrapper around MySQL Connector/Python's cursor class.

tests/test_django.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@
8484
if tests.DJANGO_VERSION >= (1, 6):
8585
from django.db.backends import FieldInfo
8686
from django.db.backends.signals import connection_created
87+
from django.utils.safestring import SafeBytes, SafeText
8788

8889
import mysql.connector
8990
from mysql.connector.django.base import (DatabaseWrapper, DatabaseOperations,
@@ -298,3 +299,25 @@ def test__DATETIME_to_python(self):
298299
self.assertEqual(None,
299300
django_converter._DATETIME_to_python(value, dsc=None))
300301
settings.USE_TZ = False
302+
303+
304+
class BugOra20106629(tests.MySQLConnectorTests):
305+
"""CONNECTOR/PYTHON DJANGO BACKEND DOESN'T SUPPORT SAFETEXT"""
306+
def setUp(self):
307+
dbconfig = tests.get_mysql_config()
308+
self.conn = mysql.connector.connect(**dbconfig)
309+
self.cnx = DatabaseWrapper(settings.DATABASES['default'])
310+
self.cur = self.cnx.cursor()
311+
self.tbl = "BugOra20106629"
312+
self.cur.execute("DROP TABLE IF EXISTS {0}".format(self.tbl), ())
313+
self.cur.execute("CREATE TABLE {0}(col1 TEXT, col2 BLOB)".format(self.tbl), ())
314+
315+
def teardown(self):
316+
self.cur.execute("DROP TABLE IF EXISTS {0}".format(self.tbl), ())
317+
318+
def test_safe_string(self):
319+
safe_text = SafeText("dummy & safe data <html> ")
320+
safe_bytes = SafeBytes(b"\x00\x00\x4c\x6e\x67\x39")
321+
self.cur.execute("INSERT INTO {0} VALUES(%s, %s)".format(self.tbl), (safe_text, safe_bytes))
322+
self.cur.execute("SELECT * FROM {0}".format(self.tbl), ())
323+
self.assertEqual(self.cur.fetchall(), [(safe_text, safe_bytes)])

0 commit comments

Comments
 (0)