|
1 | | -""" |
2 | | -Import risk excel 🕸️ into RiskMatrix ✨ |
3 | | -
|
4 | | -This script is specific to our sitation at seantis. The script is included |
5 | | -anyway, you might adjust it to import the excel at your organization too. |
6 | | -""" |
7 | 1 | import argparse |
8 | 2 | import sys |
9 | 3 | import traceback |
|
29 | 23 | from riskmatrix.models import Risk |
30 | 24 | from riskmatrix.models import RiskAssessment |
31 | 25 | from riskmatrix.models import RiskCatalog |
| 26 | +from riskmatrix.models import RiskCategory # Make sure RiskCategory is imported |
32 | 27 | from riskmatrix.orm import Base |
33 | 28 | from riskmatrix.orm import get_engine |
34 | 29 | from riskmatrix.scripts.util import select_existing_organization |
@@ -82,6 +77,26 @@ def get_or_create_asset( |
82 | 77 | return asset |
83 | 78 |
|
84 | 79 |
|
| 80 | +def get_or_create_risk_category( |
| 81 | + category_name: str, |
| 82 | + organization: Organization, |
| 83 | + session: 'Session' |
| 84 | +) -> RiskCategory: |
| 85 | + |
| 86 | + q = select(RiskCategory).where( |
| 87 | + RiskCategory.organization_id == organization.id, |
| 88 | + RiskCategory.name == category_name |
| 89 | + ) |
| 90 | + |
| 91 | + if category := session.scalars(q).one_or_none(): |
| 92 | + return category |
| 93 | + |
| 94 | + category = RiskCategory(name=category_name, organization=organization) |
| 95 | + category.organization_id = organization.id |
| 96 | + session.add(category) |
| 97 | + return category |
| 98 | + |
| 99 | + |
85 | 100 | def get_or_create_risk( |
86 | 101 | risk_name: str, |
87 | 102 | catalog: RiskCatalog, |
@@ -131,10 +146,14 @@ def populate_catalog( |
131 | 146 | risk_details['asset_name'], catalog.organization, session |
132 | 147 | ) |
133 | 148 |
|
| 149 | + category = get_or_create_risk_category( |
| 150 | + risk_details['category'], catalog.organization, session |
| 151 | + ) |
| 152 | + |
134 | 153 | risk = get_or_create_risk( |
135 | 154 | risk_details['name'], catalog, session |
136 | 155 | ) |
137 | | - risk.category = risk_details['category'] |
| 156 | + risk.category = category.name |
138 | 157 | risk.description = risk_details['desc'] |
139 | 158 |
|
140 | 159 | assessment = get_or_create_risk_assessment(risk, asset, session) |
|
0 commit comments