Coverage for scripts / create_organization.py: 0%

51 statements  

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

1#!/usr/bin/env python3 

2""" 

3Create a JSM organization. 

4 

5Usage: 

6 python create_organization.py --name "Acme Corporation" 

7 python create_organization.py --name "Beta Industries" --output json 

8 python create_organization.py --name "Test Org" --dry-run 

9""" 

10 

11import sys 

12import os 

13import argparse 

14import json 

15from pathlib import Path 

16 

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

18 

19from config_manager import get_jira_client 

20from error_handler import print_error, JiraError 

21from formatters import print_success 

22 

23 

24def create_organization_func(name: str, profile: str = None) -> dict: 

25 """ 

26 Create an organization. 

27 

28 Args: 

29 name: Organization name 

30 profile: JIRA profile to use 

31 

32 Returns: 

33 Created organization data 

34 """ 

35 with get_jira_client(profile) as client: 

36 return client.create_organization(name) 

37 

38 

39def main(): 

40 """Main entry point.""" 

41 parser = argparse.ArgumentParser( 

42 description='Create a JSM organization', 

43 formatter_class=argparse.RawDescriptionHelpFormatter, 

44 epilog=""" 

45Examples: 

46 Create organization: 

47 %(prog)s --name "Acme Corporation" 

48 

49 JSON output: 

50 %(prog)s --name "Beta Industries" --output json 

51 

52 Dry-run: 

53 %(prog)s --name "Test Org" --dry-run 

54 """ 

55 ) 

56 

57 parser.add_argument('--name', required=True, 

58 help='Organization name') 

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

60 help='Output format (default: text)') 

61 parser.add_argument('--dry-run', action='store_true', 

62 help='Show what would be created without creating') 

63 parser.add_argument('--profile', 

64 help='JIRA profile to use from config') 

65 parser.add_argument('--verbose', '-v', action='store_true', 

66 help='Show full API response') 

67 

68 args = parser.parse_args() 

69 

70 try: 

71 if not args.name or not args.name.strip(): 

72 print_error("Organization name cannot be empty") 

73 return 1 

74 

75 if args.dry_run: 

76 print("DRY RUN MODE - No changes will be made\n") 

77 print(f"Would create organization:") 

78 print(f" Name: {args.name}") 

79 return 0 

80 

81 organization = create_organization_func( 

82 name=args.name, 

83 profile=args.profile 

84 ) 

85 

86 if args.output == 'json': 

87 if args.verbose: 

88 print(json.dumps(organization, indent=2)) 

89 else: 

90 print(json.dumps({ 

91 'id': organization.get('id'), 

92 'name': organization.get('name') 

93 }, indent=2)) 

94 else: 

95 print_success("Organization created successfully!") 

96 print() 

97 print(f"ID: {organization.get('id')}") 

98 print(f"Name: {organization.get('name')}") 

99 

100 if args.verbose: 

101 print() 

102 print("Full response:") 

103 print(json.dumps(organization, indent=2)) 

104 

105 return 0 

106 

107 except JiraError as e: 

108 print_error(f"Failed to create organization: {e}") 

109 return 1 

110 except Exception as e: 

111 print_error(f"Unexpected error: {e}") 

112 return 1 

113 

114 

115if __name__ == '__main__': 

116 sys.exit(main())