Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding the defaultDataSource field to the pack metadata #4139

Merged
merged 57 commits into from
May 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
fd421a2
created -> firstCreated
amshamah419 Mar 11, 2024
85bcbab
Merge branch 'master' of github.com:demisto/demisto-sdk
amshamah419 Mar 18, 2024
9b125be
Added the defaultDataSource field to pack metadata
amshamah419 Mar 18, 2024
fd65ff2
rm fristCreate commit
amshamah419 Mar 18, 2024
8f1d74d
for the love of all that holy, please push
amshamah419 Mar 18, 2024
aab8571
Add validation
amshamah419 Mar 26, 2024
a6f21f0
Merge branch 'master' into datasource-feature
amshamah419 Mar 26, 2024
ce11c4b
Change to reflect prior logic
amshamah419 Apr 3, 2024
c1b52df
Merge branch 'master' into datasource-feature
amshamah419 Apr 3, 2024
dfba399
Merge remote-tracking branch 'origin/datasource-feature' into datasou…
amshamah419 Apr 3, 2024
75dc064
fix conflicts
amshamah419 Apr 3, 2024
89a1961
Fix UT
amshamah419 Apr 3, 2024
0bb9c7f
rename defaultDataSourceName
BEAdi Apr 21, 2024
6a5e069
add defaultDataSourceName to metadata
BEAdi May 2, 2024
799f18a
fix validation
BEAdi May 2, 2024
2708456
precommit
BEAdi May 2, 2024
e3ab5dd
add is valid default datasource name validator
BEAdi May 2, 2024
97f3216
add integration doc
BEAdi May 2, 2024
8eb6f2a
add validations to lists
BEAdi May 2, 2024
61eec84
fix PA131
BEAdi May 2, 2024
3d490f0
add fix for PA131
BEAdi May 2, 2024
a01436e
raise Exception in fix PA131
BEAdi May 5, 2024
bc9db9f
fix PA132
BEAdi May 5, 2024
f4dde32
Merge branch 'master' into datasource-feature
BEAdi May 5, 2024
7b03dee
more logs
BEAdi May 5, 2024
4881f33
add data source id
BEAdi May 6, 2024
6e9c157
run pre-commit
BEAdi May 6, 2024
0490a84
support contribution display name
BEAdi May 6, 2024
27bfd3e
handle contrib display name
BEAdi May 7, 2024
675cde8
enhance get_valid_data_source_integrations
BEAdi May 12, 2024
33dcb84
add is_data_source to integration
BEAdi May 15, 2024
e5e2e0e
fix contrib name
BEAdi May 16, 2024
eeede6f
post-demo - keep default
BEAdi May 16, 2024
cd1b7e9
logs
BEAdi May 16, 2024
237186a
change defaultDataSource to dict
BEAdi May 20, 2024
a3c79b0
change field to str
BEAdi May 20, 2024
ff9c40f
remove Field
BEAdi May 20, 2024
8f8a149
exclude Field
BEAdi May 21, 2024
c09137c
exclude Field
BEAdi May 21, 2024
0bc95e9
Merge remote-tracking branch 'origin/datasource-feature' into datasou…
BEAdi May 21, 2024
c9ace3c
Merge branch 'master' into datasource-feature
BEAdi May 21, 2024
804e7f0
add UT
BEAdi May 22, 2024
dbabe6f
CR
BEAdi May 22, 2024
463da56
fix UTs
BEAdi May 23, 2024
860102d
fix field alias
BEAdi May 23, 2024
52f3bd0
remove exclude field
BEAdi May 23, 2024
58a7582
remove Field
BEAdi May 23, 2024
4e85dc7
exclude name
BEAdi May 23, 2024
d64d4cd
CR error
BEAdi May 23, 2024
41361d9
change to error error
BEAdi May 23, 2024
84ac294
Field alias
BEAdi May 23, 2024
40ae556
rename fields
BEAdi May 23, 2024
164e25a
revert _
BEAdi May 26, 2024
69bbf4f
deal with XSOAR
BEAdi May 26, 2024
796e4af
add marketplace
BEAdi May 26, 2024
9653533
fix generate docs
BEAdi May 26, 2024
db433f0
fix generate docs
BEAdi May 26, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .changelog/4139.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
changes:
- description: Added the `defaultDataSource` field to the pack metadata.
type: feature
pr_number: 4139
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,13 @@
from demisto_sdk.commands.common.content.objects.pack_objects import PackMetaData
from demisto_sdk.commands.common.content.objects.pack_objects.pack import Pack
from demisto_sdk.commands.common.content.objects_factory import path_to_pack_object
from demisto_sdk.commands.common.docker.docker_image import DockerImage
from demisto_sdk.commands.common.logger import logger
from demisto_sdk.commands.common.tools import src_root
from demisto_sdk.commands.content_graph.common import (
ContentType,
)
from demisto_sdk.commands.content_graph.objects.integration import Command, Integration
from demisto_sdk.commands.content_graph.objects.pack_content_items import (
PackContentItems,
)
Expand Down Expand Up @@ -530,3 +535,286 @@ def test_replace_item_if_has_higher_toversion(
integration, content_item_metadata, integration.summary(), marketplace
)
assert content_item_metadata["toversion"] == expected_toversion


def mock_integration_for_data_source(
name,
display_name,
is_fetch=False,
is_fetch_events=False,
is_remote_sync_in=False,
is_fetch_samples=False,
is_feed=False,
deprecated=False,
marketplaces=MarketplaceVersions.MarketplaceV2,
path=Path("Packs"),
):
if not isinstance(marketplaces, list):
marketplaces = [marketplaces]
return Integration(
id=name,
content_type=ContentType.INTEGRATION,
node_id=f"{ContentType.INTEGRATION}:{name}",
path=path,
fromversion="5.0.0",
toversion="99.99.99",
display_name=display_name,
name=name,
marketplaces=marketplaces,
deprecated=deprecated,
type="python3",
docker_image=DockerImage("demisto/python3:3.10.11.54799"),
category="blabla",
commands=[Command(name="test-command", description="")],
is_fetch=is_fetch,
is_fetch_events=is_fetch_events,
is_remote_sync_in=is_remote_sync_in,
is_fetch_samples=is_fetch_samples,
is_feed=is_feed,
)


@pytest.mark.parametrize(
"support_level, include_name, expected_output",
(
(
None,
False,
[
"Partner Contribution Same Name",
"partner_contribution_different_name",
"regular_integration_different_name",
"Samples Fetch",
"Some Mirroring",
],
),
(
"partner",
False,
[
"Partner Contribution Same Name",
"partner_contribution_different_name",
"regular_integration_different_name",
"Samples Fetch",
"Some Mirroring",
],
),
(
None,
True,
[
{
"id": "Partner Contribution Same Name",
"name": "Partner Contribution Same Name (Partner Contribution)",
},
{
"id": "partner_contribution_different_name",
"name": "Partner Contribution Different Name (Partner Contribution)",
},
{
"id": "regular_integration_different_name",
"name": "Regular Integration Different Name",
},
{"id": "Samples Fetch", "name": "Samples Fetch"},
{"id": "Some Mirroring", "name": "Some Mirroring"},
],
),
(
"partner",
True,
[
{
"id": "Partner Contribution Same Name",
"name": "Partner Contribution Same Name",
},
{
"id": "partner_contribution_different_name",
"name": "Partner Contribution Different Name",
},
{
"id": "regular_integration_different_name",
"name": "Regular Integration Different Name",
},
{"id": "Samples Fetch", "name": "Samples Fetch"},
{"id": "Some Mirroring", "name": "Some Mirroring"},
],
),
),
)
def test_get_valid_data_source_integrations(
support_level, include_name, expected_output
):
"""
Given:
- Support level and whether to include the name

When:
- Getting valid data source integrations for a pack

Then:
- The correct data source integration return, with the expected name
"""
integrations = [
mock_integration_for_data_source(
"Partner Contribution Same Name",
"Partner Contribution Same Name (Partner Contribution)",
is_fetch=True,
),
mock_integration_for_data_source(
"partner_contribution_different_name",
"Partner Contribution Different Name (Partner Contribution)",
is_fetch_events=True,
),
mock_integration_for_data_source(
"regular_integration_different_name",
"Regular Integration Different Name",
is_fetch=True,
),
mock_integration_for_data_source(
"Not Fetching Integration", "Not Fetching Integration", is_fetch=False
),
mock_integration_for_data_source(
"Deprecated Integration",
"Deprecated Integration",
is_fetch=True,
deprecated=True,
),
mock_integration_for_data_source(
"Not XSIAM Integration",
"Not XSIAM Integration",
is_fetch=True,
marketplaces=MarketplaceVersions.XSOAR_ON_PREM,
),
mock_integration_for_data_source(
"Some Feed", "Some Feed", is_fetch=True, is_feed=True
),
mock_integration_for_data_source(
"Samples Fetch", "Samples Fetch", is_fetch_samples=True
),
mock_integration_for_data_source(
"Some Mirroring", "Some Mirroring", is_remote_sync_in=True
),
]

content_items = PackContentItems()
content_items.integration.extend(integrations)

result = PackMetadata.get_valid_data_source_integrations(
content_items, support_level, include_name
)
assert result == expected_output


@pytest.mark.parametrize(
"support, given_default_data_source_id, integrations, expected_default_data_source",
(
(
"partner",
"partner_support",
[
mock_integration_for_data_source(
"partner_support",
"Partner Support (Partner Contribution)",
is_fetch=True,
),
mock_integration_for_data_source(
"other_partner_support",
"Other Partner Support (Partner Contribution)",
is_fetch=True,
),
],
{"id": "partner_support", "name": "Partner Support"},
),
(
"xsoar",
"xsoar_support",
[
mock_integration_for_data_source(
"xsoar_support", "XSOAR Support", is_fetch=True
),
mock_integration_for_data_source(
"Other XSOAR Support", "Other XSOAR Support", is_fetch=True
),
],
{"id": "xsoar_support", "name": "XSOAR Support"},
),
(
"xsoar",
None,
[
mock_integration_for_data_source(
"One Fetching Integration",
"One Fetching Integration",
is_fetch=True,
),
mock_integration_for_data_source(
"Not Fetching Integration",
"Not Fetching Integration",
is_fetch=False,
),
mock_integration_for_data_source(
"Deprecated Integration",
"Deprecated Integration",
is_fetch=True,
deprecated=True,
),
mock_integration_for_data_source(
"Feed Integration", "Feed Integration", is_fetch=True, is_feed=True
),
],
{"id": "One Fetching Integration", "name": "One Fetching Integration"},
),
),
)
def test_set_default_data_source(
support, given_default_data_source_id, integrations, expected_default_data_source
):
"""
Given:
- Support level, default data source name and id, pack integrations names and ids

When:
- Setting a default data source to a pack

Then:
- The correct data source integration is set
"""
content_items, my_instance = mock_pack_metadata_for_data_source(
support=support,
default_data_source=given_default_data_source_id,
integrations=integrations,
)

my_instance._set_default_data_source(content_items)
assert my_instance.default_data_source_id == expected_default_data_source.get("id")
assert my_instance.default_data_source_name == expected_default_data_source.get(
"name"
)


def mock_pack_metadata_for_data_source(support, default_data_source, integrations):
my_instance = PackMetadata(
name="test",
display_name="",
description="",
created="",
legacy=False,
support=support,
url="",
email="",
eulaLink="",
price=0,
hidden=False,
commit="",
downloads=0,
keywords=[],
searchRank=0,
excludedDependencies=[],
videos=[],
modules=[],
default_data_source_id=default_data_source,
) # type: ignore

content_items = PackContentItems()
content_items.integration.extend(integrations)
return content_items, my_instance
16 changes: 16 additions & 0 deletions demisto_sdk/commands/content_graph/objects/integration.py
Original file line number Diff line number Diff line change
Expand Up @@ -102,8 +102,10 @@ class Integration(IntegrationScript, content_type=ContentType.INTEGRATION): # t
is_fetch_events: bool = Field(False, alias="isfetchevents")
is_fetch_assets: bool = Field(False, alias="isfetchassets")
is_fetch_events_and_assets: bool = False
is_fetch_samples: bool = False
is_feed: bool = False
is_beta: bool = False
is_remote_sync_in: bool = False
is_mappable: bool = False
long_running: bool = False
category: str
Expand Down Expand Up @@ -218,3 +220,17 @@ def light_svg(self) -> LightSVGRelatedFile:
@cached_property
def image(self) -> ImageRelatedFile:
return ImageRelatedFile(self.path, git_sha=self.git_sha)

def is_data_source(self):
return (
MarketplaceVersions.MarketplaceV2 in self.marketplaces
and not self.deprecated
and not self.is_feed
and (
self.is_fetch
or self.is_fetch_events
or self.is_remote_sync_in
or self.is_fetch_events_and_assets
BEAdi marked this conversation as resolved.
Show resolved Hide resolved
or self.is_fetch_samples
)
)
Loading