Batch4 sub batch1#978
Conversation
… params type casting
…le_sec_ops_ai_agents, and microsoft_graph_mail_delegated
Summary of ChangesHello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request introduces two new integrations, Akamai and Azure Monitor, into the repository. It includes the necessary core infrastructure, API clients, action definitions, and comprehensive test suites for both integrations. The changes enable users to interact with these services directly through the platform, facilitating tasks such as log searching, network list management, and connectivity testing. Highlights
New Features🧠 You can now enable Memory (public preview) to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console. Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize the Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counterproductive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here. Footnotes
|
There was a problem hiding this comment.
Code Review
This pull request introduces two new integrations: Akamai and Azure Monitor, along with their respective actions, widgets, and tests. The code review identified several critical improvements: type annotations need correction or are missing in multiple actions (such as to_start_time_iso and _perform_action); internal imports within the Akamai integration must be relative; a defensive check is required in AddItemsToClientList to prevent potential IndexError crashes; redundant client initialization in AddItemsToNetworkList should be removed; and the Ping actions for both integrations must be updated to match the exact error message format specified in the style guide.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
| def _add_item_to_list(self, item: str) -> SingleJson: | ||
| item_payload: ClientListItemDetails = self._build_item_payload(item) | ||
| added_items: list[Any] = self.api_client.add_items_to_client_list( | ||
| list_id=self.target_client_list, | ||
| item_details=item_payload, | ||
| ) | ||
| added_item_details: SingleJson = added_items[0].raw_data | ||
| added_item_details["status"] = "added" | ||
| return added_item_details |
There was a problem hiding this comment.
Accessing added_items[0] directly without verifying if added_items is non-empty is unsafe. If the API returns an empty list of appended items, this will raise an unhandled IndexError and crash the action. Please implement a defensive check to ensure added_items contains elements before accessing them.
def _add_item_to_list(self, item: str) -> SingleJson:
item_payload: ClientListItemDetails = self._build_item_payload(item)
added_items: list[Any] = self.api_client.add_items_to_client_list(
list_id=self.target_client_list,
item_details=item_payload,
)
if not added_items:
raise exceptions.AkamaiManagerError(
f"Failed to add item '{item}' to the client list."
)
added_item_details: SingleJson = added_items[0].raw_data
added_item_details["status"] = "added"
return added_item_details| LAST_WEEK = "Last Week" | ||
| LAST_MONTH = "Last Month" | ||
| CUSTOM = "Custom" | ||
|
|
There was a problem hiding this comment.
The to_start_time_iso method is annotated as returning datetime.date, but it actually returns a str (the result of start_time.isoformat()). Additionally, since datetime is imported as a class (from datetime import datetime), evaluating datetime.date will raise an AttributeError at runtime because the datetime class does not have a date attribute. Please correct the return type annotation to str.
| def to_start_time_iso(self) -> str: |
References
- All function parameters and return types must be annotated. (link)
| from akamai_integration.core import action_init | ||
| from akamai_integration.core import constants | ||
| from akamai_integration.core import exceptions | ||
| from akamai_integration.core import utils |
There was a problem hiding this comment.
Internal imports within the integration must be relative rather than absolute. This ensures modularity and adheres to the repository style guide. Please update all absolute internal imports across the codebase to use relative imports.
| from akamai_integration.core import action_init | |
| from akamai_integration.core import constants | |
| from akamai_integration.core import exceptions | |
| from akamai_integration.core import utils | |
| from ..core import action_init | |
| from ..core import constants | |
| from ..core import exceptions | |
| from ..core import utils |
References
- Internal imports must be relative:
from ..core.Manager import ...notfrom Manager import ...(link)
| def _init_api_clients(self) -> None: | ||
| return action_init.create_api_client(self.soar_action) |
There was a problem hiding this comment.
The _init_api_clients method is annotated as returning None, but it actually returns the initialized ApiManager client instance. In the TIPCommon framework, the return value of _init_api_clients is assigned to self.api_client. Returning a value when the return type is annotated as None violates strict type checking rules. Please update the return type annotation to Any or import and use api_manager.ApiManager.
| def _init_api_clients(self) -> None: | |
| return action_init.create_api_client(self.soar_action) | |
| def _init_api_clients(self) -> Any: | |
| return action_init.create_api_client(self.soar_action) |
References
- All function parameters and return types must be annotated. (link)
|
|
||
| return names_filter, ids_filter | ||
|
|
||
| def _fetch_initial_client_lists(self, names_filter, ids_filter) -> list[ClientList]: |
There was a problem hiding this comment.
The parameters names_filter and ids_filter in _fetch_initial_client_lists are missing type annotations. To comply with the strict type checking guidelines, please add the appropriate type annotations.
| def _fetch_initial_client_lists(self, names_filter, ids_filter) -> list[ClientList]: | |
| def _fetch_initial_client_lists( | |
| self, | |
| names_filter: set[str], | |
| ids_filter: set[str], | |
| ) -> list[ClientList]: |
References
- All function parameters and return types must be annotated. (link)
| def _perform_action(self, _: Any = None) -> None: | ||
| try: | ||
| self._init_api_clients() |
There was a problem hiding this comment.
Calling self._init_api_clients() inside _perform_action is redundant and inefficient because the TIPCommon framework already executes this method during the action initialization phase. Please remove this redundant call.
| def _perform_action(self, _: Any = None) -> None: | |
| try: | |
| self._init_api_clients() | |
| def _perform_action(self, _: Any = None) -> None: | |
| try: | |
| network_list_id = self._get_network_list_id_from_params() |
| f"Successfully connected to the {INTEGRATION_NAME} server with " | ||
| "the provided connection parameters!" | ||
| ) | ||
| ERROR_MESSAGE: str = f"Failed to connect to the {INTEGRATION_NAME} server!" |
There was a problem hiding this comment.
The failure message defined in ERROR_MESSAGE does not match the exact format required by the style guide. Please update the message to include the Error is {error} suffix.
| ERROR_MESSAGE: str = f"Failed to connect to the {INTEGRATION_NAME} server!" | |
| ERROR_MESSAGE: str = f"Failed to connect to the {INTEGRATION_NAME} server! Error is {{error}}" |
References
- Every integration must have a Ping action with exact output messages, including 'Failed to connect to the {product name} server! Error is {error}' for failure. (link)
| print_value=True, | ||
| ) | ||
|
|
||
| def _perform_action(self, _=None): |
There was a problem hiding this comment.
The _perform_action method is missing a return type annotation, and its parameter _ is missing a type annotation. Please add the appropriate annotations to comply with the strict type checking guidelines.
| def _perform_action(self, _=None): | |
| def _perform_action(self, _: object = None) -> None: |
References
- All function parameters and return types must be annotated. (link)
| SUCCESS_MESSAGE: str = ( | ||
| "Successfully connected to the Azure Monitor server with the provided " | ||
| "connection parameters!" | ||
| ) |
There was a problem hiding this comment.
The failure message defined in ERROR_MESSAGE does not match the exact format required by the style guide. Please update the message to include the Error is {error} suffix.
ERROR_MESSAGE: str = "Failed to connect to the Azure Monitor server! Error is {error}"References
- Every integration must have a Ping action with exact output messages, including 'Failed to connect to the {product name} server! Error is {error}' for failure. (link)
| # Create the HMAC SHA1 of the Base64 decoded secret key for the Authorization header | ||
| hmac_sha1 = hmac.new( | ||
| base64.b64decode(self.secret_key), | ||
| data_to_sign.encode(), |
| timestamp = int(arrow.now(pytz.utc).timestamp()) * 1000 | ||
| auth_key = f"{api_key}{nonce}{timestamp}" | ||
| auth_key = auth_key.encode("utf-8") | ||
| api_key_hash = hashlib.sha256(auth_key).hexdigest() |
| TRANSFORM_DATA_SCRIPT_NAME = "Transform Data" | ||
|
|
||
| OAUTH_SCOPES = ["https://www.googleapis.com/auth/cloud-platform"] | ||
| API_ROOT_REGEX = r"https://((\w|-)+)-aiplatform.googleapis.com" |
8d361aa to
e499b8b
Compare
|
❌ Integration Tests Failed Click to view the full report🧩 pub_sub
❌ Failed Teststests/test_ping.py::TestPing::test_successtests/test_ping.py::TestPing::test_invalid_emailtests/test_pubsub_connector.py::TestTestRun::test_connector_test_run_no_messagestests/test_pubsub_connector.py::TestConnectorExternalContext::test_connector_test_run_with_messages_no_contexttests/test_pubsub_connector.py::TestConnectorExternalContext::test_connector_run_with_messages_idstests/test_pubsub_connector.py::TestConnectorExternalContext::test_connector_run_with_messages_ids_and_non_json🧩 azure_monitor
❌ Failed TestsTest Execution Failure🧩 web_risk
❌ Failed Teststests/test_enrich_entities/test_enrich_entities.py::TestAuth::test_invalid_emailtests/test_enrich_entities/test_enrich_entities.py::TestEnrichment::test_no_entitiestests/test_enrich_entities/test_enrich_entities.py::TestEnrichment::test_valid_invalidtests/test_ping.py::TestPing::test_successtests/test_ping.py::TestPing::test_invalid_emailtests/test_submit_entities/test_submit_entities.py::TestAuth::test_invalid_emailtests/test_submit_entities/test_submit_entities.py::TestEnrichment::test_no_entitiestests/test_submit_entities/test_submit_entities.py::TestEnrichment::test_valid_invalidtests/test_submit_entities/test_submit_entities.py::TestEnrichment::test_second_runtests/test_submit_entities/test_submit_entities.py::TestEnrichment::test_second_run_timeout🧩 sysdig_secure
❌ Failed TestsTest Execution Failure🧩 gmail
❌ Failed Teststests/add_email_label/test_add_email_label.py::TestInvalidParams::test_without_paramstests/add_email_label/test_add_email_label.py::TestInvalidParams::test_invalid_message_idtests/add_email_label/test_add_email_label.py::TestMessageID::test_search_message_by_message_idtests/add_email_label/test_add_email_label.py::TestFilter::test_search_message_default_filtertests/add_email_label/test_add_email_label.py::TestFilter::test_search_message_empty_filtertests/add_email_label/test_add_email_label.py::TestFilter::test_search_message_time_filtertests/add_email_label/test_add_email_label.py::TestFilter::test_invalid_labeltests/delete_email/test_delete_email.py::TestDeleteEmailInvalidParams::test_without_paramstests/delete_email/test_delete_email.py::TestDeleteEmailInvalidParams::test_no_messages_deletedtests/delete_email/test_delete_email.py::TestDeleteEmailInvalidParams::test_invalid_message_idtests/delete_email/test_delete_email.py::TestDeleteEmailInvalidParams::test_delete_message_empty_filtertests/delete_email/test_delete_email.py::TestDeleteEmailInvalidParams::test_no_mailbox_foundtests/delete_email/test_delete_email.py::TestDeleteEmailMessageId::test_delete_message_by_message_idtests/delete_email/test_delete_email.py::TestDeleteEmailMessageId::test_trash_message_by_message_idtests/delete_email/test_delete_email.py::TestDeleteEmailFilter::test_delete_message_valid_invalid_mailboxtests/delete_email/test_delete_email.py::TestDeleteEmailFilter::test_delete_message_time_filtertests/delete_email/test_delete_email.py::TestAsyncTimeout::test_delete_timeouttests/forward_email/test_forward_email.py::TestAuth::test_invalid_emailtests/forward_email/test_forward_email.py::TestForwardEmail::test_with_no_paramstests/forward_email/test_forward_email.py::TestForwardEmail::test_with_csv_reply_totests/forward_email/test_forward_email.py::TestForwardEmail::test_with_attachmentstests/forward_email/test_forward_email.py::TestForwardEmail::test_with_attachments_in_original_emailtests/remove_email_label/test_remove_email_label.py::TestInvalidParams::test_without_paramstests/remove_email_label/test_remove_email_label.py::TestInvalidParams::test_invalid_message_idtests/remove_email_label/test_remove_email_label.py::TestMessageID::test_search_message_by_message_idtests/remove_email_label/test_remove_email_label.py::TestFilter::test_search_message_default_filtertests/remove_email_label/test_remove_email_label.py::TestFilter::test_search_message_empty_filtertests/remove_email_label/test_remove_email_label.py::TestFilter::test_search_message_time_filtertests/remove_email_label/test_remove_email_label.py::TestFilter::test_invalid_labeltests/remove_email_label/test_remove_email_label.py::TestFilter::test_mixed_labelstests/save_email_to_the_case/test_save_email_to_the_case.py::TestAuth::test_invalid_emailtests/save_email_to_the_case/test_save_email_to_the_case.py::TestSaveEmail::test_with_no_paramstests/save_email_to_the_case/test_save_email_to_the_case.py::TestSaveEmail::test_with_base64_encodetests/save_email_to_the_case/test_save_email_to_the_case.py::TestSaveEmail::test_with_attachments_filteredtests/save_email_to_the_case/test_save_email_to_the_case.py::TestSaveEmail::test_with_attachmentstests/save_email_to_the_case/test_save_email_to_the_case.py::TestSaveEmail::test_with_attachments_and_encodetests/search_for_emails/test_search_for_emails.py::TestInvalidParams::test_without_paramstests/search_for_emails/test_search_for_emails.py::TestInvalidParams::test_no_messages_foundtests/search_for_emails/test_search_for_emails.py::TestInvalidParams::test_no_mailbox_foundtests/search_for_emails/test_search_for_emails.py::TestInvalidParams::test_invalid_message_idtests/search_for_emails/test_search_for_emails.py::TestMessageID::test_search_message_by_message_idtests/search_for_emails/test_search_for_emails.py::TestFilter::test_search_message_empty_filtertests/search_for_emails/test_search_for_emails.py::TestFilter::test_search_message_valid_invalid_mailboxtests/search_for_emails/test_search_for_emails.py::TestFilter::test_search_message_time_filtertests/search_for_emails/test_search_for_emails.py::TestAsyncTimeout::test_search_timeouttests/send_email/test_send_email.py::TestSendEmailAuth::test_invalid_emailtests/send_email/test_send_email.py::TestSendEmail::test_send_email_with_mandatory_paramstests/send_email/test_send_email.py::TestSendEmail::test_send_email_with_all_paramstests/send_email/test_send_email.py::TestSendEmail::test_send_email_with_comma_separated_paramstests/send_email/test_send_email.py::TestSendEmail::test_send_email_with_attachmentstests/send_thread_reply/test_send_thread_reply.py::TestAuth::test_invalid_emailtests/send_thread_reply/test_send_thread_reply.py::TestSendEmail::test_with_no_paramstests/send_thread_reply/test_send_thread_reply.py::TestSendEmail::test_with_csv_reply_totests/send_thread_reply/test_send_thread_reply.py::TestSendEmail::test_with_attachmentstests/send_thread_reply/test_send_thread_reply.py::TestSendEmail::test_with_attachments_in_original_emailtests/test_google_gmail_connector.py::TestTestRun::test_connector_test_run_no_mailtests/test_google_gmail_connector.py::TestTestRun::test_connector_test_run_with_mailtests/test_google_gmail_connector.py::TestTestRun::test_connector_test_run_with_mail_no_contexttests/test_google_gmail_connector.py::TestConnectorExternalContext::test_connector_test_run_with_mail_idstests/test_google_gmail_connector.py::TestConnectorExternalContext::test_connector_test_run_with_mail_timestamptests/test_google_gmail_connector.py::TestConnectorWithAttachments::test_connector_test_run_with_attach_emltests/test_google_gmail_connector.py::TestConnectorWithAttachments::test_connector_test_run_with_eml_single_alerttests/test_google_gmail_connector.py::TestConnectorWithAttachments::test_connector_test_run_with_eml_multiple_alertstests/test_google_gmail_connector.py::TestConnectorWithAttachments::test_connector_test_run_with_attachmentstests/test_google_gmail_connector.py::TestConnectorApiError::test_connector_api_errortests/test_google_gmail_connector.py::TestEmailStatusFilter::test_connector_unread_filtertests/test_ping.py::TestPing::test_successtests/test_ping.py::TestPing::test_invalid_emailtests/wait_for_thread_reply/test_wait_for_thread_reply.py::TestAuth::test_mailbox_not_foundtests/wait_for_thread_reply/test_wait_for_thread_reply.py::TestMessageID::test_email_not_foundtests/wait_for_thread_reply/test_wait_for_thread_reply.py::TestReplies::test_no_repliestests/wait_for_thread_reply/test_wait_for_thread_reply.py::TestReplies::test_email_found_single_replytests/wait_for_thread_reply/test_wait_for_thread_reply.py::TestReplies::test_email_found_single_reply_no_waittests/wait_for_thread_reply/test_wait_for_thread_reply.py::TestReplies::test_email_found_all_repliestests/wait_for_thread_reply/test_wait_for_thread_reply.py::TestAsyncTimeout::test_no_repliestests/wait_for_thread_reply/test_wait_for_thread_reply.py::TestAsyncTimeout::test_email_found_single_reply🧩 cloud_logging
❌ Failed Teststests/execute_query/test_execute_query.py::TestExecuteQuery::test_invalid_emailtests/execute_query/test_execute_query.py::TestExecuteQuery::test_proper_runtests/execute_query/test_execute_query.py::TestExecuteQuery::test_invalid_max_valuetests/execute_query/test_execute_query.py::TestExecuteQuery::test_invalid_time_frametests/test_ping.py::TestPing::test_invalid_emailtests/test_ping.py::TestPing::test_valid_run🧩 vertex_ai
❌ Failed Teststests/test_actions/test_publisher_name.py::test_configure_initial_publisher_nametests/test_actions/test_publisher_name.py::test_with_provided_publisher_name_in_actiontests/test_analyze_eml/test_analyze_eml.py::TestAuth::test_invalid_emailtests/test_analyze_eml/test_analyze_eml.py::TestValid::test_invalid_filestests/test_analyze_eml/test_analyze_eml.py::TestValid::test_valid_invalid_filestests/test_describe_entity/test_describe_entity.py::TestAuth::test_invalid_emailtests/test_describe_entity/test_describe_entity.py::TestValid::test_valid_runtests/test_execute_prompt/test_execute_prompt.py::TestAuth::test_invalid_emailtests/test_execute_prompt/test_execute_prompt.py::TestValid::test_token_counttests/test_execute_prompt/test_execute_prompt.py::TestValid::test_valid_runtests/test_ping.py::TestPing::test_successtests/test_ping.py::TestPing::test_invalid_emailtests/test_transform_data/test_transform_data.py::TestAuth::test_invalid_emailtests/test_transform_data/test_transform_data.py::TestValid::test_validtests/test_transform_data/test_transform_data.py::TestValid::test_invalid_json🧩 okta
❌ Failed TestsTest Execution Failure |
…nd sysdig_secure pyproject.toml
|
❌ Integration Tests Failed Click to view the full report🧩 cloud_logging
❌ Failed Teststests/execute_query/test_execute_query.py::TestExecuteQuery::test_invalid_emailtests/execute_query/test_execute_query.py::TestExecuteQuery::test_proper_runtests/execute_query/test_execute_query.py::TestExecuteQuery::test_invalid_max_valuetests/execute_query/test_execute_query.py::TestExecuteQuery::test_invalid_time_frametests/test_ping.py::TestPing::test_invalid_emailtests/test_ping.py::TestPing::test_valid_run🧩 gmail
❌ Failed Teststests/add_email_label/test_add_email_label.py::TestInvalidParams::test_without_paramstests/add_email_label/test_add_email_label.py::TestInvalidParams::test_invalid_message_idtests/add_email_label/test_add_email_label.py::TestMessageID::test_search_message_by_message_idtests/add_email_label/test_add_email_label.py::TestFilter::test_search_message_default_filtertests/add_email_label/test_add_email_label.py::TestFilter::test_search_message_empty_filtertests/add_email_label/test_add_email_label.py::TestFilter::test_search_message_time_filtertests/add_email_label/test_add_email_label.py::TestFilter::test_invalid_labeltests/delete_email/test_delete_email.py::TestDeleteEmailInvalidParams::test_without_paramstests/delete_email/test_delete_email.py::TestDeleteEmailInvalidParams::test_no_messages_deletedtests/delete_email/test_delete_email.py::TestDeleteEmailInvalidParams::test_invalid_message_idtests/delete_email/test_delete_email.py::TestDeleteEmailInvalidParams::test_delete_message_empty_filtertests/delete_email/test_delete_email.py::TestDeleteEmailInvalidParams::test_no_mailbox_foundtests/delete_email/test_delete_email.py::TestDeleteEmailMessageId::test_delete_message_by_message_idtests/delete_email/test_delete_email.py::TestDeleteEmailMessageId::test_trash_message_by_message_idtests/delete_email/test_delete_email.py::TestDeleteEmailFilter::test_delete_message_valid_invalid_mailboxtests/delete_email/test_delete_email.py::TestDeleteEmailFilter::test_delete_message_time_filtertests/delete_email/test_delete_email.py::TestAsyncTimeout::test_delete_timeouttests/forward_email/test_forward_email.py::TestAuth::test_invalid_emailtests/forward_email/test_forward_email.py::TestForwardEmail::test_with_no_paramstests/forward_email/test_forward_email.py::TestForwardEmail::test_with_csv_reply_totests/forward_email/test_forward_email.py::TestForwardEmail::test_with_attachmentstests/forward_email/test_forward_email.py::TestForwardEmail::test_with_attachments_in_original_emailtests/remove_email_label/test_remove_email_label.py::TestInvalidParams::test_without_paramstests/remove_email_label/test_remove_email_label.py::TestInvalidParams::test_invalid_message_idtests/remove_email_label/test_remove_email_label.py::TestMessageID::test_search_message_by_message_idtests/remove_email_label/test_remove_email_label.py::TestFilter::test_search_message_default_filtertests/remove_email_label/test_remove_email_label.py::TestFilter::test_search_message_empty_filtertests/remove_email_label/test_remove_email_label.py::TestFilter::test_search_message_time_filtertests/remove_email_label/test_remove_email_label.py::TestFilter::test_invalid_labeltests/remove_email_label/test_remove_email_label.py::TestFilter::test_mixed_labelstests/save_email_to_the_case/test_save_email_to_the_case.py::TestAuth::test_invalid_emailtests/save_email_to_the_case/test_save_email_to_the_case.py::TestSaveEmail::test_with_no_paramstests/save_email_to_the_case/test_save_email_to_the_case.py::TestSaveEmail::test_with_base64_encodetests/save_email_to_the_case/test_save_email_to_the_case.py::TestSaveEmail::test_with_attachments_filteredtests/save_email_to_the_case/test_save_email_to_the_case.py::TestSaveEmail::test_with_attachmentstests/save_email_to_the_case/test_save_email_to_the_case.py::TestSaveEmail::test_with_attachments_and_encodetests/search_for_emails/test_search_for_emails.py::TestInvalidParams::test_without_paramstests/search_for_emails/test_search_for_emails.py::TestInvalidParams::test_no_messages_foundtests/search_for_emails/test_search_for_emails.py::TestInvalidParams::test_no_mailbox_foundtests/search_for_emails/test_search_for_emails.py::TestInvalidParams::test_invalid_message_idtests/search_for_emails/test_search_for_emails.py::TestMessageID::test_search_message_by_message_idtests/search_for_emails/test_search_for_emails.py::TestFilter::test_search_message_empty_filtertests/search_for_emails/test_search_for_emails.py::TestFilter::test_search_message_valid_invalid_mailboxtests/search_for_emails/test_search_for_emails.py::TestFilter::test_search_message_time_filtertests/search_for_emails/test_search_for_emails.py::TestAsyncTimeout::test_search_timeouttests/send_email/test_send_email.py::TestSendEmailAuth::test_invalid_emailtests/send_email/test_send_email.py::TestSendEmail::test_send_email_with_mandatory_paramstests/send_email/test_send_email.py::TestSendEmail::test_send_email_with_all_paramstests/send_email/test_send_email.py::TestSendEmail::test_send_email_with_comma_separated_paramstests/send_email/test_send_email.py::TestSendEmail::test_send_email_with_attachmentstests/send_thread_reply/test_send_thread_reply.py::TestAuth::test_invalid_emailtests/send_thread_reply/test_send_thread_reply.py::TestSendEmail::test_with_no_paramstests/send_thread_reply/test_send_thread_reply.py::TestSendEmail::test_with_csv_reply_totests/send_thread_reply/test_send_thread_reply.py::TestSendEmail::test_with_attachmentstests/send_thread_reply/test_send_thread_reply.py::TestSendEmail::test_with_attachments_in_original_emailtests/test_google_gmail_connector.py::TestTestRun::test_connector_test_run_no_mailtests/test_google_gmail_connector.py::TestTestRun::test_connector_test_run_with_mailtests/test_google_gmail_connector.py::TestTestRun::test_connector_test_run_with_mail_no_contexttests/test_google_gmail_connector.py::TestConnectorExternalContext::test_connector_test_run_with_mail_idstests/test_google_gmail_connector.py::TestConnectorExternalContext::test_connector_test_run_with_mail_timestamptests/test_google_gmail_connector.py::TestConnectorWithAttachments::test_connector_test_run_with_attach_emltests/test_google_gmail_connector.py::TestConnectorWithAttachments::test_connector_test_run_with_eml_single_alerttests/test_google_gmail_connector.py::TestConnectorWithAttachments::test_connector_test_run_with_eml_multiple_alertstests/test_google_gmail_connector.py::TestConnectorWithAttachments::test_connector_test_run_with_attachmentstests/test_google_gmail_connector.py::TestConnectorApiError::test_connector_api_errortests/test_google_gmail_connector.py::TestEmailStatusFilter::test_connector_unread_filtertests/test_ping.py::TestPing::test_successtests/test_ping.py::TestPing::test_invalid_emailtests/wait_for_thread_reply/test_wait_for_thread_reply.py::TestAuth::test_mailbox_not_foundtests/wait_for_thread_reply/test_wait_for_thread_reply.py::TestMessageID::test_email_not_foundtests/wait_for_thread_reply/test_wait_for_thread_reply.py::TestReplies::test_no_repliestests/wait_for_thread_reply/test_wait_for_thread_reply.py::TestReplies::test_email_found_single_replytests/wait_for_thread_reply/test_wait_for_thread_reply.py::TestReplies::test_email_found_single_reply_no_waittests/wait_for_thread_reply/test_wait_for_thread_reply.py::TestReplies::test_email_found_all_repliestests/wait_for_thread_reply/test_wait_for_thread_reply.py::TestAsyncTimeout::test_no_repliestests/wait_for_thread_reply/test_wait_for_thread_reply.py::TestAsyncTimeout::test_email_found_single_reply🧩 vertex_ai
❌ Failed Teststests/test_actions/test_publisher_name.py::test_configure_initial_publisher_nametests/test_actions/test_publisher_name.py::test_with_provided_publisher_name_in_actiontests/test_analyze_eml/test_analyze_eml.py::TestAuth::test_invalid_emailtests/test_analyze_eml/test_analyze_eml.py::TestValid::test_invalid_filestests/test_analyze_eml/test_analyze_eml.py::TestValid::test_valid_invalid_filestests/test_describe_entity/test_describe_entity.py::TestAuth::test_invalid_emailtests/test_describe_entity/test_describe_entity.py::TestValid::test_valid_runtests/test_execute_prompt/test_execute_prompt.py::TestAuth::test_invalid_emailtests/test_execute_prompt/test_execute_prompt.py::TestValid::test_token_counttests/test_execute_prompt/test_execute_prompt.py::TestValid::test_valid_runtests/test_ping.py::TestPing::test_successtests/test_ping.py::TestPing::test_invalid_emailtests/test_transform_data/test_transform_data.py::TestAuth::test_invalid_emailtests/test_transform_data/test_transform_data.py::TestValid::test_validtests/test_transform_data/test_transform_data.py::TestValid::test_invalid_json🧩 pub_sub
❌ Failed Teststests/test_ping.py::TestPing::test_successtests/test_ping.py::TestPing::test_invalid_emailtests/test_pubsub_connector.py::TestTestRun::test_connector_test_run_no_messagestests/test_pubsub_connector.py::TestConnectorExternalContext::test_connector_test_run_with_messages_no_contexttests/test_pubsub_connector.py::TestConnectorExternalContext::test_connector_run_with_messages_idstests/test_pubsub_connector.py::TestConnectorExternalContext::test_connector_run_with_messages_ids_and_non_json🧩 okta
❌ Failed TestsTest Execution Failure🧩 web_risk
❌ Failed Teststests/test_enrich_entities/test_enrich_entities.py::TestAuth::test_invalid_emailtests/test_enrich_entities/test_enrich_entities.py::TestEnrichment::test_no_entitiestests/test_enrich_entities/test_enrich_entities.py::TestEnrichment::test_valid_invalidtests/test_ping.py::TestPing::test_successtests/test_ping.py::TestPing::test_invalid_emailtests/test_submit_entities/test_submit_entities.py::TestAuth::test_invalid_emailtests/test_submit_entities/test_submit_entities.py::TestEnrichment::test_no_entitiestests/test_submit_entities/test_submit_entities.py::TestEnrichment::test_valid_invalidtests/test_submit_entities/test_submit_entities.py::TestEnrichment::test_second_runtests/test_submit_entities/test_submit_entities.py::TestEnrichment::test_second_run_timeout |
includes: akamai_integration, apache_kafka, azure_monitor, cisco_vulnerability_management, cloud_logging, cyber_ark_credential_provider, extrahop, gmail, google_forms, microsoft_graph_mail_delegated, microsoft_graph_security, mimecast, my_sql, nmap, okta, palo_alto_cortex_xdr, proof_point_tap, proofpoint_cloud_threat_response, pub_sub, screenshot_machine, service_desk_plus, service_desk_plus_v3, splunk, sysdig_secure, vertex_ai, web_risk, zerofox, zoho_desk, zscaler