beanhub-cli 1.1.0__tar.gz → 1.1.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/PKG-INFO +15 -2
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/README.md +11 -0
- beanhub_cli-1.1.2/beanhub_cli/import_cli.py +200 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/pyproject.toml +4 -2
- beanhub_cli-1.1.0/beanhub_cli/import_cli.py +0 -103
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/LICENSE +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/__init__.py +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/aliase.py +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/cli.py +1 -1
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/environment.py +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/format.py +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/__init__.py +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/__init__.py +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/constants.py +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/data/sample_forms_doc.yaml +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/deps.py +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/helpers.py +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/main.py +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/routes.py +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/settings.py +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/js/beanhub-web-react-0.1.6.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/js/beanhub-web-react-0.1.6.js.map +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/LICENSE +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/css/bootstrap-datepicker.css +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/css/bootstrap-datepicker.css.map +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/css/bootstrap-datepicker.min.css +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/js/bootstrap-datepicker.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/js/bootstrap-datepicker.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker-en-CA.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.ar-DZ.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.ar-tn.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.ar.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.az.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.bg.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.bm.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.bn.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.br.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.bs.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.ca.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.cs.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.cy.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.da.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.de.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.el.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.en-AU.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.en-CA.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.en-GB.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.en-IE.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.en-NZ.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.en-US.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.en-ZA.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.eo.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.es.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.et.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.eu.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.fa.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.fi.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.fo.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.fr-CH.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.fr.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.gl.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.he.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.hi.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.hr.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.hu.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.hy.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.id.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.is.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.it-CH.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.it.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.ja.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.ka.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.kh.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.kk.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.km.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.ko.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.kr.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.lt.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.lv.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.me.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.mk.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.mn.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.mr.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.ms.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.nl-BE.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.nl.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.no.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.oc.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.pl.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.pt-BR.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.pt.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.ro.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.rs-latin.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.rs.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.ru.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.si.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.sk.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.sl.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.sq.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.sr-latin.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.sr.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.sv.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.sw.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.ta.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.tg.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.th.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.tk.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.tr.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.uk.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.uz-cyrl.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.uz-latn.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.vi.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.zh-CN.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.zh-TW.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/fontawesome6/LICENSE.txt +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/fontawesome6/css/all.min.css +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/fontawesome6/webfonts/fa-brands-400.ttf +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/fontawesome6/webfonts/fa-brands-400.woff2 +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/fontawesome6/webfonts/fa-regular-400.ttf +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/fontawesome6/webfonts/fa-regular-400.woff2 +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/fontawesome6/webfonts/fa-solid-900.ttf +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/fontawesome6/webfonts/fa-solid-900.woff2 +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/fontawesome6/webfonts/fa-v4compatibility.ttf +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/fontawesome6/webfonts/fa-v4compatibility.woff2 +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/LICENSE.md +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/css/select2.css +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/css/select2.min.css +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/af.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/ar.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/az.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/bg.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/bn.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/bs.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/ca.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/cs.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/da.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/de.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/dsb.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/el.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/en.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/eo.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/es.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/et.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/eu.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/fa.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/fi.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/fr.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/gl.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/he.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/hi.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/hr.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/hsb.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/hu.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/hy.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/id.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/is.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/it.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/ja.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/ka.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/km.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/ko.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/lt.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/lv.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/mk.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/ms.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/nb.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/ne.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/nl.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/pa.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/pl.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/ps.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/pt-BR.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/pt.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/ro.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/ru.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/sk.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/sl.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/sq.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/sr-Cyrl.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/sr.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/sv.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/te.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/th.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/tk.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/tr.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/uk.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/vi.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/zh-CN.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/zh-TW.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/select2.full.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/select2.full.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/select2.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/vendor/select2/js/select2.min.js +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/templates/errors.html +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/templates/flash_messages.html +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/templates/footer.html +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/templates/form.html +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/templates/home.html +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/templates/layout.html +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/cli.py +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/main.py +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/validator.py +0 -0
- {beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/main.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: beanhub-cli
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.2
|
|
4
4
|
Summary: Command line tools for BeanHub
|
|
5
5
|
License: MIT
|
|
6
6
|
Author: Fang-Pen Lin
|
|
@@ -12,8 +12,10 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
12
12
|
Classifier: Programming Language :: Python :: 3.11
|
|
13
13
|
Classifier: Programming Language :: Python :: 3.12
|
|
14
14
|
Requires-Dist: beancount-black (>=1.0.1,<2.0.0)
|
|
15
|
+
Requires-Dist: beancount-parser (>=1.2.3,<1.3.0)
|
|
16
|
+
Requires-Dist: beanhub-extract (>=0.0.7,<0.1.0)
|
|
15
17
|
Requires-Dist: beanhub-forms (>=0.1.3,<0.2.0)
|
|
16
|
-
Requires-Dist: beanhub-import (>=0.
|
|
18
|
+
Requires-Dist: beanhub-import (>=0.1.3,<0.2.0)
|
|
17
19
|
Requires-Dist: click (>=8.1.7,<9.0.0)
|
|
18
20
|
Requires-Dist: fastapi (>=0.98.0,<1.0.0)
|
|
19
21
|
Requires-Dist: jinja2 (>=3.1.2,<4.0.0)
|
|
@@ -31,6 +33,7 @@ Command line tools for BeanHub or Beancount users.
|
|
|
31
33
|
## Features
|
|
32
34
|
|
|
33
35
|
- **Local BeanHub Form web app** - You can run a [BeanHub Form](https://beanhub.io/blog/2023/07/31/automating-beancount-data-input-with-beanhub-custom-forms/) web app locally to try out your forms
|
|
36
|
+
- **Import** - Simple yet powerful [beanhub-import](https://github.com/LaunchPlatform/beanhub-import) allows you to define importing rules in YAML to extract transactions from CSV files and generate Beancount transactions automatically
|
|
34
37
|
- **Formatter** - Advanced Beancount file formatter based on top of [beancount-black](https://github.com/LaunchPlatform/beancount-black)
|
|
35
38
|
- **Basic Beancount file manipulations** - Effortless Beancount account name renaming and other basic manipulations (coming soon)
|
|
36
39
|
- **Doesn't require a BeanHub account** - While some features in the future will require a BeanHub repository to operate, but we make most of them usable even without a BeanHub account
|
|
@@ -56,6 +59,16 @@ pip install beanhub-cli
|
|
|
56
59
|
```
|
|
57
60
|
## Usage
|
|
58
61
|
|
|
62
|
+
## BeanHub Import
|
|
63
|
+
|
|
64
|
+
To run BeanHub's import feature locally, you can define your import rules at `.beanhub/imports.yaml` and then run the following command in your Beancount folder:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
bh import
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
To learn more about the import document and how the BeanHub import feature works, you can read the README of [beanhub-import](https://github.com/LaunchPlatform/beanhub-import).
|
|
71
|
+
|
|
59
72
|
### BeanHub Forms web app
|
|
60
73
|
|
|
61
74
|
To make it much easier for BeanHub users to test their BeanHub Forms locally, we added a simple local web app for that in beanhub-cli.
|
|
@@ -4,6 +4,7 @@ Command line tools for BeanHub or Beancount users.
|
|
|
4
4
|
## Features
|
|
5
5
|
|
|
6
6
|
- **Local BeanHub Form web app** - You can run a [BeanHub Form](https://beanhub.io/blog/2023/07/31/automating-beancount-data-input-with-beanhub-custom-forms/) web app locally to try out your forms
|
|
7
|
+
- **Import** - Simple yet powerful [beanhub-import](https://github.com/LaunchPlatform/beanhub-import) allows you to define importing rules in YAML to extract transactions from CSV files and generate Beancount transactions automatically
|
|
7
8
|
- **Formatter** - Advanced Beancount file formatter based on top of [beancount-black](https://github.com/LaunchPlatform/beancount-black)
|
|
8
9
|
- **Basic Beancount file manipulations** - Effortless Beancount account name renaming and other basic manipulations (coming soon)
|
|
9
10
|
- **Doesn't require a BeanHub account** - While some features in the future will require a BeanHub repository to operate, but we make most of them usable even without a BeanHub account
|
|
@@ -29,6 +30,16 @@ pip install beanhub-cli
|
|
|
29
30
|
```
|
|
30
31
|
## Usage
|
|
31
32
|
|
|
33
|
+
## BeanHub Import
|
|
34
|
+
|
|
35
|
+
To run BeanHub's import feature locally, you can define your import rules at `.beanhub/imports.yaml` and then run the following command in your Beancount folder:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
bh import
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
To learn more about the import document and how the BeanHub import feature works, you can read the README of [beanhub-import](https://github.com/LaunchPlatform/beanhub-import).
|
|
42
|
+
|
|
32
43
|
### BeanHub Forms web app
|
|
33
44
|
|
|
34
45
|
To make it much easier for BeanHub users to test their BeanHub Forms locally, we added a simple local web app for that in beanhub-cli.
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import pathlib
|
|
2
|
+
import sys
|
|
3
|
+
|
|
4
|
+
import click
|
|
5
|
+
import rich
|
|
6
|
+
import yaml
|
|
7
|
+
from beancount_black.formatter import Formatter
|
|
8
|
+
from beancount_parser.parser import make_parser
|
|
9
|
+
from beanhub_extract.data_types import Transaction
|
|
10
|
+
from beanhub_extract.utils import strip_base_path
|
|
11
|
+
from beanhub_import.data_types import GeneratedTransaction
|
|
12
|
+
from beanhub_import.data_types import ImportDoc
|
|
13
|
+
from beanhub_import.post_processor import apply_change_set
|
|
14
|
+
from beanhub_import.post_processor import compute_changes
|
|
15
|
+
from beanhub_import.post_processor import extract_existing_transactions
|
|
16
|
+
from beanhub_import.post_processor import txn_to_text
|
|
17
|
+
from beanhub_import.processor import process_imports
|
|
18
|
+
from rich import box
|
|
19
|
+
from rich.markup import escape
|
|
20
|
+
from rich.padding import Padding
|
|
21
|
+
from rich.table import Table
|
|
22
|
+
|
|
23
|
+
from .cli import cli
|
|
24
|
+
from .environment import Environment
|
|
25
|
+
from .environment import pass_env
|
|
26
|
+
|
|
27
|
+
IMPORT_DOC_FILE = pathlib.Path(".beanhub") / "imports.yaml"
|
|
28
|
+
TABLE_HEADER_STYLE = "yellow"
|
|
29
|
+
TABLE_COLUMN_STYLE = "cyan"
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
@cli.command(
|
|
33
|
+
name="import",
|
|
34
|
+
help="Import data into Beancount files based on the beanhub-import config file",
|
|
35
|
+
)
|
|
36
|
+
@click.option(
|
|
37
|
+
"-c",
|
|
38
|
+
"--config",
|
|
39
|
+
type=click.Path(exists=True, dir_okay=False),
|
|
40
|
+
default=".beanhub/imports.yaml",
|
|
41
|
+
help="The path to import config file",
|
|
42
|
+
)
|
|
43
|
+
@click.option(
|
|
44
|
+
"-w",
|
|
45
|
+
"--workdir",
|
|
46
|
+
type=click.Path(exists=True, dir_okay=True, file_okay=False),
|
|
47
|
+
default=str(pathlib.Path.cwd()),
|
|
48
|
+
help="The beanhub project path to work on",
|
|
49
|
+
)
|
|
50
|
+
@click.option(
|
|
51
|
+
"-b",
|
|
52
|
+
"--beanfile",
|
|
53
|
+
type=click.Path(exists=True, dir_okay=False, file_okay=True),
|
|
54
|
+
default="main.bean",
|
|
55
|
+
help="The path to main entry beancount file",
|
|
56
|
+
)
|
|
57
|
+
@pass_env
|
|
58
|
+
def main(env: Environment, config: str, workdir: str, beanfile: str):
|
|
59
|
+
config_path = pathlib.Path(config)
|
|
60
|
+
with config_path.open("rt") as fo:
|
|
61
|
+
doc_payload = yaml.safe_load(fo)
|
|
62
|
+
import_doc = ImportDoc.model_validate(doc_payload)
|
|
63
|
+
workdir_path = pathlib.Path(workdir)
|
|
64
|
+
env.logger.info(
|
|
65
|
+
"Loaded import doc from [green]%s[/]",
|
|
66
|
+
config,
|
|
67
|
+
extra={"markup": True, "highlighter": None},
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
generated_txns: list[GeneratedTransaction] = []
|
|
71
|
+
unprocessed_txns: list[Transaction] = []
|
|
72
|
+
for txn in process_imports(import_doc=import_doc, input_dir=workdir_path):
|
|
73
|
+
if isinstance(txn, GeneratedTransaction):
|
|
74
|
+
generated_file_path = (workdir_path / txn.file).resolve()
|
|
75
|
+
env.logger.info(
|
|
76
|
+
"Generated transaction [green]%s[/] to file [green]%s[/]",
|
|
77
|
+
txn.id,
|
|
78
|
+
strip_base_path(workdir_path.resolve(), generated_file_path),
|
|
79
|
+
extra={"markup": True, "highlighter": None},
|
|
80
|
+
)
|
|
81
|
+
generated_txns.append(txn)
|
|
82
|
+
elif isinstance(txn, Transaction):
|
|
83
|
+
env.logger.info(
|
|
84
|
+
"Skipped input transaction at [green]%s[/]:[blue]%s[/]",
|
|
85
|
+
txn.file,
|
|
86
|
+
txn.lineno,
|
|
87
|
+
extra={"markup": True, "highlighter": None},
|
|
88
|
+
)
|
|
89
|
+
unprocessed_txns.append(txn)
|
|
90
|
+
else:
|
|
91
|
+
raise ValueError(f"Unexpected type {type(txn)}")
|
|
92
|
+
env.logger.info("Generated %s transactions", len(generated_txns))
|
|
93
|
+
env.logger.info("Skipped %s transactions", len(unprocessed_txns))
|
|
94
|
+
|
|
95
|
+
beanfile_path = (workdir_path / pathlib.Path(beanfile)).resolve()
|
|
96
|
+
if workdir_path.resolve().absolute() not in beanfile_path.absolute().parents:
|
|
97
|
+
env.logger.error(
|
|
98
|
+
"The provided beanfile path %s is not a sub-path of workdir %s",
|
|
99
|
+
beanfile_path,
|
|
100
|
+
workdir_path,
|
|
101
|
+
)
|
|
102
|
+
sys.exit(-1)
|
|
103
|
+
|
|
104
|
+
env.logger.info(
|
|
105
|
+
"Collecting existing imported transactions from Beancount books ..."
|
|
106
|
+
)
|
|
107
|
+
parser = make_parser()
|
|
108
|
+
existing_txns = list(
|
|
109
|
+
extract_existing_transactions(
|
|
110
|
+
parser=parser,
|
|
111
|
+
bean_file=beanfile_path,
|
|
112
|
+
root_dir=workdir_path,
|
|
113
|
+
)
|
|
114
|
+
)
|
|
115
|
+
env.logger.info(
|
|
116
|
+
"Found %s existing imported transactions in Beancount books", len(existing_txns)
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
formatter = Formatter()
|
|
120
|
+
change_sets = compute_changes(
|
|
121
|
+
generated_txns=generated_txns,
|
|
122
|
+
imported_txns=existing_txns,
|
|
123
|
+
work_dir=workdir_path,
|
|
124
|
+
)
|
|
125
|
+
for target_file, change_set in change_sets.items():
|
|
126
|
+
if not target_file.exists():
|
|
127
|
+
if change_set.remove or change_set.update:
|
|
128
|
+
raise ValueError("Expect new transactions to add only")
|
|
129
|
+
env.logger.info(
|
|
130
|
+
"Create new bean file %s with %s transactions",
|
|
131
|
+
target_file,
|
|
132
|
+
len(change_set.add),
|
|
133
|
+
)
|
|
134
|
+
|
|
135
|
+
bean_content = "\n\n".join(map(txn_to_text, change_set.add))
|
|
136
|
+
new_tree = parser.parse(bean_content)
|
|
137
|
+
else:
|
|
138
|
+
env.logger.info(
|
|
139
|
+
"Applying change sets (add=%s, update=%s, remove=%s) to %s",
|
|
140
|
+
len(change_set.add),
|
|
141
|
+
len(change_set.update),
|
|
142
|
+
len(change_set.remove),
|
|
143
|
+
target_file,
|
|
144
|
+
)
|
|
145
|
+
tree = parser.parse(target_file.read_text())
|
|
146
|
+
new_tree = apply_change_set(tree=tree, change_set=change_set)
|
|
147
|
+
|
|
148
|
+
with target_file.open("wt") as fo:
|
|
149
|
+
formatter.format(new_tree, fo)
|
|
150
|
+
|
|
151
|
+
table = Table(
|
|
152
|
+
title="Generated transactions",
|
|
153
|
+
box=box.SIMPLE,
|
|
154
|
+
header_style=TABLE_HEADER_STYLE,
|
|
155
|
+
expand=True,
|
|
156
|
+
)
|
|
157
|
+
# TODO: add src info
|
|
158
|
+
table.add_column("File", style=TABLE_COLUMN_STYLE)
|
|
159
|
+
table.add_column("Id", style=TABLE_COLUMN_STYLE)
|
|
160
|
+
table.add_column("Source", style=TABLE_COLUMN_STYLE)
|
|
161
|
+
table.add_column("Date", style=TABLE_COLUMN_STYLE)
|
|
162
|
+
table.add_column("Narration", style=TABLE_COLUMN_STYLE)
|
|
163
|
+
for txn in generated_txns:
|
|
164
|
+
table.add_row(
|
|
165
|
+
escape(str(txn.file)),
|
|
166
|
+
str(txn.id),
|
|
167
|
+
escape(str(":".join(txn.sources))),
|
|
168
|
+
escape(str(txn.date)),
|
|
169
|
+
escape(txn.narration),
|
|
170
|
+
)
|
|
171
|
+
rich.print(Padding(table, (1, 0, 0, 4)))
|
|
172
|
+
|
|
173
|
+
table = Table(
|
|
174
|
+
title="Unprocessed transactions",
|
|
175
|
+
box=box.SIMPLE,
|
|
176
|
+
header_style=TABLE_HEADER_STYLE,
|
|
177
|
+
expand=True,
|
|
178
|
+
)
|
|
179
|
+
table.add_column("File", style=TABLE_COLUMN_STYLE)
|
|
180
|
+
table.add_column("Line", style=TABLE_COLUMN_STYLE)
|
|
181
|
+
table.add_column("Extractor", style=TABLE_COLUMN_STYLE)
|
|
182
|
+
table.add_column("Date", style=TABLE_COLUMN_STYLE)
|
|
183
|
+
table.add_column("Desc", style=TABLE_COLUMN_STYLE)
|
|
184
|
+
table.add_column("Bank Desc", style=TABLE_COLUMN_STYLE)
|
|
185
|
+
table.add_column("Amount", style=TABLE_COLUMN_STYLE, justify="right")
|
|
186
|
+
table.add_column("Currency", style=TABLE_COLUMN_STYLE)
|
|
187
|
+
for txn in unprocessed_txns:
|
|
188
|
+
table.add_row(
|
|
189
|
+
escape(txn.file),
|
|
190
|
+
str(txn.lineno),
|
|
191
|
+
escape(str(txn.extractor)),
|
|
192
|
+
escape(str(txn.date)),
|
|
193
|
+
escape(txn.desc),
|
|
194
|
+
escape(txn.bank_desc),
|
|
195
|
+
escape(str(txn.amount)),
|
|
196
|
+
escape(txn.currency),
|
|
197
|
+
)
|
|
198
|
+
rich.print(Padding(table, (1, 0, 0, 4)))
|
|
199
|
+
|
|
200
|
+
env.logger.info("done")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "beanhub-cli"
|
|
3
|
-
version = "1.1.
|
|
3
|
+
version = "1.1.2"
|
|
4
4
|
description = "Command line tools for BeanHub"
|
|
5
5
|
authors = ["Fang-Pen Lin <fangpen@launchplatform.com>"]
|
|
6
6
|
license = "MIT"
|
|
@@ -22,7 +22,9 @@ uvicorn = "^0.23.2"
|
|
|
22
22
|
beanhub-forms = "^0.1.3"
|
|
23
23
|
pydantic-settings = "^2.0.3"
|
|
24
24
|
rich = "^13.6.0"
|
|
25
|
-
beanhub-import = "
|
|
25
|
+
beanhub-import = ">= 0.1.3, <0.2.0"
|
|
26
|
+
beanhub-extract = ">= 0.0.7, <0.1.0"
|
|
27
|
+
beancount-parser = ">= 1.2.3, <1.3.0"
|
|
26
28
|
|
|
27
29
|
[tool.poetry.dev-dependencies]
|
|
28
30
|
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import pathlib
|
|
2
|
-
|
|
3
|
-
import click
|
|
4
|
-
import yaml
|
|
5
|
-
from beancount_black.formatter import Formatter
|
|
6
|
-
from beancount_parser.parser import make_parser
|
|
7
|
-
from beanhub_import.data_types import ImportDoc
|
|
8
|
-
from beanhub_import.post_processor import apply_change_set
|
|
9
|
-
from beanhub_import.post_processor import compute_changes
|
|
10
|
-
from beanhub_import.post_processor import extract_imported_transactions
|
|
11
|
-
from beanhub_import.post_processor import txn_to_text
|
|
12
|
-
from beanhub_import.processor import process_imports
|
|
13
|
-
|
|
14
|
-
from .cli import cli
|
|
15
|
-
from .environment import Environment
|
|
16
|
-
from .environment import pass_env
|
|
17
|
-
|
|
18
|
-
IMPORT_DOC_FILE = pathlib.Path(".beanhub") / "imports.yaml"
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
@cli.command(
|
|
22
|
-
name="import",
|
|
23
|
-
help="Import data into Beancount files based on the beanhub-import config file",
|
|
24
|
-
)
|
|
25
|
-
@click.option(
|
|
26
|
-
"-c",
|
|
27
|
-
"--config",
|
|
28
|
-
type=click.Path(exists=True, dir_okay=False),
|
|
29
|
-
default=".beanhub/imports.yaml",
|
|
30
|
-
help="The path to import config file",
|
|
31
|
-
)
|
|
32
|
-
@click.option(
|
|
33
|
-
"-w",
|
|
34
|
-
"--workdir",
|
|
35
|
-
type=click.Path(exists=True, dir_okay=True, file_okay=False),
|
|
36
|
-
default=str(pathlib.Path.cwd()),
|
|
37
|
-
help="The beanhub project path to work on",
|
|
38
|
-
)
|
|
39
|
-
@click.option(
|
|
40
|
-
"-b",
|
|
41
|
-
"--beanfile",
|
|
42
|
-
type=click.Path(exists=True, dir_okay=False, file_okay=True),
|
|
43
|
-
default="main.bean",
|
|
44
|
-
help="The path to main entry beancount file",
|
|
45
|
-
)
|
|
46
|
-
@pass_env
|
|
47
|
-
def main(env: Environment, config: str, workdir: str, beanfile: str):
|
|
48
|
-
config_path = pathlib.Path(config)
|
|
49
|
-
with config_path.open("rt") as fo:
|
|
50
|
-
doc_payload = yaml.safe_load(fo)
|
|
51
|
-
import_doc = ImportDoc.model_validate(doc_payload)
|
|
52
|
-
workdir_path = pathlib.Path(workdir)
|
|
53
|
-
env.logger.info("Loaded import doc from %s", config)
|
|
54
|
-
|
|
55
|
-
generated_txns = []
|
|
56
|
-
for generated_txn in process_imports(import_doc=import_doc, input_dir=workdir_path):
|
|
57
|
-
env.logger.debug("Generated transaction %s", generated_txn)
|
|
58
|
-
generated_txns.append(generated_txn)
|
|
59
|
-
env.logger.info("Generated %s transactions", len(generated_txns))
|
|
60
|
-
|
|
61
|
-
beanfile_path = pathlib.Path(beanfile)
|
|
62
|
-
|
|
63
|
-
parser = make_parser()
|
|
64
|
-
imported_txns = list(
|
|
65
|
-
extract_imported_transactions(
|
|
66
|
-
parser=parser,
|
|
67
|
-
bean_file=beanfile_path,
|
|
68
|
-
)
|
|
69
|
-
)
|
|
70
|
-
env.logger.info("Found %s existing imported transactions", len(imported_txns))
|
|
71
|
-
|
|
72
|
-
formatter = Formatter()
|
|
73
|
-
change_sets = compute_changes(
|
|
74
|
-
generated_txns=generated_txns,
|
|
75
|
-
imported_txns=imported_txns,
|
|
76
|
-
work_dir=workdir_path,
|
|
77
|
-
)
|
|
78
|
-
for target_file, change_set in change_sets.items():
|
|
79
|
-
if not target_file.exists():
|
|
80
|
-
if change_set.remove or change_set.update:
|
|
81
|
-
raise ValueError("Expect new transactions to add only")
|
|
82
|
-
env.logger.info(
|
|
83
|
-
"Create new bean file %s with %s transactions",
|
|
84
|
-
target_file,
|
|
85
|
-
len(change_set.add),
|
|
86
|
-
)
|
|
87
|
-
|
|
88
|
-
bean_content = "\n\n".join(map(txn_to_text, change_set.add))
|
|
89
|
-
new_tree = parser.parse(bean_content)
|
|
90
|
-
else:
|
|
91
|
-
env.logger.info(
|
|
92
|
-
"Applying change sets (add=%s, update=%s, remove=%s) to %s",
|
|
93
|
-
len(change_set.add),
|
|
94
|
-
len(change_set.update),
|
|
95
|
-
len(change_set.remove),
|
|
96
|
-
target_file,
|
|
97
|
-
)
|
|
98
|
-
tree = parser.parse(target_file.read_text())
|
|
99
|
-
new_tree = apply_change_set(tree=tree, change_set=change_set)
|
|
100
|
-
|
|
101
|
-
with target_file.open("wt") as fo:
|
|
102
|
-
formatter.format(new_tree, fo)
|
|
103
|
-
env.logger.info("done")
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -23,6 +23,7 @@ from .environment import pass_env
|
|
|
23
23
|
@click.version_option(prog_name="beanhub-cli", package_name="beanhub-cli")
|
|
24
24
|
@pass_env
|
|
25
25
|
def cli(env: Environment, log_level: str):
|
|
26
|
+
env.log_level = LogLevel(log_level)
|
|
26
27
|
FORMAT = "%(message)s"
|
|
27
28
|
logging.basicConfig(
|
|
28
29
|
level=LOG_LEVEL_MAP[env.log_level],
|
|
@@ -31,4 +32,3 @@ def cli(env: Environment, log_level: str):
|
|
|
31
32
|
handlers=[RichHandler()],
|
|
32
33
|
force=True,
|
|
33
34
|
)
|
|
34
|
-
env.log_level = LogLevel(log_level)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{beanhub_cli-1.1.0 → beanhub_cli-1.1.2}/beanhub_cli/forms/app/static/js/beanhub-web-react-0.1.6.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|