class BESBuilder: def __init__(self, query: BuilderQuery, auth: BESAuth): self.query = query self.auth = auth self.query_params = QueryParams({"page_size": 100}) def _query_params_set(self, key: str, value: Any): self.query_params = self.query_params.set(key, value) def ordering(self, *ordering_fields: str) -> "BESBuilder": """Set ordering values""" self._query_params_set("ordering", ",".join(ordering_fields)) return self def search(self, value: str) -> "BESBuilder": """Set search value""" self._query_params_set("search", value) return self def page_size(self, page_size: int) -> "BESBuilder": """Set page size for server response""" self._query_params_set("page_size", page_size) return self def fetch_data(self, query_params: QueryParamTypes = None): url = bes_settings.api.get_api_url("/builder/create-table/") data = self.query.to_json() query_params = self.query_params.merge(query_params or {}) res = self.auth.post(url=url, data=data, headers={"Content-Type": "application/json"}, params=query_params) return res def fetch_all(self): return self.fetch_data(query_params={"page_size": "full"})
def test_delete_service( mocked_director_v0_service_api: MockRouter, mocked_director_v2_scheduler: None, client: TestClient, service: Dict[str, Any], exp_status_code: int, is_legacy: bool, can_save: Optional[bool], exp_save_state: bool, ): url = URL(f"/v2/dynamic_services/{service['node_uuid']}") if can_save is not None: url = url.copy_with(params={"can_save": can_save}) response = client.delete(str(url), allow_redirects=False) assert ( response.status_code == exp_status_code ), f"expected status code {exp_status_code}, received {response.status_code}: {response.text}" if exp_status_code == status.HTTP_307_TEMPORARY_REDIRECT: # check redirection header goes to director-v0 assert "location" in response.headers redirect_url = URL(response.headers["location"]) assert redirect_url.host == "director" assert (redirect_url.path == f"/v0/running_interactive_services/{service['node_uuid']}") assert redirect_url.params == QueryParams(can_save=exp_save_state)
async def get_owner_tokens(user: str) -> Optional[List]: params = QueryParams({"username": user}) async with AsyncClient() as client: resp = await client.get(settings.user_service_url + "/user/getOwnerTokens", params=params) if resp.status_code == status.HTTP_404_NOT_FOUND: return None return resp.json()
async def check_owner_token(ownerToken: str) -> bool: params = QueryParams({"ownerToken": ownerToken}) async with AsyncClient() as client: resp = await client.get(settings.user_service_url + "/user/checkOwnerToken", params=params) if resp.status_code == status.HTTP_200_OK: return True else: return False
def auth_flow(self, request: Request) -> Generator[Request, Response, None]: """ Update the request. :param request: A request to be updated with OAuth parameters. """ oauth_parameters = self.oauth_base_parameters hmac_message_query_string = str( QueryParams( sorted( chain( QueryParams(request.url.query).items(), (QueryParams(request.content.decode()).items() if request.method == 'POST' and request.headers.get('content-type') == 'application/x-www-form-urlencoded' else []), oauth_parameters.items(), )))) oauth_parameters['oauth_signature'] = b64encode(s=hmac_new( key='&'.join([ quote(string=self.consumer_secret, safe=b"~"), quote(string=self.oauth_access_token_secret or '', safe=b"~") ]).encode(), msg='&'.join( quote(string=element, safe=b'~') for element in (request.method.upper(), f'{request.url.scheme}://{request.url.host}{request.url.path}', hmac_message_query_string)).encode(), digestmod=sha1).digest()).decode() # The OAuth parameters are added to the query. request.url = URL(url=request.url, params=oauth_parameters) # request.headers['Authorization'] = 'OAuth ' + ', '.join([ # f'{key}="{value}"' for key, value in oauth_parameters.items()] # ) yield request
def test_queryparam_setters(): q = QueryParams({"a": 1}) q.update([]) assert str(q) == "a=1" q = QueryParams([("a", 1), ("a", 2)]) q["a"] = "3" assert str(q) == "a=3"
def test_get_service_status( mocked_director_v0_service_api: MockRouter, mocked_director_v2_scheduler: None, client: TestClient, service: Dict[str, Any], exp_status_code: int, is_legacy: bool, ): url = URL(f"/v2/dynamic_services/{service['node_uuid']}") response = client.get(str(url), allow_redirects=False) assert ( response.status_code == exp_status_code ), f"expected status code {exp_status_code}, received {response.status_code}: {response.text}" if exp_status_code == status.HTTP_307_TEMPORARY_REDIRECT: # check redirection header goes to director-v0 assert "location" in response.headers redirect_url = URL(response.headers["location"]) assert redirect_url.host == "director" assert (redirect_url.path == f"/v0/running_interactive_services/{service['node_uuid']}") assert redirect_url.params == QueryParams("") # empty query
def test_queryparam_types(): q = QueryParams(None) assert str(q) == "" q = QueryParams({"a": True}) assert str(q) == "a=true" q = QueryParams({"a": False}) assert str(q) == "a=false" q = QueryParams({"a": ""}) assert str(q) == "a=" q = QueryParams({"a": None}) assert str(q) == "a=" q = QueryParams({"a": 1.23}) assert str(q) == "a=1.23" q = QueryParams({"a": 123}) assert str(q) == "a=123" q = QueryParams({"a": [1, 2]}) assert str(q) == "a=1&a=2"
def test_queryparams(): q = QueryParams("a=123&a=456&b=789") assert "a" in q assert "A" not in q assert "c" not in q assert q["a"] == "456" assert q.get("a") == "456" assert q.get("nope", default=None) is None assert q.getlist("a") == ["123", "456"] assert list(q.keys()) == ["a", "b"] assert list(q.values()) == ["456", "789"] assert list(q.items()) == [("a", "456"), ("b", "789")] assert len(q) == 2 assert list(q) == ["a", "b"] assert dict(q) == {"a": "456", "b": "789"} assert str(q) == "a=123&a=456&b=789" assert repr(q) == "QueryParams('a=123&a=456&b=789')" assert QueryParams({ "a": "123", "b": "456" }) == QueryParams([("a", "123"), ("b", "456")]) assert QueryParams({"a": "123", "b": "456"}) == QueryParams("a=123&b=456") assert QueryParams({ "a": "123", "b": "456" }) == QueryParams({ "b": "456", "a": "123" }) assert QueryParams() == QueryParams({}) assert QueryParams([("a", "123"), ("a", "456")]) == QueryParams("a=123&a=456") assert QueryParams({"a": "123", "b": "456"}) != "invalid" q = QueryParams([("a", "123"), ("a", "456")]) assert QueryParams(q) == q
def _append_credentials_params(params: httpx.QueryParams) -> httpx.QueryParams: return params.merge({ "key": settings.POSTTAG_API_KEY, "id": settings.POSTTAG_ID, })
def __get_folders(query: httpx.QueryParams) -> tuple[bool, int]: resp = self.client.get('/folders', params=query) items, has_more, next_page = self._check_pagination(int(query.get('page')), resp) for item in items: folders.append(JoplinFolder(**item)) return has_more, next_page
def __init__(self, query: BuilderQuery, auth: BESAuth): self.query = query self.auth = auth self.query_params = QueryParams({"page_size": 100})
def test_queryparam_setters(): q = QueryParams({"a": 1}) q.update([]) assert str(q) == "a=1" q = QueryParams([("a", 1), ("a", 2)]) q["a"] = "3" assert str(q) == "a=3" q = QueryParams([("a", 1), ("b", 1)]) u = QueryParams([("b", 2), ("b", 3)]) q.update(u) assert str(q) == "a=1&b=2&b=3" assert q["b"] == u["b"]