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

pass auth header to all endpoints #14

Merged
merged 1 commit into from
Aug 21, 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
4 changes: 2 additions & 2 deletions weaviate_recommend/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,10 @@


class WeaviateRecommendClient:
def __init__(self, url: str):
def __init__(self, url: str, api_key: str):
self._url = url
self.base_url = f"{url}/v1"

self._api_key = api_key
self._recommender_management = _RecommenderManagement(self)
self._trainer = _Trainer(self)
self._search = _PersonalisedSearch(self)
Expand Down
16 changes: 13 additions & 3 deletions weaviate_recommend/services/configured_endpoints.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
DeleteConfiguredEndpointResponse,
ListConfiguredEndpointsResponse,
)
from weaviate_recommend.utils import get_auth_header

if TYPE_CHECKING:
from weaviate_recommend import WeaviateRecommendClient
Expand All @@ -36,7 +37,11 @@ def create(
"to": to_type,
"filters": [filter.model_dump() for filter in filters],
}
response = requests.post(self.endpoint_url, json=params)
response = requests.post(
self.endpoint_url,
json=params,
headers=get_auth_header(self.client._api_key),
)
if response.status_code != 200:
raise RecommendApiException(response.text)
return CreateConfiguredEndpointResponse.model_validate(response.json())
Expand All @@ -45,7 +50,9 @@ def list(self) -> ListConfiguredEndpointsResponse:
"""
List all configured endpoints, and details about their configuration.
"""
response = requests.get(self.endpoint_url + "details")
response = requests.get(
self.endpoint_url + "details", headers=get_auth_header(self.client._api_key)
)
if response.status_code != 200:
raise RecommendApiException(response.text)
return ListConfiguredEndpointsResponse.model_validate(response.json())
Expand All @@ -54,7 +61,10 @@ def delete(self, endpoint_name: str) -> DeleteConfiguredEndpointResponse:
"""
Delete a configured endpoint.
"""
response = requests.delete(self.endpoint_url + endpoint_name)
response = requests.delete(
self.endpoint_url + endpoint_name,
headers=get_auth_header(self.client._api_key),
)
if response.status_code != 200:
raise RecommendApiException(response.text)
return DeleteConfiguredEndpointResponse.model_validate(response.json())
17 changes: 14 additions & 3 deletions weaviate_recommend/services/data/item.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
AddItemsResponse,
DeleteItemResponse,
)
from weaviate_recommend.utils import get_auth_header

if TYPE_CHECKING:
from weaviate_recommend import WeaviateRecommendClient
Expand All @@ -34,7 +35,11 @@ def add(
"properties": properties,
}

response = requests.post(self.endpoint_url, json=params)
response = requests.post(
self.endpoint_url,
json=params,
headers=get_auth_header(self.client._api_key),
)
if response.status_code != 200:
raise RecommendApiException(response.text)
return AddItemResponse.model_validate(response.json())
Expand All @@ -51,7 +56,11 @@ def add_batch(self, items: List[RecommenderItem]) -> AddItemsResponse:
for item in items
]

response = requests.post(self.endpoint_url + "batch", json=params)
response = requests.post(
self.endpoint_url + "batch",
json=params,
headers=get_auth_header(self.client._api_key),
)
if response.status_code != 200:
raise RecommendApiException(response.text)
return AddItemsResponse.model_validate(response.json())
Expand All @@ -63,7 +72,9 @@ def delete(self, uuid: UUID | str) -> DeleteItemResponse:
if isinstance(uuid, str):
uuid = UUID(uuid)

response = requests.delete(self.endpoint_url + str(uuid))
response = requests.delete(
self.endpoint_url + str(uuid), headers=get_auth_header(self.client._api_key)
)
if response.status_code != 200:
raise RecommendApiException(response.text)
return DeleteItemResponse.model_validate(response.json())
12 changes: 9 additions & 3 deletions weaviate_recommend/services/data/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
AddUserInteractionResponse,
AddUserInteractionsResponse,
)
from weaviate_recommend.utils import get_datetime
from weaviate_recommend.utils import get_auth_header, get_datetime

if TYPE_CHECKING:
from weaviate_recommend import WeaviateRecommendClient
Expand Down Expand Up @@ -46,7 +46,9 @@ def add_interaction(
"created_at": created_at,
}

response = requests.post(self.endpoint_url, json=data)
response = requests.post(
self.endpoint_url, json=data, headers=get_auth_header(self.client._api_key)
)
if response.status_code != 200:
raise RecommendApiException(response.text)
return AddUserInteractionResponse.model_validate(response.json())
Expand All @@ -61,7 +63,11 @@ def add_interactions(
for interaction in data:
if not interaction["created_at"]:
interaction["created_at"] = get_datetime()
response = requests.post(self.endpoint_url + "batch", json=data)
response = requests.post(
self.endpoint_url + "batch",
json=data,
headers=get_auth_header(self.client._api_key),
)
if response.status_code != 200:
raise RecommendApiException(response.text)
return AddUserInteractionsResponse.model_validate(response.json())
7 changes: 6 additions & 1 deletion weaviate_recommend/services/personalised_search.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from weaviate_recommend.exceptions import RecommendApiException
from weaviate_recommend.models.filter import FilterConfig
from weaviate_recommend.models.responses import PersonalisedSearchResponse
from weaviate_recommend.utils import get_auth_header

if TYPE_CHECKING:
from weaviate_recommend import WeaviateRecommendClient
Expand Down Expand Up @@ -42,7 +43,11 @@ def search(
"filters": _filters,
}

response = requests.post(self.endpoint_url, json=params)
response = requests.post(
self.endpoint_url,
json=params,
headers=get_auth_header(self.client._api_key),
)
if response.status_code != 200:
raise RecommendApiException(response.text)
return PersonalisedSearchResponse.model_validate(response.json())
37 changes: 31 additions & 6 deletions weaviate_recommend/services/recommendations/item.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from weaviate_recommend.exceptions import RecommendApiException
from weaviate_recommend.models.filter import FilterConfig
from weaviate_recommend.models.responses import RecommendationsResponse
from weaviate_recommend.utils import get_auth_header

if TYPE_CHECKING:
from weaviate_recommend import WeaviateRecommendClient
Expand Down Expand Up @@ -41,7 +42,11 @@ def from_item(
"remove_reference": remove_reference,
"filters": _filters,
}
response = requests.post(self.endpoint_url + "item", json=params)
response = requests.post(
self.endpoint_url + "item",
json=params,
headers=get_auth_header(self.client._api_key),
)
if response.status_code != 200:
raise RecommendApiException(response.text)
return RecommendationsResponse.model_validate(response.json())
Expand Down Expand Up @@ -72,7 +77,11 @@ def from_items(
"remove_reference": remove_reference,
"filters": _filters,
}
response = requests.post(self.endpoint_url + "items", json=params)
response = requests.post(
self.endpoint_url + "items",
json=params,
headers=get_auth_header(self.client._api_key),
)
if response.status_code != 200:
raise RecommendApiException(response.text)
return RecommendationsResponse.model_validate(response.json())
Expand All @@ -97,7 +106,11 @@ def from_item_configured(
"remove_reference": remove_reference,
}

response = requests.post(self.endpoint_url + "item/configured", json=params)
response = requests.post(
self.endpoint_url + "item/configured",
json=params,
headers=get_auth_header(self.client._api_key),
)
if response.status_code != 200:
raise RecommendApiException(response.text)
return RecommendationsResponse.model_validate(response.json())
Expand All @@ -124,7 +137,11 @@ def from_items_configured(
"remove_reference": remove_reference,
}

response = requests.post(self.endpoint_url + "items/configured", json=params)
response = requests.post(
self.endpoint_url + "items/configured",
json=params,
headers=get_auth_header(self.client._api_key),
)
if response.status_code != 200:
raise RecommendApiException(response.text)
return RecommendationsResponse.model_validate(response.json())
Expand All @@ -149,7 +166,11 @@ def from_user(
"shuffle": shuffle,
"top_n_interactions": top_n_interactions,
}
response = requests.post(self.endpoint_url + "user", json=params)
response = requests.post(
self.endpoint_url + "user",
json=params,
headers=get_auth_header(self.client._api_key),
)
if response.status_code != 200:
raise RecommendApiException(response.text)
return RecommendationsResponse.model_validate(response.json())
Expand All @@ -172,7 +193,11 @@ def from_users(
"limit": limit,
"remove_reference": remove_reference,
}
response = requests.post(self.endpoint_url + "users", json=params)
response = requests.post(
self.endpoint_url + "users",
json=params,
headers=get_auth_header(self.client._api_key),
)
if response.status_code != 200:
raise RecommendApiException(response.text)
return RecommendationsResponse.model_validate(response.json())
15 changes: 12 additions & 3 deletions weaviate_recommend/services/recommender_management.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
DeleteRecommenderResponse,
RecommenderDetailsResponse,
)
from weaviate_recommend.utils import get_auth_header

if TYPE_CHECKING:
from weaviate_recommend import WeaviateRecommendClient
Expand Down Expand Up @@ -41,7 +42,11 @@ def create(
"trainable_properties": trainable_properties,
}

response = requests.post(self.endpoint_url, json=params)
response = requests.post(
self.endpoint_url,
json=params,
headers=get_auth_header(self.client._api_key),
)
if response.status_code != 200:
raise RecommendApiException(response.text)
return CreateRecommenderResponse.model_validate(response.json())
Expand All @@ -50,7 +55,9 @@ def delete(self):
"""
Deletes the recommender.
"""
response = requests.delete(self.endpoint_url)
response = requests.delete(
self.endpoint_url, headers=get_auth_header(self.client._api_key)
)
if response.status_code != 200:
raise RecommendApiException(response.text)
return DeleteRecommenderResponse.model_validate(response.json())
Expand All @@ -59,7 +66,9 @@ def details(self):
"""
Get details about the recommender.
"""
response = requests.get(self.endpoint_url + "details")
response = requests.get(
self.endpoint_url + "details", headers=get_auth_header(self.client._api_key)
)
if response.status_code != 200:
raise RecommendApiException(response.text)
return RecommenderDetailsResponse.model_validate(response.json())
11 changes: 9 additions & 2 deletions weaviate_recommend/services/trainer.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
TrainingStatusResponse,
TrainRecommenderResponse,
)
from weaviate_recommend.utils import get_auth_header

if TYPE_CHECKING:
from weaviate_recommend import WeaviateRecommendClient
Expand All @@ -22,7 +23,11 @@ def train(self, overwrite: bool = False) -> TrainRecommenderResponse:
Triggers the recommender training.
"""
params = {"overwrite_existing": overwrite}
response = requests.post(self.endpoint_url, json=params)
response = requests.post(
self.endpoint_url,
json=params,
headers=get_auth_header(self.client._api_key),
)
if response.status_code != 200:
raise RecommendApiException(response.text)

Expand All @@ -32,7 +37,9 @@ def status(self) -> TrainingStatusResponse:
"""
Get the training status.
"""
response = requests.get(self.endpoint_url + "status")
response = requests.get(
self.endpoint_url + "status", headers=get_auth_header(self.client._api_key)
)
if response.status_code != 200:
raise RecommendApiException(response.text)

Expand Down
7 changes: 7 additions & 0 deletions weaviate_recommend/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,10 @@ def get_datetime() -> str:
now = datetime.now()
formatted = now.strftime("%Y-%m-%dT%H:%M:%S.%f")
return formatted


def get_auth_header(api_key: str) -> dict:
"""
Creates an authentication header with the given API key.
"""
return {"Authorization": api_key, "Content-Type": "application/json"}
Loading