1
+ # Copyright (c) Microsoft Corporation. All rights reserved.
2
+ # Licensed under the MIT License.
3
+
1
4
import datetime
2
5
import typing
3
6
4
- from azure .functions import _abc as funcabc
7
+ from azure .functions import _abc as func_abc
8
+ from azure .functions import meta
5
9
6
10
7
- class EventHubEvent (funcabc .EventHubEvent ):
11
+ class EventHubEvent (func_abc .EventHubEvent ):
8
12
"""A concrete implementation of Event Hub message type."""
9
13
10
14
def __init__ (self , * ,
11
15
body : bytes ,
16
+ trigger_metadata : typing .Mapping [str , meta .Datum ] = None ,
12
17
enqueued_time : typing .Optional [datetime .datetime ] = None ,
13
18
partition_key : typing .Optional [str ] = None ,
14
19
sequence_number : typing .Optional [int ] = None ,
15
20
offset : typing .Optional [str ] = None ,
16
21
iothub_metadata : typing .Optional [
17
22
typing .Mapping [str , str ]] = None ) -> None :
18
23
self .__body = body
24
+ self .__trigger_metadata = trigger_metadata
19
25
self .__enqueued_time = enqueued_time
20
26
self .__partition_key = partition_key
21
27
self .__sequence_number = sequence_number
22
28
self .__offset = offset
23
29
self .__iothub_metadata = iothub_metadata
24
30
31
+ # Cache for trigger metadata after Python object conversion
32
+ self ._trigger_metadata_pyobj : typing .Optional [
33
+ typing .Mapping [str , typing .Any ]] = None
34
+
25
35
def get_body (self ) -> bytes :
26
36
return self .__body
27
37
@@ -45,6 +55,30 @@ def enqueued_time(self) -> typing.Optional[datetime.datetime]:
45
55
def offset (self ) -> typing .Optional [str ]:
46
56
return self .__offset
47
57
58
+ @property
59
+ def metadata (self ) -> typing .Optional [typing .Mapping [str , typing .Any ]]:
60
+ """Getting read-only trigger metadata in a Python dictionary.
61
+
62
+ Exposing the raw trigger_metadata to our customer. For cardinality=many
63
+ scenarios, each event points to the common metadata of all the events.
64
+
65
+ So when using metadata field when cardinality=many, it only needs to
66
+ take one of the events to get all the data (e.g. events[0].metadata).
67
+
68
+ Returns:
69
+ --------
70
+ typing.Mapping[str, object]
71
+ Return the Python dictionary of trigger metadata
72
+ """
73
+ if self .__trigger_metadata is None :
74
+ return None
75
+
76
+ if self ._trigger_metadata_pyobj is None :
77
+ self ._trigger_metadata_pyobj = {
78
+ k : v .python_value for (k , v ) in self .__trigger_metadata .items ()
79
+ }
80
+ return self ._trigger_metadata_pyobj
81
+
48
82
def __repr__ (self ) -> str :
49
83
return (
50
84
f'<azure.EventHubEvent '
0 commit comments