cycode 3.6.1.dev2__py3-none-any.whl → 3.6.1.dev4__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.
cycode/__init__.py CHANGED
@@ -1 +1 @@
1
- __version__ = '3.6.1.dev2' # DON'T TOUCH. Placeholder. Will be filled automatically on poetry build from Git Tag
1
+ __version__ = '3.6.1.dev4' # DON'T TOUCH. Placeholder. Will be filled automatically on poetry build from Git Tag
cycode/cli/app.py CHANGED
@@ -9,7 +9,7 @@ from typer._completion_shared import Shells
9
9
  from typer.completion import install_callback, show_callback
10
10
 
11
11
  from cycode import __version__
12
- from cycode.cli.apps import ai_remediation, auth, configure, ignore, report, scan, status
12
+ from cycode.cli.apps import ai_remediation, auth, configure, ignore, report, report_import, scan, status
13
13
 
14
14
  if sys.version_info >= (3, 10):
15
15
  from cycode.cli.apps import mcp
@@ -50,6 +50,7 @@ app.add_typer(auth.app)
50
50
  app.add_typer(configure.app)
51
51
  app.add_typer(ignore.app)
52
52
  app.add_typer(report.app)
53
+ app.add_typer(report_import.app)
53
54
  app.add_typer(scan.app)
54
55
  app.add_typer(status.app)
55
56
  if sys.version_info >= (3, 10):
@@ -0,0 +1,8 @@
1
+ import typer
2
+
3
+ from cycode.cli.apps.report_import.report_import_command import report_import_command
4
+ from cycode.cli.apps.report_import.sbom import sbom_command
5
+
6
+ app = typer.Typer(name='import', no_args_is_help=True)
7
+ app.callback(short_help='Import report. You`ll need to specify which report type to import.')(report_import_command)
8
+ app.command(name='sbom', short_help='Import SBOM report from a local path.')(sbom_command)
@@ -0,0 +1,13 @@
1
+ import typer
2
+
3
+ from cycode.cli.utils.sentry import add_breadcrumb
4
+
5
+
6
+ def report_import_command(ctx: typer.Context) -> int:
7
+ """:bar_chart: [bold cyan]Import security reports.[/]
8
+
9
+ Example usage:
10
+ * `cycode import sbom`: Import SBOM report
11
+ """
12
+ add_breadcrumb('import')
13
+ return 1
@@ -0,0 +1,6 @@
1
+ import typer
2
+
3
+ from cycode.cli.apps.report_import.sbom.sbom_command import sbom_command
4
+
5
+ app = typer.Typer(name='sbom')
6
+ app.command(name='path', short_help='Import SBOM report from a local path.')(sbom_command)
@@ -0,0 +1,76 @@
1
+ from pathlib import Path
2
+ from typing import Annotated, Optional
3
+
4
+ import typer
5
+
6
+ from cycode.cli.cli_types import BusinessImpactOption
7
+ from cycode.cli.exceptions.handle_report_sbom_errors import handle_report_exception
8
+ from cycode.cli.utils.get_api_client import get_import_sbom_cycode_client
9
+ from cycode.cli.utils.sentry import add_breadcrumb
10
+ from cycode.cyclient.import_sbom_client import ImportSbomParameters
11
+
12
+
13
+ def sbom_command(
14
+ ctx: typer.Context,
15
+ path: Annotated[
16
+ Path,
17
+ typer.Argument(
18
+ exists=True, resolve_path=True, dir_okay=False, readable=True, help='Path to SBOM file.', show_default=False
19
+ ),
20
+ ],
21
+ sbom_name: Annotated[
22
+ str, typer.Option('--name', '-n', help='SBOM Name.', case_sensitive=False, show_default=False)
23
+ ],
24
+ vendor: Annotated[
25
+ str, typer.Option('--vendor', '-v', help='Vendor Name.', case_sensitive=False, show_default=False)
26
+ ],
27
+ labels: Annotated[
28
+ Optional[list[str]],
29
+ typer.Option(
30
+ '--label', '-l', help='Label, can be specified multiple times.', case_sensitive=False, show_default=False
31
+ ),
32
+ ] = None,
33
+ owners: Annotated[
34
+ Optional[list[str]],
35
+ typer.Option(
36
+ '--owner',
37
+ '-o',
38
+ help='Email address of a user in Cycode platform, can be specified multiple times.',
39
+ case_sensitive=True,
40
+ show_default=False,
41
+ ),
42
+ ] = None,
43
+ business_impact: Annotated[
44
+ BusinessImpactOption,
45
+ typer.Option(
46
+ '--business-impact',
47
+ '-b',
48
+ help='Business Impact.',
49
+ case_sensitive=True,
50
+ show_default=True,
51
+ ),
52
+ ] = BusinessImpactOption.MEDIUM,
53
+ ) -> None:
54
+ """Import SBOM."""
55
+ add_breadcrumb('sbom')
56
+
57
+ client = get_import_sbom_cycode_client(ctx)
58
+
59
+ import_parameters = ImportSbomParameters(
60
+ Name=sbom_name,
61
+ Vendor=vendor,
62
+ BusinessImpact=business_impact,
63
+ Labels=labels,
64
+ Owners=owners,
65
+ )
66
+
67
+ try:
68
+ if not path.exists():
69
+ from errno import ENOENT
70
+ from os import strerror
71
+
72
+ raise FileNotFoundError(ENOENT, strerror(ENOENT), path.absolute())
73
+
74
+ client.request_sbom_import_execution(import_parameters, path)
75
+ except Exception as e:
76
+ handle_report_exception(ctx, e)
cycode/cli/cli_types.py CHANGED
@@ -52,6 +52,12 @@ class SbomOutputFormatOption(StrEnum):
52
52
  JSON = 'json'
53
53
 
54
54
 
55
+ class BusinessImpactOption(StrEnum):
56
+ HIGH = 'High'
57
+ MEDIUM = 'Medium'
58
+ LOW = 'Low'
59
+
60
+
55
61
  class SeverityOption(StrEnum):
56
62
  INFO = 'info'
57
63
  LOW = 'low'
@@ -3,11 +3,12 @@ from typing import TYPE_CHECKING, Optional, Union
3
3
  import click
4
4
 
5
5
  from cycode.cli.user_settings.credentials_manager import CredentialsManager
6
- from cycode.cyclient.client_creator import create_report_client, create_scan_client
6
+ from cycode.cyclient.client_creator import create_import_sbom_client, create_report_client, create_scan_client
7
7
 
8
8
  if TYPE_CHECKING:
9
9
  import typer
10
10
 
11
+ from cycode.cyclient.import_sbom_client import ImportSbomClient
11
12
  from cycode.cyclient.report_client import ReportClient
12
13
  from cycode.cyclient.scan_client import ScanClient
13
14
 
@@ -38,6 +39,12 @@ def get_report_cycode_client(ctx: 'typer.Context', hide_response_log: bool = Tru
38
39
  return _get_cycode_client(create_report_client, client_id, client_secret, hide_response_log)
39
40
 
40
41
 
42
+ def get_import_sbom_cycode_client(ctx: 'typer.Context', hide_response_log: bool = True) -> 'ImportSbomClient':
43
+ client_id = ctx.obj.get('client_id')
44
+ client_secret = ctx.obj.get('client_secret')
45
+ return _get_cycode_client(create_import_sbom_client, client_id, client_secret, hide_response_log)
46
+
47
+
41
48
  def _get_configured_credentials() -> tuple[str, str]:
42
49
  credentials_manager = CredentialsManager()
43
50
  return credentials_manager.get_credentials()
@@ -2,6 +2,7 @@ from cycode.cyclient.config import dev_mode
2
2
  from cycode.cyclient.config_dev import DEV_CYCODE_API_URL
3
3
  from cycode.cyclient.cycode_dev_based_client import CycodeDevBasedClient
4
4
  from cycode.cyclient.cycode_token_based_client import CycodeTokenBasedClient
5
+ from cycode.cyclient.import_sbom_client import ImportSbomClient
5
6
  from cycode.cyclient.report_client import ReportClient
6
7
  from cycode.cyclient.scan_client import ScanClient
7
8
  from cycode.cyclient.scan_config_base import DefaultScanConfig, DevScanConfig
@@ -21,3 +22,8 @@ def create_scan_client(client_id: str, client_secret: str, hide_response_log: bo
21
22
  def create_report_client(client_id: str, client_secret: str, _: bool) -> ReportClient:
22
23
  client = CycodeDevBasedClient(DEV_CYCODE_API_URL) if dev_mode else CycodeTokenBasedClient(client_id, client_secret)
23
24
  return ReportClient(client)
25
+
26
+
27
+ def create_import_sbom_client(client_id: str, client_secret: str, _: bool) -> ImportSbomClient:
28
+ client = CycodeDevBasedClient(DEV_CYCODE_API_URL) if dev_mode else CycodeTokenBasedClient(client_id, client_secret)
29
+ return ImportSbomClient(client)
@@ -0,0 +1,81 @@
1
+ import dataclasses
2
+ from pathlib import Path
3
+ from typing import Optional
4
+
5
+ from requests import Response
6
+
7
+ from cycode.cli.cli_types import BusinessImpactOption
8
+ from cycode.cli.exceptions.custom_exceptions import RequestHttpError
9
+ from cycode.cyclient import models
10
+ from cycode.cyclient.cycode_client_base import CycodeClientBase
11
+
12
+
13
+ @dataclasses.dataclass
14
+ class ImportSbomParameters:
15
+ Name: str
16
+ Vendor: str
17
+ BusinessImpact: BusinessImpactOption
18
+ Labels: Optional[list[str]]
19
+ Owners: Optional[list[str]]
20
+
21
+ def _owners_to_ids(self) -> list[str]:
22
+ return []
23
+
24
+ def to_request_form(self) -> dict:
25
+ form_data = {}
26
+ for field in dataclasses.fields(self):
27
+ key = field.name
28
+ val = getattr(self, key)
29
+ if val is None or len(val) == 0:
30
+ continue
31
+ if isinstance(val, list):
32
+ form_data[f'{key}[]'] = val
33
+ else:
34
+ form_data[key] = val
35
+ return form_data
36
+
37
+
38
+ class ImportSbomClient:
39
+ IMPORT_SBOM_REQUEST_PATH: str = 'v4/sbom/import'
40
+ GET_USER_ID_REQUEST_PATH: str = 'v4/members'
41
+
42
+ def __init__(self, client: CycodeClientBase) -> None:
43
+ self.client = client
44
+
45
+ def request_sbom_import_execution(self, params: ImportSbomParameters, file_path: Path) -> None:
46
+ if params.Owners:
47
+ owners_ids = self.get_owners_user_ids(params.Owners)
48
+ params.Owners = owners_ids
49
+
50
+ form_data = params.to_request_form()
51
+
52
+ with open(file_path.absolute(), 'rb') as f:
53
+ request_args = {
54
+ 'url_path': self.IMPORT_SBOM_REQUEST_PATH,
55
+ 'data': form_data,
56
+ 'files': {'File': f},
57
+ }
58
+
59
+ response = self.client.post(**request_args)
60
+
61
+ if response.status_code != 201:
62
+ raise RequestHttpError(response.status_code, response.text, response)
63
+
64
+ def get_owners_user_ids(self, owners: list[str]) -> list[str]:
65
+ return [self._get_user_id_by_email(owner) for owner in owners]
66
+
67
+ def _get_user_id_by_email(self, email: str) -> str:
68
+ request_args = {'url_path': self.GET_USER_ID_REQUEST_PATH, 'params': {'email': email}}
69
+
70
+ response = self.client.get(**request_args)
71
+ member_details = self.parse_requested_member_details_response(response)
72
+
73
+ if not member_details.items:
74
+ raise Exception(
75
+ f"Failed to find user with email '{email}'. Verify this email is registered to Cycode platform"
76
+ )
77
+ return member_details.items.pop(0).external_id
78
+
79
+ @staticmethod
80
+ def parse_requested_member_details_response(response: Response) -> models.MemberDetails:
81
+ return models.RequestedMemberDetailsResultSchema().load(response.json())
cycode/cyclient/models.py CHANGED
@@ -47,10 +47,10 @@ class DetectionSchema(Schema):
47
47
  class Meta:
48
48
  unknown = EXCLUDE
49
49
 
50
- id = fields.String(missing=None)
50
+ id = fields.String(load_default=None)
51
51
  message = fields.String()
52
52
  type = fields.String()
53
- severity = fields.String(missing=None)
53
+ severity = fields.String(load_default=None)
54
54
  detection_type_id = fields.String()
55
55
  detection_details = fields.Dict()
56
56
  detection_rule_id = fields.String()
@@ -402,6 +402,42 @@ class RequestedSbomReportResultSchema(Schema):
402
402
  return SbomReport(**data)
403
403
 
404
404
 
405
+ @dataclass
406
+ class Member:
407
+ external_id: str
408
+
409
+
410
+ class MemberSchema(Schema):
411
+ class Meta:
412
+ unknown = EXCLUDE
413
+
414
+ external_id = fields.String()
415
+
416
+ @post_load
417
+ def build_dto(self, data: dict[str, Any], **_) -> Member:
418
+ return Member(**data)
419
+
420
+
421
+ @dataclass
422
+ class MemberDetails:
423
+ items: list[Member]
424
+ page_size: int
425
+ next_page_token: Optional[str]
426
+
427
+
428
+ class RequestedMemberDetailsResultSchema(Schema):
429
+ class Meta:
430
+ unknown = EXCLUDE
431
+
432
+ items = fields.List(fields.Nested(MemberSchema))
433
+ page_size = fields.Integer()
434
+ next_page_token = fields.String(allow_none=True)
435
+
436
+ @post_load
437
+ def build_dto(self, data: dict[str, Any], **_) -> MemberDetails:
438
+ return MemberDetails(**data)
439
+
440
+
405
441
  @dataclass
406
442
  class ClassificationData:
407
443
  severity: str
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cycode
3
- Version: 3.6.1.dev2
3
+ Version: 3.6.1.dev4
4
4
  Summary: Boost security in your dev lifecycle via SAST, SCA, Secrets & IaC scanning.
5
5
  License-Expression: MIT
6
6
  License-File: LICENCE
@@ -99,8 +99,9 @@ This guide walks you through both installation and usage.
99
99
  6. [Ignoring via a config file](#ignoring-via-a-config-file)
100
100
  6. [Report command](#report-command)
101
101
  1. [Generating SBOM Report](#generating-sbom-report)
102
- 7. [Scan logs](#scan-logs)
103
- 8. [Syntax Help](#syntax-help)
102
+ 7. [Import command](#import-command)
103
+ 8. [Scan logs](#scan-logs)
104
+ 9. [Syntax Help](#syntax-help)
104
105
 
105
106
  # Prerequisites
106
107
 
@@ -975,7 +976,7 @@ It works just like a `.gitignore` file. This helps you focus scans on your relev
975
976
 
976
977
  ### Supported Scanners
977
978
  - SAST
978
- - Iac (comming soon)
979
+ - IaC (comming soon)
979
980
  - SCA (comming soon)
980
981
 
981
982
  ## Scan Results
@@ -1338,6 +1339,26 @@ To create an SBOM report for a path:\
1338
1339
  For example:\
1339
1340
  `cycode report sbom --format spdx-2.3 --include-vulnerabilities --include-dev-dependencies path /path/to/local/project`
1340
1341
 
1342
+ # Import Command
1343
+
1344
+ ## Importing SBOM
1345
+
1346
+ A software bill of materials (SBOM) is an inventory of all constituent components and software dependencies involved in the development and delivery of an application.
1347
+ Using this command, you can import an SBOM file from your file system into Cycode.
1348
+
1349
+ The following options are available for use with this command:
1350
+
1351
+ | Option | Description | Required | Default |
1352
+ |----------------------------------------------------|--------------------------------------------|----------|-------------------------------------------------------|
1353
+ | `-n, --name TEXT` | Display name of the SBOM | Yes | |
1354
+ | `-v, --vendor TEXT` | Name of the entity that provided the SBOM | Yes | |
1355
+ | `-l, --label TEXT` | Attach label to the SBOM | No | |
1356
+ | `-o, --owner TEXT` | Email address of the Cycode user that serves as point of contact for this SBOM | No | |
1357
+ | `-b, --business-impact [High \| Medium \| Low]` | Business Impact | No | Medium |
1358
+
1359
+ For example:\
1360
+ `cycode import sbom --name example-sbom --vendor cycode -label tag1 -label tag2 --owner example@cycode.com /path/to/local/project`
1361
+
1341
1362
  # Scan Logs
1342
1363
 
1343
1364
  All CLI scans are logged in Cycode. The logs can be found under Settings > CLI Logs.
@@ -1,7 +1,7 @@
1
- cycode/__init__.py,sha256=llhwYEjjg1nN2GKk3Hq00OFOHB_B1VRUDP_ciK6zFdE,114
1
+ cycode/__init__.py,sha256=c2RE1hZdSicjah5HMad6L-H-iMCI9WxixYfvXEDi9x0,114
2
2
  cycode/__main__.py,sha256=Z3bD5yrA7yPvAChcADQrqCaZd0ChGI1gdiwALwbWJ6U,104
3
3
  cycode/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- cycode/cli/app.py,sha256=UC5A5TKIvlxOYKERfJykN8apTT0VyMY5pUjRh_LM-dw,6098
4
+ cycode/cli/app.py,sha256=qo_GU1ivrJKEjx8HQtjbHOE1hAXr4tzCexD1qw5W8bg,6146
5
5
  cycode/cli/apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
6
  cycode/cli/apps/ai_remediation/__init__.py,sha256=8vYthY9RQeJqEni3AIF5sryz8n-XJQ6VNqG4aEFBAdY,553
7
7
  cycode/cli/apps/ai_remediation/ai_remediation_command.py,sha256=u1EdebaKCEmzv9fXmnIN0xDSLcCmGyjueYKvYfLOj_8,1549
@@ -31,6 +31,10 @@ cycode/cli/apps/report/sbom/repository_url/__init__.py,sha256=47DEQpj8HBSa-_TImW
31
31
  cycode/cli/apps/report/sbom/repository_url/repository_url_command.py,sha256=VO4jSR748BEpCuOrAvOK4_rNLw63lO4iHCTfWkWdfMQ,2179
32
32
  cycode/cli/apps/report/sbom/sbom_command.py,sha256=bykQnmO0CCNInkih6bGmCcq5HFH-ItkFHPoxz683HCc,2229
33
33
  cycode/cli/apps/report/sbom/sbom_report_file.py,sha256=uyaJRvmg1K4DvJaMppbCf6yCj6UU-NdvNg-ZVZk0jx4,1576
34
+ cycode/cli/apps/report_import/__init__.py,sha256=T9KSL2TwQKQTNbck7JBlQAf7w8W3Q3VQLn_BCzVLWrA,424
35
+ cycode/cli/apps/report_import/report_import_command.py,sha256=EivY6aPH9quj_tCTGCxq-lwnCo4nyIQNgZ482GNmrBY,296
36
+ cycode/cli/apps/report_import/sbom/__init__.py,sha256=5E9x4UqWsk333RlklV9cCo7Q9o019zIhx-uac109YcU,210
37
+ cycode/cli/apps/report_import/sbom/sbom_command.py,sha256=aTFGXxpdvqMdxFpEKZs927EL7MRzCbu8oXVXuYdHnKA,2355
34
38
  cycode/cli/apps/scan/__init__.py,sha256=-q1AIBnrQ4GP0CVKFLr_2CdWf9TBQC90ejSL4I7rxuA,2444
35
39
  cycode/cli/apps/scan/aggregation_report.py,sha256=8f9kPfO7biNf5OsDZG6UhMPqG6ymoFrX5GBtlEIfFAg,1540
36
40
  cycode/cli/apps/scan/code_scanner.py,sha256=lNVyIhvA1IwufPZA4vT_ZyCaVdgio1xEaKa7oH3apdU,11402
@@ -60,7 +64,7 @@ cycode/cli/apps/status/get_cli_status.py,sha256=qAuDdtWTCMI8ChYrQzgeJI31v8dDu-aE
60
64
  cycode/cli/apps/status/models.py,sha256=2SBpJlh_MNCPxv8aXMV5D4GfK6-G-XB0GlMFZ3Nep_o,1907
61
65
  cycode/cli/apps/status/status_command.py,sha256=B8YZ4hibWkjkAkikailll2lkJmCRYh9APdvZSR4L33c,1069
62
66
  cycode/cli/apps/status/version_command.py,sha256=c6Iko_rmZo9T_kQSd3HUloBi40Qv7cjgKJNVxpMiMfE,315
63
- cycode/cli/cli_types.py,sha256=cI9_XPG9LDofh6e2qyPtegD76KZYzcPwLj8jFK3Kmp4,2790
67
+ cycode/cli/cli_types.py,sha256=kSqVRkm3zGmGTugXLV3qLTMxwUdnVFsIPEPHao4xY04,2885
64
68
  cycode/cli/config.py,sha256=EblYUlUA4lTp_lrL3gMG-cW7FUOTE1jtGIOljcLnEzk,250
65
69
  cycode/cli/console.py,sha256=vp-DHwlkwpwdsPyfwGdjsPF-6-Bi3f8W7G-W_YXCMH8,1914
66
70
  cycode/cli/consts.py,sha256=hZF6NL3asl3GLa2nMsxjZB6LGey8nMX304s8u7ARBPs,8885
@@ -129,7 +133,7 @@ cycode/cli/user_settings/credentials_manager.py,sha256=jT8pTjldk6WmDyTJPidYQxREu
129
133
  cycode/cli/user_settings/jwt_creator.py,sha256=xEkFLFqhwbNJnXuIi02XDxoj2E-4Nw-m10uJaHl3luA,745
130
134
  cycode/cli/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
131
135
  cycode/cli/utils/enum_utils.py,sha256=h_VTCfJ-0hnhwDsEznmx56rJrCb5FQ8u6PrI6p8MP3E,187
132
- cycode/cli/utils/get_api_client.py,sha256=J3hls7A-ktBYBbAvLm2zk-wC3QLfIy0QpjnlXbxDb5o,1697
136
+ cycode/cli/utils/get_api_client.py,sha256=wj5g9blyM8drsTFs59bsXEMfKJXqlssl5H0e1q5OwKQ,2097
133
137
  cycode/cli/utils/git_proxy.py,sha256=FPHMBiyLFK9X9vKYpKySRKJH6Dc9Cb3nO241Q95dASE,2911
134
138
  cycode/cli/utils/ignore_utils.py,sha256=cODqhnOHA2kRo8rMY0YcmcKkmXNPOC9UTCmFu62RRqE,15567
135
139
  cycode/cli/utils/jwt_utils.py,sha256=TfTHCCCxKO6RvSKT2qspx4577Gax3n9YRj2UgigpGuQ,537
@@ -146,7 +150,7 @@ cycode/cli/utils/yaml_utils.py,sha256=R-tqzl0C-zoa42rS7nfWeHu3GJ0jpbQUyyqYYU2hle
146
150
  cycode/config.py,sha256=jHORGZQcAXkAGSf2XreC-RQoc8sdNWja69QKtPWTbWo,1044
147
151
  cycode/cyclient/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
148
152
  cycode/cyclient/auth_client.py,sha256=TwbmZ358Ancf-Q-IZolvfljZ8691_6botsqd0R0PLPk,2105
149
- cycode/cyclient/client_creator.py,sha256=BhMprmCLFX7h4Kfnp4Iv9FXr-nXMWBntC3I3RcsfdYY,1072
153
+ cycode/cyclient/client_creator.py,sha256=g8MON1CGsBCmsh2B-Kpmpq99cixfSBzT3dQLWYomVtU,1390
150
154
  cycode/cyclient/config.py,sha256=Le3YYp7LyclTwS4vonuFipfRA1qhyC28_muUtxpnImc,1387
151
155
  cycode/cyclient/config_dev.py,sha256=GJ3w8Q-ow5SvXGBFA34eaeoI6GhitavAGy3UfcUh9OU,120
152
156
  cycode/cyclient/cycode_client.py,sha256=ifZMA4RlFw4QNHku5ZxmtUKglH2yd1479yYZGDtxVvw,257
@@ -154,14 +158,15 @@ cycode/cyclient/cycode_client_base.py,sha256=qkOwul-H4cF3-ffX2iA6BKXkoQthDSO9unw
154
158
  cycode/cyclient/cycode_dev_based_client.py,sha256=8LxeUWizXzZ0ilpwb6Q0W4ZMLZyZdKPzgpl5xcRmT8c,664
155
159
  cycode/cyclient/cycode_token_based_client.py,sha256=tD_HWgkz0VDcU4AQsPxHxGTwfQ8KlpXGHNbyfRxu2jk,3779
156
160
  cycode/cyclient/headers.py,sha256=5aLezpRDBzueH9T1hB_6VyUydRpTs3rN17CDDPn1BxI,1448
161
+ cycode/cyclient/import_sbom_client.py,sha256=M0RAn2dDh9woI3SUkgSHCQxhbARoLpyAM3amOausz8E,2749
157
162
  cycode/cyclient/logger.py,sha256=oTkay7QzoOIVQ71cGOy4ukkijYGA3IKJlHkL24Px5ds,70
158
- cycode/cyclient/models.py,sha256=TlVNDDJYqXIR8gafsKymsSTMNN8eKo12macnpvS0Nv4,14276
163
+ cycode/cyclient/models.py,sha256=U_37PROmaat5ehliH1YZ71iVecF7dPvXPTNOoj67Thg,15017
159
164
  cycode/cyclient/report_client.py,sha256=h12pz3vWCwDF73BhqFX7iDSxBgQDFwkiGh3hmul2nsM,3965
160
165
  cycode/cyclient/scan_client.py,sha256=uTBEjgfaCVuJREo73p_zkIVA23NQfdJ1d1-bzc7nSKk,12682
161
166
  cycode/cyclient/scan_config_base.py,sha256=mXsPZGYCtp85rv5GIige40yQZXuRcEKUW-VQJ0vgFzk,1201
162
167
  cycode/logger.py,sha256=xAzpkWLZhixO4egRcYn4HXM9lIfx5wHdpkHxNc5jrX8,2225
163
- cycode-3.6.1.dev2.dist-info/METADATA,sha256=TGJta2l5LGqiE_8PuM9uPcbRJjpee_RqnLt8sJmxG_0,76723
164
- cycode-3.6.1.dev2.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
165
- cycode-3.6.1.dev2.dist-info/entry_points.txt,sha256=iDcVJM8ByLElVgvBgtYxDjw1kT7O8Mo0LcWZIT5L3Ig,45
166
- cycode-3.6.1.dev2.dist-info/licenses/LICENCE,sha256=2Wx4N6mD_4xB7-E3hPkZ3MPhpJy__k_I8MaCSO-PDRo,1068
167
- cycode-3.6.1.dev2.dist-info/RECORD,,
168
+ cycode-3.6.1.dev4.dist-info/METADATA,sha256=fsz-34ufahf3ru-EPRdf5LxT60UNld9YfT7z1nhu2NU,78429
169
+ cycode-3.6.1.dev4.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
170
+ cycode-3.6.1.dev4.dist-info/entry_points.txt,sha256=iDcVJM8ByLElVgvBgtYxDjw1kT7O8Mo0LcWZIT5L3Ig,45
171
+ cycode-3.6.1.dev4.dist-info/licenses/LICENCE,sha256=2Wx4N6mD_4xB7-E3hPkZ3MPhpJy__k_I8MaCSO-PDRo,1068
172
+ cycode-3.6.1.dev4.dist-info/RECORD,,