Skip to content

Commit cd913ae

Browse files
committed
Added humbug endpoints
1 parent 4d7eb95 commit cd913ae

3 files changed

Lines changed: 67 additions & 0 deletions

File tree

bugout/app.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from . import data
55
from .calls import ping
66
from .group import Group
7+
from .humbug import Humbug
78
from .journal import Journal
89
from .user import User
910
from .settings import BUGOUT_BROOD_URL, BUGOUT_SPIRE_URL, REQUESTS_TIMEOUT
@@ -26,6 +27,7 @@ def __init__(
2627

2728
self.user = User(self.brood_api_url)
2829
self.group = Group(self.brood_api_url)
30+
self.humbug = Humbug(self.spire_api_url)
2931
self.journal = Journal(self.spire_api_url)
3032

3133
@property
@@ -549,3 +551,13 @@ def search(
549551
) -> data.BugoutSearchResults:
550552
self.journal.timeout = timeout
551553
return self.journal.search(token, journal_id, query, limit, offset, content)
554+
555+
# Humbug
556+
def get_humbug_integrations(
557+
self,
558+
token: Union[str, uuid.UUID],
559+
group_id: Optional[Union[str, uuid.UUID]] = None,
560+
timeout: float = REQUESTS_TIMEOUT,
561+
) -> data.BugoutHumbugIntegrationsList:
562+
self.humbug.timeout = timeout
563+
return self.humbug.get_humbug_integrations(token=token, group_id=group_id)

bugout/data.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,3 +171,16 @@ class BugoutSearchResults(BaseModel):
171171
next_offset: Optional[int]
172172
max_score: float
173173
results: List[BugoutSearchResult]
174+
175+
176+
class BugoutHumbugIntegration(BaseModel):
177+
id: uuid.UUID
178+
group_id: uuid.UUID
179+
journal_id: uuid.UUID
180+
journal_name: Optional[str] = None
181+
created_at: datetime
182+
updated_at: datetime
183+
184+
185+
class BugoutHumbugIntegrationsList(BaseModel):
186+
integrations: List[BugoutHumbugIntegration] = Field(default_factory=list)

bugout/humbug.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
from typing import Any, Dict, Optional, Union
2+
import uuid
3+
4+
from .calls import make_request, InvalidUrlSpec
5+
from .data import Method, Role, BugoutHumbugIntegrationsList
6+
from .settings import REQUESTS_TIMEOUT
7+
8+
9+
class Humbug:
10+
"""
11+
Represent a humbug from Bugout.
12+
"""
13+
14+
def __init__(
15+
self, url: Optional[str] = None, timeout: float = REQUESTS_TIMEOUT
16+
) -> None:
17+
if url is None:
18+
raise InvalidUrlSpec("Invalid spire url specified")
19+
self.url = url
20+
self.timeout = timeout
21+
22+
def _call(self, method: Method, path: str, **kwargs):
23+
url = f"{self.url.rstrip('/')}/{path.rstrip('/')}"
24+
result = make_request(method=method, url=url, timeout=self.timeout, **kwargs)
25+
return result
26+
27+
def get_humbug_integrations(
28+
self,
29+
token: Union[str, uuid.UUID],
30+
group_id: Optional[Union[str, uuid.UUID]] = None,
31+
) -> BugoutHumbugIntegrationsList:
32+
humbug_path = "humbug/integrations"
33+
headers = {
34+
"Authorization": f"Bearer {token}",
35+
}
36+
query_params = {}
37+
if group_id is not None:
38+
query_params.update({"group_id": group_id})
39+
result = self._call(
40+
method=Method.get, path=humbug_path, params=query_params, headers=headers
41+
)
42+
return BugoutHumbugIntegrationsList(**result)

0 commit comments

Comments
 (0)