Skip to content

Commit b4d4915

Browse files
author
Gonchik Tsymzhitov
committed
Jira Service Desk: remained methods
1 parent f5cdb49 commit b4d4915

3 files changed

Lines changed: 628 additions & 6 deletions

File tree

‎atlassian/service_desk.py‎

Lines changed: 325 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)