Changeset - 45bc99e9acc4
[Not reviewed]
0 2 0
Ben Sturmfels (bsturmfels) - 2 months ago 2024-07-18 11:48:28
ben@sturm.com.au
Add colorama dependency

Used by statement reconciler.
2 files changed with 1 insertions and 1 deletions:
0 comments (0 inline, 0 general)
conservancy_beancount/reconcile/helper.py
Show inline comments
 
"""Tool to help identify unreconciled postings.
 

	
 
Run like this:
 

	
 
  python conservancy_beancount/reconcile/helper.py \
 
    --beancount-file=$HOME/conservancy/beancount/books/2021.beancount \
 
    --prev-end-date=2021-05-13 --cur-end-date=2021-12-31 \
 
    --account="Liabilities:CreditCard:AMEX"
 

	
 
In the spirit of bc-reconcile-helper.plx (the original Perl code)
 

	
 
Not implemented:
 
 - --report-group-regex
 
 - git branch selection from bean-query-goofy-daemon.plx
 

	
 
"""
 
import argparse
 
import csv
 
from dateutil.relativedelta import relativedelta
 
import datetime
 
import decimal
 
import io
 
import sys
 
import tempfile
 
import textwrap
 
import typing
 
from typing import List
 
import os
 

	
 
from beancount import loader
 
from beancount.query.query import run_query
 

	
 

	
 
def end_of_month(date: datetime.date) -> datetime.date:
 
    """Given a date, return the last day of the month."""
 
    # Using 'day' replaces, rather than adds.
 
    return date + relativedelta(day=31)
 

	
 

	
 
def format_record_for_grep(row: typing.List, homedir: str) -> typing.List:
 
    """Return a line in a grep-style.
 

	
 
    This is so the line can be fed into Emacs grep-mode for quickly jumping to
 
    the relevant lines in the books.
 
    """
 
    file = row[0].replace(homedir, '~')
 
    return [f'{file}:{row[1]}:'] + row[2:]
 

	
 

	
 
def max_column_widths(rows: List) -> List[int]:
 
    """Return the max width for each column in a table of data."""
 
    if not rows:
 
        return []
 
    else:
 
        maxes = [0] * len(rows[0])
 
        for row in rows:
 
            for i, val in enumerate(row):
 
                length = len(str(val))
 
                maxes[i] = max(maxes[i], length)
 
        return maxes
 

	
 

	
 
def tabulate(rows: List, headers: List = None) -> str:
setup.cfg
Show inline comments
 
[metadata]
 
name = conservancy_beancount
 
version = 1.19.8
 
author = Software Freedom Conservancy
 
author_email = info@sfconservancy.org
 
description = Plugin, library, and reports for reading Conservancy’s books
 
license = AGPLv3-or-later WITH Beancount-Plugin-Additional-Permission-1.0
 
license_files =
 
  LICENSE.txt
 
  AGPLv3.txt
 
long_description = file: README.rst
 
long_description_content_type = text/x-rst; charset=UTF-8
 
project_urls =
 
  Source = %(url)s
 
url = https://k.sfconservancy.org/NPO-Accounting/conservancy_beancount
 

	
 
[bdist_wheel]
 
universal = 1
 

	
 
[mypy]
 
disallow_any_unimported = False
 
disallow_untyped_calls = False
 
disallow_untyped_defs = True
 
show_error_codes = True
 
strict_equality = True
 
warn_redundant_casts = True
 
warn_return_any = True
 
warn_unreachable = True
 
warn_unused_configs = True
 

	
 
[options]
 
include_package_data = True
 
install_requires =
 
  babel>=2.6
 
  beancount>=2.2
 
  colorama
 
  GitPython>=2.0
 
  odfpy>=1.4.0,!=1.4.1
 
  pdfminer.six>=20200101
 
  python-dateutil>=2.7
 
  PyYAML>=3.0
 
  regex
 
  rt>=2.0,<3.0
 
  thefuzz
 
packages = find:
 
python_requires = >=3.6
 

	
 
[options.extras_require]
 
test =
 
  mypy>=0.770
 
  pytest>=3.0
 
  pytest-mypy
 
  types-requests
 
  types-python-dateutil
 
  types-setuptools
 
  types-PyYAML
 

	
 
[options.entry_points]
 
console_scripts =
 
  accrual-report = conservancy_beancount.reports.accrual:entry_point
 
  assemble-audit-reports = conservancy_beancount.tools.audit_report:entry_point
 
  balance-sheet-report = conservancy_beancount.reports.balance_sheet:entry_point
 
  budget-report = conservancy_beancount.reports.budget:entry_point
 
  bean-sort = conservancy_beancount.tools.sort_entries:entry_point
 
  extract-odf-links = conservancy_beancount.tools.extract_odf_links:entry_point
 
  fund-report = conservancy_beancount.reports.fund:entry_point
 
  ledger-report = conservancy_beancount.reports.ledger:entry_point
 
  opening-balances = conservancy_beancount.tools.opening_balances:entry_point
 
  pdfform-extract = conservancy_beancount.pdfforms.extract:entry_point
 
  pdfform-extract-irs990scheduleA = conservancy_beancount.pdfforms.extract.irs990scheduleA:entry_point
 
  pdfform-fill = conservancy_beancount.pdfforms.fill:entry_point
 
  query-report = conservancy_beancount.reports.query:entry_point
 
  reconcile-paypal = conservancy_beancount.reconcile.paypal:entry_point
 
  reconcile-statement = conservancy_beancount.reconcile.statement:entry_point
 
  split-ods-links = conservancy_beancount.tools.split_ods_links:entry_point
 
  statement-reconciler = conservancy_beancount.reconcile.statement_reconciler:entry_point
 
  reconcile-helper = conservancy_beancount.reconcile.helper:entry_point
 

	
 
[options.package_data]
 
* = py.typed
 

	
 
[options.packages.find]
 
exclude =
 
  tests
0 comments (0 inline, 0 general)