1- from typing import List , Optional , Dict , Union
1+ from typing import List , Optional , Dict , Union , Any
22import datetime
33from sqlalchemy import func
44from sqlalchemy .orm .attributes import flag_modified
1010 CognitionMarkdownFileState ,
1111 CognitionIntegrationType ,
1212)
13+ from ..util import prevent_sql_injection
1314
1415FINISHED_STATES = [
1516 CognitionMarkdownFileState .FINISHED .value ,
@@ -54,6 +55,7 @@ def get_all_in_org(
5455 org_id : str ,
5556 integration_type : Optional [str ] = None ,
5657 only_synced : bool = False ,
58+ exclude_failed : bool = False ,
5759) -> List [CognitionIntegration ]:
5860 query = session .query (CognitionIntegration ).filter (
5961 CognitionIntegration .organization_id == org_id
@@ -62,6 +64,10 @@ def get_all_in_org(
6264 query = query .filter (CognitionIntegration .type == integration_type )
6365 if only_synced :
6466 query = query .filter (CognitionIntegration .is_synced == True )
67+ if exclude_failed :
68+ query = query .filter (
69+ CognitionIntegration .state != CognitionMarkdownFileState .FAILED .value
70+ )
6571 return query .order_by (CognitionIntegration .created_at .desc ()).all ()
6672
6773
@@ -253,3 +259,22 @@ def delete_many(
253259 .delete (synchronize_session = False )
254260 )
255261 general .flush_or_commit (with_commit )
262+
263+
264+ def get_sharepoint_permissions_by_integration_id (
265+ integration_id : str ,
266+ ) -> Dict [str , Any ]:
267+ integration_id = prevent_sql_injection (
268+ integration_id , isinstance (integration_id , str )
269+ )
270+ query = f"""SELECT permission_id, object_id
271+ FROM (
272+ SELECT json_array_elements_text(permissions) permission_id, MAX(id::TEXT)::UUID id
273+ FROM integration.sharepoint
274+ WHERE integration_id = '{ integration_id } '
275+ GROUP BY 1
276+ )x
277+ INNER JOIN integration.sharepoint s
278+ ON x.id = s.id
279+ """
280+ return session .execute (query ).all ()
0 commit comments