Coverage for sm / utils_starterpack.py: 22%
37 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-24 12:43 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-24 12:43 +0000
1import yaml
2import os
3from django.conf import settings
4from django.contrib.auth.models import Group
5from vendor.models import Model as Vendor
6from operatingsystem.models import Model as OS
7from typing import Dict, List, Any, Optional, Union
10def import_starter_pack(group: Group) -> Dict[str, int]:
11 """
12 Imports vendors and operating systems from fixtures into the specified group.
13 """
14 vendor_count = 0
15 os_count = 0
17 # 1. Import Vendors
18 vendor_fixture_path = os.path.join(
19 settings.BASE_DIR, "vendor", "fixtures", "01_initial.yaml"
20 )
21 with open(vendor_fixture_path) as f:
22 vendor_data = yaml.safe_load(f)
24 vendor_map = {} # To keep track of created vendors for OS lookup
26 for item in vendor_data:
27 if item["model"] == "vendor.model":
28 fields = item["fields"]
29 vendor, created = Vendor.objects.get_or_create(
30 name=fields["name"],
31 group=group,
32 defaults={
33 "is_hardware": fields.get("is_hardware", True),
34 "is_software": fields.get("is_software", True),
35 },
36 )
37 vendor_map[fields["name"]] = vendor
38 if created:
39 vendor_count += 1
41 # 2. Import Operating Systems
42 os_fixture_path = os.path.join(
43 settings.BASE_DIR, "operatingsystem", "fixtures", "01_initial.yaml"
44 )
45 with open(os_fixture_path) as f:
46 os_data = yaml.safe_load(f)
48 for item in os_data:
49 if item["model"] == "operatingsystem.model":
50 fields = item["fields"]
51 vendor_names = fields["vendor"]
52 if isinstance(vendor_names, list):
53 vendor_name = vendor_names[0]
54 else:
55 vendor_name = vendor_names
57 vendor = vendor_map.get(vendor_name)
58 if vendor:
59 os_obj, created = OS.objects.get_or_create(
60 version=fields["version"], vendor=vendor, group=group
61 )
62 if created:
63 os_count += 1
65 return {"vendors": vendor_count, "os": os_count}