def set_policy(self, vhost, policy_name, policy): vhost = urlquote(vhost, '') policy_name = urlquote(policy_name, '') self._do_request( requests.put, 'policies/{vhost}/{policy_name}'.format( vhost=vhost, policy_name=policy_name, ), json=policy, )
def get_broker_url(agent): broker_ip = agent['broker_ip'] broker_user = agent.get('broker_user', 'guest') broker_pass = agent.get('broker_pass', 'guest') broker_vhost = agent.get('broker_vhost', '/') if agent.get('broker_ssl_enabled'): broker_port = BROKER_PORT_SSL else: broker_port = BROKER_PORT_NO_SSL return defaults.BROKER_URL.format(username=urlquote(broker_user), password=urlquote(broker_pass), host=broker_ip, vhost=broker_vhost, port=broker_port)
def validate_inputs(input_dict, len_input_value=256, err_prefix=None, validate_value_begins_with_letter=True): for input_name, input_value in input_dict.items(): prefix = err_prefix or 'The `{0}` argument'.format(input_name) if not input_value: raise manager_exceptions.BadParametersError( '{0} is empty'.format(prefix) ) if len(input_value) > len_input_value: raise manager_exceptions.BadParametersError( '{0} is too long. Maximum allowed length is {1} ' 'characters'.format(prefix, len_input_value) ) # urllib.quote changes all chars except alphanumeric chars and _-. quoted_value = urlquote(input_value, safe='') if quoted_value != input_value: raise manager_exceptions.BadParametersError( '{0} contains illegal characters. Only letters, digits and the' ' characters "-", "." and "_" are allowed'.format(prefix) ) if validate_value_begins_with_letter and \ input_value[0] not in ascii_letters: raise manager_exceptions.BadParametersError( '{0} must begin with a letter'.format(prefix) )
def put(self, resource_path, data=None, query_params=None): url = self._version_url(resource_path) result = self.app.put(urlquote(url), content_type='application/json', data=json.dumps(data) if data else None, query_string=build_query_string(query_params)) return result
def put_file(self, resource_path, file_path, query_params=None): url = self._version_url(resource_path) with open(file_path, 'rb') as f: result = self.app.put(urlquote(url), data=f.read(), query_string=build_query_string( query_params)) return result
def create_vhost(self, vhost, copy_policies=True): vhost = urlquote(vhost, '') self._do_request(requests.put, 'vhosts/{0}'.format(vhost)) if copy_policies: default_policies = self.get_policies('/') for policy in default_policies: name = policy.pop('name') policy.pop('vhost') self.set_policy(vhost, name, policy)
def set_vhost_permissions(self, vhost, username, configure='', write='', read=''): vhost = urlquote(vhost, '') self._do_request(requests.put, 'permissions/{0}/{1}'.format(vhost, username), json={ 'configure': configure, 'write': write, 'read': read })
def parse_label(label_key, label_value): if ((not isinstance(label_key, text_type)) or (not isinstance(label_value, text_type))): raise BadLabelsList() if len(label_key) > 256 or len(label_value) > 256: raise manager_exceptions.BadParametersError( 'The key or value is too long. Maximum allowed length is ' '256 characters' ) if urlquote(label_key, safe='') != label_key: raise manager_exceptions.BadParametersError( f'The key `{label_key}` contains illegal characters. ' f'Only letters, digits and the characters `-`, `.` and ' f'`_` are allowed' ) if any(unicodedata.category(char)[0] == 'C' or char == '"' for char in label_value): raise manager_exceptions.BadParametersError( f'The value `{label_value}` contains illegal characters. ' f'Control characters and `"` are not allowed.' ) parsed_label_key = label_key.lower() parsed_label_value = normalize_value(label_value) if (parsed_label_key.startswith(RESERVED_PREFIX) and parsed_label_key not in RESERVED_LABELS): allowed_cfy_labels = ', '.join(RESERVED_LABELS) raise manager_exceptions.BadParametersError( f'All labels with a `{RESERVED_PREFIX}` prefix are reserved for ' f'internal use. Allowed `{RESERVED_PREFIX}` prefixed labels ' f'are: {allowed_cfy_labels}') return parsed_label_key, parsed_label_value
def delete_vhost(self, vhost): vhost = urlquote(vhost, '') self._do_request(requests.delete, 'vhosts/{0}'.format(vhost))
def get_policies(self, vhost): vhost = urlquote(vhost, '') return self._do_request(requests.get, 'policies/{vhost}'.format(vhost=vhost)).json()
def delete(self, resource_path, query_params=None): url = self._version_url(resource_path) result = self.app.delete(urlquote(url), query_string=build_query_string(query_params)) return result
def head(self, resource_path): url = self._version_url(resource_path) result = self.app.head(urlquote(url)) return result
def get(self, resource_path, query_params=None, headers=None): url = self._version_url(resource_path) result = self.app.get(urlquote(url), headers=headers, query_string=build_query_string(query_params)) return result
def patch(self, resource_path, data): url = self._version_url(resource_path) result = self.app.patch(urlquote(url), content_type='application/json', data=json.dumps(data)) return result