Patches for connecting to Azure PSQL (#42)
* * patches in code to handle user@host format in the Azure PSQL connection string * adds code for handling new connection string format in prerun.py * * fixes path in the postgres username patch * cleans up prerun.py imports
This commit is contained in:
parent
08c10f2dc6
commit
21c891865d
|
@ -0,0 +1,11 @@
|
||||||
|
--- ckan/ckan/model/__init__.py 2021-02-16 14:47:06.168327441 +0100
|
||||||
|
+++ ckan/ckan/model/__init__.py 2021-02-16 14:48:00.740780218 +0100
|
||||||
|
@@ -266,7 +266,7 @@
|
||||||
|
self.reset_alembic_output()
|
||||||
|
alembic_config = AlembicConfig(self._alembic_ini)
|
||||||
|
alembic_config.set_main_option(
|
||||||
|
- "sqlalchemy.url", str(self.metadata.bind.url)
|
||||||
|
+ "sqlalchemy.url", str(self.metadata.bind.url).replace('%', '%%')
|
||||||
|
)
|
||||||
|
try:
|
||||||
|
sqlalchemy_migrate_version = self.metadata.bind.execute(
|
|
@ -0,0 +1,11 @@
|
||||||
|
--- ckan/ckanext/datastore/backend/postgres.py 2021-02-18 11:01:56.692267462 +0100
|
||||||
|
+++ ckan/ckanext/datastore/backend/postgres-patch.py 2021-02-18 13:45:16.033193435 +0100
|
||||||
|
@@ -1690,7 +1690,7 @@
|
||||||
|
read only user.
|
||||||
|
'''
|
||||||
|
write_connection = self._get_write_engine().connect()
|
||||||
|
- read_connection_user = sa_url.make_url(self.read_url).username
|
||||||
|
+ read_connection_user = sa_url.make_url(self.read_url).username.split("@")[0]
|
||||||
|
|
||||||
|
drop_foo_sql = u'DROP TABLE IF EXISTS _foo'
|
||||||
|
|
|
@ -2,6 +2,7 @@ import os
|
||||||
import sys
|
import sys
|
||||||
import subprocess
|
import subprocess
|
||||||
import psycopg2
|
import psycopg2
|
||||||
|
from sqlalchemy.engine.url import make_url
|
||||||
import urllib.request, urllib.error, urllib.parse
|
import urllib.request, urllib.error, urllib.parse
|
||||||
import re
|
import re
|
||||||
|
|
||||||
|
@ -23,7 +24,14 @@ def check_db_connection(retry=None):
|
||||||
|
|
||||||
conn_str = os.environ.get('CKAN_SQLALCHEMY_URL', '')
|
conn_str = os.environ.get('CKAN_SQLALCHEMY_URL', '')
|
||||||
try:
|
try:
|
||||||
connection = psycopg2.connect(conn_str)
|
db_user = make_url(conn_str).username
|
||||||
|
db_passwd = make_url(conn_str).password
|
||||||
|
db_host = make_url(conn_str).host
|
||||||
|
db_name = make_url(conn_str).database
|
||||||
|
connection = psycopg2.connect(user=db_user,
|
||||||
|
host=db_host,
|
||||||
|
password=db_passwd,
|
||||||
|
database=db_name)
|
||||||
|
|
||||||
except psycopg2.Error as e:
|
except psycopg2.Error as e:
|
||||||
print((str(e)))
|
print((str(e)))
|
||||||
|
@ -96,7 +104,14 @@ def init_datastore():
|
||||||
datastore_perms_command = ['ckan', '-c', ckan_ini, 'datastore',
|
datastore_perms_command = ['ckan', '-c', ckan_ini, 'datastore',
|
||||||
'set-permissions']
|
'set-permissions']
|
||||||
|
|
||||||
connection = psycopg2.connect(conn_str)
|
db_user = make_url(conn_str).username
|
||||||
|
db_passwd = make_url(conn_str).password
|
||||||
|
db_host = make_url(conn_str).host
|
||||||
|
db_name = make_url(conn_str).database
|
||||||
|
connection = psycopg2.connect(user=db_user,
|
||||||
|
host=db_host,
|
||||||
|
password=db_passwd,
|
||||||
|
database=db_name)
|
||||||
cursor = connection.cursor()
|
cursor = connection.cursor()
|
||||||
|
|
||||||
print('[prerun] Initializing datastore db - start')
|
print('[prerun] Initializing datastore db - start')
|
||||||
|
@ -106,8 +121,10 @@ def init_datastore():
|
||||||
stdout=subprocess.PIPE)
|
stdout=subprocess.PIPE)
|
||||||
|
|
||||||
perms_sql = datastore_perms.stdout.read()
|
perms_sql = datastore_perms.stdout.read()
|
||||||
|
perms_sql = perms_sql.decode('utf-8')
|
||||||
|
perms_sql = perms_sql.replace("@"+db_host, "")
|
||||||
# Remove internal pg command as psycopg2 does not like it
|
# Remove internal pg command as psycopg2 does not like it
|
||||||
perms_sql = re.sub('\\\\connect \"(.*)\"', '', perms_sql.decode('utf-8'))
|
perms_sql = re.sub('\\\\connect \"(.*)\"', '', perms_sql)
|
||||||
cursor.execute(perms_sql)
|
cursor.execute(perms_sql)
|
||||||
for notice in connection.notices:
|
for notice in connection.notices:
|
||||||
print(notice)
|
print(notice)
|
||||||
|
|
Loading…
Reference in New Issue