conviso-ast 3.0.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.
- conviso_ast-3.0.0.data/scripts/flow_bash_completer.sh +21 -0
- conviso_ast-3.0.0.data/scripts/flow_fish_completer.fish +1 -0
- conviso_ast-3.0.0.data/scripts/flow_zsh_completer.sh +32 -0
- conviso_ast-3.0.0.dist-info/METADATA +37 -0
- conviso_ast-3.0.0.dist-info/RECORD +128 -0
- conviso_ast-3.0.0.dist-info/WHEEL +5 -0
- conviso_ast-3.0.0.dist-info/entry_points.txt +3 -0
- conviso_ast-3.0.0.dist-info/top_level.txt +1 -0
- convisoappsec/__init__.py +0 -0
- convisoappsec/common/__init__.py +5 -0
- convisoappsec/common/box.py +251 -0
- convisoappsec/common/cleaner.py +78 -0
- convisoappsec/common/docker.py +399 -0
- convisoappsec/common/exceptions.py +8 -0
- convisoappsec/common/git_data_parser.py +76 -0
- convisoappsec/common/graphql/__init__.py +0 -0
- convisoappsec/common/graphql/error_handlers.py +75 -0
- convisoappsec/common/graphql/errors.py +16 -0
- convisoappsec/common/graphql/low_client.py +51 -0
- convisoappsec/common/retry_handler.py +40 -0
- convisoappsec/common/strings.py +8 -0
- convisoappsec/flow/__init__.py +3 -0
- convisoappsec/flow/api.py +104 -0
- convisoappsec/flow/cleaner.py +118 -0
- convisoappsec/flow/graphql_api/__init__.py +0 -0
- convisoappsec/flow/graphql_api/beta/__init__.py +0 -0
- convisoappsec/flow/graphql_api/beta/client.py +18 -0
- convisoappsec/flow/graphql_api/beta/models/__init__.py +0 -0
- convisoappsec/flow/graphql_api/beta/models/issues/__init__.py +0 -0
- convisoappsec/flow/graphql_api/beta/models/issues/container.py +72 -0
- convisoappsec/flow/graphql_api/beta/models/issues/iac.py +6 -0
- convisoappsec/flow/graphql_api/beta/models/issues/normalize.py +13 -0
- convisoappsec/flow/graphql_api/beta/models/issues/sast.py +53 -0
- convisoappsec/flow/graphql_api/beta/models/issues/sca.py +78 -0
- convisoappsec/flow/graphql_api/beta/resources_api.py +142 -0
- convisoappsec/flow/graphql_api/beta/schemas/__init__.py +0 -0
- convisoappsec/flow/graphql_api/beta/schemas/mutations/__init__.py +61 -0
- convisoappsec/flow/graphql_api/beta/schemas/resolvers/__init__.py +0 -0
- convisoappsec/flow/graphql_api/v1/__init__.py +0 -0
- convisoappsec/flow/graphql_api/v1/client.py +46 -0
- convisoappsec/flow/graphql_api/v1/models/__init__.py +0 -0
- convisoappsec/flow/graphql_api/v1/models/asset.py +14 -0
- convisoappsec/flow/graphql_api/v1/models/issues.py +16 -0
- convisoappsec/flow/graphql_api/v1/models/project.py +35 -0
- convisoappsec/flow/graphql_api/v1/resources_api.py +489 -0
- convisoappsec/flow/graphql_api/v1/schemas/__init__.py +0 -0
- convisoappsec/flow/graphql_api/v1/schemas/mutations/__init__.py +212 -0
- convisoappsec/flow/graphql_api/v1/schemas/resolvers/__init__.py +180 -0
- convisoappsec/flow/source_code_scanner/__init__.py +9 -0
- convisoappsec/flow/source_code_scanner/exceptions.py +2 -0
- convisoappsec/flow/source_code_scanner/scc.py +68 -0
- convisoappsec/flow/source_code_scanner/source_code_scanner.py +177 -0
- convisoappsec/flow/util/__init__.py +7 -0
- convisoappsec/flow/util/ci_provider.py +99 -0
- convisoappsec/flow/util/metrics.py +16 -0
- convisoappsec/flow/util/source_code_compressor.py +22 -0
- convisoappsec/flow/version_control_system_adapter.py +528 -0
- convisoappsec/flow/version_searchers/__init__.py +9 -0
- convisoappsec/flow/version_searchers/sorted_by_versioning_style.py +85 -0
- convisoappsec/flow/version_searchers/timebased_version_seacher.py +39 -0
- convisoappsec/flow/version_searchers/version_searcher_result.py +33 -0
- convisoappsec/flow/versioning_style/__init__.py +0 -0
- convisoappsec/flow/versioning_style/semantic_versioning.py +44 -0
- convisoappsec/flowcli/__init__.py +3 -0
- convisoappsec/flowcli/__main__.py +4 -0
- convisoappsec/flowcli/assets/__init__.py +4 -0
- convisoappsec/flowcli/assets/create.py +88 -0
- convisoappsec/flowcli/assets/entrypoint.py +20 -0
- convisoappsec/flowcli/assets/ls.py +63 -0
- convisoappsec/flowcli/ast/__init__.py +3 -0
- convisoappsec/flowcli/ast/entrypoint.py +427 -0
- convisoappsec/flowcli/common.py +175 -0
- convisoappsec/flowcli/companies/__init__.py +0 -0
- convisoappsec/flowcli/companies/ls.py +25 -0
- convisoappsec/flowcli/container/__init__.py +3 -0
- convisoappsec/flowcli/container/entrypoint.py +17 -0
- convisoappsec/flowcli/container/run.py +306 -0
- convisoappsec/flowcli/context.py +49 -0
- convisoappsec/flowcli/deploy/__init__.py +0 -0
- convisoappsec/flowcli/deploy/create/__init__.py +4 -0
- convisoappsec/flowcli/deploy/create/context.py +12 -0
- convisoappsec/flowcli/deploy/create/entrypoint.py +31 -0
- convisoappsec/flowcli/deploy/create/with_/__init__.py +3 -0
- convisoappsec/flowcli/deploy/create/with_/entrypoint.py +20 -0
- convisoappsec/flowcli/deploy/create/with_/tag_tracker/__init__.py +4 -0
- convisoappsec/flowcli/deploy/create/with_/tag_tracker/context.py +11 -0
- convisoappsec/flowcli/deploy/create/with_/tag_tracker/entrypoint.py +30 -0
- convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/__init__.py +4 -0
- convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/entrypoint.py +21 -0
- convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/time_.py +84 -0
- convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/versioning_style.py +115 -0
- convisoappsec/flowcli/deploy/create/with_/values.py +133 -0
- convisoappsec/flowcli/entrypoint.py +103 -0
- convisoappsec/flowcli/environment_checker.py +45 -0
- convisoappsec/flowcli/findings/__init__.py +4 -0
- convisoappsec/flowcli/findings/create/__init__.py +4 -0
- convisoappsec/flowcli/findings/create/entrypoint.py +18 -0
- convisoappsec/flowcli/findings/create/with_/__init__.py +3 -0
- convisoappsec/flowcli/findings/create/with_/entrypoint.py +19 -0
- convisoappsec/flowcli/findings/create/with_/version_tracker.py +93 -0
- convisoappsec/flowcli/findings/entrypoint.py +19 -0
- convisoappsec/flowcli/findings/import_sarif/__init__.py +4 -0
- convisoappsec/flowcli/findings/import_sarif/entrypoint.py +430 -0
- convisoappsec/flowcli/help_option.py +18 -0
- convisoappsec/flowcli/iac/__init__.py +3 -0
- convisoappsec/flowcli/iac/entrypoint.py +17 -0
- convisoappsec/flowcli/iac/run.py +328 -0
- convisoappsec/flowcli/requirements_verifier.py +132 -0
- convisoappsec/flowcli/sast/__init__.py +3 -0
- convisoappsec/flowcli/sast/entrypoint.py +17 -0
- convisoappsec/flowcli/sast/run.py +485 -0
- convisoappsec/flowcli/sbom/__init__.py +3 -0
- convisoappsec/flowcli/sbom/entrypoint.py +17 -0
- convisoappsec/flowcli/sbom/generate.py +235 -0
- convisoappsec/flowcli/sca/__init__.py +3 -0
- convisoappsec/flowcli/sca/entrypoint.py +17 -0
- convisoappsec/flowcli/sca/run.py +479 -0
- convisoappsec/flowcli/vulnerability/__init__.py +3 -0
- convisoappsec/flowcli/vulnerability/assert_security_rules.py +201 -0
- convisoappsec/flowcli/vulnerability/container_vulnerability_manager.py +175 -0
- convisoappsec/flowcli/vulnerability/entrypoint.py +18 -0
- convisoappsec/flowcli/vulnerability/rules_schema.json +53 -0
- convisoappsec/flowcli/vulnerability/run.py +487 -0
- convisoappsec/logger.py +29 -0
- convisoappsec/sast/__init__.py +0 -0
- convisoappsec/sast/decision.py +45 -0
- convisoappsec/sast/sastbox.py +296 -0
- convisoappsec/version.py +1 -0
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import warnings
|
|
2
|
+
|
|
3
|
+
from convisoappsec.flow.versioning_style import semantic_versioning
|
|
4
|
+
|
|
5
|
+
from .version_searcher_result import VersionSearcherResult
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class SortedByVersioningStyle(object):
|
|
9
|
+
SEMANTIC_VERSIONING_STYLE = 'semantic-versioning'
|
|
10
|
+
STYLES = [
|
|
11
|
+
SEMANTIC_VERSIONING_STYLE,
|
|
12
|
+
]
|
|
13
|
+
|
|
14
|
+
def __init__(
|
|
15
|
+
self, version_control_system_adapter,
|
|
16
|
+
ignore_prefix, style, current_tag, **kargs
|
|
17
|
+
):
|
|
18
|
+
self.version_control_system_adapter = version_control_system_adapter
|
|
19
|
+
self.ignore_prefix = ignore_prefix
|
|
20
|
+
self.style = style
|
|
21
|
+
self.current_tag = current_tag
|
|
22
|
+
self.suppress_warnings = kargs.get('suppress_warnings', True)
|
|
23
|
+
|
|
24
|
+
def find_current_and_previous_version(self):
|
|
25
|
+
tags = self.version_control_system_adapter.tags()
|
|
26
|
+
|
|
27
|
+
versions = []
|
|
28
|
+
|
|
29
|
+
for tag in tags:
|
|
30
|
+
try:
|
|
31
|
+
versions.append(
|
|
32
|
+
semantic_versioning.Version(
|
|
33
|
+
tag,
|
|
34
|
+
prefix=self.ignore_prefix,
|
|
35
|
+
)
|
|
36
|
+
)
|
|
37
|
+
except ValueError as e:
|
|
38
|
+
if not self.suppress_warnings:
|
|
39
|
+
warnings.warn(str(e))
|
|
40
|
+
|
|
41
|
+
current_version = None
|
|
42
|
+
|
|
43
|
+
if not self.current_tag:
|
|
44
|
+
current_version = semantic_versioning.Version.find_latest(
|
|
45
|
+
versions
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
if not current_version:
|
|
49
|
+
raise RuntimeError("No current_version was found")
|
|
50
|
+
else:
|
|
51
|
+
current_version = semantic_versioning.Version(
|
|
52
|
+
self.current_tag,
|
|
53
|
+
prefix=self.ignore_prefix,
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
if current_version not in versions:
|
|
57
|
+
raise ValueError(
|
|
58
|
+
"Current version[%s] not exists on repository"
|
|
59
|
+
%
|
|
60
|
+
current_version
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
previous_version = current_version.find_previous(versions)
|
|
64
|
+
|
|
65
|
+
current_tag = str(current_version)
|
|
66
|
+
current_commit = self.version_control_system_adapter.show_commit_from_tag( # noqa: E501
|
|
67
|
+
current_tag
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
previous_tag = None
|
|
71
|
+
previous_commit = self.version_control_system_adapter.empty_repository_tree_commit # noqa: E501
|
|
72
|
+
|
|
73
|
+
if previous_version:
|
|
74
|
+
previous_tag = str(previous_version)
|
|
75
|
+
previous_commit = self.version_control_system_adapter.show_commit_from_tag( # noqa: E501
|
|
76
|
+
previous_tag
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
return VersionSearcherResult(
|
|
80
|
+
current_commit=current_commit,
|
|
81
|
+
previous_commit=previous_commit,
|
|
82
|
+
current_tag=current_tag,
|
|
83
|
+
previous_tag=previous_tag,
|
|
84
|
+
|
|
85
|
+
)
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
from .version_searcher_result import VersionSearcherResult
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class TimeBasedVersionSearcher(object):
|
|
5
|
+
def __init__(self, version_control_system_adapter):
|
|
6
|
+
self.version_control_system_adapter = version_control_system_adapter
|
|
7
|
+
|
|
8
|
+
def find_current_and_previous_version(self):
|
|
9
|
+
tags = self.version_control_system_adapter.tags()
|
|
10
|
+
|
|
11
|
+
current_tag = None
|
|
12
|
+
previous_tag = None
|
|
13
|
+
|
|
14
|
+
tags = tags[:2]
|
|
15
|
+
|
|
16
|
+
if len(tags) >= 2:
|
|
17
|
+
(current_tag, previous_tag) = tags
|
|
18
|
+
elif len(tags) == 1:
|
|
19
|
+
current_tag = tags[0]
|
|
20
|
+
else:
|
|
21
|
+
raise Exception("Was not possible find the current tag")
|
|
22
|
+
|
|
23
|
+
current_commit = self.version_control_system_adapter.show_commit_from_tag( # noqa: E501
|
|
24
|
+
current_tag
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
previous_commit = self.version_control_system_adapter.empty_repository_tree_commit # noqa: E501
|
|
28
|
+
|
|
29
|
+
if previous_tag:
|
|
30
|
+
previous_commit = self.version_control_system_adapter.show_commit_from_tag( # noqa: E501
|
|
31
|
+
previous_tag
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
return VersionSearcherResult(
|
|
35
|
+
current_commit=current_commit,
|
|
36
|
+
previous_commit=previous_commit,
|
|
37
|
+
current_tag=current_tag,
|
|
38
|
+
previous_tag=previous_tag,
|
|
39
|
+
)
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
class VersionSearcherResult(object):
|
|
2
|
+
|
|
3
|
+
def __init__(self, **karg):
|
|
4
|
+
self.current_tag = karg.get('current_tag')
|
|
5
|
+
self.previous_tag = karg.get('previous_tag')
|
|
6
|
+
self.current_commit = karg.get('current_commit')
|
|
7
|
+
self.previous_commit = karg.get('previous_commit')
|
|
8
|
+
|
|
9
|
+
if not (self.current_commit and self.previous_commit):
|
|
10
|
+
raise ValueError(
|
|
11
|
+
"The values of current_commit and previous_commit are required"
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
@property
|
|
15
|
+
def current_version(self):
|
|
16
|
+
return self.create_version_dict(
|
|
17
|
+
self.current_commit,
|
|
18
|
+
self.current_tag,
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
@property
|
|
22
|
+
def previous_version(self):
|
|
23
|
+
return self.create_version_dict(
|
|
24
|
+
self.previous_commit,
|
|
25
|
+
self.previous_tag,
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
@staticmethod
|
|
29
|
+
def create_version_dict(commit, tag):
|
|
30
|
+
return {
|
|
31
|
+
'commit': commit,
|
|
32
|
+
'tag': tag,
|
|
33
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import semantic_version
|
|
2
|
+
import re
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class Version(semantic_version.Version):
|
|
6
|
+
PREFIXED_VERSION_RE_FMT = '^{prefix}(.+)'
|
|
7
|
+
|
|
8
|
+
def __init__(self, version_string, prefix=None):
|
|
9
|
+
super().__init__(
|
|
10
|
+
self.__remove_prefix(prefix, version_string)
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
self.__version_string = version_string
|
|
14
|
+
|
|
15
|
+
def __str__(self):
|
|
16
|
+
return self.__version_string
|
|
17
|
+
|
|
18
|
+
@classmethod
|
|
19
|
+
def __remove_prefix(cls, prefix, version_string):
|
|
20
|
+
if not prefix:
|
|
21
|
+
return version_string
|
|
22
|
+
|
|
23
|
+
version_re = cls.PREFIXED_VERSION_RE_FMT.format(
|
|
24
|
+
prefix=re.escape(prefix)
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
match = re.match(version_re, version_string)
|
|
28
|
+
|
|
29
|
+
if match:
|
|
30
|
+
return match.group(1)
|
|
31
|
+
|
|
32
|
+
return version_string
|
|
33
|
+
|
|
34
|
+
def find_previous(self, versions):
|
|
35
|
+
previous_tags = list(
|
|
36
|
+
filter(lambda v: v < self, versions)
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
return self.find_latest(previous_tags)
|
|
40
|
+
|
|
41
|
+
@staticmethod
|
|
42
|
+
def find_latest(versions):
|
|
43
|
+
if len(versions) > 0:
|
|
44
|
+
return max(versions)
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import click
|
|
2
|
+
import click_log
|
|
3
|
+
|
|
4
|
+
from convisoappsec.common.git_data_parser import GitDataParser
|
|
5
|
+
from convisoappsec.flow.graphql_api.v1.models.asset import AssetInput
|
|
6
|
+
from convisoappsec.flowcli import help_option
|
|
7
|
+
from convisoappsec.flowcli.common import on_http_error
|
|
8
|
+
from convisoappsec.flowcli.context import pass_flow_context
|
|
9
|
+
from convisoappsec.logger import LOGGER
|
|
10
|
+
|
|
11
|
+
click_log.basic_config(LOGGER)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def parse_repository_name(repository_dir, asset_name=None):
|
|
15
|
+
has_user_input = asset_name != None
|
|
16
|
+
if has_user_input:
|
|
17
|
+
return asset_name
|
|
18
|
+
|
|
19
|
+
return GitDataParser(repository_dir).parse_name()
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
@click.command()
|
|
23
|
+
@click_log.simple_verbosity_option(LOGGER)
|
|
24
|
+
@click.option(
|
|
25
|
+
"-c",
|
|
26
|
+
"--company-id",
|
|
27
|
+
type=int,
|
|
28
|
+
required=True,
|
|
29
|
+
help="The Company ID from your organization in Conviso Platform.",
|
|
30
|
+
)
|
|
31
|
+
@click.option(
|
|
32
|
+
"-r",
|
|
33
|
+
"--repository-dir",
|
|
34
|
+
type=click.Path(exists=True, resolve_path=True),
|
|
35
|
+
default=".",
|
|
36
|
+
show_default=True,
|
|
37
|
+
required=True,
|
|
38
|
+
help="The directory path for the asset.",
|
|
39
|
+
)
|
|
40
|
+
@click.option(
|
|
41
|
+
"--name",
|
|
42
|
+
type=str,
|
|
43
|
+
default=None,
|
|
44
|
+
show_default=False,
|
|
45
|
+
required=False,
|
|
46
|
+
help="Customize the Asset name.",
|
|
47
|
+
)
|
|
48
|
+
@click.option(
|
|
49
|
+
"--scan-type",
|
|
50
|
+
type=str,
|
|
51
|
+
default="None",
|
|
52
|
+
show_default=True,
|
|
53
|
+
required=False,
|
|
54
|
+
help="Customize the Asset scan type.",
|
|
55
|
+
)
|
|
56
|
+
@help_option
|
|
57
|
+
@pass_flow_context
|
|
58
|
+
def create(flow_context, company_id, repository_dir, name, scan_type):
|
|
59
|
+
try:
|
|
60
|
+
conviso_api = flow_context.create_conviso_graphql_client()
|
|
61
|
+
|
|
62
|
+
perform_command(conviso_api, company_id, repository_dir, name, scan_type)
|
|
63
|
+
|
|
64
|
+
except Exception as exception:
|
|
65
|
+
on_http_error(exception)
|
|
66
|
+
raise click.ClickException(str(exception)) from exception
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def perform_command(
|
|
70
|
+
conviso_api,
|
|
71
|
+
company_id,
|
|
72
|
+
repository_dir,
|
|
73
|
+
name,
|
|
74
|
+
scan_type,
|
|
75
|
+
):
|
|
76
|
+
asset_name = parse_repository_name(repository_dir, name)
|
|
77
|
+
|
|
78
|
+
asset_model = AssetInput(
|
|
79
|
+
company_id,
|
|
80
|
+
asset_name,
|
|
81
|
+
scan_type,
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
print('Creating new asset to repository: "{}"'.format(repository_dir))
|
|
85
|
+
asset = conviso_api.assets.create_asset(asset_model)
|
|
86
|
+
|
|
87
|
+
asset_url = conviso_api.assets.get_asset_url(company_id, asset["id"])
|
|
88
|
+
print("The created Asset is available at Conviso Platform: {}".format(asset_url))
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import click
|
|
2
|
+
|
|
3
|
+
from convisoappsec.flowcli import help_option
|
|
4
|
+
from .ls import ls
|
|
5
|
+
from .create import create
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@click.group()
|
|
9
|
+
@help_option
|
|
10
|
+
def assets():
|
|
11
|
+
pass
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
assets.add_command(ls)
|
|
15
|
+
assets.add_command(create)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
assets.epilog = '''
|
|
19
|
+
Run 'conviso assets COMMAND --help' for more information on a command.
|
|
20
|
+
'''
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
from json import dumps as json_dumps
|
|
2
|
+
|
|
3
|
+
import click
|
|
4
|
+
import click_log
|
|
5
|
+
|
|
6
|
+
from convisoappsec.flowcli import help_option
|
|
7
|
+
from convisoappsec.flowcli.common import on_http_error
|
|
8
|
+
from convisoappsec.flowcli.context import pass_flow_context
|
|
9
|
+
from convisoappsec.logger import LOGGER
|
|
10
|
+
|
|
11
|
+
click_log.basic_config(LOGGER)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@click.command()
|
|
15
|
+
@click_log.simple_verbosity_option(LOGGER)
|
|
16
|
+
@click.option(
|
|
17
|
+
'-c',
|
|
18
|
+
'--company-id',
|
|
19
|
+
type=int,
|
|
20
|
+
required=True,
|
|
21
|
+
help="The company ID to have its resources used.",
|
|
22
|
+
)
|
|
23
|
+
@click.option(
|
|
24
|
+
'-p',
|
|
25
|
+
'--page',
|
|
26
|
+
type=int,
|
|
27
|
+
default=1,
|
|
28
|
+
show_default=True,
|
|
29
|
+
required=False,
|
|
30
|
+
help="Page to be consulted",
|
|
31
|
+
)
|
|
32
|
+
@click.option(
|
|
33
|
+
'-l',
|
|
34
|
+
'--limit',
|
|
35
|
+
type=int,
|
|
36
|
+
default=32,
|
|
37
|
+
show_default=True,
|
|
38
|
+
required=False,
|
|
39
|
+
help="Items limit per page.",
|
|
40
|
+
)
|
|
41
|
+
@help_option
|
|
42
|
+
@pass_flow_context
|
|
43
|
+
def ls(flow_context, company_id, asset_name="", page=1, limit=32):
|
|
44
|
+
try:
|
|
45
|
+
conviso_api = flow_context.create_conviso_graphql_client()
|
|
46
|
+
|
|
47
|
+
perform_command(conviso_api, company_id, asset_name, page, limit)
|
|
48
|
+
|
|
49
|
+
except Exception as exception:
|
|
50
|
+
on_http_error(exception)
|
|
51
|
+
raise click.ClickException(str(exception)) from exception
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def perform_command(conviso_api, company_id, asset_name="", page=1, limit=32):
|
|
55
|
+
assets_found = conviso_api.assets.get_by_company_id_or_name(
|
|
56
|
+
company_id,
|
|
57
|
+
asset_name,
|
|
58
|
+
page,
|
|
59
|
+
limit
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
indented_output = json_dumps(assets_found, indent=2)
|
|
63
|
+
print(indented_output)
|