Configuration parameters refactor

This commit is contained in:
Juan Ignacio Sánchez Lara
2015-08-17 11:49:31 +02:00
parent a08600a1f8
commit 6c3555f21a

View File

@@ -6,21 +6,18 @@ FUNCTION cartodb._CDB_Group_CreateGroup_API(database_name text, group_name text,
RETURNS VOID AS
$$
import httplib
import base64
import string
import json
try:
conf = plpy.execute("SELECT cartodb.CDB_Conf_GetConf('groups_api') conf")[0]['conf']
if conf is None:
params = plpy.execute("select c.host, c.port, c.timeout, c.username, c.password from cartodb._CDB_Group_API_Conf() c;")[0]
if params['host'] is None:
return
params = json.loads(conf)
client = httplib.HTTPConnection(params['host'], params['port'], False, params['timeout'])
url = '/api/v1/databases/%s/groups' % database_name
body = '{ "name": "%s", "database_role": "%s" }' % (group_name, group_role)
auth = base64.encodestring('%s:%s' % (params['username'], params['password'])).replace('\n', '')
auth = plpy.execute("SELECT cartodb._CDB_Group_API_Auth('%s', '%s') as auth" % (params['username'], params['password']))[0]['auth']
headers = { 'Authorization': ('Basic %s' % auth), 'Content-Type': 'application/json' }
client.request('POST', url, body, headers)
client.request('POST', '/api/v1/databases/%s/groups' % database_name, body, headers)
response = client.getresponse()
assert response.status == 200
except Exception as err:
@@ -34,20 +31,17 @@ FUNCTION cartodb._CDB_Group_DropGroup_API(database_name text, group_name text)
RETURNS VOID AS
$$
import httplib
import base64
import string
import json
try:
conf = plpy.execute("SELECT cartodb.CDB_Conf_GetConf('groups_api') conf")[0]['conf']
if conf is None:
params = plpy.execute("select c.host, c.port, c.timeout, c.username, c.password from cartodb._CDB_Group_API_Conf() c;")[0]
if params['host'] is None:
return
params = json.loads(conf)
client = httplib.HTTPConnection(params['host'], params['port'], False, params['timeout'])
url = '/api/v1/databases/%s/groups/%s' % (database_name, group_name)
auth = base64.encodestring('%s:%s' % (params['username'], params['password'])).replace('\n', '')
auth = plpy.execute("SELECT cartodb._CDB_Group_API_Auth('%s', '%s') as auth" % (params['username'], params['password']))[0]['auth']
headers = { 'Authorization': ('Basic %s' % auth), 'Content-Type': 'application/json' }
client.request('DELETE', url, '', headers)
client.request('DELETE', '/api/v1/databases/%s/groups/%s' % (database_name, group_name), '', headers)
response = client.getresponse()
assert response.status == 200
except Exception as err:
@@ -55,3 +49,42 @@ $$
raise err
$$ LANGUAGE 'plpythonu' VOLATILE;
DO LANGUAGE 'plpgsql' $$
BEGIN
DROP FUNCTION IF EXISTS cartodb._CDB_Group_API_Conf();
DROP TYPE IF EXISTS _CDB_Group_API_Params;
END
$$;
CREATE TYPE _CDB_Group_API_Params AS (
host text,
port int,
timeout int,
username text,
password text
);
-- This must be explicitally extracted because "composite types are currently not supported".
-- See http://www.postgresql.org/docs/9.3/static/plpython-database.html.
CREATE OR REPLACE
FUNCTION cartodb._CDB_Group_API_Conf()
RETURNS _CDB_Group_API_Params AS
$$
conf = plpy.execute("SELECT cartodb.CDB_Conf_GetConf('groups_api') conf")[0]['conf']
if conf is None:
return None
else:
import json
params = json.loads(conf)
return { "host": params['host'], "port": params['port'], 'timeout': params['timeout'], 'username': params['username'], 'password': params['password'] }
# return params
$$ LANGUAGE 'plpythonu' VOLATILE;
CREATE OR REPLACE
FUNCTION cartodb._CDB_Group_API_Auth(username text, password text)
RETURNS TEXT AS
$$
import base64
base64.encodestring('%s:%s' % (username, password)).replace('\n', '')
$$ LANGUAGE 'plpythonu' IMMUTABLE;