Skip to content

Commit 015dc94

Browse files
authored
NO-SNOW: do not use packaging as it's not a dependency in stored proc (#3122)
1 parent dc77c45 commit 015dc94

File tree

3 files changed

+35
-2
lines changed

3 files changed

+35
-2
lines changed

src/snowflake/snowpark/_internal/data_source_utils.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@
66
import decimal
77
import logging
88
from enum import Enum
9-
from packaging import version
109
from typing import List, Any, Tuple, Protocol, Optional
1110
from snowflake.connector.options import pandas as pd
1211

12+
from snowflake.snowpark._internal.utils import get_sorted_key_for_version
1313
from snowflake.snowpark.exceptions import SnowparkDataframeReaderException
1414
from snowflake.snowpark.types import (
1515
StringType,
@@ -313,7 +313,7 @@ def data_source_data_to_pandas_df(
313313
def df_map_method(pandas_df):
314314
return (
315315
pandas_df.applymap
316-
if version.parse(pd.__version__) < version.parse("2.1.0")
316+
if get_sorted_key_for_version(str(pd.__version__)) < (2, 1, 0)
317317
else pandas_df.map
318318
)
319319

src/snowflake/snowpark/_internal/utils.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1762,3 +1762,15 @@ def merge_multiple_snowflake_plan_expr_to_alias(
17621762
)
17631763

17641764
return merged_dict
1765+
1766+
1767+
def str_contains_alphabet(ver):
1768+
"""Return True if ver contains alphabet, e.g., 1a1; otherwise, return False, e.g., 112"""
1769+
return bool(re.search("[a-zA-Z]", ver))
1770+
1771+
1772+
def get_sorted_key_for_version(version_str):
1773+
"""Generate a key to sort versions. Note if a version component is not a number, e.g., "1a1", we will treat it as -1. E.g., 1.11.1a1 will be treated as 1.11.-1"""
1774+
return tuple(
1775+
-1 if str_contains_alphabet(num) else int(num) for num in version_str.split(".")
1776+
)

tests/unit/test_utils.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
import copy
99
from snowflake.snowpark._internal.utils import (
1010
ExprAliasUpdateDict,
11+
str_contains_alphabet,
12+
get_sorted_key_for_version,
1113
)
1214

1315

@@ -101,3 +103,22 @@ def test_expr_alias_update_dict():
101103
and df_alias_dict1[df_alias_2].was_updated_due_to_inheritance(col_key_1)
102104
is False
103105
)
106+
107+
108+
def test_str_contains_alphabet():
109+
assert str_contains_alphabet("1a1") is True
110+
assert str_contains_alphabet("abc") is True
111+
assert str_contains_alphabet("123") is False
112+
assert str_contains_alphabet("12b34") is True
113+
assert str_contains_alphabet(".") is False
114+
assert str_contains_alphabet("1.2.3") is False
115+
116+
117+
def test_get_sorted_key_for_version():
118+
assert get_sorted_key_for_version("1.11.1a1") == (1, 11, -1)
119+
assert get_sorted_key_for_version("1.2.3") == (1, 2, 3)
120+
assert get_sorted_key_for_version("2.0.0") == (2, 0, 0)
121+
assert get_sorted_key_for_version("3.4a.5") == (3, -1, 5)
122+
assert get_sorted_key_for_version("10.20.30") == (10, 20, 30)
123+
assert get_sorted_key_for_version("4.5.6b7") == (4, 5, -1)
124+
assert get_sorted_key_for_version("7.8.9c") == (7, 8, -1)

0 commit comments

Comments
 (0)