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

Files changed (28) hide show
  1. regscale/__init__.py +1 -1
  2. regscale/core/app/utils/app_utils.py +1 -1
  3. regscale/integrations/commercial/amazon/common.py +5 -4
  4. regscale/integrations/commercial/aws/scanner.py +3 -2
  5. regscale/integrations/commercial/synqly/assets.py +10 -0
  6. regscale/integrations/commercial/synqly/ticketing.py +25 -0
  7. regscale/integrations/commercial/tenablev2/commands.py +34 -4
  8. regscale/integrations/commercial/tenablev2/sync_compliance.py +550 -0
  9. regscale/integrations/commercial/wizv2/click.py +3 -3
  10. regscale/integrations/scanner_integration.py +3 -2
  11. regscale/models/app_models/import_validater.py +2 -0
  12. regscale/models/integration_models/cisa_kev_data.json +188 -10
  13. regscale/models/integration_models/flat_file_importer/__init__.py +26 -9
  14. regscale/models/integration_models/synqly_models/capabilities.json +1 -1
  15. regscale/models/regscale_models/assessment_plan.py +1 -1
  16. regscale/models/regscale_models/assessment_result.py +39 -0
  17. regscale/models/regscale_models/line_of_inquiry.py +2 -2
  18. regscale/models/regscale_models/regscale_model.py +16 -15
  19. regscale/models/regscale_models/software_inventory.py +1 -1
  20. regscale/models/regscale_models/supply_chain.py +4 -4
  21. regscale/models/regscale_models/user.py +11 -0
  22. regscale/utils/graphql_client.py +2 -1
  23. {regscale_cli-6.19.0.1.dist-info → regscale_cli-6.19.2.0.dist-info}/METADATA +45 -45
  24. {regscale_cli-6.19.0.1.dist-info → regscale_cli-6.19.2.0.dist-info}/RECORD +28 -26
  25. {regscale_cli-6.19.0.1.dist-info → regscale_cli-6.19.2.0.dist-info}/LICENSE +0 -0
  26. {regscale_cli-6.19.0.1.dist-info → regscale_cli-6.19.2.0.dist-info}/WHEEL +0 -0
  27. {regscale_cli-6.19.0.1.dist-info → regscale_cli-6.19.2.0.dist-info}/entry_points.txt +0 -0
  28. {regscale_cli-6.19.0.1.dist-info → regscale_cli-6.19.2.0.dist-info}/top_level.txt +0 -0
@@ -4,7 +4,7 @@ from typing import Optional, Union
4
4
  from pydantic import Field, ConfigDict
5
5
 
6
6
  from regscale.core.app.utils.app_utils import get_current_datetime
7
- from regscale.models.regscale_models import RegScaleModel
7
+ from regscale.models.regscale_models.regscale_model import RegScaleModel
8
8
 
9
9
 
10
10
  class AssesmentPlanArea(str, Enum):
@@ -0,0 +1,39 @@
1
+ from enum import Enum
2
+ from typing import Optional, Union
3
+ from datetime import datetime
4
+
5
+ from pydantic import Field, ConfigDict
6
+
7
+ from regscale.core.app.utils.app_utils import get_current_datetime
8
+ from regscale.models.regscale_models.regscale_model import RegScaleModel
9
+
10
+
11
+ class AssessmentResult(RegScaleModel):
12
+ """Assessment Results Model"""
13
+
14
+ _module_slug = "assessmentresults"
15
+ _unique_fields = ["id"]
16
+
17
+ id: int = 0
18
+ isPublic: bool = True
19
+ uuid: Optional[str] = None
20
+ status: Optional[str] = None
21
+ loqId: Optional[int] = 0
22
+ lineOfInquiry: Optional[str] = None
23
+ requirement: Optional[str] = None
24
+ citation: Optional[str] = None
25
+ weight: Optional[int] = 0
26
+ responsibility: Optional[str] = None
27
+ guidance: Optional[str] = None
28
+ observations: Optional[str] = None
29
+ recommendations: Optional[str] = None
30
+ issuesIdentified: Optional[str] = None
31
+ riskAssessment: Optional[str] = None
32
+ samplingMethodology: Optional[str] = None
33
+ fixedDuringAssessment: bool = False
34
+ bComplete: bool = False
35
+ parentAssessmentId: Optional[int] = 0
36
+ dataDate: Optional[str] = Field(default_factory=get_current_datetime)
37
+ dataString: Optional[datetime] = None
38
+ dataDecimal: Optional[float] = 0.0
39
+ dataBoolean: Optional[bool] = False
@@ -4,7 +4,7 @@ from typing import Optional, Union
4
4
  from pydantic import Field, ConfigDict
5
5
 
6
6
  from regscale.core.app.utils.app_utils import get_current_datetime
7
- from regscale.models.regscale_models import RegScaleModel
7
+ from regscale.models.regscale_models.regscale_model import RegScaleModel
8
8
 
9
9
 
10
10
  class LoIType(str, Enum):
@@ -48,5 +48,5 @@ class LinesOfInquiry(RegScaleModel):
48
48
  :rtype: ConfigDict
49
49
  """
50
50
  return ConfigDict( # type: ignore
51
- get_all_by_parent="/api/{model_slug}/getAllByParent/{intAssessmentID}",
51
+ get_all_by_parent="/api/{model_slug}/getAllByParent/{intParentID}",
52
52
  )
@@ -32,6 +32,8 @@ T = TypeVar("T", bound="RegScaleModel")
32
32
 
33
33
  logger = logging.getLogger("regscale")
34
34
 
35
+ IS_DISABLE_CACHE = False # flag to disable caching
36
+
35
37
 
36
38
  class RegScaleModel(BaseModel, ABC):
37
39
  """Mixin class for RegScale Models to add functionality to interact with RegScale API"""
@@ -52,8 +54,6 @@ class RegScaleModel(BaseModel, ABC):
52
54
  _exclude_graphql_fields: ClassVar[List[str]] = ["extra_data", "tenantsId"]
53
55
  _original_data: Optional[Dict[str, Any]] = None
54
56
 
55
- # Caching
56
- _disable_cache: bool = False # flag to disable caching
57
57
  _object_cache: ClassVar[Cache] = Cache(maxsize=100000)
58
58
  _parent_cache: ClassVar[Cache] = Cache(maxsize=50000)
59
59
  _lock_registry: ClassVar[ThreadSafeDict] = ThreadSafeDict()
@@ -78,11 +78,12 @@ class RegScaleModel(BaseModel, ABC):
78
78
  :rtype: None
79
79
  """
80
80
  try:
81
+ global IS_DISABLE_CACHE
81
82
  super().__init__(*args, **data)
82
83
  # Capture initial state after initialization
83
84
  self._original_data = self.dict(exclude_unset=True)
84
- self._disable_cache = self._fetch_disabled_cache_setting()
85
- if self._disable_cache:
85
+ IS_DISABLE_CACHE = self._fetch_disabled_cache_setting()
86
+ if IS_DISABLE_CACHE:
86
87
  logger.debug("cache is disabled")
87
88
  except Exception as e:
88
89
  logger.error(f"Error creating {self.__class__.__name__}: {e} {data}", exc_info=True)
@@ -107,8 +108,9 @@ class RegScaleModel(BaseModel, ABC):
107
108
  :return: True if caching is disabled, False otherwise
108
109
  :rtype: bool
109
110
  """
110
- cls._disable_cache = True
111
- return cls._disable_cache
111
+ global IS_DISABLE_CACHE
112
+ IS_DISABLE_CACHE = True
113
+ return IS_DISABLE_CACHE
112
114
 
113
115
  @classmethod
114
116
  def enable_cache(cls) -> bool:
@@ -118,8 +120,9 @@ class RegScaleModel(BaseModel, ABC):
118
120
  :return: True if caching is enabled, False otherwise
119
121
  :rtype: bool
120
122
  """
121
- cls._disable_cache = False
122
- return cls._disable_cache
123
+ global IS_DISABLE_CACHE
124
+ IS_DISABLE_CACHE = False
125
+ return IS_DISABLE_CACHE
123
126
 
124
127
  @classmethod
125
128
  def _get_api_handler(cls) -> APIHandler:
@@ -207,7 +210,7 @@ class RegScaleModel(BaseModel, ABC):
207
210
  :return: The cached object if found, None otherwise
208
211
  :rtype: Optional[T]
209
212
  """
210
- if cls._disable_cache:
213
+ if IS_DISABLE_CACHE:
211
214
  return None
212
215
  with cls._get_lock(cache_key):
213
216
  return cls._object_cache.get(cache_key)
@@ -221,7 +224,7 @@ class RegScaleModel(BaseModel, ABC):
221
224
  :return: None
222
225
  :rtype: None
223
226
  """
224
- if cls._disable_cache:
227
+ if IS_DISABLE_CACHE:
225
228
  return
226
229
  try:
227
230
  if not obj:
@@ -271,7 +274,7 @@ class RegScaleModel(BaseModel, ABC):
271
274
  :return: None
272
275
  :rtype: None
273
276
  """
274
- if cls._disable_cache:
277
+ if IS_DISABLE_CACHE:
275
278
  return
276
279
  parent_id = getattr(obj, cls._parent_id_field, None)
277
280
  parent_module = getattr(obj, "parentModule", getattr(obj, "parent_module", ""))
@@ -296,7 +299,7 @@ class RegScaleModel(BaseModel, ABC):
296
299
  :return: None
297
300
  :rtype: None
298
301
  """
299
- if cls._disable_cache:
302
+ if IS_DISABLE_CACHE:
300
303
  return
301
304
  with cls._get_lock(cache_key):
302
305
  for obj in objects:
@@ -311,8 +314,6 @@ class RegScaleModel(BaseModel, ABC):
311
314
  :return: None
312
315
  :rtype: None
313
316
  """
314
- if cls._disable_cache:
315
- return
316
317
  cls._object_cache.clear()
317
318
 
318
319
  @classmethod
@@ -324,7 +325,7 @@ class RegScaleModel(BaseModel, ABC):
324
325
  :return: None
325
326
  :rtype: None
326
327
  """
327
- if cls._disable_cache:
328
+ if IS_DISABLE_CACHE:
328
329
  return
329
330
  cache_key = cls._get_cache_key(obj)
330
331
  with cls._get_lock(cache_key):
@@ -9,7 +9,7 @@ from pydantic import ConfigDict, Field
9
9
  from regscale.core.app.api import Api
10
10
  from regscale.core.app.application import Application
11
11
  from regscale.core.app.utils.app_utils import get_current_datetime
12
- from regscale.models.regscale_models import RegScaleModel
12
+ from regscale.models.regscale_models.regscale_model import RegScaleModel
13
13
 
14
14
 
15
15
  class SoftwareInventory(RegScaleModel):
@@ -6,7 +6,7 @@ from typing import Optional, Union
6
6
 
7
7
  from pydantic import ConfigDict, Field
8
8
 
9
- from .regscale_model import RegScaleModel
9
+ from regscale.models.regscale_models.regscale_model import RegScaleModel
10
10
 
11
11
  logger = logging.getLogger("regscale")
12
12
 
@@ -103,9 +103,9 @@ class SupplyChain(RegScaleModel):
103
103
  parentModule: Optional[str] = None
104
104
  orgId: Optional[int] = None
105
105
  facilityId: Optional[int] = None
106
- contractValue: Optional[int] = 0
107
- fundedAmount: Optional[int] = 0
108
- actualCosts: Optional[int] = 0
106
+ contractValue: Optional[float] = 0.0
107
+ fundedAmount: Optional[float] = 0.0
108
+ actualCosts: Optional[float] = 0.0
109
109
  scope: Optional[str] = None
110
110
  startDate: Optional[str] = None
111
111
  endDate: Optional[str] = None
@@ -175,6 +175,17 @@ class User(RegScaleModel):
175
175
  response = cls._get_api_handler().get(endpoint=cls.get_endpoint("get_all"))
176
176
  return cast(List[T], cls._handle_list_response(response))
177
177
 
178
+ @classmethod
179
+ def get_roles(cls) -> List["User"]:
180
+ """
181
+ Get all roles from RegScale
182
+
183
+ :return: List of RegScale roles
184
+ :rtype: dict
185
+ """
186
+ response = cls._get_api_handler().get(endpoint=cls.get_endpoint("get_roles"))
187
+ return cast(List[T], cls._handle_list_response(response))
188
+
178
189
  def assign_role(self, role_id: str) -> bool:
179
190
  """
180
191
  Assign a role to a user
@@ -27,6 +27,7 @@ class PaginatedGraphQLClient:
27
27
  headers: Optional[Dict[str, str]] = None,
28
28
  logging_level: str = logging.CRITICAL,
29
29
  ) -> None:
30
+ from regscale.integrations.variables import ScannerVariables
30
31
  from gql import gql, Client # Optimize import performance
31
32
  from gql.transport.requests import RequestsHTTPTransport
32
33
  from gql.transport.requests import log as requests_logger
@@ -35,7 +36,7 @@ class PaginatedGraphQLClient:
35
36
  self.endpoint = endpoint
36
37
  self.query = gql(query)
37
38
  self.headers = headers or {} # Ensure headers are a dictionary
38
- self.transport = RequestsHTTPTransport(url=endpoint, headers=self.headers)
39
+ self.transport = RequestsHTTPTransport(url=endpoint, headers=self.headers, verify=ScannerVariables.sslVerify)
39
40
  self.client = Client(transport=self.transport)
40
41
  self.job_progress = create_progress_object()
41
42
  requests_logger.setLevel(level=self.log_level)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: regscale-cli
3
- Version: 6.19.0.1
3
+ Version: 6.19.2.0
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
@@ -22,10 +22,10 @@ Requires-Dist: boto3 ==1.35.10
22
22
  Requires-Dist: botocore ==1.35.10
23
23
  Requires-Dist: bs4
24
24
  Requires-Dist: cacheout
25
- Requires-Dist: click ==8.1.3
25
+ Requires-Dist: click >=8.1.3
26
26
  Requires-Dist: colorama ==0.4.5
27
27
  Requires-Dist: crowdstrike-falconpy ==1.4.5
28
- Requires-Dist: cryptography >=43.0.1
28
+ Requires-Dist: cryptography >=44.0.1
29
29
  Requires-Dist: distro ==1.8.0
30
30
  Requires-Dist: docx ==0.2.4
31
31
  Requires-Dist: filelock ~=3.13.1
@@ -43,16 +43,16 @@ Requires-Dist: markdown
43
43
  Requires-Dist: matplotlib
44
44
  Requires-Dist: msal ~=1.30.0
45
45
  Requires-Dist: nessus-file-reader
46
- Requires-Dist: numpy >=2.0.0
46
+ Requires-Dist: numpy ~=2.0.0
47
47
  Requires-Dist: openpyxl
48
48
  Requires-Dist: packaging ~=23.1
49
49
  Requires-Dist: pandas
50
50
  Requires-Dist: pathlib ~=1.0.1
51
51
  Requires-Dist: pdfplumber ==0.7.6
52
52
  Requires-Dist: pre-commit
53
- Requires-Dist: psutil ==5.9.6
53
+ Requires-Dist: psutil ~=6.1.0
54
54
  Requires-Dist: pyTenable
55
- Requires-Dist: pydantic ~=2.9.2
55
+ Requires-Dist: pydantic ~=2.11.0
56
56
  Requires-Dist: pypandoc
57
57
  Requires-Dist: pypandoc-binary
58
58
  Requires-Dist: pytest
@@ -78,16 +78,16 @@ Requires-Dist: PyMuPDF >=1.24.7 ; extra == 'airflow'
78
78
  Requires-Dist: PyYAML ==6.0.1 ; extra == 'airflow'
79
79
  Requires-Dist: apache-airflow-providers-common-sql ; extra == 'airflow'
80
80
  Requires-Dist: apache-airflow-providers-postgres ; extra == 'airflow'
81
- Requires-Dist: apache-airflow >=2.10.3 ; extra == 'airflow'
81
+ Requires-Dist: apache-airflow ==2.10.3 ; extra == 'airflow'
82
82
  Requires-Dist: beautifulsoup4 ; extra == 'airflow'
83
83
  Requires-Dist: boto3 ==1.35.10 ; extra == 'airflow'
84
84
  Requires-Dist: botocore ==1.35.10 ; extra == 'airflow'
85
85
  Requires-Dist: bs4 ; extra == 'airflow'
86
86
  Requires-Dist: cacheout ; extra == 'airflow'
87
- Requires-Dist: click ==8.1.3 ; extra == 'airflow'
87
+ Requires-Dist: click >=8.1.3 ; extra == 'airflow'
88
88
  Requires-Dist: colorama ==0.4.5 ; extra == 'airflow'
89
89
  Requires-Dist: crowdstrike-falconpy ==1.4.5 ; extra == 'airflow'
90
- Requires-Dist: cryptography >=43.0.1 ; extra == 'airflow'
90
+ Requires-Dist: cryptography >=44.0.1 ; extra == 'airflow'
91
91
  Requires-Dist: distro ==1.8.0 ; extra == 'airflow'
92
92
  Requires-Dist: docx ==0.2.4 ; extra == 'airflow'
93
93
  Requires-Dist: filelock ~=3.13.1 ; extra == 'airflow'
@@ -109,17 +109,17 @@ Requires-Dist: matplotlib ; extra == 'airflow'
109
109
  Requires-Dist: msal ~=1.30.0 ; extra == 'airflow'
110
110
  Requires-Dist: nessus-file-reader ; extra == 'airflow'
111
111
  Requires-Dist: networkx ; extra == 'airflow'
112
- Requires-Dist: numpy >=2.0.0 ; extra == 'airflow'
112
+ Requires-Dist: numpy ~=2.0.0 ; extra == 'airflow'
113
113
  Requires-Dist: openpyxl ; extra == 'airflow'
114
114
  Requires-Dist: packaging ~=23.1 ; extra == 'airflow'
115
115
  Requires-Dist: pandas ; extra == 'airflow'
116
116
  Requires-Dist: pathlib ~=1.0.1 ; extra == 'airflow'
117
117
  Requires-Dist: pdfplumber ==0.7.6 ; extra == 'airflow'
118
118
  Requires-Dist: pre-commit ; extra == 'airflow'
119
- Requires-Dist: psutil ==5.9.6 ; extra == 'airflow'
119
+ Requires-Dist: psutil ~=6.1.0 ; extra == 'airflow'
120
120
  Requires-Dist: psycopg2-binary ; extra == 'airflow'
121
121
  Requires-Dist: pyTenable ; extra == 'airflow'
122
- Requires-Dist: pydantic ~=2.9.2 ; extra == 'airflow'
122
+ Requires-Dist: pydantic ~=2.11.0 ; extra == 'airflow'
123
123
  Requires-Dist: pypandoc ; extra == 'airflow'
124
124
  Requires-Dist: pypandoc-binary ; extra == 'airflow'
125
125
  Requires-Dist: pytest ; extra == 'airflow'
@@ -146,17 +146,17 @@ Requires-Dist: PyYAML ==6.0.1 ; extra == 'airflow-azure'
146
146
  Requires-Dist: apache-airflow-providers-common-sql ; extra == 'airflow-azure'
147
147
  Requires-Dist: apache-airflow-providers-microsoft-azure ; extra == 'airflow-azure'
148
148
  Requires-Dist: apache-airflow-providers-postgres ; extra == 'airflow-azure'
149
- Requires-Dist: apache-airflow >=2.10.3 ; extra == 'airflow-azure'
149
+ Requires-Dist: apache-airflow ==2.10.3 ; extra == 'airflow-azure'
150
150
  Requires-Dist: azure-storage-blob ; extra == 'airflow-azure'
151
151
  Requires-Dist: beautifulsoup4 ; extra == 'airflow-azure'
152
152
  Requires-Dist: boto3 ==1.35.10 ; extra == 'airflow-azure'
153
153
  Requires-Dist: botocore ==1.35.10 ; extra == 'airflow-azure'
154
154
  Requires-Dist: bs4 ; extra == 'airflow-azure'
155
155
  Requires-Dist: cacheout ; extra == 'airflow-azure'
156
- Requires-Dist: click ==8.1.3 ; extra == 'airflow-azure'
156
+ Requires-Dist: click >=8.1.3 ; extra == 'airflow-azure'
157
157
  Requires-Dist: colorama ==0.4.5 ; extra == 'airflow-azure'
158
158
  Requires-Dist: crowdstrike-falconpy ==1.4.5 ; extra == 'airflow-azure'
159
- Requires-Dist: cryptography >=43.0.1 ; extra == 'airflow-azure'
159
+ Requires-Dist: cryptography >=44.0.1 ; extra == 'airflow-azure'
160
160
  Requires-Dist: distro ==1.8.0 ; extra == 'airflow-azure'
161
161
  Requires-Dist: docx ==0.2.4 ; extra == 'airflow-azure'
162
162
  Requires-Dist: filelock ~=3.13.1 ; extra == 'airflow-azure'
@@ -178,7 +178,7 @@ Requires-Dist: matplotlib ; extra == 'airflow-azure'
178
178
  Requires-Dist: msal ~=1.30.0 ; extra == 'airflow-azure'
179
179
  Requires-Dist: nessus-file-reader ; extra == 'airflow-azure'
180
180
  Requires-Dist: networkx ; extra == 'airflow-azure'
181
- Requires-Dist: numpy >=2.0.0 ; extra == 'airflow-azure'
181
+ Requires-Dist: numpy ~=2.0.0 ; extra == 'airflow-azure'
182
182
  Requires-Dist: openpyxl ; extra == 'airflow-azure'
183
183
  Requires-Dist: packaging ~=23.1 ; extra == 'airflow-azure'
184
184
  Requires-Dist: pandas ; extra == 'airflow-azure'
@@ -186,10 +186,10 @@ Requires-Dist: pathlib ~=1.0.1 ; extra == 'airflow-azure'
186
186
  Requires-Dist: pdfplumber ==0.7.6 ; extra == 'airflow-azure'
187
187
  Requires-Dist: pendulum ==2.1.2 ; extra == 'airflow-azure'
188
188
  Requires-Dist: pre-commit ; extra == 'airflow-azure'
189
- Requires-Dist: psutil ==5.9.6 ; extra == 'airflow-azure'
189
+ Requires-Dist: psutil ~=6.1.0 ; extra == 'airflow-azure'
190
190
  Requires-Dist: psycopg2-binary ; extra == 'airflow-azure'
191
191
  Requires-Dist: pyTenable ; extra == 'airflow-azure'
192
- Requires-Dist: pydantic ~=2.9.2 ; extra == 'airflow-azure'
192
+ Requires-Dist: pydantic ~=2.11.0 ; extra == 'airflow-azure'
193
193
  Requires-Dist: pypandoc ; extra == 'airflow-azure'
194
194
  Requires-Dist: pypandoc-binary ; extra == 'airflow-azure'
195
195
  Requires-Dist: pytest ; extra == 'airflow-azure'
@@ -216,16 +216,16 @@ Requires-Dist: PyYAML ==6.0.1 ; extra == 'airflow-sqlserver'
216
216
  Requires-Dist: apache-airflow-providers-common-sql ; extra == 'airflow-sqlserver'
217
217
  Requires-Dist: apache-airflow-providers-microsoft-mssql ; extra == 'airflow-sqlserver'
218
218
  Requires-Dist: apache-airflow-providers-postgres ; extra == 'airflow-sqlserver'
219
- Requires-Dist: apache-airflow >=2.10.3 ; extra == 'airflow-sqlserver'
219
+ Requires-Dist: apache-airflow ==2.10.3 ; extra == 'airflow-sqlserver'
220
220
  Requires-Dist: beautifulsoup4 ; extra == 'airflow-sqlserver'
221
221
  Requires-Dist: boto3 ==1.35.10 ; extra == 'airflow-sqlserver'
222
222
  Requires-Dist: botocore ==1.35.10 ; extra == 'airflow-sqlserver'
223
223
  Requires-Dist: bs4 ; extra == 'airflow-sqlserver'
224
224
  Requires-Dist: cacheout ; extra == 'airflow-sqlserver'
225
- Requires-Dist: click ==8.1.3 ; extra == 'airflow-sqlserver'
225
+ Requires-Dist: click >=8.1.3 ; extra == 'airflow-sqlserver'
226
226
  Requires-Dist: colorama ==0.4.5 ; extra == 'airflow-sqlserver'
227
227
  Requires-Dist: crowdstrike-falconpy ==1.4.5 ; extra == 'airflow-sqlserver'
228
- Requires-Dist: cryptography >=43.0.1 ; extra == 'airflow-sqlserver'
228
+ Requires-Dist: cryptography >=44.0.1 ; extra == 'airflow-sqlserver'
229
229
  Requires-Dist: distro ==1.8.0 ; extra == 'airflow-sqlserver'
230
230
  Requires-Dist: docx ==0.2.4 ; extra == 'airflow-sqlserver'
231
231
  Requires-Dist: filelock ~=3.13.1 ; extra == 'airflow-sqlserver'
@@ -247,17 +247,17 @@ Requires-Dist: matplotlib ; extra == 'airflow-sqlserver'
247
247
  Requires-Dist: msal ~=1.30.0 ; extra == 'airflow-sqlserver'
248
248
  Requires-Dist: nessus-file-reader ; extra == 'airflow-sqlserver'
249
249
  Requires-Dist: networkx ; extra == 'airflow-sqlserver'
250
- Requires-Dist: numpy >=2.0.0 ; extra == 'airflow-sqlserver'
250
+ Requires-Dist: numpy ~=2.0.0 ; extra == 'airflow-sqlserver'
251
251
  Requires-Dist: openpyxl ; extra == 'airflow-sqlserver'
252
252
  Requires-Dist: packaging ~=23.1 ; extra == 'airflow-sqlserver'
253
253
  Requires-Dist: pandas ; extra == 'airflow-sqlserver'
254
254
  Requires-Dist: pathlib ~=1.0.1 ; extra == 'airflow-sqlserver'
255
255
  Requires-Dist: pdfplumber ==0.7.6 ; extra == 'airflow-sqlserver'
256
256
  Requires-Dist: pre-commit ; extra == 'airflow-sqlserver'
257
- Requires-Dist: psutil ==5.9.6 ; extra == 'airflow-sqlserver'
257
+ Requires-Dist: psutil ~=6.1.0 ; extra == 'airflow-sqlserver'
258
258
  Requires-Dist: psycopg2-binary ; extra == 'airflow-sqlserver'
259
259
  Requires-Dist: pyTenable ; extra == 'airflow-sqlserver'
260
- Requires-Dist: pydantic ~=2.9.2 ; extra == 'airflow-sqlserver'
260
+ Requires-Dist: pydantic ~=2.11.0 ; extra == 'airflow-sqlserver'
261
261
  Requires-Dist: pymssql ; extra == 'airflow-sqlserver'
262
262
  Requires-Dist: pyodbc ; extra == 'airflow-sqlserver'
263
263
  Requires-Dist: pypandoc ; extra == 'airflow-sqlserver'
@@ -286,16 +286,16 @@ Requires-Dist: PyYAML ==6.0.1 ; extra == 'all'
286
286
  Requires-Dist: ansible ; extra == 'all'
287
287
  Requires-Dist: apache-airflow-providers-common-sql ; extra == 'all'
288
288
  Requires-Dist: apache-airflow-providers-postgres ; extra == 'all'
289
- Requires-Dist: apache-airflow >=2.10.3 ; extra == 'all'
289
+ Requires-Dist: apache-airflow ==2.10.3 ; extra == 'all'
290
290
  Requires-Dist: beautifulsoup4 ; extra == 'all'
291
291
  Requires-Dist: boto3 ==1.35.10 ; extra == 'all'
292
292
  Requires-Dist: botocore ==1.35.10 ; extra == 'all'
293
293
  Requires-Dist: bs4 ; extra == 'all'
294
294
  Requires-Dist: cacheout ; extra == 'all'
295
- Requires-Dist: click ==8.1.3 ; extra == 'all'
295
+ Requires-Dist: click >=8.1.3 ; extra == 'all'
296
296
  Requires-Dist: colorama ==0.4.5 ; extra == 'all'
297
297
  Requires-Dist: crowdstrike-falconpy ==1.4.5 ; extra == 'all'
298
- Requires-Dist: cryptography >=43.0.1 ; extra == 'all'
298
+ Requires-Dist: cryptography >=44.0.1 ; extra == 'all'
299
299
  Requires-Dist: distro ==1.8.0 ; extra == 'all'
300
300
  Requires-Dist: docx ==0.2.4 ; extra == 'all'
301
301
  Requires-Dist: filelock ~=3.13.1 ; extra == 'all'
@@ -321,17 +321,17 @@ Requires-Dist: matplotlib ; extra == 'all'
321
321
  Requires-Dist: msal ~=1.30.0 ; extra == 'all'
322
322
  Requires-Dist: nessus-file-reader ; extra == 'all'
323
323
  Requires-Dist: networkx ; extra == 'all'
324
- Requires-Dist: numpy >=2.0.0 ; extra == 'all'
324
+ Requires-Dist: numpy ~=2.0.0 ; extra == 'all'
325
325
  Requires-Dist: openpyxl ; extra == 'all'
326
326
  Requires-Dist: packaging ~=23.1 ; extra == 'all'
327
327
  Requires-Dist: pandas ; extra == 'all'
328
328
  Requires-Dist: pathlib ~=1.0.1 ; extra == 'all'
329
329
  Requires-Dist: pdfplumber ==0.7.6 ; extra == 'all'
330
330
  Requires-Dist: pre-commit ; extra == 'all'
331
- Requires-Dist: psutil ==5.9.6 ; extra == 'all'
331
+ Requires-Dist: psutil ~=6.1.0 ; extra == 'all'
332
332
  Requires-Dist: psycopg2-binary ; extra == 'all'
333
333
  Requires-Dist: pyTenable ; extra == 'all'
334
- Requires-Dist: pydantic ~=2.9.2 ; extra == 'all'
334
+ Requires-Dist: pydantic ~=2.11.0 ; extra == 'all'
335
335
  Requires-Dist: pypandoc ; extra == 'all'
336
336
  Requires-Dist: pypandoc-binary ; extra == 'all'
337
337
  Requires-Dist: pytest ; extra == 'all'
@@ -362,10 +362,10 @@ Requires-Dist: boto3 ==1.35.10 ; extra == 'ansible'
362
362
  Requires-Dist: botocore ==1.35.10 ; extra == 'ansible'
363
363
  Requires-Dist: bs4 ; extra == 'ansible'
364
364
  Requires-Dist: cacheout ; extra == 'ansible'
365
- Requires-Dist: click ==8.1.3 ; extra == 'ansible'
365
+ Requires-Dist: click >=8.1.3 ; extra == 'ansible'
366
366
  Requires-Dist: colorama ==0.4.5 ; extra == 'ansible'
367
367
  Requires-Dist: crowdstrike-falconpy ==1.4.5 ; extra == 'ansible'
368
- Requires-Dist: cryptography >=43.0.1 ; extra == 'ansible'
368
+ Requires-Dist: cryptography >=44.0.1 ; extra == 'ansible'
369
369
  Requires-Dist: distro ==1.8.0 ; extra == 'ansible'
370
370
  Requires-Dist: docx ==0.2.4 ; extra == 'ansible'
371
371
  Requires-Dist: filelock ~=3.13.1 ; extra == 'ansible'
@@ -384,16 +384,16 @@ Requires-Dist: markdown ; extra == 'ansible'
384
384
  Requires-Dist: matplotlib ; extra == 'ansible'
385
385
  Requires-Dist: msal ~=1.30.0 ; extra == 'ansible'
386
386
  Requires-Dist: nessus-file-reader ; extra == 'ansible'
387
- Requires-Dist: numpy >=2.0.0 ; extra == 'ansible'
387
+ Requires-Dist: numpy ~=2.0.0 ; extra == 'ansible'
388
388
  Requires-Dist: openpyxl ; extra == 'ansible'
389
389
  Requires-Dist: packaging ~=23.1 ; extra == 'ansible'
390
390
  Requires-Dist: pandas ; extra == 'ansible'
391
391
  Requires-Dist: pathlib ~=1.0.1 ; extra == 'ansible'
392
392
  Requires-Dist: pdfplumber ==0.7.6 ; extra == 'ansible'
393
393
  Requires-Dist: pre-commit ; extra == 'ansible'
394
- Requires-Dist: psutil ==5.9.6 ; extra == 'ansible'
394
+ Requires-Dist: psutil ~=6.1.0 ; extra == 'ansible'
395
395
  Requires-Dist: pyTenable ; extra == 'ansible'
396
- Requires-Dist: pydantic ~=2.9.2 ; extra == 'ansible'
396
+ Requires-Dist: pydantic ~=2.11.0 ; extra == 'ansible'
397
397
  Requires-Dist: pypandoc ; extra == 'ansible'
398
398
  Requires-Dist: pypandoc-binary ; extra == 'ansible'
399
399
  Requires-Dist: pytest ; extra == 'ansible'
@@ -424,11 +424,11 @@ Requires-Dist: boto3 ==1.35.10 ; extra == 'dev'
424
424
  Requires-Dist: botocore ==1.35.10 ; extra == 'dev'
425
425
  Requires-Dist: bs4 ; extra == 'dev'
426
426
  Requires-Dist: cacheout ; extra == 'dev'
427
- Requires-Dist: click ==8.1.3 ; extra == 'dev'
427
+ Requires-Dist: click >=8.1.3 ; extra == 'dev'
428
428
  Requires-Dist: colorama ==0.4.5 ; extra == 'dev'
429
429
  Requires-Dist: coveralls ; extra == 'dev'
430
430
  Requires-Dist: crowdstrike-falconpy ==1.4.5 ; extra == 'dev'
431
- Requires-Dist: cryptography >=43.0.1 ; extra == 'dev'
431
+ Requires-Dist: cryptography >=44.0.1 ; extra == 'dev'
432
432
  Requires-Dist: darglint ; extra == 'dev'
433
433
  Requires-Dist: distro ==1.8.0 ; extra == 'dev'
434
434
  Requires-Dist: docx ==0.2.4 ; extra == 'dev'
@@ -453,7 +453,7 @@ Requires-Dist: moto ; extra == 'dev'
453
453
  Requires-Dist: msal ~=1.30.0 ; extra == 'dev'
454
454
  Requires-Dist: mypy ; extra == 'dev'
455
455
  Requires-Dist: nessus-file-reader ; extra == 'dev'
456
- Requires-Dist: numpy >=2.0.0 ; extra == 'dev'
456
+ Requires-Dist: numpy ~=2.0.0 ; extra == 'dev'
457
457
  Requires-Dist: openpyxl ; extra == 'dev'
458
458
  Requires-Dist: packaging ~=23.1 ; extra == 'dev'
459
459
  Requires-Dist: pandas ; extra == 'dev'
@@ -462,9 +462,9 @@ Requires-Dist: pathlib ~=1.0.1 ; extra == 'dev'
462
462
  Requires-Dist: pdfplumber ==0.7.6 ; extra == 'dev'
463
463
  Requires-Dist: pipenv ; extra == 'dev'
464
464
  Requires-Dist: pre-commit ; extra == 'dev'
465
- Requires-Dist: psutil ==5.9.6 ; extra == 'dev'
465
+ Requires-Dist: psutil ~=6.1.0 ; extra == 'dev'
466
466
  Requires-Dist: pyTenable ; extra == 'dev'
467
- Requires-Dist: pydantic ~=2.9.2 ; extra == 'dev'
467
+ Requires-Dist: pydantic ~=2.11.0 ; extra == 'dev'
468
468
  Requires-Dist: pylint ; extra == 'dev'
469
469
  Requires-Dist: pypandoc ; extra == 'dev'
470
470
  Requires-Dist: pypandoc-binary ; extra == 'dev'
@@ -509,10 +509,10 @@ Requires-Dist: boto3 ==1.35.10 ; extra == 'server'
509
509
  Requires-Dist: botocore ==1.35.10 ; extra == 'server'
510
510
  Requires-Dist: bs4 ; extra == 'server'
511
511
  Requires-Dist: cacheout ; extra == 'server'
512
- Requires-Dist: click ==8.1.3 ; extra == 'server'
512
+ Requires-Dist: click >=8.1.3 ; extra == 'server'
513
513
  Requires-Dist: colorama ==0.4.5 ; extra == 'server'
514
514
  Requires-Dist: crowdstrike-falconpy ==1.4.5 ; extra == 'server'
515
- Requires-Dist: cryptography >=43.0.1 ; extra == 'server'
515
+ Requires-Dist: cryptography >=44.0.1 ; extra == 'server'
516
516
  Requires-Dist: distro ==1.8.0 ; extra == 'server'
517
517
  Requires-Dist: docx ==0.2.4 ; extra == 'server'
518
518
  Requires-Dist: filelock ~=3.13.1 ; extra == 'server'
@@ -536,16 +536,16 @@ Requires-Dist: markdown ; extra == 'server'
536
536
  Requires-Dist: matplotlib ; extra == 'server'
537
537
  Requires-Dist: msal ~=1.30.0 ; extra == 'server'
538
538
  Requires-Dist: nessus-file-reader ; extra == 'server'
539
- Requires-Dist: numpy >=2.0.0 ; extra == 'server'
539
+ Requires-Dist: numpy ~=2.0.0 ; extra == 'server'
540
540
  Requires-Dist: openpyxl ; extra == 'server'
541
541
  Requires-Dist: packaging ~=23.1 ; extra == 'server'
542
542
  Requires-Dist: pandas ; extra == 'server'
543
543
  Requires-Dist: pathlib ~=1.0.1 ; extra == 'server'
544
544
  Requires-Dist: pdfplumber ==0.7.6 ; extra == 'server'
545
545
  Requires-Dist: pre-commit ; extra == 'server'
546
- Requires-Dist: psutil ==5.9.6 ; extra == 'server'
546
+ Requires-Dist: psutil ~=6.1.0 ; extra == 'server'
547
547
  Requires-Dist: pyTenable ; extra == 'server'
548
- Requires-Dist: pydantic ~=2.9.2 ; extra == 'server'
548
+ Requires-Dist: pydantic ~=2.11.0 ; extra == 'server'
549
549
  Requires-Dist: pypandoc ; extra == 'server'
550
550
  Requires-Dist: pypandoc-binary ; extra == 'server'
551
551
  Requires-Dist: pytest ; extra == 'server'