From f99a296f9b2a5a702c6679e1f215a9ed43cb65fb Mon Sep 17 00:00:00 2001
From: Jan Sikorski <jan.sikorski@snowflake.com>
Date: Tue, 21 Jan 2025 14:26:26 +0100
Subject: [PATCH] Added root object

---
 src/snowflake/cli/_plugins/cortex/commands.py | 4 ++--
 src/snowflake/cli/api/cli_global_context.py   | 7 +++++++
 tests_integration/test_connection.py          | 3 +++
 tests_integration/test_cortex.py              | 1 -
 4 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/src/snowflake/cli/_plugins/cortex/commands.py b/src/snowflake/cli/_plugins/cortex/commands.py
index 6d64c9ac2e..5cfd0a24d2 100644
--- a/src/snowflake/cli/_plugins/cortex/commands.py
+++ b/src/snowflake/cli/_plugins/cortex/commands.py
@@ -100,11 +100,11 @@ def search(
 
     if not columns:
         columns = []
-
     conn = get_cli_context().connection
+    root = get_cli_context().root_object
 
     search_service = (
-        Root(conn)
+        root
         .databases[conn.database]
         .schemas[conn.schema]
         .cortex_search_services[service]
diff --git a/src/snowflake/cli/api/cli_global_context.py b/src/snowflake/cli/api/cli_global_context.py
index abd4ce09a9..98b16ee655 100644
--- a/src/snowflake/cli/api/cli_global_context.py
+++ b/src/snowflake/cli/api/cli_global_context.py
@@ -21,12 +21,15 @@
 from pathlib import Path
 from typing import TYPE_CHECKING, Iterator
 
+from cryptography.utils import cached_property
+
 from snowflake.cli.api.connections import ConnectionContext, OpenConnectionCache
 from snowflake.cli.api.exceptions import MissingConfiguration
 from snowflake.cli.api.metrics import CLIMetrics
 from snowflake.cli.api.output.formats import OutputFormat
 from snowflake.cli.api.rendering.jinja import CONTEXT_KEY
 from snowflake.connector import SnowflakeConnection
+from snowflake.core import Root
 
 if TYPE_CHECKING:
     from snowflake.cli.api.project.definition_manager import DefinitionManager
@@ -196,6 +199,10 @@ def _should_force_mute_intermediate_output(self) -> bool:
         """Computes whether cli_console output should be muted."""
         return self._manager.output_format == OutputFormat.JSON
 
+    @cached_property
+    def root_object(self) -> Root:
+        return Root(self.connection)
+
 
 _CLI_CONTEXT_MANAGER: ContextVar[_CliGlobalContextManager | None] = ContextVar(
     "cli_context", default=None
diff --git a/tests_integration/test_connection.py b/tests_integration/test_connection.py
index 4128c2e1fc..5d215a32d9 100644
--- a/tests_integration/test_connection.py
+++ b/tests_integration/test_connection.py
@@ -62,3 +62,6 @@ def test_connection_not_existing_schema(
             f'Could not use schema "{schema.upper()}". Object does not exist'
             in result.output
         )
+
+def test_root_object(snowflake_session):
+    root = snowflake_session.root_object
\ No newline at end of file
diff --git a/tests_integration/test_cortex.py b/tests_integration/test_cortex.py
index 749630aff1..5fb2a6eba8 100644
--- a/tests_integration/test_cortex.py
+++ b/tests_integration/test_cortex.py
@@ -24,7 +24,6 @@
 
 
 @pytest.mark.integration
-@pytest.mark.skip  # TODO: when we have Cortex activated on test account, unskip this and setup part in sql script
 @pytest.mark.skipif(
     sys.version_info >= (3, 12),
     reason="Snowflake Python API currently does not support Python 3.12 and greater",