Skip to content

Commit 017ba8b

Browse files
authored
Merge pull request #27 from ks6088ts-labs/feature/issue-26_azure-event-grid
add event grid api
2 parents d4cd93e + 46165f5 commit 017ba8b

File tree

14 files changed

+315
-4
lines changed

14 files changed

+315
-4
lines changed

.pre-commit-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,4 @@ repos:
1313
rev: 24.2.0
1414
hooks:
1515
- id: black
16-
exclude: 'client/.*'
16+
exclude: 'client/.*|specs/.*'

azure_event_grid.env.sample

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
AZURE_EVENT_GRID_ACCESS_KEY="<access-key>"
2+
AZURE_EVENT_GRID_TOPIC_ENDPOINT="https://<name>.<region>.eventgrid.azure.net/api/events"

backend/fastapi.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from fastapi.openapi.utils import get_openapi
33

44
from backend.routers import azure_ai_vision as azure_ai_vision_router
5+
from backend.routers import azure_event_grid as azure_event_grid_router
56
from backend.routers import azure_openai as azure_openai_router
67
from backend.routers import azure_storage as azure_storage_router
78
from backend.routers import document_intelligence as document_intelligence_router
@@ -14,6 +15,7 @@
1415
app.include_router(document_intelligence_router.router)
1516
app.include_router(azure_storage_router.router)
1617
app.include_router(azure_ai_vision_router.router)
18+
app.include_router(azure_event_grid_router.router)
1719

1820

1921
def custom_openapi():
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
from logging import getLogger
2+
3+
from azure.core.credentials import AzureKeyCredential
4+
from azure.eventgrid import EventGridEvent, EventGridPublisherClient
5+
6+
from backend.settings.azure_event_grid import Settings
7+
8+
logger = getLogger(__name__)
9+
10+
11+
class Client:
12+
def __init__(self, settings: Settings) -> None:
13+
self.settings = settings
14+
15+
def get_client_from_access_key(self) -> EventGridPublisherClient:
16+
return EventGridPublisherClient(
17+
endpoint=self.settings.azure_event_grid_topic_endpoint,
18+
credential=AzureKeyCredential(self.settings.azure_event_grid_access_key),
19+
)
20+
21+
def send_event_grid_event(
22+
self,
23+
subject: str,
24+
event_type: str,
25+
data: dict,
26+
data_version: str,
27+
) -> None:
28+
try:
29+
client = self.get_client_from_access_key()
30+
client.send(
31+
EventGridEvent(
32+
subject=subject,
33+
data=data,
34+
event_type=event_type,
35+
data_version=data_version,
36+
)
37+
)
38+
logger.info(f"Event sent: {event_type}")
39+
except Exception as e:
40+
logger.error(f"Failed to send event: {e}")
41+
raise e
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
from logging import getLogger
2+
3+
from fastapi import APIRouter
4+
5+
from backend.internals import azure_event_grid
6+
from backend.settings.azure_event_grid import Settings
7+
8+
logger = getLogger(__name__)
9+
client = azure_event_grid.Client(
10+
settings=Settings(),
11+
)
12+
13+
router = APIRouter(
14+
prefix="/azure_event_grid",
15+
tags=["azure_event_grid"],
16+
responses={404: {"description": "Not found"}},
17+
)
18+
19+
20+
@router.post(
21+
"/event_grid_event/",
22+
status_code=200,
23+
)
24+
async def send_event_grid_event(
25+
data={"team": "azure-sdk"},
26+
subject="Door1",
27+
event_type="Azure.Sdk.Demo",
28+
data_version="2.0",
29+
):
30+
try:
31+
client.send_event_grid_event(
32+
subject=subject,
33+
data=data,
34+
event_type=event_type,
35+
data_version=data_version,
36+
)
37+
except Exception as e:
38+
logger.error(f"Failed to analyze image: {e}")
39+
raise
40+
return
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
from pydantic_settings import BaseSettings, SettingsConfigDict
2+
3+
4+
class Settings(BaseSettings):
5+
azure_event_grid_access_key: str = "<access-key>"
6+
azure_event_grid_topic_endpoint: str = "<name>.<region>.eventgrid.azure.net"
7+
8+
model_config = SettingsConfigDict(
9+
env_file="azure_event_grid.env",
10+
env_file_encoding="utf-8",
11+
)

client/api_client.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
if TYPE_CHECKING:
1717
from .azure_ai_vision.azure_ai_vision_request_builder import Azure_ai_visionRequestBuilder
18+
from .azure_event_grid.azure_event_grid_request_builder import Azure_event_gridRequestBuilder
1819
from .azure_openai.azure_openai_request_builder import Azure_openaiRequestBuilder
1920
from .azure_storage.azure_storage_request_builder import Azure_storageRequestBuilder
2021
from .document_intelligence.document_intelligence_request_builder import Document_intelligenceRequestBuilder
@@ -52,6 +53,15 @@ def azure_ai_vision(self) -> Azure_ai_visionRequestBuilder:
5253

5354
return Azure_ai_visionRequestBuilder(self.request_adapter, self.path_parameters)
5455

56+
@property
57+
def azure_event_grid(self) -> Azure_event_gridRequestBuilder:
58+
"""
59+
The azure_event_grid property
60+
"""
61+
from .azure_event_grid.azure_event_grid_request_builder import Azure_event_gridRequestBuilder
62+
63+
return Azure_event_gridRequestBuilder(self.request_adapter, self.path_parameters)
64+
5565
@property
5666
def azure_openai(self) -> Azure_openaiRequestBuilder:
5767
"""
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
from __future__ import annotations
2+
from kiota_abstractions.base_request_builder import BaseRequestBuilder
3+
from kiota_abstractions.get_path_parameters import get_path_parameters
4+
from kiota_abstractions.request_adapter import RequestAdapter
5+
from typing import Any, Callable, Dict, List, Optional, TYPE_CHECKING, Union
6+
7+
if TYPE_CHECKING:
8+
from .event_grid_event.event_grid_event_request_builder import Event_grid_eventRequestBuilder
9+
10+
class Azure_event_gridRequestBuilder(BaseRequestBuilder):
11+
"""
12+
Builds and executes requests for operations under /azure_event_grid
13+
"""
14+
def __init__(self,request_adapter: RequestAdapter, path_parameters: Union[str, Dict[str, Any]]) -> None:
15+
"""
16+
Instantiates a new Azure_event_gridRequestBuilder and sets the default values.
17+
param path_parameters: The raw url or the url-template parameters for the request.
18+
param request_adapter: The request adapter to use to execute the requests.
19+
Returns: None
20+
"""
21+
super().__init__(request_adapter, "{+baseurl}/azure_event_grid", path_parameters)
22+
23+
@property
24+
def event_grid_event(self) -> Event_grid_eventRequestBuilder:
25+
"""
26+
The event_grid_event property
27+
"""
28+
from .event_grid_event.event_grid_event_request_builder import Event_grid_eventRequestBuilder
29+
30+
return Event_grid_eventRequestBuilder(self.request_adapter, self.path_parameters)
31+
32+
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
from __future__ import annotations
2+
from dataclasses import dataclass, field
3+
from kiota_abstractions.base_request_builder import BaseRequestBuilder
4+
from kiota_abstractions.base_request_configuration import RequestConfiguration
5+
from kiota_abstractions.get_path_parameters import get_path_parameters
6+
from kiota_abstractions.method import Method
7+
from kiota_abstractions.request_adapter import RequestAdapter
8+
from kiota_abstractions.request_information import RequestInformation
9+
from kiota_abstractions.request_option import RequestOption
10+
from kiota_abstractions.serialization import Parsable, ParsableFactory
11+
from typing import Any, Callable, Dict, List, Optional, TYPE_CHECKING, Union
12+
13+
if TYPE_CHECKING:
14+
from ...models.h_t_t_p_validation_error import HTTPValidationError
15+
16+
class Event_grid_eventRequestBuilder(BaseRequestBuilder):
17+
"""
18+
Builds and executes requests for operations under /azure_event_grid/event_grid_event
19+
"""
20+
def __init__(self,request_adapter: RequestAdapter, path_parameters: Union[str, Dict[str, Any]]) -> None:
21+
"""
22+
Instantiates a new Event_grid_eventRequestBuilder and sets the default values.
23+
param path_parameters: The raw url or the url-template parameters for the request.
24+
param request_adapter: The request adapter to use to execute the requests.
25+
Returns: None
26+
"""
27+
super().__init__(request_adapter, "{+baseurl}/azure_event_grid/event_grid_event{?data*,data_version*,event_type*,subject*}", path_parameters)
28+
29+
async def post(self,request_configuration: Optional[RequestConfiguration] = None) -> Optional[UntypedNode]:
30+
"""
31+
Send Event Grid Event
32+
param request_configuration: Configuration for the request such as headers, query parameters, and middleware options.
33+
Returns: Optional[UntypedNode]
34+
"""
35+
request_info = self.to_post_request_information(
36+
request_configuration
37+
)
38+
from ...models.h_t_t_p_validation_error import HTTPValidationError
39+
40+
error_mapping: Dict[str, ParsableFactory] = {
41+
"422": HTTPValidationError,
42+
}
43+
if not self.request_adapter:
44+
raise Exception("Http core is null")
45+
return await self.request_adapter.send_async(request_info, UntypedNode, error_mapping)
46+
47+
def to_post_request_information(self,request_configuration: Optional[RequestConfiguration] = None) -> RequestInformation:
48+
"""
49+
Send Event Grid Event
50+
param request_configuration: Configuration for the request such as headers, query parameters, and middleware options.
51+
Returns: RequestInformation
52+
"""
53+
request_info = RequestInformation(Method.POST, self.url_template, self.path_parameters)
54+
request_info.configure(request_configuration)
55+
request_info.headers.try_add("Accept", "application/json")
56+
return request_info
57+
58+
def with_url(self,raw_url: Optional[str] = None) -> Event_grid_eventRequestBuilder:
59+
"""
60+
Returns a request builder with the provided arbitrary URL. Using this method means any other path or query parameters are ignored.
61+
param raw_url: The raw URL to use for the request builder.
62+
Returns: Event_grid_eventRequestBuilder
63+
"""
64+
if not raw_url:
65+
raise TypeError("raw_url cannot be null.")
66+
return Event_grid_eventRequestBuilder(self.request_adapter, raw_url)
67+
68+
@dataclass
69+
class Event_grid_eventRequestBuilderPostQueryParameters():
70+
"""
71+
Send Event Grid Event
72+
"""
73+
data: Optional[str] = None
74+
75+
data_version: Optional[str] = None
76+
77+
event_type: Optional[str] = None
78+
79+
subject: Optional[str] = None
80+
81+
82+

client/kiota-lock.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"descriptionHash": "8B134A8CB821E7CFB27348C372F2797D177F04C458AB4544D4EEF0B0E503CBC0BC5F34BE9A420071069BE90CD665899AC468ED9BF2418F4986F7FD065E07BA29",
2+
"descriptionHash": "7B099024A20A8AF46F71A50244FAA38CFA626E063643DD3BFBC0B21CDF20D04C6F376C3F876E344548EA40E667F0F6F00EF4C57F94AB17470B15571B561A97E3",
33
"descriptionLocation": "../specs/openapi.json",
44
"lockFileVersion": "1.0.0",
55
"kiotaVersion": "1.13.0",

0 commit comments

Comments
 (0)