@@ -790,10 +790,11 @@ def get_queue_settings(self, project_key):
790790 """
791791 Get queue settings on project
792792
793+ https://docs.atlassian.com/jira-servicedesk/REST/server/11.3/#servicedeskapi/admin/queues/{projectKey}-getQueueSettingsOnProject
793794 :param project_key: str
794795 :return:
795796 """
796- url = f"rest/servicedeskapi/queues/{ project_key } "
797+ url = f"rest/servicedeskapi/admin/ queues/{ project_key } "
797798
798799 return self .get (url , headers = self .experimental_headers )
799800
@@ -918,6 +919,147 @@ def get_issues_in_queue(self, service_desk_id, queue_id, start=0, limit=50):
918919
919920 return self .get (url , headers = self .experimental_headers , params = params )
920921
922+ def get_queue (self , service_desk_id , queue_id , include_count = False ):
923+ """
924+ Get a single queue inside a service desk.
925+
926+ The returned queue will include an issue count (issueCount field) if
927+ ``include_count`` is True. The calling user must be an agent of the
928+ service desk the queue belongs to.
929+
930+ :param service_desk_id: str
931+ :param queue_id: str
932+ :param include_count: bool, whether to include the issue count
933+ :return: the queue
934+ """
935+ url = f"rest/servicedeskapi/servicedesk/{ service_desk_id } /queue/{ queue_id } "
936+ params = {}
937+ if include_count :
938+ params ["includeCount" ] = "true"
939+ return self .get (url , headers = self .experimental_headers , params = params )
940+
941+ def create_queue (self , service_desk_id , name , jql = None , fields = None ):
942+ """
943+ Create a queue inside a service desk.
944+
945+ The calling user must be an admin of the service desk.
946+
947+ :param service_desk_id: str
948+ :param name: str, the queue name
949+ :param jql: str, the JQL query that defines the issues shown in the queue
950+ :param fields: list, the issue fields shown for each issue in the queue
951+ :return: the created queue
952+ """
953+ url = f"rest/servicedeskapi/servicedesk/{ service_desk_id } /queue"
954+ data = {"name" : name }
955+ if jql is not None :
956+ data ["jql" ] = jql
957+ if fields is not None :
958+ data ["fields" ] = fields
959+ return self .post (url , headers = self .experimental_headers , data = data )
960+
961+ def update_queue (self , service_desk_id , queue_id , name = None , jql = None , fields = None ):
962+ """
963+ Update an existing queue inside a service desk.
964+
965+ Only the provided fields are updated. The calling user must be an admin
966+ of the service desk.
967+
968+ :param service_desk_id: str
969+ :param queue_id: str
970+ :param name: str, the new queue name
971+ :param jql: str, the new JQL query for the queue
972+ :param fields: list, the issue fields shown for each issue in the queue
973+ :return: the updated queue
974+ """
975+ url = f"rest/servicedeskapi/servicedesk/{ service_desk_id } /queue/{ queue_id } "
976+ data = {}
977+ if name is not None :
978+ data ["name" ] = name
979+ if jql is not None :
980+ data ["jql" ] = jql
981+ if fields is not None :
982+ data ["fields" ] = fields
983+ return self .post (url , headers = self .experimental_headers , data = data )
984+
985+ def delete_queue (self , service_desk_id , queue_id ):
986+ """
987+ Delete a queue inside a service desk.
988+
989+ The calling user must be an admin of the service desk.
990+
991+ :param service_desk_id: str
992+ :param queue_id: str
993+ :return:
994+ """
995+ url = f"rest/servicedeskapi/servicedesk/{ service_desk_id } /queue/{ queue_id } "
996+ return self .delete (url , headers = self .experimental_headers )
997+
998+ def reorder_queues (self , service_desk_id , queue_order ):
999+ """
1000+ Reorder the queues inside a service desk.
1001+
1002+ The API requires all queue IDs to be passed in the desired order. The
1003+ calling user must be an admin of the service project.
1004+
1005+ :param service_desk_id: str
1006+ :param queue_order: list or str, queue IDs in the desired order, e.g. [3, 1, 2]
1007+ :return:
1008+ """
1009+ url = f"rest/servicedeskapi/servicedesk/{ service_desk_id } /queue/reorder"
1010+ data = queue_order if isinstance (queue_order , str ) else "," .join (str (q ) for q in queue_order )
1011+ return self .post (url , headers = self .experimental_headers , data = data )
1012+
1013+ def set_should_queues_use_count_cache_globally (self , value ):
1014+ """
1015+ Set whether queues use the count cache, globally.
1016+
1017+ The calling user must be an instance admin.
1018+
1019+ :param value: bool, whether queues should use the count cache
1020+ :return:
1021+ """
1022+ url = "rest/servicedeskapi/admin/queues/cache-count"
1023+ return self .put (url , headers = self .experimental_headers , data = bool (value ))
1024+
1025+ def set_should_queues_include_count_globally (self , value ):
1026+ """
1027+ Set whether queues include an issue count, globally.
1028+
1029+ The calling user must be an instance admin.
1030+
1031+ :param value: bool, whether queues should include an issue count
1032+ :return:
1033+ """
1034+ url = "rest/servicedeskapi/admin/queues/include-count"
1035+ return self .put (url , headers = self .experimental_headers , data = bool (value ))
1036+
1037+ def set_should_queues_use_count_cache_on_project (self , project_key , value ):
1038+ """
1039+ Set whether queues use the count cache for a project.
1040+
1041+ The calling user must be an admin of the project.
1042+
1043+ :param project_key: str
1044+ :param value: bool, whether queues should use the count cache
1045+ :return:
1046+ """
1047+ url = f"rest/servicedeskapi/admin/queues/{ project_key } /cache-count"
1048+ return self .put (url , headers = self .experimental_headers , data = bool (value ))
1049+
1050+ def set_should_queues_include_count_on_project (self , project_key , value ):
1051+ """
1052+ Set whether queues include an issue count for a project.
1053+
1054+ The calling user must be an admin of the project.
1055+
1056+ :param project_key: str
1057+ :param value: bool, whether queues should include an issue count
1058+ :return:
1059+ """
1060+ url = f"rest/servicedeskapi/admin/queues/{ project_key } /include-count"
1061+ return self .put (url , headers = self .experimental_headers , data = bool (value ))
1062+
9211063 def get_plugins_info (self ):
9221064 """
9231065 Provide plugins info
@@ -1013,6 +1155,188 @@ def create_request_type(
10131155 url = f"rest/servicedeskapi/servicedesk/{ service_desk_id } /requesttype"
10141156 return self .post (url , headers = self .experimental_headers , data = data )
10151157
1158+ def update_request_type (
1159+ self ,
1160+ service_desk_id ,
1161+ request_type_id ,
1162+ request_name = None ,
1163+ request_description = None ,
1164+ request_help_text = None ,
1165+ ):
1166+ """
1167+ Update an existing request type.
1168+
1169+ Only the provided fields are changed. The calling user must be an admin
1170+ of the service desk project.
1171+
1172+ :param service_desk_id: str
1173+ :param request_type_id: str
1174+ :param request_name: str, the new request type name
1175+ :param request_description: str, the new request type description
1176+ :param request_help_text: str, the new request type help text
1177+ :return: the updated request type
1178+ """
1179+ log .info ("Updating request type" )
1180+ data = {"requestTypeId" : request_type_id }
1181+ if request_name is not None :
1182+ data ["name" ] = request_name
1183+ if request_description is not None :
1184+ data ["description" ] = request_description
1185+ if request_help_text is not None :
1186+ data ["helpText" ] = request_help_text
1187+
1188+ url = f"rest/servicedeskapi/servicedesk/{ service_desk_id } /requesttype"
1189+ return self .put (url , headers = self .experimental_headers , data = data )
1190+
1191+ def delete_request_type (self , service_desk_id , request_type_id ):
1192+ """
1193+ Delete a request type from a service desk.
1194+
1195+ The calling user must be an admin of the service desk project.
1196+
1197+ :param service_desk_id: str
1198+ :param request_type_id: str
1199+ :return:
1200+ """
1201+ log .info ("Deleting request type" )
1202+ url = f"rest/servicedeskapi/servicedesk/{ service_desk_id } /requesttype/{ request_type_id } "
1203+ return self .delete (url , headers = self .experimental_headers )
1204+
1205+ def get_request_type_permission (self , service_desk_id , request_type_id ):
1206+ """
1207+ Get the permissions for a customer request type.
1208+
1209+ :param service_desk_id: str
1210+ :param request_type_id: str
1211+ :return: the request type permissions
1212+ """
1213+ url = f"rest/servicedeskapi/servicedesk/{ service_desk_id } /requesttype/{ request_type_id } /permission"
1214+ return self .get (url , headers = self .experimental_headers )
1215+
1216+ def upsert_request_type_permission (self , service_desk_id , request_type_id , allowlist ):
1217+ """
1218+ Upsert the permissions for a customer request type.
1219+
1220+ This operation overwrites any existing permissions.
1221+
1222+ :param service_desk_id: str
1223+ :param request_type_id: str
1224+ :param allowlist: list, entries of {"entityType": "USER" | "GROUP" | "ORGANIZATION",
1225+ "entityId": str}; e.g. [{"entityType": "GROUP", "entityId": "jira-users"}]
1226+ :return:
1227+ """
1228+ url = f"rest/servicedeskapi/servicedesk/{ service_desk_id } /requesttype/{ request_type_id } /permission"
1229+ data = {"allowlist" : allowlist }
1230+ return self .put (url , headers = self .experimental_headers , data = data )
1231+
1232+ def get_request_type_groups (self , service_desk_id , start = 0 , limit = 50 ):
1233+ """
1234+ Get the request type groups of a service desk.
1235+
1236+ :param service_desk_id: str
1237+ :param start: int, index of the first request type group to return
1238+ :param limit: int, maximum number of request type groups to return
1239+ :return: a page of request type groups
1240+ """
1241+ url = f"rest/servicedeskapi/servicedesk/{ service_desk_id } /requesttypegroup"
1242+ params = {}
1243+ if start is not None :
1244+ params ["start" ] = int (start )
1245+ if limit is not None :
1246+ params ["limit" ] = int (limit )
1247+ return self .get (url , headers = self .experimental_headers , params = params )
1248+
1249+ def get_approval_comment_config (self , issue_id_or_key , approval_id ):
1250+ """
1251+ Get the comment configuration for an approval.
1252+
1253+ :param issue_id_or_key: str
1254+ :param approval_id: str
1255+ :return: the approval comment configuration
1256+ """
1257+ url = f"rest/servicedeskapi/request/{ issue_id_or_key } /approval/{ approval_id } /config"
1258+ return self .get (url , headers = self .experimental_headers )
1259+
1260+ def get_portals (self , start = 0 , limit = 50 ):
1261+ """
1262+ Get the service desk portals visible to the authenticated user.
1263+
1264+ :param start: int, index of the first portal to return
1265+ :param limit: int, maximum number of portals to return
1266+ :return: a page of portals
1267+ """
1268+ url = "rest/servicedeskapi/portals"
1269+ params = {}
1270+ if start is not None :
1271+ params ["start" ] = int (start )
1272+ if limit is not None :
1273+ params ["limit" ] = int (limit )
1274+ return self .get (url , headers = self .experimental_headers , params = params )
1275+
1276+ def get_portal (self , portal_id ):
1277+ """
1278+ Get a portal by ID.
1279+
1280+ :param portal_id: str
1281+ :return: the portal
1282+ """
1283+ url = f"rest/servicedeskapi/portals/{ portal_id } "
1284+ return self .get (url , headers = self .experimental_headers )
1285+
1286+ def get_portal_by_project (self , project_key ):
1287+ """
1288+ Get the portal configured for a project.
1289+
1290+ :param project_key: str
1291+ :return: the portal
1292+ """
1293+ url = f"rest/servicedeskapi/portals/project/{ project_key } "
1294+ return self .get (url , headers = self .experimental_headers )
1295+
1296+ def preview_organization_cleanup (
1297+ self ,
1298+ delete_detached_organizations = False ,
1299+ delete_organizations_with_inactive_users = False ,
1300+ ):
1301+ """
1302+ Preview the organizations that would be removed by an organization cleanup.
1303+
1304+ :param delete_detached_organizations: bool, whether detached organizations are in scope
1305+ :param delete_organizations_with_inactive_users: bool, whether organizations with
1306+ only inactive users are in scope
1307+ :return: the organizations that would be removed
1308+ """
1309+ url = "rest/servicedeskapi/organization/cleanup"
1310+ params = {}
1311+ if delete_detached_organizations :
1312+ params ["deleteDetachedOrganizations" ] = "true"
1313+ if delete_organizations_with_inactive_users :
1314+ params ["deleteOrganizationsWithInactiveUsers" ] = "true"
1315+ return self .get (url , headers = self .experimental_headers , params = params )
1316+
1317+ def cleanup_organizations (
1318+ self ,
1319+ delete_detached_organizations = False ,
1320+ delete_organizations_with_inactive_users = False ,
1321+ ):
1322+ """
1323+ Remove service desk organizations that are no longer in use.
1324+
1325+ The calling user must be an instance admin.
1326+
1327+ :param delete_detached_organizations: bool, whether detached organizations are removed
1328+ :param delete_organizations_with_inactive_users: bool, whether organizations with
1329+ only inactive users are removed
1330+ :return:
1331+ """
1332+ url = "rest/servicedeskapi/organization/cleanup"
1333+ params = {}
1334+ if delete_detached_organizations :
1335+ params ["deleteDetachedOrganizations" ] = "true"
1336+ if delete_organizations_with_inactive_users :
1337+ params ["deleteOrganizationsWithInactiveUsers" ] = "true"
1338+ return self .delete (url , headers = self .experimental_headers , params = params )
1339+
10161340 def raise_for_status (self , response ):
10171341 """
10181342 Checks the response for an error status and raises an exception with the error message provided by the server
0 commit comments