diff --git a/CHANGELOG.md b/CHANGELOG.md index dbc04abb5e..af4e74c3c6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -59,6 +59,7 @@ - Added support for `contains_null` parameter to ArrayType. - Added support for creating a temporary view via `DataFrame.create_or_replace_temp_view` from a DataFrame created by reading a file from a stage. - Added support for `value_contains_null` parameter to MapType. +- Added `interactive` to telemetry that indicates whether the current environment is an interactive one. #### Bug Fixes diff --git a/src/snowflake/snowpark/_internal/telemetry.py b/src/snowflake/snowpark/_internal/telemetry.py index 81b9044073..f449ffc5cc 100644 --- a/src/snowflake/snowpark/_internal/telemetry.py +++ b/src/snowflake/snowpark/_internal/telemetry.py @@ -28,6 +28,7 @@ get_python_version, get_version, is_in_stored_procedure, + is_interactive, ) @@ -63,6 +64,7 @@ class TelemetryField(Enum): KEY_PYTHON_VERSION = "python_version" KEY_CLIENT_LANGUAGE = "client_language" KEY_OS = "operating_system" + KEY_IS_INTERACTIVE = "interactive" KEY_DATA = "data" KEY_CATEGORY = "category" KEY_CREATED_BY_SNOWPARK = "created_by_snowpark" @@ -308,6 +310,7 @@ def __init__(self, conn: SnowflakeConnection) -> None: self.version: str = get_version() self.python_version: str = get_python_version() self.os: str = get_os_name() + self.is_interactive = is_interactive() def send(self, msg: Dict, timestamp: Optional[int] = None): if self.telemetry: @@ -323,6 +326,9 @@ def _create_basic_telemetry_data(self, telemetry_type: str) -> Dict[str, Any]: TelemetryField.KEY_PYTHON_VERSION.value: self.python_version, TelemetryField.KEY_OS.value: self.os, PCTelemetryField.KEY_TYPE.value: telemetry_type, + TelemetryField.KEY_IS_INTERACTIVE.value: PCTelemetryData.TRUE + if self.is_interactive + else PCTelemetryData.FALSE, } return message diff --git a/src/snowflake/snowpark/_internal/utils.py b/src/snowflake/snowpark/_internal/utils.py index 94e9fa3b94..e91d60f13e 100644 --- a/src/snowflake/snowpark/_internal/utils.py +++ b/src/snowflake/snowpark/_internal/utils.py @@ -18,6 +18,7 @@ import random import re import string +import sys import threading import traceback import zipfile @@ -309,6 +310,11 @@ def get_python_version() -> str: return platform.python_version() +@lru_cache +def is_interactive() -> bool: + return hasattr(sys, "ps1") or sys.flags.interactive or "snowbook" in sys.modules + + @lru_cache def get_connector_version() -> str: return ".".join([str(d) for d in connector_version if d is not None]) diff --git a/tests/integ/modin/test_telemetry.py b/tests/integ/modin/test_telemetry.py index f0a68825a4..b626620768 100644 --- a/tests/integ/modin/test_telemetry.py +++ b/tests/integ/modin/test_telemetry.py @@ -189,6 +189,7 @@ def test_send_snowpark_pandas_telemetry_helper(send_mock): "python_version": ANY, "operating_system": ANY, "type": "test_send_type", + "interactive": ANY, "data": { "func_name": "test_send_func", "category": "snowpark_pandas",