-
Notifications
You must be signed in to change notification settings - Fork 145
Open
Labels
bugSomething isn't workingSomething isn't workinglocal testingLocal Testing issues/PRsLocal Testing issues/PRsstatus-triage_doneInitial triage done, will be further handled by the driver teamInitial triage done, will be further handled by the driver team
Description
Please answer these questions before submitting your issue. Thanks!
-
What version of Python are you using?
Python 3.11.13 -
What are the Snowpark Python and pandas versions in the environment?
pandas==2.1.4 pandas-gbq==0.31.0 snowflake-snowpark-python==1.42.0 -
What did you do?
When running
convert_timezonein local testing withsource_timestampas string (varchar), the mock fails to run with the exception'str' object has no attribute 'tzinfo'. It's because of that line.from snowflake.snowpark import Session from snowflake.snowpark.functions import lit, convert_timezone session = Session.builder.config('local_testing', True).create() df = session.create_dataframe([['2023-03-10T08:00:00+03:00']], schema=['date']) df.select(convert_timezone(lit('UTC'), 'date')).collect()
The output is
Traceback (most recent call last): File "/Users/danpeled/Desktop/Canopy/data/airflow/dags/.venv/lib/python3.11/site-packages/snowflake/snowpark/mock/_plan.py", line 661, in handle_function_expression result = func(*call_args[0], row_number=current_row, input_data=input_data) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/danpeled/Desktop/Canopy/data/airflow/dags/.venv/lib/python3.11/site-packages/snowflake/snowpark/mock/_functions.py", line 125, in __call__ result = self.impl(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/danpeled/Desktop/Canopy/data/airflow/dags/.venv/lib/python3.11/site-packages/snowflake/snowpark/mock/_functions.py", line 2049, in mock_convert_timezone res = combined.apply(_convert, axis=1) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/danpeled/Desktop/Canopy/data/airflow/dags/.venv/lib/python3.11/site-packages/pandas/core/frame.py", line 10034, in apply return op.apply().__finalize__(self, method="apply") ^^^^^^^^^^ File "/Users/danpeled/Desktop/Canopy/data/airflow/dags/.venv/lib/python3.11/site-packages/pandas/core/apply.py", line 837, in apply return self.apply_standard() ^^^^^^^^^^^^^^^^^^^^^ File "/Users/danpeled/Desktop/Canopy/data/airflow/dags/.venv/lib/python3.11/site-packages/pandas/core/apply.py", line 965, in apply_standard results, res_index = self.apply_series_generator() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/danpeled/Desktop/Canopy/data/airflow/dags/.venv/lib/python3.11/site-packages/pandas/core/apply.py", line 981, in apply_series_generator results[i] = self.func(v, *self.args, **self.kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/danpeled/Desktop/Canopy/data/airflow/dags/.venv/lib/python3.11/site-packages/snowflake/snowpark/mock/_functions.py", line 2039, in _convert if source_time.tzinfo is None: ^^^^^^^^^^^^^^^^^^ AttributeError: 'str' object has no attribute 'tzinfo' The above exception was the direct cause of the following exception: Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/Users/danpeled/Desktop/Canopy/data/airflow/dags/.venv/lib/python3.11/site-packages/snowflake/snowpark/_internal/telemetry.py", line 295, in wrap result = func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ File "/Users/danpeled/Desktop/Canopy/data/airflow/dags/.venv/lib/python3.11/site-packages/snowflake/snowpark/_internal/utils.py", line 1148, in call_wrapper return func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ File "/Users/danpeled/Desktop/Canopy/data/airflow/dags/.venv/lib/python3.11/site-packages/snowflake/snowpark/dataframe.py", line 772, in collect return self._internal_collect_with_tag_no_telemetry( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/danpeled/Desktop/Canopy/data/airflow/dags/.venv/lib/python3.11/site-packages/snowflake/snowpark/dataframe.py", line 845, in _internal_collect_with_tag_no_telemetry return self._session._conn.execute( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/danpeled/Desktop/Canopy/data/airflow/dags/.venv/lib/python3.11/site-packages/snowflake/snowpark/mock/_connection.py", line 645, in execute res = execute_mock_plan(plan, plan.expr_to_alias) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/danpeled/Desktop/Canopy/data/airflow/dags/.venv/lib/python3.11/site-packages/snowflake/snowpark/mock/_plan.py", line 1136, in execute_mock_plan column_series = calculate_expression( ^^^^^^^^^^^^^^^^^^^^^ File "/Users/danpeled/Desktop/Canopy/data/airflow/dags/.venv/lib/python3.11/site-packages/snowflake/snowpark/mock/_plan.py", line 2261, in calculate_expression return calculate_expression(exp.child, input_data, analyzer, expr_to_alias) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/danpeled/Desktop/Canopy/data/airflow/dags/.venv/lib/python3.11/site-packages/snowflake/snowpark/mock/_plan.py", line 2263, in calculate_expression return handle_function_expression(exp, input_data, analyzer, expr_to_alias) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/danpeled/Desktop/Canopy/data/airflow/dags/.venv/lib/python3.11/site-packages/snowflake/snowpark/mock/_plan.py", line 675, in handle_function_expression SnowparkLocalTestingException.raise_from_error( File "/Users/danpeled/Desktop/Canopy/data/airflow/dags/.venv/lib/python3.11/site-packages/snowflake/snowpark/mock/exceptions.py", line 20, in raise_from_error raise cls( snowflake.snowpark.mock.exceptions.SnowparkLocalTestingException: Error executing mocked function 'convert_timezone'. See error traceback for detailed information.
-
What did you expect to see?
When executing in Snowflake
SELECT convert_timezone('UTC', '2023-03-10T08:00:00+03:00')
It returns
2023-03-10 05:00:00.000 +0000
It worth to mention that similar issue is mentioned in #1630
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't workinglocal testingLocal Testing issues/PRsLocal Testing issues/PRsstatus-triage_doneInitial triage done, will be further handled by the driver teamInitial triage done, will be further handled by the driver team