Coverage for scripts / list_queues.py: 30%

46 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2025-12-25 18:08 -0500

1#!/usr/bin/env python3 

2""" 

3List JSM service desk queues. 

4 

5Usage: 

6 python list_queues.py --service-desk 1 

7 python list_queues.py --service-desk 1 --show-jql 

8 python list_queues.py --service-desk 1 --output json 

9""" 

10 

11import sys 

12import os 

13import argparse 

14import json 

15from pathlib import Path 

16from typing import Optional, Dict, Any 

17 

18sys.path.insert(0, str(Path(__file__).parent.parent.parent / 'shared' / 'scripts' / 'lib')) 

19 

20from config_manager import get_jira_client 

21from error_handler import print_error, JiraError 

22 

23 

24def list_queues(service_desk_id: int, profile: Optional[str] = None) -> Dict[str, Any]: 

25 """List queues for a service desk.""" 

26 with get_jira_client(profile) as client: 

27 return client.get_service_desk_queues(service_desk_id) 

28 

29 

30def format_queues_text(queues_data: Dict[str, Any], show_jql: bool = False) -> str: 

31 """Format queues as text.""" 

32 lines = [] 

33 queues = queues_data.get('values', []) 

34 

35 lines.append(f"\nQueues: {len(queues)} total") 

36 lines.append("=" * 80) 

37 lines.append("") 

38 

39 for queue in queues: 

40 queue_id = queue.get('id') 

41 name = queue.get('name') 

42 jql = queue.get('jql', 'N/A') 

43 

44 lines.append(f"[{queue_id}] {name}") 

45 if show_jql: 

46 lines.append(f" JQL: {jql}") 

47 

48 return '\n'.join(lines) 

49 

50 

51def format_queues_json(queues_data: Dict[str, Any]) -> str: 

52 """Format queues as JSON.""" 

53 return json.dumps(queues_data, indent=2) 

54 

55 

56def main(): 

57 """Main entry point.""" 

58 parser = argparse.ArgumentParser(description='List JSM service desk queues') 

59 parser.add_argument('--service-desk', type=int, required=True, help='Service desk ID') 

60 parser.add_argument('--show-jql', action='store_true', help='Show JQL queries') 

61 parser.add_argument('--output', choices=['text', 'json'], default='text') 

62 parser.add_argument('--profile', help='JIRA profile to use') 

63 

64 args = parser.parse_args() 

65 

66 try: 

67 queues = list_queues(args.service_desk, args.profile) 

68 

69 if args.output == 'json': 

70 print(format_queues_json(queues)) 

71 else: 

72 print(format_queues_text(queues, args.show_jql)) 

73 

74 return 0 

75 

76 except JiraError as e: 

77 print_error(f"Failed to list queues: {e}") 

78 return 1 

79 

80 

81if __name__ == '__main__': 

82 sys.exit(main())