Пример #1
0
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')