diff --git a/conservancy_beancount/reports/query.py b/conservancy_beancount/reports/query.py index 69822b92110f074fe3bb7d4c3d1961ec09634f33..24eab377a8dc7286a67f078308ae23d44c7a98ac 100644 --- a/conservancy_beancount/reports/query.py +++ b/conservancy_beancount/reports/query.py @@ -213,6 +213,15 @@ class BQLShell(bc_query_shell.BQLShell): self.env_postings = FilterPostingsEnvironment() self.env_targets = TargetsEnvironment() self.ods = QueryODS(rt_wrapper) + self.last_line_parsed = '' + + def run_parser( + self, + line: str, + default_close_date: Optional[datetime.datetime]=None, + ) -> None: + self.last_line_parsed = line + super().run_parser(line, default_close_date) def on_Select(self, statement: QueryStatement) -> None: output_format: str = self.vars['format'] @@ -265,7 +274,7 @@ class BQLShell(bc_query_shell.BQLShell): ) def _render_ods(self, statement: QueryStatement, row_types: RowTypes, rows: Rows) -> None: - self.ods.write_query(statement, row_types, rows) + self.ods.write_query(statement, row_types, rows, self.last_line_parsed) logger.info( "%s rows of results saved in sheet %s", len(rows), @@ -400,7 +409,13 @@ class QueryODS(core.BaseODS[NamedTuple, None]): else: yield self._metadata_cell - def write_query(self, statement: QueryStatement, row_types: RowTypes, rows: Rows) -> None: + def write_query( + self, + statement: QueryStatement, + row_types: RowTypes, + rows: Rows, + query_string: Optional[str]=None, + ) -> None: if self.is_empty(): self.sheet.setAttribute('name', "Query 1") else: @@ -419,6 +434,8 @@ class QueryODS(core.BaseODS[NamedTuple, None]): for name, _ in row_types )) self.lock_first_row() + if query_string: + self.add_annotation(query_string, parent=self.sheet.lastChild.firstChild) cell_funcs = list(self._cell_types(statement, row_types)) for row in rows: self.add_row(*( @@ -576,7 +593,6 @@ def main(arglist: Optional[Sequence[str]]=None, if not shell.ods.is_empty(): shell.ods.set_common_properties(config.books_repo()) - shell.ods.set_custom_property('BeanQuery', query or '') if args.output_file is None: out_dir_path = config.repository_path() or Path() args.output_file = out_dir_path / 'QueryResults_{}.ods'.format(