@@ -124,6 +124,8 @@ def get_user_metadata(
124124 else :
125125 filters = {"email" : pk }
126126 users = self .list_users (include = include , ** filters )
127+ if not users :
128+ raise AppException ("User not found." )
127129 return users [0 ]
128130
129131 def set_custom_field_value (
@@ -132,14 +134,23 @@ def set_custom_field_value(
132134 entity : CustomFieldEntity ,
133135 parent_entity : CustomFieldEntityEnum ,
134136 field_name : str ,
135- value : dict ,
137+ value : Any ,
136138 ):
137139 _context = {}
138140 if entity == CustomFieldEntityEnum .PROJECT :
139141 _context ["project_id" ] = entity_id
140142 template_id = self .service_provider .get_custom_field_id (
141143 field_name , entity = entity
142144 )
145+ component_id = self .service_provider .get_custom_field_component_id (
146+ template_id , entity = entity
147+ )
148+ # timestamp: convert seconds to milliseconds
149+ if component_id == CustomFieldType .DATE_PICKER .value :
150+ try :
151+ value = value * 1000
152+ except Exception :
153+ raise AppException ("Invalid custom field value provided." )
143154 self .service_provider .work_management .set_custom_field_value (
144155 entity_id = entity_id ,
145156 entity = entity ,
@@ -220,17 +231,6 @@ def get_metadata(
220231 )
221232 return use_case .execute ()
222233
223- def set_project_custom_field (
224- self , project : ProjectEntity , custom_field_name : str , value : Any
225- ):
226- use_case = usecases .SetProjectCustomFieldUseCase (
227- project = project ,
228- service_provider = self .service_provider ,
229- custom_field_name = custom_field_name ,
230- value = value ,
231- )
232- return use_case .execute ()
233-
234234 def create (self , entity : ProjectEntity ) -> Response :
235235 use_case = usecases .CreateProjectUseCase (
236236 project = entity , service_provider = self .service_provider
@@ -360,32 +360,36 @@ def list_projects(
360360 include : List [str ] = None ,
361361 ** filters : Unpack [ProjectFilters ],
362362 ) -> List [ProjectEntity ]:
363- if include and "custom_fields" in include :
364- chain = QueryBuilderChain (
365- [
366- FieldValidationHandler (ProjectFilters .__annotations__ .keys ()),
367- ProjectFilterHandler (
368- self .service_provider , entity = CustomFieldEntityEnum .PROJECT
369- ),
370- ]
371- )
372- query = chain .handle (filters , EmptyQuery ())
363+ chain = QueryBuilderChain (
364+ [
365+ FieldValidationHandler (ProjectFilters .__annotations__ .keys ()),
366+ ProjectFilterHandler (
367+ self .service_provider , entity = CustomFieldEntityEnum .PROJECT
368+ ),
369+ ]
370+ )
371+ query = chain .handle (filters , EmptyQuery ())
372+ include_custom_fields : bool = (
373+ True if include and "custom_fields" in include else False
374+ )
375+ if include_custom_fields :
373376 response = self .service_provider .work_management .list_projects (
374377 body_query = query
375378 )
376379 else :
377- # TODO add call after BED update
378- raise NotImplementedError
379- # set custom field names
380+ response = self . service_provider . work_management . search_projects (
381+ body_query = query
382+ )
380383 if response .error :
381384 raise AppException (response .error )
382385 projects = response .data
383- custom_fields_list = [project .custom_fields for project in projects ]
384- serialized_fields = serialize_custom_fields (
385- self .service_provider , custom_fields_list , CustomFieldEntityEnum .PROJECT
386- )
387- for project , serialized_custom_fields in zip (projects , serialized_fields ):
388- project .custom_fields = serialized_custom_fields
386+ if include_custom_fields :
387+ custom_fields_list = [project .custom_fields for project in projects ]
388+ serialized_fields = serialize_custom_fields (
389+ self .service_provider , custom_fields_list , CustomFieldEntityEnum .PROJECT
390+ )
391+ for project , serialized_custom_fields in zip (projects , serialized_fields ):
392+ project .custom_fields = serialized_custom_fields
389393 return projects
390394
391395
0 commit comments