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

Adding V2 programming model support for Dapr Extension #181

Merged
merged 34 commits into from
Aug 31, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
c8555d7
Adding daprServiceInvocation trigger
ASHIQUEMD Jun 1, 2023
c1d41e7
Adding daprServiceInvocation trigger
ASHIQUEMD Jun 1, 2023
a8a8e6b
moving dapr service invocation trigger to TriggerApi class
ASHIQUEMD Jun 1, 2023
32474b5
Adding test_dapr_service_invocation_default_args
ASHIQUEMD Jun 1, 2023
ee5d433
moving dapr related configs to its own file
ASHIQUEMD Jun 7, 2023
3b10212
Adding bindings for Dapr extension
ASHIQUEMD Jun 8, 2023
1c385a1
Adding test for dapr bindings
ASHIQUEMD Jun 8, 2023
9a30bb9
Adding test for dapr bindings
ASHIQUEMD Jun 8, 2023
563993e
Using TriggerApi and BindingApi instead of DecoratorApi
ASHIQUEMD Jun 13, 2023
66a2ac2
Making route optional param
ASHIQUEMD Jun 15, 2023
2dfbd7b
Adding aka.ms links for triggers and bindings
ASHIQUEMD Jun 19, 2023
b0cd7cc
assigning topic to route when route is empty
ASHIQUEMD Jun 21, 2023
222a199
assigning topic to route when route is empty
ASHIQUEMD Jun 21, 2023
c119a2a
Merge branch 'dev' into dapr-python-v2-support
gavin-aguiar Jun 21, 2023
26b58bc
Fixed dapr_address param type
ASHIQUEMD Jun 23, 2023
0b2f6c1
Merge branch 'dapr-python-v2-support' of https://github.com/ASHIQUEMD…
ASHIQUEMD Jun 23, 2023
b4cbac2
Fixed dapr_address param type
ASHIQUEMD Jun 23, 2023
e4e3351
fixed indentations
ASHIQUEMD Jun 23, 2023
bb7c21e
fixed indentations
ASHIQUEMD Jun 23, 2023
5f182d5
fixed indentations
ASHIQUEMD Jun 23, 2023
2ee768d
fixed indentations
ASHIQUEMD Jun 23, 2023
0630c98
fixed indentations
ASHIQUEMD Jun 23, 2023
109e30f
fixed indentations
ASHIQUEMD Jun 23, 2023
1585717
Merge branch 'dev' into dapr-python-v2-support
gavin-aguiar Jul 11, 2023
1cf068e
Fixed review comments
ASHIQUEMD Jul 17, 2023
27ff82a
Merge branch 'dapr-python-v2-support' of https://github.com/ASHIQUEMD…
ASHIQUEMD Jul 17, 2023
a7ec74d
adding SettingsApi
ASHIQUEMD Jul 17, 2023
959d78b
Merge branch 'dev' into dapr-python-v2-support
gavin-aguiar Jul 17, 2023
b7828b3
line break
ASHIQUEMD Jul 18, 2023
058d9fd
Adding DaprBluePrint
ASHIQUEMD Jul 19, 2023
86da23d
fixed spacing issue
ASHIQUEMD Jul 21, 2023
c4ffdae
Merge branch 'dev' into dapr-python-v2-support
gavin-aguiar Aug 1, 2023
e1adfe4
Merge branch 'dev' into dapr-python-v2-support
ASHIQUEMD Aug 7, 2023
5f4ea2d
Merge branch 'dev' into dapr-python-v2-support
ASHIQUEMD Aug 14, 2023
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
5 changes: 4 additions & 1 deletion azure/functions/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
AsgiFunctionApp, WsgiFunctionApp,
ExternalHttpFunctionApp)
from ._durable_functions import OrchestrationContext, EntityContext
from .decorators.dapr.dapr_function_app import DaprFunctionApp, DaprBlueprint
from .decorators.function_app import (FunctionRegister, TriggerApi,
BindingApi, SettingsApi)
from .extension import (ExtensionMeta, FunctionExtensionException,
Expand Down Expand Up @@ -94,7 +95,9 @@
'AuthLevel',
'Cardinality',
'AccessRights',
'HttpMethod'
'HttpMethod',
'DaprFunctionApp',
'DaprBlueprint'
)

__version__ = '1.16.0'
5 changes: 4 additions & 1 deletion azure/functions/decorators/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
AuthLevel, Blueprint, ExternalHttpFunctionApp, AsgiFunctionApp, \
WsgiFunctionApp, FunctionRegister, TriggerApi, BindingApi, SettingsApi
from .http import HttpMethod
from .dapr.dapr_function_app import DaprFunctionApp, DaprBlueprint

__all__ = [
'FunctionApp',
Expand All @@ -22,5 +23,7 @@
'AuthLevel',
'Cardinality',
'AccessRights',
'HttpMethod'
'HttpMethod',
'DaprFunctionApp',
'DaprBlueprint'
]
9 changes: 9 additions & 0 deletions azure/functions/decorators/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,12 @@
EVENT_GRID_TRIGGER = "eventGridTrigger"
EVENT_GRID = "eventGrid"
TABLE = "table"
DAPR_SERVICE_INVOCATION_TRIGGER = "daprServiceInvocationTrigger"
DAPR_BINDING_TRIGGER = "daprBindingTrigger"
DAPR_TOPIC_TRIGGER = "daprTopicTrigger"
DAPR_STATE = "daprState"
DAPR_SECRET = "daprSecret"
DAPR_PUBLISH = "daprPublish"
DAPR_INVOKE = "daprInvoke"
DAPR_PUBLISH = "daprPublish"
DAPR_BINDING = "daprBinding"
170 changes: 170 additions & 0 deletions azure/functions/decorators/dapr/dapr.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.
from typing import Optional

from azure.functions.decorators.constants import DAPR_BINDING, DAPR_INVOKE, \
DAPR_PUBLISH, DAPR_SECRET, DAPR_SERVICE_INVOCATION_TRIGGER, \
DAPR_BINDING_TRIGGER, DAPR_STATE, DAPR_TOPIC_TRIGGER
from azure.functions.decorators.core import InputBinding, Trigger, DataType, \
OutputBinding


class DaprServiceInvocationTrigger(Trigger):

@staticmethod
def get_binding_name() -> str:
return DAPR_SERVICE_INVOCATION_TRIGGER

def __init__(self,
name: str,
method_name: str,
data_type: Optional[DataType] = None,
**kwargs):
self.method_name = method_name
super().__init__(name=name, data_type=data_type)


class DaprBindingTrigger(Trigger):

@staticmethod
def get_binding_name() -> str:
return DAPR_BINDING_TRIGGER

def __init__(self,
name: str,
binding_name: str,
data_type: Optional[DataType] = None,
**kwargs):
self.binding_name = binding_name
super().__init__(name=name, data_type=data_type)


class DaprTopicTrigger(Trigger):

@staticmethod
def get_binding_name() -> str:
return DAPR_TOPIC_TRIGGER

def __init__(self,
name: str,
pub_sub_name: str,
topic: str,
route: Optional[str] = None,
data_type: Optional[DataType] = None,
**kwargs):
self.pub_sub_name = pub_sub_name
self.topic = topic
self.route = route
super().__init__(name=name, data_type=data_type)


class DaprStateInput(InputBinding):
@staticmethod
def get_binding_name() -> str:
return DAPR_STATE

def __init__(self,
name: str,
state_store: str,
key: str,
dapr_address: Optional[str],
data_type: Optional[DataType] = None,
**kwargs):
self.state_store = state_store
self.key = key
self.dapr_address = dapr_address
super().__init__(name=name, data_type=data_type)


class DaprSecretInput(InputBinding):
@staticmethod
def get_binding_name() -> str:
return DAPR_SECRET

def __init__(self,
name: str,
secret_store_name: str,
key: str,
metadata: str,
dapr_address: Optional[str],
data_type: Optional[DataType] = None,
**kwargs):
self.secret_store_name = secret_store_name
self.key = key
self.metadata = metadata
self.dapr_address = dapr_address
super().__init__(name=name, data_type=data_type)


class DaprStateOutput(OutputBinding):
@staticmethod
def get_binding_name() -> str:
return DAPR_STATE

def __init__(self,
name: str,
state_store: str,
key: str,
dapr_address: Optional[str],
data_type: Optional[DataType] = None,
**kwargs):
self.state_store = state_store
self.key = key
self.dapr_address = dapr_address
super().__init__(name=name, data_type=data_type)


class DaprInvokeOutput(OutputBinding):
@staticmethod
def get_binding_name() -> str:
return DAPR_INVOKE

def __init__(self,
name: str,
app_id: str,
method_name: str,
http_verb: str,
dapr_address: Optional[str],
data_type: Optional[DataType] = None,
**kwargs):
self.app_id = app_id
self.method_name = method_name
self.http_verb = http_verb
self.dapr_address = dapr_address
super().__init__(name=name, data_type=data_type)


class DaprPublishOutput(OutputBinding):
@staticmethod
def get_binding_name() -> str:
return DAPR_PUBLISH

def __init__(self,
name: str,
pub_sub_name: str,
topic: str,
dapr_address: Optional[str],
data_type: Optional[DataType] = None,
**kwargs):
self.pub_sub_name = pub_sub_name
self.topic = topic
self.dapr_address = dapr_address
super().__init__(name=name, data_type=data_type)


class DaprBindingOutput(OutputBinding):
@staticmethod
def get_binding_name() -> str:
return DAPR_BINDING

def __init__(self,
name: str,
binding_name: str,
operation: str,
dapr_address: Optional[str],
data_type: Optional[DataType] = None,
**kwargs):
self.binding_name = binding_name
self.operation = operation
self.dapr_address = dapr_address
super().__init__(name=name, data_type=data_type)
Loading
Loading