Skip to content

Commit

Permalink
fix: improve cell magic error message on missing query (#58)
Browse files Browse the repository at this point in the history
* fix: improve cell magic error message on missing query

* Remove possibly confusing wording from docstring
  • Loading branch information
plamut authored Mar 26, 2020
1 parent 9ada7a5 commit 6182cf4
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 1 deletion.
9 changes: 8 additions & 1 deletion google/cloud/bigquery/magics.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,9 @@
the variable name (ex. ``$my_dict_var``). See ``In[6]`` and ``In[7]``
in the Examples section below.
* ``<query>`` (required, cell argument):
SQL query to run.
SQL query to run. If the query does not contain any whitespace (aside
from leading and trailing whitespace), it is assumed to represent a
fully-qualified table ID, and the latter's data will be fetched.
Returns:
A :class:`pandas.DataFrame` with the query results.
Expand Down Expand Up @@ -506,6 +508,11 @@ def _cell_magic(line, query):

query = query.strip()

if not query:
error = ValueError("Query is missing.")
_handle_error(error, args.destination_var)
return

# Any query that does not contain whitespace (aside from leading and trailing whitespace)
# is assumed to be a table id
if not re.search(r"\s", query):
Expand Down
16 changes: 16 additions & 0 deletions tests/unit/test_magics.py
Original file line number Diff line number Diff line change
Expand Up @@ -800,6 +800,22 @@ def test_bigquery_magic_w_table_id_invalid():
assert "Traceback (most recent call last)" not in output


def test_bigquery_magic_w_missing_query():
ip = IPython.get_ipython()
ip.extension_manager.load_extension("google.cloud.bigquery")
magics.context._project = None

cell_body = " \n \n \t\t \n "

with io.capture_output() as captured_io:
ip.run_cell_magic("bigquery", "df", cell_body)

output = captured_io.stderr
assert "Could not save output to variable" in output
assert "Query is missing" in output
assert "Traceback (most recent call last)" not in output


@pytest.mark.usefixtures("ipython_interactive")
@pytest.mark.skipif(pandas is None, reason="Requires `pandas`")
def test_bigquery_magic_w_table_id_and_destination_var():
Expand Down

0 comments on commit 6182cf4

Please sign in to comment.