regscale-cli 6.20.0.0__py3-none-any.whl → 6.20.1.1__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.

@@ -22,6 +22,8 @@ from .control_test_result import *
22
22
  from .custom_field import *
23
23
  from .data import *
24
24
  from .data_center import *
25
+ from .evidence import *
26
+ from .evidence_mapping import *
25
27
  from .email import *
26
28
  from .facility import *
27
29
  from .file import *
@@ -3,8 +3,10 @@
3
3
  """Class for evidence model in RegScale platform"""
4
4
 
5
5
  from typing import Optional
6
+
6
7
  from pydantic import ConfigDict, Field
7
8
 
9
+ from regscale.core.app.utils.app_utils import get_current_datetime
8
10
  from regscale.models.regscale_models.regscale_model import RegScaleModel
9
11
 
10
12
 
@@ -12,7 +14,7 @@ class Evidence(RegScaleModel):
12
14
  """Evidence Model"""
13
15
 
14
16
  _module_slug = "evidence"
15
- _unique_fields: list[str] = [["title"]]
17
+ _unique_fields = [["title"]]
16
18
 
17
19
  id: int = 0
18
20
  isPublic: Optional[bool] = True
@@ -20,9 +22,14 @@ class Evidence(RegScaleModel):
20
22
  title: Optional[str] = None
21
23
  description: Optional[str] = None
22
24
  evidenceOwnerId: Optional[str] = Field(default_factory=RegScaleModel.get_user_id)
25
+ evidenceApproverId: Optional[str] = Field(default_factory=RegScaleModel.get_user_id)
26
+ status: Optional[str] = None
23
27
  updateFrequency: Optional[int] = 365
24
- lastEvidenceUpdate: Optional[str] = None # YY-mm-dd
25
- dueDate: Optional[str] = None # YY-mm-dd
28
+ lastEvidenceUpdate: Optional[str] = Field(default_factory=get_current_datetime)
29
+ dueDate: Optional[str] = Field(default_factory=get_current_datetime)
30
+ dateLastApproved: Optional[str] = Field(default_factory=get_current_datetime)
31
+
32
+ _unique_fields = ["title"]
26
33
 
27
34
  @staticmethod
28
35
  def _get_additional_endpoints() -> ConfigDict:
@@ -42,6 +49,67 @@ class Evidence(RegScaleModel):
42
49
  get_evidence_by_security_plan="/api/{model_slug}/getEvidenceBySecurityPlan/{intId}",
43
50
  filter_evidence="/api/{model_slug}/filterEvidence",
44
51
  query_by_custom_field="/api/{model_slug}/queryByCustomField/{strFieldName}/{strValue}",
45
- mega_api="/api/{model_slug}/megaApi/{intId}",
46
52
  get_my_evidence_due_soon="/api/{model_slug}/getMyEvidenceDueSoon/{intDays}/{intPage}/{intPageSize}",
47
53
  )
54
+
55
+ @classmethod
56
+ def filter_evidence(
57
+ cls,
58
+ field: Optional[str] = None,
59
+ type: Optional[str] = None,
60
+ operator: Optional[str] = None,
61
+ value: Optional[str] = None,
62
+ page: Optional[int] = 1,
63
+ page_size: Optional[int] = 10,
64
+ ) -> list:
65
+ """
66
+ Filter evidence based on the given filter parameters.
67
+
68
+ :param Optional[str] field: Filter field
69
+ :param Optional[str] type: Filter type
70
+ :param Optional[str] operator: Filter operator
71
+ :param Optional[str] value: Filter value
72
+ :param Optional[int] page: Page number, defaults to 1
73
+ :param Optional[int] page_size: Page size, defaults to 10
74
+ :return: A list of filtered evidence
75
+ :rtype: list
76
+ """
77
+ query = {
78
+ "parentID": 0,
79
+ "module": "",
80
+ "friendlyName": "",
81
+ "workbench": "",
82
+ "base": "",
83
+ "sort": "dueDate",
84
+ "direction": "Ascending",
85
+ "simpleSearch": "",
86
+ "page": "",
87
+ "pageSize": "",
88
+ "query": {
89
+ "id": 0,
90
+ "viewName": "",
91
+ "module": "",
92
+ "scope": "",
93
+ "createdById": "",
94
+ "dateCreated": "",
95
+ "parameters": [
96
+ {"id": 0, "field": "", "type": "", "operator": "", "value": "", "viewName": "", "name": ""}
97
+ ],
98
+ },
99
+ "groupBy": "",
100
+ "intDays": 0,
101
+ "subTab": False,
102
+ }
103
+ query["page"] = page
104
+ query["pageSize"] = page_size
105
+ query["query"]["parameters"][0]["field"] = field
106
+ query["query"]["parameters"][0]["type"] = type
107
+ query["query"]["parameters"][0]["operator"] = operator
108
+ query["query"]["parameters"][0]["value"] = value
109
+
110
+ response = cls._get_api_handler().post(
111
+ endpoint=cls.get_endpoint("filter_evidence").format(module_slug=cls._module_slug), data=query
112
+ )
113
+ if not response.raise_for_status():
114
+ return response.json()
115
+ return []
@@ -34,7 +34,7 @@ class EvidenceMapping(RegScaleModel):
34
34
  :rtype: ConfigDict
35
35
  """
36
36
  return ConfigDict(
37
- get_all_by_evidence="/api/{model_slug}/getAllByEvudence/{intID}",
37
+ get_all_by_parent="/api/{model_slug}/getAllByEvidence/{intParentID}",
38
38
  get_summary_by_evidence="/api/{model_slug}/getSummaryByEvidence/{intID}",
39
39
  batch_create="/api/{model_slug}/batchCreate",
40
40
  )
@@ -117,7 +117,7 @@ class SupplyChain(RegScaleModel):
117
117
  naics: Optional[str] = None
118
118
  stockSymbol: Optional[str] = None
119
119
  aribaNetworkId: Optional[str] = None
120
- contractOwnerId: str = Field(default_factory=RegScaleModel._get_api_handler().get_user_id)
120
+ contractOwnerId: str = Field(default_factory=RegScaleModel.get_user_id)
121
121
 
122
122
  @staticmethod
123
123
  def _get_additional_endpoints() -> ConfigDict:
@@ -2,7 +2,7 @@
2
2
  # -*- coding: utf-8 -*-
3
3
  """Model for Task in the application"""
4
4
 
5
- from typing import Optional, List
5
+ from typing import List, Optional
6
6
 
7
7
  from pydantic import ConfigDict, Field, field_validator
8
8
 
@@ -61,6 +61,19 @@ class Task(RegScaleModel):
61
61
  get_by_date_range="/api/{model_slug}/getByDateRangeAll/{dtStart}/{dtEnd}",
62
62
  )
63
63
 
64
+ @classmethod
65
+ def other_identifier_starts_with(cls, starts_with: str) -> List["Task"]:
66
+ """
67
+ Get tasks based on otherIdentifier field, starts with.
68
+
69
+ :param str starts_with: The starting characters of a string.
70
+ :return: A list of Task instances matching the query
71
+ :rtype: List[Task]
72
+ """
73
+ endpoint = cls.get_endpoint("other_identifier_starts_with").format(strId=starts_with)
74
+ response = cls._get_api_handler().get(endpoint=endpoint)
75
+ return cls._handle_list_response(response)
76
+
64
77
  @classmethod
65
78
  def query_by_custom_field(cls, field_name: str, field_value: str) -> List["Task"]:
66
79
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: regscale-cli
3
- Version: 6.20.0.0
3
+ Version: 6.20.1.1
4
4
  Summary: Command Line Interface (CLI) for bulk processing/loading data into RegScale
5
5
  Home-page: https://github.com/RegScale/regscale-cli
6
6
  Author: Travis Howerton
@@ -1,4 +1,4 @@
1
- regscale/__init__.py,sha256=ZMWEUEkWWL_ytMVCwYlotn6saTOXHml4Z9fzIruy0Hk,25
1
+ regscale/__init__.py,sha256=R8kQpB2LbsQlXKthcZP_3nYntLB4F_F8_ZKonzaI8y4,25
2
2
  regscale/regscale.py,sha256=t4uLMzy9P_KeKazI9ZTQupTkbgh28uMilLSpmzn7adE,30983
3
3
  regscale/airflow/__init__.py,sha256=yMwN0Bz4JbM0nl5qY_hPegxo_O2ilhTOL9PY5Njhn-s,270
4
4
  regscale/airflow/click_dags.py,sha256=H3SUR5jkvInNMv1gu-VG-Ja_H-kH145CpQYNalWNAbE,4520
@@ -204,9 +204,9 @@ regscale/integrations/commercial/stigv2/ckl_parser.py,sha256=RPrDGsKqAbTJMsJd3AY
204
204
  regscale/integrations/commercial/stigv2/click_commands.py,sha256=Tywelob4WwZuriSZV7-qgCeNzWtChMPimeBI2unYEqo,3552
205
205
  regscale/integrations/commercial/stigv2/stig_integration.py,sha256=-UlfL0BBI3jFGotctOJyTCRAU9zIXW6mwU7ySrRXE9U,11573
206
206
  regscale/integrations/commercial/synqly/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
207
- regscale/integrations/commercial/synqly/assets.py,sha256=LKykIlq2PI17lLDPjfXw_3dXjbqakY5cPFXFqR1NNHE,2148
208
- regscale/integrations/commercial/synqly/edr.py,sha256=Z2gwscLvrFLKcodU83qbVn1jF8eFhwdjXm94LA8EwxQ,2444
209
- regscale/integrations/commercial/synqly/ticketing.py,sha256=hibFRidMU6UGH6bFaMHiIVU6y-bhd0f9_-AsFWbt1pM,5644
207
+ regscale/integrations/commercial/synqly/assets.py,sha256=V3cDMRCy0nUCD53l9qxQDPe9LIKPUGT8FUyBuhUQ7No,2679
208
+ regscale/integrations/commercial/synqly/edr.py,sha256=qPpsnk9joSoJnbI4rI2qz5LrMUU9bTwNC-3IYHwsfxs,2708
209
+ regscale/integrations/commercial/synqly/ticketing.py,sha256=FvrVyDGvqlDh4znEaF77cuoDZKhIUI5U6d5U2g-rdWI,6399
210
210
  regscale/integrations/commercial/synqly/vulnerabilities.py,sha256=B8GwfKVDdoOIikjZO-4KqDNf-ApXlcJNkwmno0FjDOQ,7842
211
211
  regscale/integrations/commercial/tenablev2/__init__.py,sha256=UpSY_oww83kz9c7amdbptJKwDB1gAOBQDS-Q9WFp588,295
212
212
  regscale/integrations/commercial/tenablev2/authenticate.py,sha256=VPTmxaVCaah2gJYNeU9P1KoQ734ohGQ-wcVy6JfqDTE,1247
@@ -250,7 +250,7 @@ regscale/integrations/public/fedramp/appendix_parser.py,sha256=u3Q_NHxAvYTQ1RAr1
250
250
  regscale/integrations/public/fedramp/click.py,sha256=8JbWRidFZ9EFoOTp-bwE584u23TzKqWQIpfxmA0-lGo,14975
251
251
  regscale/integrations/public/fedramp/components.py,sha256=z6PMObm-kjRR42bT04EfnjisrEULfXlwxb7576uuMmY,27010
252
252
  regscale/integrations/public/fedramp/docx_parser.py,sha256=EA9g1iTlB6-GtOzV9JwGW8x_SruhbaIMOzstCBvjiq8,10526
253
- regscale/integrations/public/fedramp/fedramp_cis_crm.py,sha256=8zkXEEWx-XGF44vZlm4zS0x9k5BSnziZn3pB32A49ak,58570
253
+ regscale/integrations/public/fedramp/fedramp_cis_crm.py,sha256=-mQXCah1WuNJcLMprOBuqlPt313J2MkpssvSGXwRQN0,58795
254
254
  regscale/integrations/public/fedramp/fedramp_common.py,sha256=Mdy3_WdCEcTwSXEEKXiODmr2YJTWcTg6jfyWZJWfruQ,115406
255
255
  regscale/integrations/public/fedramp/fedramp_docx.py,sha256=GnRjuWEgE9XSe9egPOQSZ8lMjY4CpqcD2IS5paI-xQc,13742
256
256
  regscale/integrations/public/fedramp/fedramp_five.py,sha256=F4KIOdnYaRjJrJHJYsN9Bmf6i5s0nus-t_GaAh8A3ow,92645
@@ -306,7 +306,7 @@ regscale/models/integration_models/azure_alerts.py,sha256=2etrpvcxa7jVQrc98bJlVG
306
306
  regscale/models/integration_models/base64.py,sha256=sxV6O5qY1_TstJENX5jBPsSdQwmA83-NNhgJFunXiZE,570
307
307
  regscale/models/integration_models/burp.py,sha256=hPQkmmUdC84MBFTE2Di5NvjbGz1ssISSkZdDaVi-ZoQ,16941
308
308
  regscale/models/integration_models/burp_models.py,sha256=UytDTAcCaxyu-knFkm_mEUH6UmWK3OTXKSC9Sc6OjVs,3669
309
- regscale/models/integration_models/cisa_kev_data.json,sha256=EAQ7wOYmiP3QNQLV4INsW33dAwQqTZv67J5xNGQSheE,1188623
309
+ regscale/models/integration_models/cisa_kev_data.json,sha256=17Aw1gj7q0Wsi6QvpWqKmt86NcUriJyscsPXJjHyvnc,1196182
310
310
  regscale/models/integration_models/defender_data.py,sha256=jsAcjKxiGmumGerj7xSWkFd6r__YpuKDnYX5o7xHDiE,2844
311
311
  regscale/models/integration_models/defenderimport.py,sha256=OFwEH0Xu-HFLIZJZ8hP60Ov3lS8RR7KHEsw4wI8QnoE,5766
312
312
  regscale/models/integration_models/drf.py,sha256=Aq7AdLa_CH97NrnR-CxaFI22JjVN9uCxVN7Z-BBUaNU,18896
@@ -332,7 +332,7 @@ regscale/models/integration_models/flat_file_importer/__init__.py,sha256=jtZamIz
332
332
  regscale/models/integration_models/sbom/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
333
333
  regscale/models/integration_models/sbom/cyclone_dx.py,sha256=0pFR0BWBrF5c8_cC_8mj2MXvNOMHOdHbBYXvTVfFAh8,4058
334
334
  regscale/models/integration_models/synqly_models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
335
- regscale/models/integration_models/synqly_models/capabilities.json,sha256=WUz7gdukO_DSg7rrOQSFY0L6qvzvl1q-x6w6WNc_CN0,284851
335
+ regscale/models/integration_models/synqly_models/capabilities.json,sha256=jiutFpRs-4ndjwki1SOzkjp_mRwctK2sWdBE65R7ESY,299486
336
336
  regscale/models/integration_models/synqly_models/connector_types.py,sha256=8nxptkTexpskySnmL0obNAff_iu_fx6tJ7i1-4hJvao,461
337
337
  regscale/models/integration_models/synqly_models/ocsf_mapper.py,sha256=e2kTOhWSNRnzbgMchMx-7c21pCgSv2DqWnxvajKEKJM,16960
338
338
  regscale/models/integration_models/synqly_models/param.py,sha256=45zgYUV4U9Ia8-CdIb4TlE3vfDMMtbfA1y5LOiznnH8,2645
@@ -346,7 +346,7 @@ regscale/models/integration_models/synqly_models/connectors/vulnerabilities.py,s
346
346
  regscale/models/integration_models/tenable_models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
347
347
  regscale/models/integration_models/tenable_models/integration.py,sha256=lplL8zmjTFuhLreW-4y7G1fiCOBgzNAaATq800jgTQc,10271
348
348
  regscale/models/integration_models/tenable_models/models.py,sha256=dmG7btkN4YkDWwnfW5Ldc3tWEAGjPiaRgJjrqMOkPEU,15846
349
- regscale/models/regscale_models/__init__.py,sha256=qrHS73IRBfWoN7fTJGGk1mTpwoRp_f3VGWaPsN-k3oo,2051
349
+ regscale/models/regscale_models/__init__.py,sha256=mkaVXxR2DpJRVcYNPnjkFVi3K2UNLbN38iOrTo3SsJs,2107
350
350
  regscale/models/regscale_models/assessment.py,sha256=ekzNlcsfDGBu97PMCi7hBRGbzVgxk7Ij0RfrdGh1Rfw,20440
351
351
  regscale/models/regscale_models/assessment_plan.py,sha256=qo2YA5ckSbUKDHnC_2BUc2I9kMTje9Gq-qTCXqvEKCY,1716
352
352
  regscale/models/regscale_models/assessment_result.py,sha256=K48yjYKwgY1-d_Y3aQUDcCvaqcTIVYdbKV5Wgicf4Ts,1283
@@ -374,8 +374,8 @@ regscale/models/regscale_models/data.py,sha256=jxos_D_3ZhCHZuWfnpIvxf6xpgVm18Vuw
374
374
  regscale/models/regscale_models/data_center.py,sha256=MaLfG0n6cCwsTNEsYOJlq04rY8LSGFWCMScS8NiLpb4,1074
375
375
  regscale/models/regscale_models/deviation.py,sha256=wOMY5A6XZpKWJnNIXTj3Ks5pls34eyGWkwgR8R7tj-Y,7855
376
376
  regscale/models/regscale_models/email.py,sha256=kgEzXTUZr7uHksMOCextWbXJXYuRKyXO29cNgzoWnog,3441
377
- regscale/models/regscale_models/evidence.py,sha256=nOc328HreJgSNFhlLh8lfZclj2HQOq46Ee1Lo1xSrqI,1904
378
- regscale/models/regscale_models/evidence_mapping.py,sha256=1TPFUEGl0uWChdAcVuFkEAwl36twRVfN81Hz4vNUI5A,1440
377
+ regscale/models/regscale_models/evidence.py,sha256=R78f3eWjmBgusZbv8i9cd5O8Is43KjvxiaJH_CLERqE,4316
378
+ regscale/models/regscale_models/evidence_mapping.py,sha256=eovTJsl1cjZMvbhpOv70nILIHSXmURyU4mg_r09h4VQ,1444
379
379
  regscale/models/regscale_models/facility.py,sha256=J3gGv0Tf3zNdyKGhb0iM8WjgjWqJHZLKdcN9n-jDrTA,1059
380
380
  regscale/models/regscale_models/file.py,sha256=_95A8ERXkA7CQRmbl3z7dpe2uZyrkEcGlSKDpIYwurg,14360
381
381
  regscale/models/regscale_models/filetag.py,sha256=jd99xcQsGheLFfy7PYtZEzT-re_Dp_ZoUF3GWYMsi0Q,1138
@@ -423,12 +423,12 @@ regscale/models/regscale_models/security_plan.py,sha256=4hBnAqHpjVXd6i1dsO2r2HbP
423
423
  regscale/models/regscale_models/software_inventory.py,sha256=FRAIfoUlS0kaX1HQRDyV5q4yxwRHilXbS52NSj6exo0,5555
424
424
  regscale/models/regscale_models/stake_holder.py,sha256=JIuDTIky_3acDl-NOMwylTHkppN38JgPDZ1A6wM-BGE,1956
425
425
  regscale/models/regscale_models/stig.py,sha256=y-PQuGg3pwDTfsNZGW6anaNAjIZBQoNe7GOLMiT5zfw,26329
426
- regscale/models/regscale_models/supply_chain.py,sha256=tMP0IUt5mrJ1QaV5YtcdV7KW0wPQbKdPO3dX0se0gZo,5154
426
+ regscale/models/regscale_models/supply_chain.py,sha256=lXvXn5zXfLmBQwJ2sm43gXBM8e7Oah_YsTZM2ANqjV8,5135
427
427
  regscale/models/regscale_models/system_role.py,sha256=cGKhdekD0ZlT_cuUGDhzED9J46UzWdAVzdoq_TxG0KA,6406
428
428
  regscale/models/regscale_models/system_role_external_assignment.py,sha256=vCI-paDP4gARkHyGareBUdkmK0hcp1cDSe7yFdYMSug,1333
429
429
  regscale/models/regscale_models/tag.py,sha256=D4n5ABDzjI7u1ukjRyHgmgyVd8iNTNJlQrdi55AhYmM,1130
430
430
  regscale/models/regscale_models/tag_mapping.py,sha256=QtafVsWjpBR8BAxRhabk3FL3E4WI5OdCv95fuvNOrZs,657
431
- regscale/models/regscale_models/task.py,sha256=eKVdR89Gb6M9E2plhK4fru8teQI3zPJpgtJ0f43FOrY,4919
431
+ regscale/models/regscale_models/task.py,sha256=le3N2GIUCEJrFnNh0DLU7RAcle4ULr8OP4M8qK0ZADE,5469
432
432
  regscale/models/regscale_models/threat.py,sha256=4TNZcRnTgmlDwBsYu5Pbh9GRd8ZWAtqqr0Xph3uPNAA,7255
433
433
  regscale/models/regscale_models/user.py,sha256=wiU2qKwp3aYtmaHEmTtv8BbMEgFb913dHgc2VnmsAkg,7186
434
434
  regscale/models/regscale_models/user_group.py,sha256=vzlXHvPNsgJd38H0R3osi46Oj19QO5oPx0qXntQBKWI,1891
@@ -505,9 +505,9 @@ tests/regscale/models/test_regscale_model.py,sha256=ZsrEZkC4EtdIsoQuayn1xv2gEGcV
505
505
  tests/regscale/models/test_report.py,sha256=eiSvS_zS0aVeL0HBvtmHVvEzcfF9ZFVn2twj5g8KttY,970
506
506
  tests/regscale/models/test_tenable_integrations.py,sha256=PNJC2Zu6lv1xj7y6e1yOsz5FktSU3PRKb5x3n5YG3w0,4072
507
507
  tests/regscale/models/test_user_model.py,sha256=e9olv28qBApgnvK6hFHOgXjUC-pkaV8aGDirEIWASL4,4427
508
- regscale_cli-6.20.0.0.dist-info/LICENSE,sha256=ytNhYQ9Rmhj_m-EX2pPq9Ld6tH5wrqqDYg-fCf46WDU,1076
509
- regscale_cli-6.20.0.0.dist-info/METADATA,sha256=RBWZPBORaTXQ8HLHlE81N8eRCGgaH3gg_xVBG00wlIw,34671
510
- regscale_cli-6.20.0.0.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
511
- regscale_cli-6.20.0.0.dist-info/entry_points.txt,sha256=cLOaIP1eRv1yZ2u7BvpE3aB4x3kDrDwkpeisKOu33z8,269
512
- regscale_cli-6.20.0.0.dist-info/top_level.txt,sha256=Uv8VUCAdxRm70bgrD4YNEJUmDhBThad_1aaEFGwRByc,15
513
- regscale_cli-6.20.0.0.dist-info/RECORD,,
508
+ regscale_cli-6.20.1.1.dist-info/LICENSE,sha256=ytNhYQ9Rmhj_m-EX2pPq9Ld6tH5wrqqDYg-fCf46WDU,1076
509
+ regscale_cli-6.20.1.1.dist-info/METADATA,sha256=LrMh04f0ytsqzXQtRpy5_xICsU3BR28r4QPg0iN1FaI,34671
510
+ regscale_cli-6.20.1.1.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
511
+ regscale_cli-6.20.1.1.dist-info/entry_points.txt,sha256=cLOaIP1eRv1yZ2u7BvpE3aB4x3kDrDwkpeisKOu33z8,269
512
+ regscale_cli-6.20.1.1.dist-info/top_level.txt,sha256=Uv8VUCAdxRm70bgrD4YNEJUmDhBThad_1aaEFGwRByc,15
513
+ regscale_cli-6.20.1.1.dist-info/RECORD,,