def autocomplete(url_type=None, key=None): etcd_conn = Etcd() autocomplete_list = [] if url_type == 'autocomplete_table' or url_type == 'autocomplete_table_without_columns': if key.count('.') == 0: fields = etcd_conn.search_keys('/' + key.replace('.', '/')) for i in fields: if i.split('.')[0] + '.' not in autocomplete_list: autocomplete_list.append(i.split('.')[0] + '.') elif key.count('.') == 1: fields = etcd_conn.search_keys('/' + key.replace('.', '/')) for i in fields: if '.'.join(i.split('.')[0:2]) + '.' not in autocomplete_list: autocomplete_list.append('.'.join(i.split('.')[0:2]) + '.') elif key.count('.') == 2: fields = etcd_conn.search_keys('/' + key.replace('.', '/')) for i in fields: if '.'.join(i.split('.')[0:3]) + '.' not in autocomplete_list: dot = '' if url_type == 'autocomplete_table': dot = '.' autocomplete_list.append('.'.join(i.split('.')[0:3]) + dot) elif key.count('.') == 3 and url_type == 'autocomplete_table': search_key = key.split('.')[-1] fields = etcd_conn.search('/' + '/'.join(key.split('.')[:-1])) for i in fields[0][0]: if i.get('column_name').find(search_key) > -1: autocomplete_list.append('.'.join(key.split('.')[:-1]) + '.' + i.get('column_name')) elif url_type == 'autocomplete_role': service_key = request.args.get("service") if service_key is not None: service = etcd_conn.get_list(service_key) import requests r = requests.post(service.get('role_service_url'), json={service.get('role_service_param'): key}, auth=(service.get('username'), service.get('password'))) for row in r.json(): autocomplete_list.append({"value": row.get(service.get('role_service_key')), "label": row.get(service.get('role_service_value'))}) else: autocomplete_list = etcd_conn.search_keys( '/' + url_type.replace('autocomplete_', '') + '/' + key.replace('.', '/')) return Response(json.dumps(autocomplete_list), mimetype='application/json')