66from typing import Callable
77
88import yaml
9- from pydantic import BaseModel
109
1110from csfunctions import ErrorResponse , Event , Request , WorkloadResponse
1211from csfunctions .actions import ActionUnion
1312from csfunctions .config import ConfigModel , FunctionModel
13+ from csfunctions .events import EventData
1414from csfunctions .objects import BaseObject
1515from csfunctions .response import ResponseUnion
1616from csfunctions .service import Service
@@ -31,7 +31,7 @@ def _get_function(function_name: str, function_dir: str) -> FunctionModel:
3131 config = _load_config (function_dir )
3232 func = next (func for func in config .functions if func .name == function_name )
3333 if not func :
34- raise ValueError (f"Could not find function with name { function_name } in the environment.yaml." )
34+ raise ValueError (f"Could not find function with name { function_name } in the environment.yaml." )
3535 return func
3636
3737
@@ -53,7 +53,7 @@ def link_objects(event: Event):
5353 e.g. document.part
5454 """
5555 data = getattr (event , "data" , None )
56- if not isinstance (data , BaseModel ):
56+ if data is None or not isinstance (data , EventData ): # type: ignore # MyPy doesn't like PEP604
5757 return
5858
5959 # we expect all objects to be passed in Event.data
@@ -81,24 +81,26 @@ def execute(function_name: str, request_body: str, function_dir: str = "src") ->
8181 try :
8282 request = Request (** json .loads (request_body ))
8383 link_objects (request .event )
84+
8485 function_callback = get_function_callable (function_name , function_dir )
85- service = Service (str (request .metadata .service_url ), request .metadata .service_token )
86+ service = Service (
87+ str (request .metadata .service_url ) if request .metadata .service_url else None , request .metadata .service_token
88+ )
8689
8790 response = function_callback (request .metadata , request .event , service )
8891
8992 if response is None :
9093 return ""
9194
92- if isinstance (response , ActionUnion ):
95+ if isinstance (response , ActionUnion ): # type: ignore # MyPy doesn't like PEP604
9396 # wrap returned Actions into a WorkloadResponse
9497 response = WorkloadResponse (actions = [response ])
95- elif isinstance (response , list ) and all (isinstance (o , ActionUnion ) for o in response ):
98+ elif isinstance (response , list ) and all (isinstance (o , ActionUnion ) for o in response ): # type: ignore # MyPy doesn't like PEP604
9699 # wrap list of Actions into a WorkloadResponse
97100 response = WorkloadResponse (actions = response )
98101
99- if not isinstance (
100- response , ResponseUnion
101- ): # need to check for ResponseUnion instead of Response, because isinstance doesn't work with annotated unions
102+ if not isinstance (response , ResponseUnion ): # type: ignore # MyPy doesn't like PEP604
103+ # need to check for ResponseUnion instead of Response, because isinstance doesn't work with annotated unions
102104 raise ValueError ("Function needs to return a Response object or None." )
103105
104106 # make sure the event_id is filled out correctly
0 commit comments