epogrebnyak / abacus

A small yet valid double-entry accounting system in Python and command line.
https://epogrebnyak.github.io/abacus/
GNU General Public License v3.0
59 stars 4 forks source link

Три проблемы с Typer #77

Open epogrebnyak opened 10 months ago

epogrebnyak commented 10 months ago
  1. Typer не дает сделать ключ с двумя значениями, как например --debit ar 100. Текущее решение: сделана вставка Click в приложенте Typer.

  2. Вставку с Click нельзя повесить на команду второго уровня типа bx ledger post. Текущее решение - повесили команду Click как bx post.

  3. Даже вставку Click первого уровня нельзя тестировать с CliRunner, он падает: https://github.com/tiangolo/typer/discussions/732. Текущее решение: тестировать именно эту команду с через subprocess.call, что делает тесты более кривыми.

epogrebnyak commented 10 months ago

Сейчас внедрено решение по 1, 2 и 3, но решение по 3 выглядит наиболее громоздким. Возможно, если решить 1, по и тестирование в 3 будет единообразным.

s111d commented 10 months ago

python mult.py --deposit ru 100

The amount of 100 (ru) to be added

s111d commented 10 months ago
from typing import Tuple                                                                                                         

import typer
from typing_extensions import Annotated

def main(deposit: Annotated[Tuple[str, int], typer.Option()] = (None, None)):
    currency, value = deposit
    if not value:
        print("No value provided")
        raise typer.Abort()
    print(f"The amount of {value} ({currency}) to be added")

if __name__ == "__main__":
    typer.run(main)
s111d commented 10 months ago

FYI: https://typer.tiangolo.com/tutorial/multiple-values/options-with-multiple-values/ https://typer.tiangolo.com/tutorial/multiple-values/arguments-with-multiple-values/

epogrebnyak commented 10 months ago

Проблема в Typer начинается, когда мы несколько таких ключей делаем:

в тестах есть

bx post --debit ar 120 --credit sales 100 --credit vat 20

Реализация в click:

https://github.com/epogrebnyak/abacus/blob/main/abacus%2Ftyper_cli%2Fpost.py#L34-L36

На типе list[tuple[str, str]] Typer валится

epogrebnyak commented 10 months ago

https://github.com/epogrebnyak/abacus/blob/main/tests%2Ftest_typer_cli.py#L125-L134

Вот тест который на Typer не получается сделать