From cbf9d6e0bbc323a81449250f139944e4c0b23b2c Mon Sep 17 00:00:00 2001 From: Ian Kelly Date: Fri, 3 Dec 2010 00:54:39 +0000 Subject: [PATCH] Fixed the Oracle environment variables not getting set correctly under Cygwin. git-svn-id: http://code.djangoproject.com/svn/django/trunk@14781 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 d0ed6df3e2..cf8d920989 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