django-environ icon indicating copy to clipboard operation
django-environ copied to clipboard

db_url() fail with oracle dsn

Open lsaavedr opened this issue 1 year ago • 0 comments

db_url fail with oracle url without path, for example:

import environ
env = environ.Env()

DB_URL = 'oracle://super_user:super_pass@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracle_dev)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XEPDB1)))'

DB = env.db('', default=DB_URL)
print("NAME:", DB['NAME'])
NAME: %28DESCRIPTION=%28ADDRESS=%28PROTOCOL=TCP%29%28HOST=oracle_dev%29%28PORT=1521%29%29%28CONNECT_DATA=%28SERVICE_NAME=XEPDB1%29%29%29

but with path (adding a simple / to de end): DB_URL = 'oracle://super_user:super_pass@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracle_dev)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XEPDB1)))/':

NAME: (description=(address=(protocol=tcp)(host=oracle_dev)(port=1521))(connect_data=(service_name=xepdb1)))

suggested patch is:

--- /srv/env/lib/python3.10/site-packages/environ/environ.py
+++ /srv/env/lib/python3.10/site-packages/environ/environ.py
@@ -521,7 +521,7 @@
         config = {}
 
         # handle unexpected URL schemes with special characters
-        if not url.path:
+        if not url.path and not url.scheme=='oracle':
             url = _urlparse_quote(urlunparse(url))
         # Remove query strings.
         path = url.path[1:]

lsaavedr avatar Oct 25 '23 13:10 lsaavedr