query: Add a hint for the TypeError unhashable type: 'set'.

This commit is contained in:
Brett Smith 2021-03-15 09:55:32 -04:00
parent 39a9d0d67e
commit 69f3e4ee6e
2 changed files with 27 additions and 10 deletions

View file

@ -556,15 +556,12 @@ class BQLShell(bc_query_shell.BQLShell):
)
except Exception as error:
logger.error(str(error), exc_info=logger.isEnabledFor(logging.DEBUG))
if (isinstance(error, TypeError)
and error.args
and ' not supported between instances ' in error.args[0]):
logger.info(
"HINT: Are you using ORDER BY or comparisons with metadata "
"that isn't consistently set?\n "
"Try looking up that metadata with str_meta() instead to "
"ensure your comparisons use a consistent data type.",
)
try:
hint_func = getattr(self, f'_hint_{type(error).__name__}')
except AttributeError:
pass
else:
hint_func(error, statement)
return
if not rows and output_format != 'ods':
@ -573,6 +570,26 @@ class BQLShell(bc_query_shell.BQLShell):
logger.debug("rendering query as %s", output_format)
render_func(statement, row_types, rows)
def _hint_TypeError(self, error: TypeError, statement: QueryStatement) -> None:
try:
errmsg = str(error.args[0])
except IndexError:
return
if ' not supported between instances ' in errmsg:
logger.info(
"HINT: Are you using ORDER BY or comparisons with metadata "
"that isn't consistently set?\n "
"Try looking up that metadata with str_meta() instead to "
"ensure your comparisons use a consistent data type.",
)
elif errmsg.startswith('unhashable type: '):
logger.info(
"HINT: bean-query does not support selecting columns or "
"functions that return multiple items as non-aggregate data in "
"GROUP BY queries.\n "
"If you want to aggregate that data, run it through set().",
)
def _render_csv(self, statement: QueryStatement, row_types: RowTypes, rows: Rows) -> None:
bc_query_render.render_csv(
row_types,

View file

@ -5,7 +5,7 @@ from setuptools import setup
setup(
name='conservancy_beancount',
description="Plugin, library, and reports for reading Conservancy's books",
version='1.19.3',
version='1.19.4',
author='Software Freedom Conservancy',
author_email='info@sfconservancy.org',
license='GNU AGPLv3+',