def test_filter_by_expr1(self): filtered_entries = qx.filter_entries( self.compile(""" SELECT date, type FROM NOT (type = 'transaction' AND (year(date) = 2012 OR year(date) = 2013)); """).c_from, self.entries, self.options_map, self.context) self.assertEqualEntries( """ 2010-01-01 open Assets:Bank:Checking 2010-01-01 open Assets:Bank:Savings 2010-01-01 open Expenses:Restaurant 2010-01-01 open Assets:ForeignBank:Checking 2010-01-01 * "Dinner with Cero" Assets:Bank:Checking 100.00 USD Expenses:Restaurant -100.00 USD 2011-01-01 * "Dinner with Uno" Assets:Bank:Checking 101.00 USD Expenses:Restaurant -101.00 USD 2014-04-04 * "Dinner with Quatro" Assets:Bank:Checking 104.00 USD Expenses:Restaurant -104.00 USD """, filtered_entries)
def test_filter_open_dated(self): filtered_entries = qx.filter_entries( self.compile(""" SELECT date, type FROM OPEN ON 2013-01-01; """).c_from, self.entries, self.options_map, self.context) self.assertEqualEntries( """ 2010-01-01 open Assets:Bank:Checking 2010-01-01 open Assets:Bank:Savings 2010-01-01 open Expenses:Restaurant 2010-01-01 open Assets:ForeignBank:Checking 2012-12-31 S "Opening balance for 'Assets:Bank:Checking' (Summarization)" Assets:Bank:Checking 303.00 USD Equity:Opening-Balances -303.00 USD 2012-12-31 S "Opening balance for 'Equity:Earnings:Previous' (Summarization)" Equity:Earnings:Previous -303.00 USD Equity:Opening-Balances 303.00 USD 2013-03-03 * "Dinner with Tres" Assets:Bank:Checking 103.00 USD Expenses:Restaurant -103.00 USD 2013-10-10 * "International Transfer" Assets:Bank:Checking -50.00 USD ; -50.00 USD Assets:ForeignBank:Checking -60.00 CAD @ 1.20 USD ; -72.00 USD 2014-04-04 * "Dinner with Quatro" Assets:Bank:Checking 104.00 USD Expenses:Restaurant -104.00 USD """, filtered_entries)
def test_filter_by_expr2(self): filtered_entries = qx.filter_entries( self.compile(""" SELECT date, type FROM date < 2012-06-01; """).c_from, self.entries, self.options_map, self.context) self.assertEqualEntries( """ 2010-01-01 open Assets:Bank:Checking 2010-01-01 open Assets:Bank:Savings 2010-01-01 open Expenses:Restaurant 2010-01-01 open Assets:ForeignBank:Checking 2010-01-01 * "Dinner with Cero" Assets:Bank:Checking 100.00 USD Expenses:Restaurant -100.00 USD 2011-01-01 * "Dinner with Uno" Assets:Bank:Checking 101.00 USD Expenses:Restaurant -101.00 USD 2012-02-02 * "Dinner with Dos" Assets:Bank:Checking 102.00 USD Expenses:Restaurant -102.00 USD """, filtered_entries)
def get_matching_entries(entries, options_map, query): query_text = 'SELECT * ' + query parser = query_parser.Parser() parsed_query = parser.parse(query_text) c_from = None if parsed_query.from_clause: c_from = query_compile.compile_from(parsed_query.from_clause, query_env.FilterEntriesEnvironment()) c_where = None if parsed_query.where_clause: c_where = query_compile.compile_expression(parsed_query.where_clause, query_env.FilterPostingsEnvironment()) # Figure out if we need to compute balance. balance = None if c_where and query_execute.uses_balance_column(c_where): balance = inventory.Inventory() context = query_execute.RowContext() context.balance = balance # Initialize some global properties for use by some of the accessors. context.options_map = options_map context.account_types = options.get_account_types(options_map) context.open_close_map = getters.get_account_open_close(entries) #context.commodity_map = getters.get_commodity_map(entries) context.price_map = prices.build_price_map(entries) if c_from is not None: filtered_entries = query_execute.filter_entries(c_from, entries, options_map) else: filtered_entries = entries return filtered_entries
def test_filter_empty_from(self): # Check that no filter outputs the very same thing. filtered_entries = qx.filter_entries( self.compile(""" SELECT * ; """).c_from, self.entries, self.options_map, self.context) self.assertEqualEntries(self.entries, filtered_entries)
def test_filter_by_year(self): filtered_entries = qx.filter_entries(self.compile(""" SELECT date, type FROM year(date) = 2012; """).c_from, self.entries, self.options_map) self.assertEqualEntries(""" 2012-02-02 * "Dinner with Dos" Assets:Bank:Checking 102.00 USD Expenses:Restaurant -102.00 USD """, filtered_entries)
def test_filter_clear(self): filtered_entries = qx.filter_entries(self.compile(""" SELECT date, type FROM CLEAR; """).c_from, self.entries, self.options_map) self.assertEqualEntries(self.INPUT + textwrap.dedent(""" 2014-04-04 T "Transfer balance for 'Expenses:Restaurant' (Transfer balance)" Expenses:Restaurant 510.00 USD Equity:Earnings:Current -510.00 USD """), filtered_entries)
def test_filter_close_undated(self): filtered_entries = qx.filter_entries(self.compile(""" SELECT date, type FROM CLOSE; """).c_from, self.entries, self.options_map) self.assertEqualEntries(self.INPUT + textwrap.dedent(""" 2014-04-04 C "Conversion for (-50.00 USD, -60.00 CAD)" Equity:Conversions:Current 50.00 USD @ 0 NOTHING Equity:Conversions:Current 60.00 CAD @ 0 NOTHING """), filtered_entries)
def test_filter_close_dated(self): filtered_entries = qx.filter_entries( self.compile(""" SELECT date, type FROM CLOSE ON 2013-06-01; """).c_from, self.entries, self.options_map, self.context) self.assertEqualEntries(self.entries[:-2], filtered_entries)
def _filter(self, entries, options): return query_execute.filter_entries(self.c_from, entries, options)