Пример #1
0
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)
Пример #3
0
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()
Пример #4
0
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
Пример #5
0
    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
Пример #6
0
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
Пример #8
0
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"
Пример #9
0
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
Пример #10
0
def _append_credentials_params(params: httpx.QueryParams) -> httpx.QueryParams:
    return params.merge({
        "key": settings.POSTTAG_API_KEY,
        "id": settings.POSTTAG_ID,
    })
Пример #11
0
 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
Пример #12
0
    def __init__(self, query: BuilderQuery, auth: BESAuth):
        self.query = query
        self.auth = auth

        self.query_params = QueryParams({"page_size": 100})
Пример #13
0
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"]