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)
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)
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)
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))
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)
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)
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