From 57e5ccbc1ad6cdbb52c738e74db242539e6f3a56 Mon Sep 17 00:00:00 2001 From: Ian Kelly Date: Fri, 3 Dec 2010 00:58:56 +0000 Subject: [PATCH] [1.2.X] Fixed the Oracle environment variables not getting set correctly under Cygwin. Backport of r14781 from trunk. git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.2.X@14782 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/db/backends/oracle/base.py | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/django/db/backends/oracle/base.py b/django/db/backends/oracle/base.py index 5ccaded474..d6c679a284 100644 --- a/django/db/backends/oracle/base.py +++ b/django/db/backends/oracle/base.py @@ -6,16 +6,35 @@ Requires cx_Oracle: http://cx-oracle.sourceforge.net/ import datetime -import os import sys import time from decimal import Decimal -# Oracle takes client-side character set encoding from the environment. -os.environ['NLS_LANG'] = '.UTF8' -# This prevents unicode from getting mangled by getting encoded into the -# potentially non-unicode database character set. -os.environ['ORA_NCHAR_LITERAL_REPLACE'] = 'TRUE' + +def _setup_environment(environ): + import platform + # Cygwin requires some special voodoo to set the environment variables + # properly so that Oracle will see them. + if platform.system().upper().startswith('CYGWIN'): + try: + import ctypes + except ImportError: + raise ImportError("ctypes not found. The Oracle backend requires ctypes to operate correctly under Cygwin.") + kernel32 = ctypes.CDLL('kernel32') + for name, value in environ: + kernel32.SetEnvironmentVariableA(name, value) + else: + import os + os.environ.update(environ) + +_setup_environment([ + # Oracle takes client-side character set encoding from the environment. + ('NLS_LANG', '.UTF8'), + # This prevents unicode from getting mangled by getting encoded into the + # potentially non-unicode database character set. + ('ORA_NCHAR_LITERAL_REPLACE', 'TRUE'), +]) + try: import cx_Oracle as Database