Source code for poiesis.api.controllers.list_tasks
"""Controller for listing tasks."""importrefromtypingimportAnyfrompoiesis.api.controllers.interfaceimportInterfaceControllerfrompoiesis.api.modelsimportTesListTasksFilter,TesViewfrompoiesis.api.tes.modelsimportTesListTasksResponsefrompoiesis.api.utilsimporttask_to_basic_task,task_to_minimal_taskfrompoiesis.repository.mongoimportMongoDBClient
[docs]classListTasksController(InterfaceController):"""Controller for listing tasks. This controller handles the listing of tasks from the database. Args: db: The database client. page_size: The number of tasks to return per page. page_token: Token for pagination. user_id: The ID of the user making the request. query_filter: The filter for the list tasks. """def__init__(self,db:MongoDBClient,user_id:str,query_filter:TesListTasksFilter,page_size:int|None=None,page_token:str|None=None,)->None:"""Initialize the controller. Args: db: The database client. page_size: The number of tasks to return per page. page_token: Token for pagination. user_id: The ID of the user making the request. query_filter: The filter for the list tasks. """self.db=dbself.page_size=page_sizeself.page_token=page_tokenself.user_id=user_idself.query_filter=query_filterdef_build_query(self)->dict[str,Any]:"""Build the query for the list tasks. Returns: A query for the list tasks. """query:dict[str,Any]={}tag_filter:list[dict[str,Any]]=[]# Name prefixifself.query_filter.name_prefix:query["name"]={"$regex":f"^{re.escape(self.query_filter.name_prefix)}"}# Stateifself.query_filter.state:query["state"]=self.query_filter.state.value# Tagsifself.query_filter.tag_key:fori,keyinenumerate(self.query_filter.tag_keyor[]):val=Noneifself.query_filter.tag_valueandi<len(self.query_filter.tag_value):val=self.query_filter.tag_value[i]ifvalisNoneorval=="":tag_filter.append({f"tags.{key}":{"$exists":True}})else:tag_filter.append({f"tags.{key}":val})iftag_filter:if"$and"inquery:query["$and"].extend(tag_filter)else:query["$and"]=tag_filterifself.user_id:query["user_id"]=self.user_idreturnquery
[docs]asyncdefexecute(self,*args:Any,**kwargs:Any)->TesListTasksResponse:"""Execute the controller to list tasks. Returns: A response containing the list of tasks and pagination token. """query=self._build_query()tasks,next_page_token=awaitself.db.list_tasks(query,self.page_size,self.page_token)ifself.query_filter.view==TesView.MINIMAL:returnTesListTasksResponse(tasks=[task_to_minimal_task(task)fortaskintasks],next_page_token=next_page_token,)elifself.query_filter.view==TesView.BASIC:returnTesListTasksResponse(tasks=[task_to_basic_task(task)fortaskintasks],next_page_token=next_page_token,)else:returnTesListTasksResponse(tasks=tasks,next_page_token=next_page_token,)