Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore(discovery): make the SDK use static discovery files #195

Merged
merged 1 commit into from
Sep 2, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 29 additions & 3 deletions lumapps/api/base_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
Tuple,
Union,
)
from urllib.parse import urlparse

from httpx import Client, HTTPStatusError

Expand Down Expand Up @@ -59,15 +60,38 @@ def fetch_access_token(
raise GetTokenError(str(err)) from err


def _get_urls(base_url: str, api_info: Dict[str, str]) -> Tuple[str, str]:
def _get_discovery_urls(base_url: str, api_info: Dict[str, str]) -> Tuple[str, str]:
api_name = api_info.get("name", LUMAPPS_NAME)
version = api_info.get("version", "v1")
prefix = "" if api_name in GOOGLE_APIS else "/_ah/api"
api_url = f"{prefix}/{api_name}/{version}"

if api_name == LUMAPPS_NAME:
api_host = urlparse(base_url).netloc.split(".")
if len(api_host) < 4:
raise BaseClientError(f"Invalid base URL: {base_url}")
is_beta_cell = api_host[1] == "beta"
cell = api_host[0]
if is_beta_cell and cell not in (
"go-cell-001",
"go-cell-003",
"ms-cell-001",
):
raise BaseClientError(f"Invalid LumApps cell in base URL: {cell}")

if cell not in (
"go-cell-001",
"go-cell-002",
"go-cell-003",
"go-cell-005",
"go-cell-600",
"ms-cell-001",
"ms-cell-002",
):
raise BaseClientError(f"Invalid LumApps cell in base URL: {cell}")
return (
"https://sites.lumapps.com/_ah/api/discovery/v1/apis/lumsites/v1/rest",
"https://storage.googleapis.com/prod-frontend-static-assets/api-discovery/"
f"lumapps-discovery-{'beta-' if is_beta_cell else ''}{cell}.json",
api_url,
)
return (
Expand Down Expand Up @@ -117,7 +141,9 @@ def __init__(
}
self._extra_http_headers = extra_http_headers or {}
self.api_info = api_info
self._discovery_url, self._api_url = _get_urls(self.base_url, self.api_info)
self._discovery_url, self._api_url = _get_discovery_urls(
self.base_url, self.api_info
)
self.token_getter = token_getter
self.token = token
self.cursor = None
Expand Down
53 changes: 50 additions & 3 deletions tests/legacy/test_base_client.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
from typing import Dict, Optional
from json import load, loads
from typing import Sequence
from unittest.mock import PropertyMock

from lumapps.api import __version__
from httpx import HTTPStatusError
from pytest import fixture, raises
from pytest import fixture, raises, mark

from lumapps.api.base_client import BaseClient
from lumapps.api.base_client import BaseClient, fetch_access_token
from lumapps.api.client import LumAppsClient
from lumapps.api.errors import BadCallError, BaseClientError
from lumapps.api.utils import (
FILTERS,
Expand Down Expand Up @@ -378,3 +380,48 @@ def get(*args, **kwargs):
def test_get_new_client_as_using_dwd(cli: BaseClient):
with raises(NotImplementedError):
cli.get_new_client_as_using_dwd("foo@bar.com")

@mark.parametrize("cell, api_info, expected_exception", [
("go-cell-002", {"base_url": "https://go-cell-002.api.lumapps.com/"}, None),
("ms-cell-001", {"base_url": "https://ms-cell-001.api.lumapps.com/"}, None),
("go-cell-003", {"base_url": "https://go-cell-003.beta.api.lumapps.com/"}, None),
("go-cell-004", {"base_url": "https://go-cell-004.api.lumapps.com/"}, BaseClientError),
("go-cell-001", {"base_url": "http://localhost/sdk"}, BaseClientError),
("go-cell-001", {}, BaseClientError),
])
def test_create_client(cell: str, api_info: Dict[str, str], expected_exception: Optional[Exception]) -> None:
# Given / When
if expected_exception:
with raises(expected_exception):
LumAppsClient(
"123",
None,
api_info=api_info,
auth_info={"client_id": "abc", "client_secret": "789"},
)
return
else:
client = LumAppsClient(
"123",
None,
api_info=api_info,
auth_info={"client_id": "abc", "client_secret": "789"},
)

# Then
assert client._headers == {
"x-lumapps-analytics": "off",
"User-Agent": f"lumapps-sdk {__version__}",
"authorization": "Bearer None"
}
assert client.base_url == api_info["base_url"].rstrip("/")
if ".beta." in client.base_url:
assert client._discovery_url == (
"https://storage.googleapis.com/prod-frontend-static-assets/api-discovery/"
f"lumapps-discovery-beta-{cell}.json"
)
else:
assert client._discovery_url == (
"https://storage.googleapis.com/prod-frontend-static-assets/api-discovery/"
f"lumapps-discovery-{cell}.json"
)
Loading