I think the last object is being processed because the function may not be handling the Event Grid events correctly or is overwriting previous objects.
Here is my idea to adjust your code :
In the 1st part, all objects are added to a list events
and sent in one call to outputevent.set(events)
:
import azure.functions as func
import logging
import datetime
app = func.FunctionApp()
@app.blob_trigger(arg_name="inputblob",
path="data/input/{name}",
connection="BlobStorageConnectionString")
@app.event_grid_output(arg_name="outputevent",
topic_endpoint_uri="MyEventGridTopicUriSetting",
topic_key_setting="MyEventGridTopicKeySetting")
def blob_trigger(inputblob: func.InputStream, outputevent: func.Out[func.EventGridOutputEvent]):
logging.info(f"Python blob trigger function processed blob"
f"Name: {inputblob.name}"
f"Blob Size: {inputblob.length} bytes")
data_list = [{"label": "person", "name": "Ann", "id": "AAAA1234"}, {"label": "person", "name": "Sam", "id": "AAAA1235"}] events = [] for dt in data_list:
events.append(func.EventGridOutputEvent(
id=dt["id"],
data=dt,
subject="test-subject",
event_type="person",
event_time=datetime.datetime.utcnow(),
data_version="data_v1"))
outputevent.set(events)
In the 2nd part, the EventGridTrigger
will log and execute the Gremlin insert query for each event as it retrieves the id
and name
from the data
payload and constructs the Gremlin query :
import logging
import azure.functions as func
import json
from gremlin_python.driver import client, serializer
app = func.FunctionApp()
@app.event_grid_trigger(arg_name="eventgridobject")
def EventGridTrigger(eventgridobject: func.EventGridEvent):
try:
data = eventgridobject.get_json()
event_type = eventgridobject.event_type
id = data['id']
name = data['name']
account_name = "AAAA"
database_id = "BBBB"
graph_id = "CCCC"
primary_key = "DDDD"
_gremlin_insert_vertices = f"g.addV('{event_type}').property('id', '{id}').property('name', '{name}').property('pk', 'pk')"
gremlin_client = client.Client(
url=f"wss://{account_name}.gremlin.cosmos.azure.com:443/",
traversal_source="g",
username=f"/dbs/{database_id}/colls/{graph_id}",
password=f"{primary_key}",
message_serializer=serializer.GraphSONSerializersV2d0(),
)
logging.info(f"Executing Gremlin query: {_gremlin_insert_vertices}")
gremlin_client.submit(_gremlin_insert_vertices)
except Exception as e:
logging.error(f"Error executing Gremlin query: {e}")