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
« 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.
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"""
11import sys
12import os
13import argparse
14import json
15from pathlib import Path
17sys.path.insert(0, str(Path(__file__).parent.parent.parent / 'shared' / 'scripts' / 'lib'))
19from config_manager import get_jira_client
20from error_handler import print_error, JiraError
21from formatters import print_success
24def create_organization_func(name: str, profile: str = None) -> dict:
25 """
26 Create an organization.
28 Args:
29 name: Organization name
30 profile: JIRA profile to use
32 Returns:
33 Created organization data
34 """
35 with get_jira_client(profile) as client:
36 return client.create_organization(name)
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"
49 JSON output:
50 %(prog)s --name "Beta Industries" --output json
52 Dry-run:
53 %(prog)s --name "Test Org" --dry-run
54 """
55 )
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')
68 args = parser.parse_args()
70 try:
71 if not args.name or not args.name.strip():
72 print_error("Organization name cannot be empty")
73 return 1
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
81 organization = create_organization_func(
82 name=args.name,
83 profile=args.profile
84 )
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')}")
100 if args.verbose:
101 print()
102 print("Full response:")
103 print(json.dumps(organization, indent=2))
105 return 0
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
115if __name__ == '__main__':
116 sys.exit(main())