regscale-cli 6.21.2.1__py3-none-any.whl → 6.21.2.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of regscale-cli might be problematic. Click here for more details.
- regscale/_version.py +1 -1
- regscale/integrations/scanner_integration.py +6 -6
- regscale/models/regscale_models/milestone.py +20 -3
- {regscale_cli-6.21.2.1.dist-info → regscale_cli-6.21.2.2.dist-info}/METADATA +1 -1
- {regscale_cli-6.21.2.1.dist-info → regscale_cli-6.21.2.2.dist-info}/RECORD +9 -9
- {regscale_cli-6.21.2.1.dist-info → regscale_cli-6.21.2.2.dist-info}/LICENSE +0 -0
- {regscale_cli-6.21.2.1.dist-info → regscale_cli-6.21.2.2.dist-info}/WHEEL +0 -0
- {regscale_cli-6.21.2.1.dist-info → regscale_cli-6.21.2.2.dist-info}/entry_points.txt +0 -0
- {regscale_cli-6.21.2.1.dist-info → regscale_cli-6.21.2.2.dist-info}/top_level.txt +0 -0
regscale/_version.py
CHANGED
|
@@ -1742,7 +1742,7 @@ class ScannerIntegration(ABC):
|
|
|
1742
1742
|
).create_or_update()
|
|
1743
1743
|
logger.debug("Added CWE property %s to issue %s", finding.plugin_id, issue.id)
|
|
1744
1744
|
|
|
1745
|
-
if ScannerVariables.useMilestones:
|
|
1745
|
+
if ScannerVariables.useMilestones and issue.id:
|
|
1746
1746
|
if (
|
|
1747
1747
|
existing_issue
|
|
1748
1748
|
and existing_issue.status == regscale_models.IssueStatus.Closed
|
|
@@ -1754,7 +1754,7 @@ class ScannerIntegration(ABC):
|
|
|
1754
1754
|
responsiblePersonId=self.assessor_id,
|
|
1755
1755
|
parentID=issue.id,
|
|
1756
1756
|
parentModule="issues",
|
|
1757
|
-
).
|
|
1757
|
+
).create()
|
|
1758
1758
|
logger.debug("Added milestone for issue %s from finding %s", issue.id, finding.external_id)
|
|
1759
1759
|
elif (
|
|
1760
1760
|
existing_issue
|
|
@@ -1767,7 +1767,7 @@ class ScannerIntegration(ABC):
|
|
|
1767
1767
|
responsiblePersonId=self.assessor_id,
|
|
1768
1768
|
parentID=issue.id,
|
|
1769
1769
|
parentModule="issues",
|
|
1770
|
-
).
|
|
1770
|
+
).create()
|
|
1771
1771
|
logger.debug("Added milestone for issue %s from finding %s", issue.id, finding.external_id)
|
|
1772
1772
|
elif not existing_issue:
|
|
1773
1773
|
regscale_models.Milestone(
|
|
@@ -1776,7 +1776,7 @@ class ScannerIntegration(ABC):
|
|
|
1776
1776
|
responsiblePersonId=self.assessor_id,
|
|
1777
1777
|
parentID=issue.id,
|
|
1778
1778
|
parentModule="issues",
|
|
1779
|
-
).
|
|
1779
|
+
).create()
|
|
1780
1780
|
logger.debug("Created milestone for issue %s from finding %s", issue.id, finding.external_id)
|
|
1781
1781
|
else:
|
|
1782
1782
|
logger.debug("No milestone created for issue %s from finding %s", issue.id, finding.external_id)
|
|
@@ -2661,7 +2661,7 @@ class ScannerIntegration(ABC):
|
|
|
2661
2661
|
issue.dateLastUpdated = get_current_datetime()
|
|
2662
2662
|
issue.save()
|
|
2663
2663
|
|
|
2664
|
-
if ScannerVariables.useMilestones:
|
|
2664
|
+
if ScannerVariables.useMilestones and issue.id:
|
|
2665
2665
|
regscale_models.Milestone(
|
|
2666
2666
|
title=f"Issue closed from {self.title} scan",
|
|
2667
2667
|
milestoneDate=issue.dateCompleted,
|
|
@@ -2669,7 +2669,7 @@ class ScannerIntegration(ABC):
|
|
|
2669
2669
|
completed=True,
|
|
2670
2670
|
parentID=issue.id,
|
|
2671
2671
|
parentModule="issues",
|
|
2672
|
-
).
|
|
2672
|
+
).create()
|
|
2673
2673
|
logger.debug("Created milestone for issue %s from %s tool", issue.id, self.title)
|
|
2674
2674
|
|
|
2675
2675
|
with count_lock:
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
from typing import Optional
|
|
6
6
|
|
|
7
|
-
from pydantic import Field, field_validator
|
|
7
|
+
from pydantic import Field, field_validator, model_validator
|
|
8
8
|
|
|
9
9
|
from regscale.core.app.utils.app_utils import get_current_datetime
|
|
10
10
|
from regscale.models.regscale_models.regscale_model import RegScaleModel
|
|
@@ -15,7 +15,7 @@ class Milestone(RegScaleModel):
|
|
|
15
15
|
|
|
16
16
|
_module_slug = "milestones"
|
|
17
17
|
_module_string = "milestones"
|
|
18
|
-
_unique_fields = ["title", "
|
|
18
|
+
_unique_fields = ["title", "parentModule"]
|
|
19
19
|
|
|
20
20
|
title: str
|
|
21
21
|
id: int = 0
|
|
@@ -29,13 +29,30 @@ class Milestone(RegScaleModel):
|
|
|
29
29
|
parentID: Optional[int] = None
|
|
30
30
|
parentModule: str = ""
|
|
31
31
|
|
|
32
|
+
@field_validator("milestoneDate")
|
|
33
|
+
@classmethod
|
|
34
|
+
def validate_milestone_date(cls, v: Optional[str]) -> str:
|
|
35
|
+
"""Ensure milestoneDate is never empty."""
|
|
36
|
+
if not v or v == "":
|
|
37
|
+
return get_current_datetime()
|
|
38
|
+
return v
|
|
39
|
+
|
|
32
40
|
@field_validator("dateCompleted")
|
|
33
41
|
@classmethod
|
|
34
42
|
def set_date_completed(cls, v: Optional[str], info) -> Optional[str]:
|
|
35
43
|
"""Set dateCompleted based on completed field."""
|
|
36
44
|
completed = info.data.get("completed", False)
|
|
37
|
-
if completed and v is None:
|
|
45
|
+
if completed and (v is None or v == ""):
|
|
38
46
|
return get_current_datetime()
|
|
39
47
|
if not completed:
|
|
40
48
|
return None
|
|
41
49
|
return v
|
|
50
|
+
|
|
51
|
+
@model_validator(mode="after")
|
|
52
|
+
def validate_completion(self):
|
|
53
|
+
"""Ensure dateCompleted is set when completed is True."""
|
|
54
|
+
if self.completed and (self.dateCompleted is None or self.dateCompleted == ""):
|
|
55
|
+
self.dateCompleted = get_current_datetime()
|
|
56
|
+
elif not self.completed:
|
|
57
|
+
self.dateCompleted = None
|
|
58
|
+
return self
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
regscale/__init__.py,sha256=ZygAIkX6Nbjag1czWdQa-yP-GM1mBE_9ss21Xh__JFc,34
|
|
2
|
-
regscale/_version.py,sha256=
|
|
2
|
+
regscale/_version.py,sha256=c23bJjOSOin3Rj2jQMCSQSWCsJkFOj3c3AkLRqbD5mc,1198
|
|
3
3
|
regscale/regscale.py,sha256=xcxnTwEwWgfO3Fnp0LVo32SZCJzAswq3WDZgm21nHnI,30914
|
|
4
4
|
regscale/airflow/__init__.py,sha256=yMwN0Bz4JbM0nl5qY_hPegxo_O2ilhTOL9PY5Njhn-s,270
|
|
5
5
|
regscale/airflow/click_dags.py,sha256=H3SUR5jkvInNMv1gu-VG-Ja_H-kH145CpQYNalWNAbE,4520
|
|
@@ -114,7 +114,7 @@ regscale/integrations/api_paginator_example.py,sha256=lEuYI-xEGcjnXuIzbCobCP0YRu
|
|
|
114
114
|
regscale/integrations/compliance_integration.py,sha256=aR13rcMh-BTpr_ibENPQZ1z5rlhtuqpPGRI9YfbqJjw,68394
|
|
115
115
|
regscale/integrations/integration_override.py,sha256=HjYBCuvNpU3t3FptaqYAkdexLFOZBAFrFE9xU0RD1Nc,5867
|
|
116
116
|
regscale/integrations/jsonl_scanner_integration.py,sha256=l8nq_T3rE1XX-6HxrNHm3xzxCNWbIjxQvGMdtZWs7KQ,57003
|
|
117
|
-
regscale/integrations/scanner_integration.py,sha256=
|
|
117
|
+
regscale/integrations/scanner_integration.py,sha256=o7RdZ7Z0x0Ldhh5JrjUx1qFGKiJLw_y-6mFyhyA2P1k,145526
|
|
118
118
|
regscale/integrations/variables.py,sha256=MfQ34WuYVN5437A9sZ2ssHRkA3gFhMHfk1DVasceGmY,2336
|
|
119
119
|
regscale/integrations/commercial/__init__.py,sha256=LZj1qV5f7RdHIOfedDVELV62ADe5gyNccWayHMF1aVc,14026
|
|
120
120
|
regscale/integrations/commercial/ad.py,sha256=YXSmK8vRf6yi2GnREGa5GrE6GelhFrLj44SY8AO1pK0,15509
|
|
@@ -415,7 +415,7 @@ regscale/models/regscale_models/line_of_inquiry.py,sha256=Uu0lQEhif0W6yTSkJo27Gy
|
|
|
415
415
|
regscale/models/regscale_models/link.py,sha256=lAY4Ig3Menm1EqfcAbVJ7jsCsRO5tWtJIf-9-G9FXT8,6593
|
|
416
416
|
regscale/models/regscale_models/master_assessment.py,sha256=t03-8vQJ7hnPNgEU0GSC1XGKOgAqHKuIupbt5IjJvtI,7322
|
|
417
417
|
regscale/models/regscale_models/meta_data.py,sha256=Fg8rrWSTx3K00QkF4glH9UdY9OFWJ4_UqxleLSSbx8I,2482
|
|
418
|
-
regscale/models/regscale_models/milestone.py,sha256=
|
|
418
|
+
regscale/models/regscale_models/milestone.py,sha256=HiBdx1uzasl3Crb03j9qdowCHUy93nTOuklLs_V2SSM,1943
|
|
419
419
|
regscale/models/regscale_models/module.py,sha256=a7lalHmVTQ04ZILnJxuFWdHYDtyusBMTtonD4ICL-Wc,7272
|
|
420
420
|
regscale/models/regscale_models/modules.py,sha256=yeva_tct88o2NFt93_zmqUcXZ3LucVbAv5FvQPru3cQ,8551
|
|
421
421
|
regscale/models/regscale_models/objective.py,sha256=aJIpmkZ-NscqV2y8SGB4HYzm615b6mklyHnW9bL2ljk,249
|
|
@@ -533,9 +533,9 @@ tests/regscale/models/test_regscale_model.py,sha256=ZsrEZkC4EtdIsoQuayn1xv2gEGcV
|
|
|
533
533
|
tests/regscale/models/test_report.py,sha256=IqUq7C__a1_q_mLaz0PE9Lq6fHggBsB14-AzEYNBxLw,4666
|
|
534
534
|
tests/regscale/models/test_tenable_integrations.py,sha256=PNJC2Zu6lv1xj7y6e1yOsz5FktSU3PRKb5x3n5YG3w0,4072
|
|
535
535
|
tests/regscale/models/test_user_model.py,sha256=e9olv28qBApgnvK6hFHOgXjUC-pkaV8aGDirEIWASL4,4427
|
|
536
|
-
regscale_cli-6.21.2.
|
|
537
|
-
regscale_cli-6.21.2.
|
|
538
|
-
regscale_cli-6.21.2.
|
|
539
|
-
regscale_cli-6.21.2.
|
|
540
|
-
regscale_cli-6.21.2.
|
|
541
|
-
regscale_cli-6.21.2.
|
|
536
|
+
regscale_cli-6.21.2.2.dist-info/LICENSE,sha256=ytNhYQ9Rmhj_m-EX2pPq9Ld6tH5wrqqDYg-fCf46WDU,1076
|
|
537
|
+
regscale_cli-6.21.2.2.dist-info/METADATA,sha256=7yq5fry5SL1DvzcbSeD18IguQQoEOpA6s7lHM2nR2zA,34955
|
|
538
|
+
regscale_cli-6.21.2.2.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
|
|
539
|
+
regscale_cli-6.21.2.2.dist-info/entry_points.txt,sha256=cLOaIP1eRv1yZ2u7BvpE3aB4x3kDrDwkpeisKOu33z8,269
|
|
540
|
+
regscale_cli-6.21.2.2.dist-info/top_level.txt,sha256=Uv8VUCAdxRm70bgrD4YNEJUmDhBThad_1aaEFGwRByc,15
|
|
541
|
+
regscale_cli-6.21.2.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|