Ejemplo n.º 1
0
def _url_encode_impl(obj, charset, encode_keys, sort, key):
    iterable = iter_multi_items(obj)
    if sort:
        iterable = sorted(iterable, key=key)
    for key, value in iterable:
        if value is None:
            continue
        if not isinstance(key, bytes):
            key = text_type(key).encode(charset)
        if not isinstance(value, bytes):
            value = text_type(value).encode(charset)
        yield url_quote(key) + '=' + url_quote_plus(value)
Ejemplo n.º 2
0
def encode_query_string(event):
    params = event.get(u"multiValueQueryStringParameters")
    if not params:
        params = event.get(u"queryStringParameters")
    if not params:
        params = event.get(u"query")
    if not params:
        params = ""
    if is_alb_event(event):
        params = MultiDict((url_unquote_plus(k), url_unquote_plus(v))
                           for k, v in iter_multi_items(params))
    return url_encode(params)
Ejemplo n.º 3
0
def _url_encode_impl(obj, charset, encode_keys, sort, key):
    iterable = iter_multi_items(obj)
    if sort:
        iterable = sorted(iterable, key=key)
    for key, value in iterable:
        if value is None:
            continue
        if not isinstance(key, bytes):
            key = text_type(key).encode(charset)
        if not isinstance(value, bytes):
            value = text_type(value).encode(charset)
        yield url_quote_plus(key) + '=' + url_quote_plus(value)
Ejemplo n.º 4
0
def _url_encode_impl(obj, charset, encode_keys, sort, key):
    iterable = iter_multi_items(obj)
    if sort:
        iterable = sorted(iterable, key=key)
    for key, value in iterable:
        if value is None:
            continue
        if encode_keys and isinstance(key, unicode):
            key = key.encode(charset)
        else:
            key = str(key)
        if isinstance(value, unicode):
            value = value.encode(charset)
        else:
            value = str(value)
        yield '%s=%s' % (_quote(key), _quote_plus(value))
Ejemplo n.º 5
0
def _url_encode_impl(obj, charset, encode_keys, sort, key):
    iterable = iter_multi_items(obj)
    if sort:
        iterable = sorted(iterable, key=key)
    for key, value in iterable:
        if value is None:
            continue
        if encode_keys and isinstance(key, unicode):
            key = key.encode(charset)
        else:
            key = str(key)
        if isinstance(value, unicode):
            value = value.encode(charset)
        else:
            value = str(value)
        yield '%s=%s' % (_quote(key), _quote_plus(value))
Ejemplo n.º 6
0
def url_encode(obj,
               charset='utf-8',
               encode_keys=False,
               sort=False,
               key=None,
               separator='&'):
    """URL encode a dict/`MultiDict`.  If a value is `None` it will not appear
    in the result string.  Per default only values are encoded into the target
    charset strings.  If `encode_keys` is set to ``True`` unicode keys are
    supported too.
    
    If `sort` is set to `True` the items are sorted by `key` or the default
    sorting algorithm.
    
    .. versionadded:: 0.5
        `sort`, `key`, and `separator` were added.
    
    :param obj: the object to encode into a query string.
    :param charset: the charset of the query string.
    :param encode_keys: set to `True` if you have unicode keys.
    :param sort: set to `True` if you want parameters to be sorted by `key`.
    :param separator: the separator to be used for the pairs.
    :param key: an optional function to be used for sorting.  For more details
                check out the :func:`sorted` documentation.
    """
    iterable = iter_multi_items(obj)
    if sort:
        iterable = list(iterable)
        iterable.sort(key=key)
    tmp = []
    for key, value in iterable:
        if encode_keys and isinstance(key, unicode):
            key = key.encode(charset)
        else:
            key = str(key)
        if value is None:
            continue
        elif isinstance(value, unicode):
            value = value.encode(charset)
        else:
            value = str(value)
        tmp.append('%s=%s' % (_quote(key), _quote_plus(value)))

    return separator.join(tmp)
Ejemplo n.º 7
0
def url_encode(obj, charset = 'utf-8', encode_keys = False, sort = False, key = None, separator = '&'):
    iterable = iter_multi_items(obj)
    if sort:
        iterable = list(iterable)
        iterable.sort(key=key)
    tmp = []
    for key, value in iterable:
        if encode_keys and isinstance(key, unicode):
            key = key.encode(charset)
        else:
            key = str(key)
        if value is None:
            continue
        elif isinstance(value, unicode):
            value = value.encode(charset)
        else:
            value = str(value)
        tmp.append('%s=%s' % (_quote(key), _quote_plus(value)))

    return separator.join(tmp)
Ejemplo n.º 8
0
def url_encode(obj, charset = 'utf-8', encode_keys = False, sort = False, key = None, separator = '&'):
    iterable = iter_multi_items(obj)
    if sort:
        iterable = list(iterable)
        iterable.sort(key=key)
    tmp = []
    for key, value in iterable:
        if encode_keys and isinstance(key, unicode):
            key = key.encode(charset)
        else:
            key = str(key)
        if value is None:
            continue
        elif isinstance(value, unicode):
            value = value.encode(charset)
        else:
            value = str(value)
        tmp.append('%s=%s' % (_quote(key), _quote_plus(value)))

    return separator.join(tmp)
Ejemplo n.º 9
0
def url_encode(obj, charset='utf-8', encode_keys=False, sort=False, key=None,
               separator='&'):
    """URL encode a dict/`MultiDict`.  If a value is `None` it will not appear
    in the result string.  Per default only values are encoded into the target
    charset strings.  If `encode_keys` is set to ``True`` unicode keys are
    supported too.

    If `sort` is set to `True` the items are sorted by `key` or the default
    sorting algorithm.

    .. versionadded:: 0.5
        `sort`, `key`, and `separator` were added.

    :param obj: the object to encode into a query string.
    :param charset: the charset of the query string.
    :param encode_keys: set to `True` if you have unicode keys.
    :param sort: set to `True` if you want parameters to be sorted by `key`.
    :param separator: the separator to be used for the pairs.
    :param key: an optional function to be used for sorting.  For more details
                check out the :func:`sorted` documentation.
    """
    iterable = iter_multi_items(obj)
    if sort:
        iterable = list(iterable)
        iterable.sort(key=key)
    tmp = []
    for key, value in iterable:
        if encode_keys and isinstance(key, unicode):
            key = key.encode(charset)
        else:
            key = str(key)
        if value is None:
            continue
        elif isinstance(value, unicode):
            value = value.encode(charset)
        else:
            value = str(value)
        tmp.append('%s=%s' % (_quote(key),
                              _quote_plus(value)))
    return separator.join(tmp)
Ejemplo n.º 10
0
def list_vms():
    '''
    List all virtual machines in the cloud.
    '''
    # not in visible tenants, but in all tenants
    tenants = dict(
        [(x.id, x) for x in clients.admin_clients().keystone.tenants.list()])

    class ProjectNameColumn(dataset.StrColumn):
        def __call__(self, x):
            try:
                tenant = tenants[x.tenant_id]
            except KeyError:
                return '[deleted] %s' % x.tenant_id
            else:
                return tenant.name
    default_columns = ['id', 'name', 'project_name', 'ram']
    #creating and adjusting columns vector, columns ordering
    columns = dataset.ColumnKeeper({
        'id': dataset.StrColumn('id', 'ID'),
        'name': dataset.StrColumn('name', 'Name'),
        'user_id': dataset.StrColumn('user_id', 'User'),
        'tenant_id': dataset.StrColumn('tenant_id', 'Project ID'),
        'project_name': ProjectNameColumn(
            'project_name', 'Project Name'),
        'ram': dataset.IntColumn('ram', 'RAM'),
        'vcpus': dataset.IntColumn('vcpus', 'Number of CPUs')
    }, default_columns)
    if 'columns' in flask.request.args:
        columns.adjust(
            [x for x in flask.request.args['columns'].split(',') if x])
    if 'asc' in flask.request.args or 'desc' in flask.request.args:
        columns.order(
            flask.request.args.getlist('asc'),
            flask.request.args.getlist('desc'))
    if 'groupby' in flask.request.args:
        columns.adjust_groupby(flask.request.args['groupby'])
    vms = clients.admin_clients().nova.servers.list(search_opts={
        'all_tenants': 1})
    flavors = dict(
        [(x.id, x) for x in clients.admin_clients().nova.flavors.list()])
    for server in vms:
        try:
            flavor = flavors[server.flavor['id']]
        except KeyError:
            flavor = clients.admin_clients().nova.flavors.get(server.flavor[
                'id'])
            flavors[server.flavor['id']] = flavor
        server.ram = flavor.ram
        server.vcpus = flavor.vcpus

    current_dataset = dataset.DataSet(vms, columns)
    if 'export' in flask.request.args:
        try:
            export = exporter.Exporter(
                flask.request.args['export'],
                current_dataset.data, columns, 'vms')
        except KeyError:
            d = flask.request.args.copy()
            d.pop('export')
            query = urllib.urlencode(datastructures.iter_multi_items(d))
            url = flask.request.path + '?' + query
            return flask.redirect(url)
        response = export()
    else:
        p = pagination.Pagination(current_dataset.data)
        visible_data = p.slice(current_dataset.data)
        response = dict(
            pagination=p,
            columns=columns,
            data=visible_data)
        if 'project_name' in columns.current_names:
            response['distinct_projects_names'] = sorted(
                current_dataset.get_distinct_values("project_name"))
    response.update({
        'title': 'Virtual Machines',
        'subtitle': 'List of virtual machines'
    })
    return response