Ejemplo n.º 1
0
def test_execute_query(example_ledger):
    query_shell = QueryShell(example_ledger)

    assert query_shell.execute_query("help exit") == (
        QueryShell.noop.__doc__ + "\n",
        None,
        None,
    )

    assert query_shell.execute_query("help")[1:] == (None, None)

    assert query_shell.execute_query("balances")[1:] == query.run_query(
        query_shell.entries, query_shell.options_map, "balances")
Ejemplo n.º 2
0
def test_execute_query(example_ledger):
    query_shell = QueryShell(example_ledger)

    assert query_shell.execute_query('help exit') == \
        (QueryShell.noop.__doc__ + '\n', None, None)

    assert query_shell.execute_query('help')[1:] == \
        (None, None)

    assert query_shell.execute_query('balances', add_to_history=True)[1:] == \
        query.run_query(query_shell.entries, query_shell.options_map,
                        'balances')

    assert query_shell.get_history(1) == ['balances']
Ejemplo n.º 3
0
    def __init__(self, path):
        #: The path to the main Beancount file.
        self.beancount_file_path = path
        self._is_encrypted = is_encrypted_file(path)
        self._filters = {
            'account': AccountFilter(),
            'from': FromFilter(),
            'payee': PayeeFilter(),
            'tag': TagFilter(),
            'time': TimeFilter(),
        }

        #: An :class:`AttributesModule` instance.
        self.attributes = AttributesModule(self)

        #: A :class:`.BudgetModule` instance.
        self.budgets = BudgetModule(self)

        #: A :class:`.ChartModule` instance.
        self.charts = ChartModule(self)

        #: A :class:`.ExtensionModule` instance.
        self.extensions = ExtensionModule(self)

        #: A :class:`.FileModule` instance.
        self.file = FileModule(self)

        #: A :class:`.IngestModule` instance.
        self.ingest = IngestModule(self)

        #: A :class:`.FavaMisc` instance.
        self.misc = FavaMisc(self)

        #: A :class:`.QueryShell` instance.
        self.query_shell = QueryShell(self)

        self._watcher = Watcher()

        #: List of all (unfiltered) entries.
        self.all_entries = None

        #: Dict of list of all (unfiltered) entries by type.
        self.all_entries_by_type = None

        #: A list of all errors reported by Beancount.
        self.errors = None

        #: A Beancount options map.
        self.options = None

        #: A Namedtuple containing the names of the five base accounts.
        self.account_types = None

        #: A dict containing information about the accounts.
        self.accounts = _AccountDict()

        #: A dict with all of Fava's option values.
        self.fava_options = None

        self.load_file()
Ejemplo n.º 4
0
    def __init__(self, path: str) -> None:
        #: The path to the main Beancount file.
        self.beancount_file_path = path
        self._is_encrypted = is_encrypted_file(path)

        #: An :class:`AttributesModule` instance.
        self.attributes = AttributesModule(self)

        #: A :class:`.BudgetModule` instance.
        self.budgets = BudgetModule(self)

        #: A :class:`.ChartModule` instance.
        self.charts = ChartModule(self)

        #: A :class:`.ExtensionModule` instance.
        self.extensions = ExtensionModule(self)

        #: A :class:`.FileModule` instance.
        self.file = FileModule(self)

        #: A :class:`.IngestModule` instance.
        self.ingest = IngestModule(self)

        #: A :class:`.FavaMisc` instance.
        self.misc = FavaMisc(self)

        #: A :class:`.DecimalFormatModule` instance.
        self.format_decimal = DecimalFormatModule(self)

        #: A :class:`.QueryShell` instance.
        self.query_shell = QueryShell(self)

        self._watcher = Watcher()

        #: List of all (unfiltered) entries.
        self.all_entries = []

        #: Dict of list of all (unfiltered) entries by type.
        self.all_entries_by_type = group_entries_by_type([])

        #: A list of all errors reported by Beancount.
        self.errors: list[BeancountError] = []

        #: A Beancount options map.
        self.options: BeancountOptions = OPTIONS_DEFAULTS

        #: A dict containing information about the accounts.
        self.accounts = AccountDict()

        #: A dict with commodity names (from the 'name' metadata)
        self.commodity_names: dict[str, str] = {}

        #: A dict with all of Fava's option values.
        self.fava_options: FavaOptions = FavaOptions()

        self._date_first: datetime.date | None = None
        self._date_last: datetime.date | None = None

        self.load_file()
Ejemplo n.º 5
0
    def __init__(self, path: str) -> None:
        #: The path to the main Beancount file.
        self.beancount_file_path = path
        self._is_encrypted = is_encrypted_file(path)

        #: An :class:`AttributesModule` instance.
        self.attributes = AttributesModule(self)

        #: A :class:`.BudgetModule` instance.
        self.budgets = BudgetModule(self)

        #: A :class:`.ChartModule` instance.
        self.charts = ChartModule(self)

        #: A :class:`.ExtensionModule` instance.
        self.extensions = ExtensionModule(self)

        #: A :class:`.FileModule` instance.
        self.file = FileModule(self)

        #: A :class:`.IngestModule` instance.
        self.ingest = IngestModule(self)

        #: A :class:`.FavaMisc` instance.
        self.misc = FavaMisc(self)

        #: A :class:`.DecimalFormatModule` instance.
        self.format_decimal = DecimalFormatModule(self)

        #: A :class:`.QueryShell` instance.
        self.query_shell = QueryShell(self)

        self._watcher = Watcher()

        #: List of all (unfiltered) entries.
        self.all_entries = []

        #: Dict of list of all (unfiltered) entries by type.
        self.all_entries_by_type: Dict[Type[Directive], Entries] = {}

        #: A list of all errors reported by Beancount.
        self.errors: List[BeancountError] = []

        #: A Beancount options map.
        self.options: Dict[str, Any] = {}

        #: A dict containing information about the accounts.
        self.accounts = AccountDict()

        #: A dict containing information about the commodities
        self.commodities: Dict[str, Commodity] = {}

        #: A dict with all of Fava's option values.
        self.fava_options: FavaOptions = {}

        self.load_file()
Ejemplo n.º 6
0
def test_query_to_file(example_ledger):
    query_shell = QueryShell(example_ledger)

    name, data = query_shell.query_to_file('balances', 'csv')
    assert name == 'query_result'
    csv = os.path.join(os.path.dirname(__file__), 'data/example-balances.csv')
    with open(csv, 'rb') as file:
        assert data.getvalue() == file.read()

    with pytest.raises(FavaAPIException):
        query_shell.query_to_file('select sdf', 'csv')

    with pytest.raises(FavaAPIException):
        query_shell.query_to_file('run testsetest', 'csv')
Ejemplo n.º 7
0
def test_query_to_file(example_ledger):
    query_shell = QueryShell(example_ledger)

    name, data = query_shell.query_to_file("balances", "csv")
    assert name == "query_result"
    csv = data_file("example-balances.csv")
    with open(csv, "rb") as file:
        assert data.getvalue() == file.read()

    with pytest.raises(FavaAPIException):
        query_shell.query_to_file("select sdf", "csv")

    with pytest.raises(FavaAPIException):
        query_shell.query_to_file("run testsetest", "csv")
Ejemplo n.º 8
0
def test_execute_query(example_ledger):
    query_shell = QueryShell(example_ledger)

    assert query_shell.execute_query('help exit') == \
        (QueryShell.noop.__doc__ + '\n', None, None)

    assert query_shell.execute_query('help')[1:] == \
        (None, None)

    assert query_shell.execute_query('balances', add_to_history=True)[1:] == \
        query.run_query(query_shell.entries, query_shell.options_map,
                        'balances')

    assert query_shell.get_history(1) == ['balances']
Ejemplo n.º 9
0
def test_query_to_file(example_ledger):
    query_shell = QueryShell(example_ledger)

    name, data = query_shell.query_to_file('balances', 'csv')
    assert name == 'query_result'
    csv = data_file('example-balances.csv')
    with open(csv, 'rb') as file:
        assert data.getvalue() == file.read()

    with pytest.raises(FavaAPIException):
        query_shell.query_to_file('select sdf', 'csv')

    with pytest.raises(FavaAPIException):
        query_shell.query_to_file('run testsetest', 'csv')
Ejemplo n.º 10
0
    def __init__(self, path):
        s3_file_backend = S3FileBackend(self, path)

        #: The path to the main Beancount file.
        self.beancount_file_path = path
        if s3_file_backend.active:
            self.beancount_file_path = s3_file_backend.beancount_file_path

        self._is_encrypted = is_encrypted_file(path)
        self._filters = {}

        #: An :class:`AttributesModule` instance.
        self.attributes = AttributesModule(self)

        #: A :class:`.BudgetModule` instance.
        self.budgets = BudgetModule(self)

        #: A :class:`.ChartModule` instance.
        self.charts = ChartModule(self)

        #: A :class:`.ExtensionModule` instance.
        self.extensions = ExtensionModule(self)

        #: A :class:`.FileModule` instance.
        self.file = FileModule(self)
        if s3_file_backend.active:
            self.file = s3_file_backend

        #: A :class:`.IngestModule` instance.
        self.ingest = IngestModule(self)

        #: A :class:`.FavaMisc` instance.
        self.misc = FavaMisc(self)

        #: A :class:`.DecimalFormatModule` instance.
        self.format_decimal = DecimalFormatModule(self)

        #: A :class:`.QueryShell` instance.
        self.query_shell = QueryShell(self)

        self._watcher = Watcher()

        #: List of all (unfiltered) entries.
        self.all_entries = None

        #: Dict of list of all (unfiltered) entries by type.
        self.all_entries_by_type = None

        #: A list of all errors reported by Beancount.
        self.errors = None

        #: A Beancount options map.
        self.options = None

        #: A Namedtuple containing the names of the five base accounts.
        self.account_types = None

        #: A dict containing information about the accounts.
        self.accounts = _AccountDict()

        #: A dict with all of Fava's option values.
        self.fava_options = None

        self.load_file()