beanhub-cli 2.1.1__tar.gz → 3.0.0__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-3.0.0/.circleci/config.yml +51 -0
- beanhub_cli-3.0.0/.gitignore +163 -0
- beanhub_cli-3.0.0/.pre-commit-config.yaml +11 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/PKG-INFO +33 -36
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/README.md +4 -0
- beanhub_cli-3.0.0/assets/beanhub.svg +4 -0
- beanhub_cli-3.0.0/assets/forms-screenshot.png +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/api_helpers.py +0 -8
- beanhub_cli-2.1.1/beanhub_cli/connect/config.py → beanhub_cli-3.0.0/beanhub_cli/auth.py +12 -6
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/connect/main.py +27 -33
- {beanhub_cli-2.1.1/beanhub_cli/connect → beanhub_cli-3.0.0/beanhub_cli}/encryption.py +5 -5
- beanhub_cli-3.0.0/beanhub_cli/file_io.py +55 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/import_cli.py +2 -2
- beanhub_cli-3.0.0/beanhub_cli/inbox/cli.py +11 -0
- beanhub_cli-3.0.0/beanhub_cli/inbox/main.py +490 -0
- beanhub_cli-3.0.0/beanhub_cli/internal_api/api/inbox/__init__.py +0 -0
- beanhub_cli-3.0.0/beanhub_cli/internal_api/api/inbox/create_inbox_dump_request.py +194 -0
- beanhub_cli-3.0.0/beanhub_cli/internal_api/api/inbox/get_inbox_dump_request.py +185 -0
- beanhub_cli-3.0.0/beanhub_cli/internal_api/api/inbox/get_inbox_emails.py +199 -0
- beanhub_cli-3.0.0/beanhub_cli/internal_api/api/repo/__init__.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/models/__init__.py +14 -0
- beanhub_cli-3.0.0/beanhub_cli/internal_api/models/create_inbox_dump_request.py +68 -0
- beanhub_cli-3.0.0/beanhub_cli/internal_api/models/create_inbox_dump_request_response.py +60 -0
- beanhub_cli-3.0.0/beanhub_cli/internal_api/models/get_inbox_dump_request_response.py +134 -0
- beanhub_cli-3.0.0/beanhub_cli/internal_api/models/get_inbox_email_response.py +99 -0
- beanhub_cli-3.0.0/beanhub_cli/internal_api/models/inbox_dump_request_state.py +11 -0
- beanhub_cli-3.0.0/beanhub_cli/internal_api/models/inbox_email.py +142 -0
- beanhub_cli-3.0.0/beanhub_cli/internal_api/models/inbox_email_headers.py +44 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/login.py +9 -14
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/main.py +1 -0
- beanhub_cli-3.0.0/data/internal-api-config.yaml +1 -0
- beanhub_cli-3.0.0/data/internal-openapi.json +1 -0
- beanhub_cli-3.0.0/docs/docs/assets/favicon.svg +4 -0
- beanhub_cli-3.0.0/docs/docs/assets/logo.svg +3 -0
- beanhub_cli-3.0.0/docs/docs/commands/connect.md +84 -0
- beanhub_cli-3.0.0/docs/docs/commands/form.md +34 -0
- beanhub_cli-3.0.0/docs/docs/commands/format.md +56 -0
- beanhub_cli-3.0.0/docs/docs/commands/import.md +9 -0
- beanhub_cli-3.0.0/docs/docs/commands/login.md +32 -0
- beanhub_cli-3.0.0/docs/docs/getting-started.md +16 -0
- beanhub_cli-3.0.0/docs/docs/img/auth-session-screenshot.png +0 -0
- beanhub_cli-3.0.0/docs/docs/img/beanhub-connect-list.png +0 -0
- beanhub_cli-3.0.0/docs/docs/img/beanhub-connect-pop-up.png +0 -0
- beanhub_cli-3.0.0/docs/docs/img/forms-screenshot.png +0 -0
- beanhub_cli-3.0.0/docs/docs/index.md +23 -0
- beanhub_cli-3.0.0/docs/mkdocs.yml +46 -0
- beanhub_cli-3.0.0/docs/netlify.toml +4 -0
- beanhub_cli-3.0.0/docs/overrides/partials/integrations/analytics/custom.html +1 -0
- beanhub_cli-3.0.0/docs/requirements.txt +1 -0
- beanhub_cli-3.0.0/pyproject.toml +55 -0
- beanhub_cli-3.0.0/pytest.ini +1 -0
- beanhub_cli-3.0.0/scripts/gen-internal-api.sh +10 -0
- beanhub_cli-3.0.0/tests/__init__.py +0 -0
- beanhub_cli-3.0.0/tests/conftest.py +47 -0
- beanhub_cli-3.0.0/tests/connect/__init__.py +0 -0
- beanhub_cli-3.0.0/tests/connect/test_dump.py +120 -0
- beanhub_cli-3.0.0/tests/connect/test_encryption.py +43 -0
- beanhub_cli-3.0.0/tests/connect/test_sync.py +94 -0
- beanhub_cli-3.0.0/tests/factories.py +22 -0
- beanhub_cli-3.0.0/tests/forms/__init__.py +0 -0
- beanhub_cli-3.0.0/tests/forms/app/__init__.py +0 -0
- beanhub_cli-3.0.0/tests/forms/app/conftest.py +77 -0
- beanhub_cli-3.0.0/tests/forms/app/test_forms.py +209 -0
- beanhub_cli-3.0.0/tests/forms/app/types_def.py +5 -0
- beanhub_cli-3.0.0/tests/forms/test_validator.py +152 -0
- beanhub_cli-3.0.0/tests/helper.py +13 -0
- beanhub_cli-3.0.0/tests/inbox/__init__.py +0 -0
- beanhub_cli-3.0.0/tests/inbox/test_dump.py +266 -0
- beanhub_cli-3.0.0/tests/test_format.py +37 -0
- beanhub_cli-3.0.0/tests/test_login.py +89 -0
- beanhub_cli-3.0.0/uv.lock +1664 -0
- beanhub_cli-2.1.1/beanhub_cli/connect/file_io.py +0 -12
- beanhub_cli-2.1.1/beanhub_cli/utils.py +0 -66
- beanhub_cli-2.1.1/pyproject.toml +0 -53
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/LICENSE +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/__init__.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/aliase.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/cli.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/config.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/connect/__init__.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/connect/cli.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/environment.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/format.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/__init__.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/__init__.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/constants.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/data/sample_forms_doc.yaml +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/deps.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/helpers.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/main.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/routes.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/settings.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/js/beanhub-web-react-0.3.0.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/js/beanhub-web-react-0.3.0.js.LICENSE.txt +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/js/beanhub-web-react-0.3.0.js.map +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/LICENSE +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/css/bootstrap-datepicker.css +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/css/bootstrap-datepicker.css.map +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/css/bootstrap-datepicker.min.css +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/js/bootstrap-datepicker.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/js/bootstrap-datepicker.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker-en-CA.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.ar-DZ.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.ar-tn.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.ar.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.az.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.bg.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.bm.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.bn.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.br.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.bs.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.ca.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.cs.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.cy.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.da.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.de.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.el.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.en-AU.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.en-CA.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.en-GB.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.en-IE.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.en-NZ.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.en-US.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.en-ZA.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.eo.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.es.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.et.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.eu.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.fa.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.fi.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.fo.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.fr-CH.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.fr.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.gl.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.he.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.hi.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.hr.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.hu.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.hy.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.id.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.is.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.it-CH.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.it.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.ja.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.ka.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.kh.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.kk.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.km.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.ko.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.kr.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.lt.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.lv.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.me.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.mk.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.mn.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.mr.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.ms.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.nl-BE.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.nl.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.no.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.oc.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.pl.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.pt-BR.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.pt.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.ro.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.rs-latin.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.rs.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.ru.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.si.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.sk.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.sl.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.sq.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.sr-latin.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.sr.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.sv.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.sw.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.ta.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.tg.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.th.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.tk.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.tr.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.uk.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.uz-cyrl.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.uz-latn.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.vi.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.zh-CN.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/locales/bootstrap-datepicker.zh-TW.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/fontawesome6/LICENSE.txt +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/fontawesome6/css/all.min.css +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/fontawesome6/webfonts/fa-brands-400.ttf +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/fontawesome6/webfonts/fa-brands-400.woff2 +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/fontawesome6/webfonts/fa-regular-400.ttf +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/fontawesome6/webfonts/fa-regular-400.woff2 +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/fontawesome6/webfonts/fa-solid-900.ttf +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/fontawesome6/webfonts/fa-solid-900.woff2 +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/fontawesome6/webfonts/fa-v4compatibility.ttf +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/fontawesome6/webfonts/fa-v4compatibility.woff2 +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/LICENSE.md +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/css/select2.css +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/css/select2.min.css +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/af.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/ar.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/az.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/bg.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/bn.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/bs.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/ca.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/cs.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/da.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/de.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/dsb.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/el.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/en.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/eo.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/es.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/et.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/eu.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/fa.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/fi.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/fr.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/gl.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/he.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/hi.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/hr.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/hsb.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/hu.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/hy.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/id.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/is.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/it.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/ja.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/ka.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/km.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/ko.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/lt.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/lv.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/mk.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/ms.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/nb.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/ne.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/nl.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/pa.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/pl.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/ps.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/pt-BR.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/pt.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/ro.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/ru.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/sk.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/sl.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/sq.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/sr-Cyrl.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/sr.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/sv.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/te.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/th.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/tk.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/tr.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/uk.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/vi.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/zh-CN.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/zh-TW.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/select2.full.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/select2.full.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/select2.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/select2.min.js +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/templates/errors.html +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/templates/flash_messages.html +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/templates/footer.html +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/templates/form.html +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/templates/home.html +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/templates/layout.html +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/cli.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/main.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/validator.py +0 -0
- {beanhub_cli-2.1.1/beanhub_cli/internal_api/api/auth → beanhub_cli-3.0.0/beanhub_cli/inbox}/__init__.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/__init__.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/api/__init__.py +0 -0
- {beanhub_cli-2.1.1/beanhub_cli/internal_api/api/connect → beanhub_cli-3.0.0/beanhub_cli/internal_api/api/auth}/__init__.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/api/auth/create_auth_session.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/api/auth/poll_auth_session.py +0 -0
- {beanhub_cli-2.1.1/beanhub_cli/internal_api/api/repo → beanhub_cli-3.0.0/beanhub_cli/internal_api/api/connect}/__init__.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/api/connect/create_dump_request.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/api/connect/create_sync_batch.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/api/connect/get_dump_request.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/api/connect/get_sync_batch.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/api/repo/list_repo.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/client.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/errors.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/models/auth_session_not_ready_response.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/models/auth_session_poll_response.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/models/auth_session_request.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/models/auth_session_response.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/models/create_dump_request_request.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/models/create_dump_request_response.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/models/create_sync_batch_response.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/models/dump_request_state.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/models/generic_error.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/models/get_dump_request_response.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/models/get_sync_batch_response.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/models/http_validation_error.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/models/item_data.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/models/list_repositories_response.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/models/plaid_item_sync_state.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/models/repository.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/models/repository_type.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/models/sync_data.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/models/validation_error.py +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/py.typed +0 -0
- {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/types.py +0 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Use the latest 2.1 version of CircleCI pipeline process engine.
|
|
2
|
+
# See: https://circleci.com/docs/2.0/configuration-reference
|
|
3
|
+
version: 2.1
|
|
4
|
+
|
|
5
|
+
orbs:
|
|
6
|
+
python: circleci/python@2.1.1
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
test:
|
|
10
|
+
docker:
|
|
11
|
+
- image: cimg/python:3.10.14
|
|
12
|
+
steps:
|
|
13
|
+
- checkout
|
|
14
|
+
- run:
|
|
15
|
+
name: Install uv
|
|
16
|
+
command: pip install uv
|
|
17
|
+
- run:
|
|
18
|
+
name: Run test
|
|
19
|
+
command: uv run python -m pytest ./tests -svvvv
|
|
20
|
+
build-and-publish:
|
|
21
|
+
docker:
|
|
22
|
+
- image: cimg/python:3.10.14
|
|
23
|
+
steps:
|
|
24
|
+
- checkout
|
|
25
|
+
- run:
|
|
26
|
+
name: Install uv
|
|
27
|
+
command: pip install uv
|
|
28
|
+
- run:
|
|
29
|
+
name: Build
|
|
30
|
+
command: uv build
|
|
31
|
+
- run:
|
|
32
|
+
name: Publish
|
|
33
|
+
command: uv publish
|
|
34
|
+
|
|
35
|
+
workflows:
|
|
36
|
+
build-and-publish:
|
|
37
|
+
jobs:
|
|
38
|
+
- test:
|
|
39
|
+
filters:
|
|
40
|
+
# needed for deploy build
|
|
41
|
+
# ref: https://discuss.circleci.com/t/builds-for-tags-not-triggering/17681/7
|
|
42
|
+
tags:
|
|
43
|
+
only: /^.*/
|
|
44
|
+
- build-and-publish:
|
|
45
|
+
requires:
|
|
46
|
+
- test
|
|
47
|
+
filters:
|
|
48
|
+
branches:
|
|
49
|
+
ignore: /.*/
|
|
50
|
+
tags:
|
|
51
|
+
only: /^.*/
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# C extensions
|
|
7
|
+
*.so
|
|
8
|
+
|
|
9
|
+
# Distribution / packaging
|
|
10
|
+
.Python
|
|
11
|
+
build/
|
|
12
|
+
develop-eggs/
|
|
13
|
+
dist/
|
|
14
|
+
downloads/
|
|
15
|
+
eggs/
|
|
16
|
+
.eggs/
|
|
17
|
+
lib/
|
|
18
|
+
lib64/
|
|
19
|
+
parts/
|
|
20
|
+
sdist/
|
|
21
|
+
var/
|
|
22
|
+
wheels/
|
|
23
|
+
share/python-wheels/
|
|
24
|
+
*.egg-info/
|
|
25
|
+
.installed.cfg
|
|
26
|
+
*.egg
|
|
27
|
+
MANIFEST
|
|
28
|
+
|
|
29
|
+
# PyInstaller
|
|
30
|
+
# Usually these files are written by a python script from a template
|
|
31
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
32
|
+
*.manifest
|
|
33
|
+
*.spec
|
|
34
|
+
|
|
35
|
+
# Installer logs
|
|
36
|
+
pip-log.txt
|
|
37
|
+
pip-delete-this-directory.txt
|
|
38
|
+
|
|
39
|
+
# Unit test / coverage reports
|
|
40
|
+
htmlcov/
|
|
41
|
+
.tox/
|
|
42
|
+
.nox/
|
|
43
|
+
.coverage
|
|
44
|
+
.coverage.*
|
|
45
|
+
.cache
|
|
46
|
+
nosetests.xml
|
|
47
|
+
coverage.xml
|
|
48
|
+
*.cover
|
|
49
|
+
*.py,cover
|
|
50
|
+
.hypothesis/
|
|
51
|
+
.pytest_cache/
|
|
52
|
+
cover/
|
|
53
|
+
|
|
54
|
+
# Translations
|
|
55
|
+
*.mo
|
|
56
|
+
*.pot
|
|
57
|
+
|
|
58
|
+
# Django stuff:
|
|
59
|
+
*.log
|
|
60
|
+
local_settings.py
|
|
61
|
+
db.sqlite3
|
|
62
|
+
db.sqlite3-journal
|
|
63
|
+
|
|
64
|
+
# Flask stuff:
|
|
65
|
+
instance/
|
|
66
|
+
.webassets-cache
|
|
67
|
+
|
|
68
|
+
# Scrapy stuff:
|
|
69
|
+
.scrapy
|
|
70
|
+
|
|
71
|
+
# Sphinx documentation
|
|
72
|
+
docs/_build/
|
|
73
|
+
|
|
74
|
+
# PyBuilder
|
|
75
|
+
.pybuilder/
|
|
76
|
+
target/
|
|
77
|
+
|
|
78
|
+
# Jupyter Notebook
|
|
79
|
+
.ipynb_checkpoints
|
|
80
|
+
|
|
81
|
+
# IPython
|
|
82
|
+
profile_default/
|
|
83
|
+
ipython_config.py
|
|
84
|
+
|
|
85
|
+
# pyenv
|
|
86
|
+
# For a library or package, you might want to ignore these files since the code is
|
|
87
|
+
# intended to run in multiple environments; otherwise, check them in:
|
|
88
|
+
# .python-version
|
|
89
|
+
|
|
90
|
+
# pipenv
|
|
91
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
92
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
93
|
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
94
|
+
# install all needed dependencies.
|
|
95
|
+
#Pipfile.lock
|
|
96
|
+
|
|
97
|
+
# poetry
|
|
98
|
+
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
|
99
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
100
|
+
# commonly ignored for libraries.
|
|
101
|
+
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
|
102
|
+
#poetry.lock
|
|
103
|
+
|
|
104
|
+
# pdm
|
|
105
|
+
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
|
106
|
+
#pdm.lock
|
|
107
|
+
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
|
|
108
|
+
# in version control.
|
|
109
|
+
# https://pdm.fming.dev/#use-with-ide
|
|
110
|
+
.pdm.toml
|
|
111
|
+
|
|
112
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
|
113
|
+
__pypackages__/
|
|
114
|
+
|
|
115
|
+
# Celery stuff
|
|
116
|
+
celerybeat-schedule
|
|
117
|
+
celerybeat.pid
|
|
118
|
+
|
|
119
|
+
# SageMath parsed files
|
|
120
|
+
*.sage.py
|
|
121
|
+
|
|
122
|
+
# Environments
|
|
123
|
+
.env
|
|
124
|
+
.venv
|
|
125
|
+
env/
|
|
126
|
+
venv/
|
|
127
|
+
ENV/
|
|
128
|
+
env.bak/
|
|
129
|
+
venv.bak/
|
|
130
|
+
|
|
131
|
+
# Spyder project settings
|
|
132
|
+
.spyderproject
|
|
133
|
+
.spyproject
|
|
134
|
+
|
|
135
|
+
# Rope project settings
|
|
136
|
+
.ropeproject
|
|
137
|
+
|
|
138
|
+
# mkdocs documentation
|
|
139
|
+
/site
|
|
140
|
+
|
|
141
|
+
# mypy
|
|
142
|
+
.mypy_cache/
|
|
143
|
+
.dmypy.json
|
|
144
|
+
dmypy.json
|
|
145
|
+
|
|
146
|
+
# Pyre type checker
|
|
147
|
+
.pyre/
|
|
148
|
+
|
|
149
|
+
# pytype static type analyzer
|
|
150
|
+
.pytype/
|
|
151
|
+
|
|
152
|
+
# Cython debug symbols
|
|
153
|
+
cython_debug/
|
|
154
|
+
|
|
155
|
+
# PyCharm
|
|
156
|
+
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
|
157
|
+
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
|
158
|
+
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
|
159
|
+
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
|
160
|
+
#.idea/
|
|
161
|
+
.idea
|
|
162
|
+
|
|
163
|
+
internal_api_output/
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
repos:
|
|
2
|
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
3
|
+
# Ruff version.
|
|
4
|
+
rev: v0.9.2
|
|
5
|
+
hooks:
|
|
6
|
+
# Run the formatter.
|
|
7
|
+
- id: ruff-format
|
|
8
|
+
- repo: https://github.com/asottile/reorder_python_imports
|
|
9
|
+
rev: v3.10.0
|
|
10
|
+
hooks:
|
|
11
|
+
- id: reorder-python-imports
|
|
@@ -1,40 +1,34 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: beanhub-cli
|
|
3
|
-
Version:
|
|
4
|
-
Summary: Command line tools for BeanHub
|
|
5
|
-
License: MIT
|
|
6
|
-
Author: Fang-Pen Lin
|
|
7
|
-
Author-email: fangpen@launchplatform.com
|
|
8
|
-
Requires-Python: >=3.10,<4.0
|
|
9
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
10
|
-
Classifier: Programming Language :: Python :: 3
|
|
11
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
12
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
13
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
14
|
-
Provides-Extra: connect
|
|
15
|
-
Provides-Extra: login
|
|
16
|
-
Requires-Dist: attrs (>=22.2.0) ; extra == "login" or extra == "connect"
|
|
17
|
-
Requires-Dist: beancount-black (>=1.0.1,<2.0.0)
|
|
18
|
-
Requires-Dist: beancount-parser (>=1.2.3,<1.3.0)
|
|
19
|
-
Requires-Dist: beanhub-extract (>=0.1.0,<1.0.0)
|
|
20
|
-
Requires-Dist: beanhub-forms (>=0.1.3,<0.2.0)
|
|
21
|
-
Requires-Dist: beanhub-import (>=1.0.0,<2.0.0)
|
|
22
|
-
Requires-Dist: click (>=8.1.7,<9.0.0)
|
|
23
|
-
Requires-Dist: cryptography (>=44.0.0,<45.0.0) ; extra == "connect"
|
|
24
|
-
Requires-Dist: fastapi (>=0.98.0,<1.0.0)
|
|
25
|
-
Requires-Dist: httpx (>=0.20.0,<0.29.0) ; extra == "login" or extra == "connect"
|
|
26
|
-
Requires-Dist: jinja2 (>=3.1.2,<4.0.0)
|
|
27
|
-
Requires-Dist: pydantic (>=2.4.0,<3.0.0)
|
|
28
|
-
Requires-Dist: pydantic-settings (>=2.0.3,<3.0.0)
|
|
29
|
-
Requires-Dist: pynacl (>=1.5.0,<2.0.0) ; extra == "connect"
|
|
30
|
-
Requires-Dist: python-dateutil (>=2.8.0,<3.0.0) ; extra == "login" or extra == "connect"
|
|
31
|
-
Requires-Dist: pyyaml (>=6.0.1,<7.0.0)
|
|
32
|
-
Requires-Dist: rich (>=13.6.0,<14.0.0)
|
|
33
|
-
Requires-Dist: starlette-wtf (>=0.4.3,<0.5.0)
|
|
34
|
-
Requires-Dist: tomli (>=2.2.1,<3.0.0) ; extra == "login" or extra == "connect"
|
|
35
|
-
Requires-Dist: tomli-w (>=1.1.0,<2.0.0) ; extra == "login" or extra == "connect"
|
|
36
|
-
Requires-Dist: uvicorn (>=0.23.2,<1.0.0)
|
|
3
|
+
Version: 3.0.0
|
|
4
|
+
Summary: Command line tools for BeanHub and Beancount users
|
|
37
5
|
Project-URL: Documentation, https://beanhub-cli-docs.beanhub.io
|
|
6
|
+
Author-email: Fang-Pen Lin <fangpen@launchplatform.com>
|
|
7
|
+
License-Expression: MIT
|
|
8
|
+
License-File: LICENSE
|
|
9
|
+
Requires-Python: ~=3.10
|
|
10
|
+
Requires-Dist: attrs>=22.2.0
|
|
11
|
+
Requires-Dist: beancount-black<2,>=1.0.1
|
|
12
|
+
Requires-Dist: beancount-parser<1.3.0,>=1.2.3
|
|
13
|
+
Requires-Dist: beanhub-extract<1.0.0,>=0.1.0
|
|
14
|
+
Requires-Dist: beanhub-forms<0.2,>=0.1.3
|
|
15
|
+
Requires-Dist: beanhub-import<2.0.0,>=1.0.0
|
|
16
|
+
Requires-Dist: beanhub-inbox<0.3.0,>=0.2.1
|
|
17
|
+
Requires-Dist: click<9,>=8.1.7
|
|
18
|
+
Requires-Dist: cryptography<45,>=44.0.0
|
|
19
|
+
Requires-Dist: fastapi<1.0.0,>=0.98.0
|
|
20
|
+
Requires-Dist: httpx<0.29.0,>=0.20.0
|
|
21
|
+
Requires-Dist: jinja2<4.0.0,>=3.1.2
|
|
22
|
+
Requires-Dist: pydantic-settings<3,>=2.0.3
|
|
23
|
+
Requires-Dist: pydantic<3,>=2.4.0
|
|
24
|
+
Requires-Dist: pynacl<2,>=1.5.0
|
|
25
|
+
Requires-Dist: python-dateutil<3,>=2.8.0
|
|
26
|
+
Requires-Dist: pyyaml<7,>=6.0.1
|
|
27
|
+
Requires-Dist: rich<14,>=13.6.0
|
|
28
|
+
Requires-Dist: starlette-wtf<0.5,>=0.4.3
|
|
29
|
+
Requires-Dist: tomli-w<2,>=1.1.0
|
|
30
|
+
Requires-Dist: tomli<3,>=2.2.1
|
|
31
|
+
Requires-Dist: uvicorn<1.0.0,>=0.23.2
|
|
38
32
|
Description-Content-Type: text/markdown
|
|
39
33
|
|
|
40
34
|
# beanhub-cli [](https://dl.circleci.com/status-badge/redirect/gh/LaunchPlatform/beanhub-cli/tree/master)
|
|
@@ -49,10 +43,14 @@ Please read the [documentation here](https://beanhub-cli-docs.beanhub.io).
|
|
|
49
43
|
- [**Formatter**](https://beanhub-cli-docs.beanhub.io/commands/format/) - Advanced Beancount file formatter based on top of [beancount-black](https://github.com/LaunchPlatform/beancount-black)
|
|
50
44
|
- [**Beancount file manipulations**](https://beanhub-cli-docs.beanhub.io/commands/format/) - Effortless Beancount account name renaming and other basic manipulations
|
|
51
45
|
- [**Forms**](https://beanhub-cli-docs.beanhub.io/commands/form/) - 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
|
|
46
|
+
- [**Inbox**](https://github.com/LaunchPlatform/beanhub-inbox) - Archive emails sending to a dedicated email address like yourname+repo@inbox.beanhub.io (BeanHub account needed) and then use LLM to extract values for your invoices and receipts
|
|
52
47
|
- **Doesn't require a BeanHub account** - While some features require a BeanHub account to operate, but we make most of them usable even without a BeanHub account
|
|
53
48
|
|
|
54
49
|
## Screenshots
|
|
55
50
|
|
|
51
|
+
<p align="center">
|
|
52
|
+
<video src="https://github.com/user-attachments/assets/eb496dab-cd95-4aca-8a29-89ff9d52570d" autoplay muted>
|
|
53
|
+
</p>
|
|
56
54
|
<p align="center">
|
|
57
55
|
<img src="https://github.com/LaunchPlatform/beanhub-cli/raw/master/assets/forms-screenshot.png?raw=true" alt="BeanHub Forms Screenshot" />
|
|
58
56
|
</p>
|
|
@@ -64,4 +62,3 @@ Please read the [documentation here](https://beanhub-cli-docs.beanhub.io).
|
|
|
64
62
|
</p>
|
|
65
63
|
|
|
66
64
|
A modern accounting book service based on the most popular open source version control system [Git](https://git-scm.com/) and text-based double entry accounting book software [Beancount](https://beancount.github.io/docs/index.html).
|
|
67
|
-
|
|
@@ -10,10 +10,14 @@ Please read the [documentation here](https://beanhub-cli-docs.beanhub.io).
|
|
|
10
10
|
- [**Formatter**](https://beanhub-cli-docs.beanhub.io/commands/format/) - Advanced Beancount file formatter based on top of [beancount-black](https://github.com/LaunchPlatform/beancount-black)
|
|
11
11
|
- [**Beancount file manipulations**](https://beanhub-cli-docs.beanhub.io/commands/format/) - Effortless Beancount account name renaming and other basic manipulations
|
|
12
12
|
- [**Forms**](https://beanhub-cli-docs.beanhub.io/commands/form/) - 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
|
|
13
|
+
- [**Inbox**](https://github.com/LaunchPlatform/beanhub-inbox) - Archive emails sending to a dedicated email address like yourname+repo@inbox.beanhub.io (BeanHub account needed) and then use LLM to extract values for your invoices and receipts
|
|
13
14
|
- **Doesn't require a BeanHub account** - While some features require a BeanHub account to operate, but we make most of them usable even without a BeanHub account
|
|
14
15
|
|
|
15
16
|
## Screenshots
|
|
16
17
|
|
|
18
|
+
<p align="center">
|
|
19
|
+
<video src="https://github.com/user-attachments/assets/eb496dab-cd95-4aca-8a29-89ff9d52570d" autoplay muted>
|
|
20
|
+
</p>
|
|
17
21
|
<p align="center">
|
|
18
22
|
<img src="https://github.com/LaunchPlatform/beanhub-cli/raw/master/assets/forms-screenshot.png?raw=true" alt="BeanHub Forms Screenshot" />
|
|
19
23
|
</p>
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<svg width="300" height="70" viewBox="0 0 300 70" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path fill-rule="evenodd" clip-rule="evenodd" d="M53.9626 34.6406C54.9863 34.1017 55.8942 33.3615 56.6335 32.4632C57.3727 31.5649 57.9285 30.5264 58.2685 29.4081C63.9201 9.28651 11.5918 4.06495 13.0559 21.1279C13.3896 24.8747 17.4802 27.6275 22.3137 27.8351C26.286 28.1846 28.2129 28.2065 31.7222 29.9106V17.2827H37.8475V33.3844C42.8101 36.159 48.7523 37.6228 53.9949 34.6078L53.9626 34.6406ZM15.7471 34.7826C20.0531 32.4121 23.81 33.0348 28.1375 34.7826C29.3863 35.2633 30.5596 35.875 31.7115 36.3884L37.8367 39.3815C40.8294 40.6685 44.0057 41.4614 47.2453 41.7301C52.0787 41.9377 56.1694 44.6905 56.5031 48.4373C58.0102 65.5003 5.68189 60.2787 11.2904 40.1571C11.6371 39.014 12.2064 37.9532 12.9645 37.0375C13.7227 36.1218 14.6542 35.3699 15.704 34.8263L15.7471 34.7826ZM37.8367 43.6418L31.7115 40.5285V52.2388H37.8367V43.6418Z" fill="#7952B5"/>
|
|
3
|
+
<path fill-rule="evenodd" clip-rule="evenodd" d="M93.9619 34.1628C95.5255 33.7718 96.9074 32.8663 97.8799 31.5956C98.8523 30.3249 99.3572 28.7649 99.3112 27.1728C99.3112 22.5852 96.2188 19.3869 90.6204 18.6922C89.1614 18.524 87.6923 18.4563 86.2237 18.4896H73.913V52.4843H86.4289C88.0288 52.5197 89.6293 52.4569 91.2213 52.2962C95.8085 51.645 100.645 48.6493 100.645 42.3395C100.645 37.9979 98.4465 35.2916 94.0059 34.1628H93.9619ZM80.7718 23.8153H85.7694C86.6021 23.813 87.4342 23.8614 88.2608 23.96C89.3224 24.0272 90.3194 24.4864 91.0538 25.2463C91.7883 26.0061 92.2062 27.011 92.2247 28.0613C92.2432 29.1115 91.8607 30.1301 91.1535 30.9147C90.4462 31.6993 89.4659 32.1924 88.4074 32.2959C87.5949 32.3891 86.7778 32.4374 85.9599 32.4406H80.7718V23.7574V23.8153ZM89.0523 47.0718C88.4074 47.0718 87.5867 47.0718 86.766 47.0718H80.7718V37.4624H86.5168C87.3352 37.4669 88.1525 37.52 88.9643 37.6216C89.5752 37.6193 90.1799 37.7428 90.7398 37.9841C91.2996 38.2255 91.8025 38.5793 92.2161 39.0232C92.6298 39.4671 92.9452 39.9913 93.1424 40.5622C93.3395 41.1332 93.414 41.7385 93.361 42.3395C93.3925 42.9344 93.303 43.5295 93.0976 44.0897C92.8922 44.6498 92.5753 45.1636 92.1654 45.6007C91.7555 46.0379 91.261 46.3894 90.7112 46.6346C90.1614 46.8799 89.5674 47.0137 88.9643 47.0284L89.0523 47.0718ZM129.443 38.8372C129.443 31.7025 125.149 25.5954 117.015 25.5954C108.881 25.5954 103.547 31.4565 103.547 39.4885C103.547 48.6927 109.189 53.179 116.473 53.179C122.701 53.179 127.699 50.0675 129.033 43.9603H122.115C121.94 45.2587 121.268 46.4418 120.238 47.2676C119.209 48.0934 117.898 48.4996 116.575 48.4032C113.381 48.4032 110.889 46.6666 110.435 41.1672H129.297C129.377 40.3981 129.411 39.6249 129.399 38.8517L129.443 38.8372ZM116.722 30.3856C120.005 30.3856 121.91 32.5998 122.35 36.7388H110.625C111.226 32.3972 113.468 30.3856 116.663 30.3856H116.722ZM149.595 52.4988H156.321C155.992 50.2995 155.825 48.0794 155.823 45.8562V37.3756C155.823 35.9284 155.823 34.568 155.677 33.3379C155.281 28.8081 152.482 25.6098 145.051 25.6098C138.72 25.6098 133.884 28.9529 133.679 34.8719H140.361C140.567 31.9775 142.062 30.4435 144.758 30.4435C147.455 30.4435 148.657 31.7749 148.847 33.5984C148.931 34.4157 148.965 35.2373 148.95 36.0586V36.5941H147.25C137.621 36.5941 132.594 39.8503 132.594 45.6101C132.594 50.5885 136.536 53.2514 141.124 53.2514C143.443 53.345 145.736 52.7448 147.704 51.5292L149.008 48.7216L149.507 52.5567L149.595 52.4988ZM143.85 48.4177C141.417 48.4177 139.819 47.3323 139.819 45.0168C139.819 41.558 143.512 40.3279 148.994 40.6752V42.7881C148.994 46.4351 146.649 48.3598 143.85 48.3598V48.4177ZM186.952 32.9471C186.409 28.3595 183.17 25.6098 177.528 25.6098C175.252 25.5 173.004 26.1416 171.138 27.4333L169.101 30.5303V26.29H162.213V52.4988H169.101V40.516C169.101 33.28 171.739 30.3856 175.081 30.3856C175.733 30.3152 176.393 30.3834 177.016 30.5856C177.64 30.7878 178.212 31.1193 178.695 31.5579C179.178 31.9965 179.561 32.5321 179.817 33.1286C180.073 33.7251 180.197 34.3689 180.181 35.0166C180.269 36.3481 180.269 37.5782 180.269 38.6636V52.4988H187.157V37.7084C187.187 36.1139 187.119 34.519 186.952 32.9327V32.9471ZM224.323 18.4751H217.494V33.1063H201.373V18.4896H194.485V52.4843H201.373V38.5478H217.494V52.4843H224.323V18.4896V18.4751ZM255.203 26.2611H248.315V39.6187C248.315 45.5233 245.926 48.3019 242.452 48.3019C241.816 48.3657 241.173 48.2998 240.563 48.1083C239.954 47.9169 239.39 47.6039 238.908 47.1888C238.426 46.7737 238.035 46.2653 237.76 45.695C237.485 45.1248 237.331 44.5048 237.308 43.8735C237.162 42.5421 237.118 41.1093 237.118 40.27V26.2321H230.23V41.7027C230.188 43.2986 230.271 44.8952 230.479 46.4785C231.08 50.082 234.377 53.1356 239.858 53.1356C242.126 53.2325 244.366 52.6086 246.248 51.3555L248.285 48.0125V52.4409H255.173V26.2756L255.203 26.2611ZM277.303 25.5809C274.871 25.4677 272.464 26.105 270.415 27.4044L268.422 30.2988V16.3043H261.534V52.4843H268.422V48.9821L270.166 51.7028C272.085 52.7125 274.236 53.2112 276.409 53.15C283.239 53.15 289.13 48.3164 289.13 38.8662C289.13 31.1237 284.734 25.5664 277.303 25.5664V25.5809ZM275.061 48.3888C271.866 48.3888 268.422 46.2614 268.422 40.2989V39.0688C268.422 32.6722 271.514 30.3856 275.31 30.3856C279.399 30.3856 281.993 33.9747 281.993 39.3438C281.993 45.3931 279.047 48.4032 275.061 48.4032V48.3888Z" fill="#7952B5"/>
|
|
4
|
+
</svg>
|
|
Binary file
|
|
@@ -31,11 +31,3 @@ def handle_api_exception(logger: logging.Logger | None = None):
|
|
|
31
31
|
return callee
|
|
32
32
|
|
|
33
33
|
return decorator
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
def make_auth_client(base_url: str, token: str) -> "AuthenticatedClient":
|
|
37
|
-
from .internal_api.client import AuthenticatedClient
|
|
38
|
-
|
|
39
|
-
return AuthenticatedClient(
|
|
40
|
-
base_url=base_url, prefix="", auth_header_name="access-token", token=token
|
|
41
|
-
)
|
|
@@ -3,14 +3,14 @@ import logging
|
|
|
3
3
|
import sys
|
|
4
4
|
import typing
|
|
5
5
|
|
|
6
|
-
from
|
|
7
|
-
from
|
|
6
|
+
from .config import load_config
|
|
7
|
+
from .internal_api.client import AuthenticatedClient
|
|
8
8
|
|
|
9
9
|
logger = logging.getLogger(__name__)
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
@dataclasses.dataclass
|
|
13
|
-
class
|
|
13
|
+
class AuthConfig:
|
|
14
14
|
token: str
|
|
15
15
|
username: str
|
|
16
16
|
repo: str
|
|
@@ -23,7 +23,7 @@ def parse_repo(repo: str | None) -> typing.Tuple[str | None, str | None]:
|
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
# TODO: maybe extract this part to a shared env for connect command?
|
|
26
|
-
def
|
|
26
|
+
def ensure_auth_config(api_base_url: str, repo: str | None) -> AuthConfig:
|
|
27
27
|
config = load_config()
|
|
28
28
|
if config is None or config.access_token is None:
|
|
29
29
|
logger.error(
|
|
@@ -35,7 +35,7 @@ def ensure_config(api_base_url: str, repo: str | None) -> ConnectConfig:
|
|
|
35
35
|
"No repo provided, try to determine which repo to use automatically ..."
|
|
36
36
|
)
|
|
37
37
|
|
|
38
|
-
from
|
|
38
|
+
from .internal_api.api.repo import list_repo
|
|
39
39
|
|
|
40
40
|
with make_auth_client(
|
|
41
41
|
base_url=api_base_url, token=config.access_token.token
|
|
@@ -63,8 +63,14 @@ def ensure_config(api_base_url: str, repo: str | None) -> ConnectConfig:
|
|
|
63
63
|
username, repo_name = parse_repo(
|
|
64
64
|
repo if repo is not None else config.repo.default
|
|
65
65
|
)
|
|
66
|
-
return
|
|
66
|
+
return AuthConfig(
|
|
67
67
|
token=config.access_token.token,
|
|
68
68
|
username=username,
|
|
69
69
|
repo=repo_name,
|
|
70
70
|
)
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def make_auth_client(base_url: str, token: str) -> AuthenticatedClient:
|
|
74
|
+
return AuthenticatedClient(
|
|
75
|
+
base_url=base_url, prefix="", auth_header_name="access-token", token=token
|
|
76
|
+
)
|
|
@@ -7,21 +7,35 @@ import tempfile
|
|
|
7
7
|
import time
|
|
8
8
|
|
|
9
9
|
import click
|
|
10
|
+
import httpx
|
|
10
11
|
import rich
|
|
12
|
+
from nacl.encoding import URLSafeBase64Encoder
|
|
13
|
+
from nacl.public import PrivateKey
|
|
14
|
+
from nacl.public import SealedBox
|
|
11
15
|
from rich import box
|
|
12
16
|
from rich.markup import escape
|
|
13
17
|
from rich.padding import Padding
|
|
14
18
|
from rich.table import Table
|
|
15
19
|
|
|
16
20
|
from ..api_helpers import handle_api_exception
|
|
17
|
-
from ..
|
|
21
|
+
from ..auth import AuthConfig
|
|
22
|
+
from ..auth import ensure_auth_config
|
|
23
|
+
from ..auth import make_auth_client
|
|
18
24
|
from ..environment import Environment
|
|
19
25
|
from ..environment import pass_env
|
|
20
|
-
from ..
|
|
21
|
-
from ..
|
|
26
|
+
from ..internal_api.api.connect import create_dump_request
|
|
27
|
+
from ..internal_api.api.connect import create_sync_batch
|
|
28
|
+
from ..internal_api.api.connect import get_dump_request
|
|
29
|
+
from ..internal_api.api.connect import get_sync_batch
|
|
30
|
+
from ..internal_api.models import CreateDumpRequestRequest
|
|
31
|
+
from ..internal_api.models import CreateDumpRequestResponse
|
|
32
|
+
from ..internal_api.models import CreateSyncBatchResponse
|
|
33
|
+
from ..internal_api.models import DumpRequestState
|
|
34
|
+
from ..internal_api.models import GetDumpRequestResponse
|
|
35
|
+
from ..internal_api.models import GetSyncBatchResponse
|
|
36
|
+
from ..internal_api.models import HTTPValidationError
|
|
37
|
+
from ..internal_api.models import PlaidItemSyncState
|
|
22
38
|
from .cli import cli
|
|
23
|
-
from .config import ConnectConfig
|
|
24
|
-
from .config import ensure_config
|
|
25
39
|
|
|
26
40
|
logger = logging.getLogger(__name__)
|
|
27
41
|
|
|
@@ -30,14 +44,7 @@ TABLE_COLUMN_STYLE = "cyan"
|
|
|
30
44
|
SPOOLED_FILE_MAX_SIZE = 1024 * 1024 * 5
|
|
31
45
|
|
|
32
46
|
|
|
33
|
-
def run_sync(env: Environment, config:
|
|
34
|
-
from ..internal_api.api.connect import create_sync_batch
|
|
35
|
-
from ..internal_api.api.connect import get_sync_batch
|
|
36
|
-
from ..internal_api.models import CreateSyncBatchResponse
|
|
37
|
-
from ..internal_api.models import GetSyncBatchResponse
|
|
38
|
-
from ..internal_api.models import HTTPValidationError
|
|
39
|
-
from ..internal_api.models import PlaidItemSyncState
|
|
40
|
-
|
|
47
|
+
def run_sync(env: Environment, config: AuthConfig):
|
|
41
48
|
GOOD_TERMINAL_SYNC_STATES = frozenset(
|
|
42
49
|
[
|
|
43
50
|
PlaidItemSyncState.IMPORT_COMPLETE,
|
|
@@ -147,10 +154,9 @@ def run_sync(env: Environment, config: ConnectConfig):
|
|
|
147
154
|
help='Which repository to run sync on, in "<username>/<repo_name>" format',
|
|
148
155
|
)
|
|
149
156
|
@pass_env
|
|
150
|
-
@check_imports(ExtraDepsSet.LOGIN, logger)
|
|
151
157
|
@handle_api_exception(logger)
|
|
152
158
|
def sync(env: Environment, repo: str | None):
|
|
153
|
-
config =
|
|
159
|
+
config = ensure_auth_config(api_base_url=env.api_base_url, repo=repo)
|
|
154
160
|
run_sync(env, config)
|
|
155
161
|
env.logger.info("done")
|
|
156
162
|
|
|
@@ -162,7 +168,7 @@ def sync(env: Environment, repo: str | None):
|
|
|
162
168
|
"-r",
|
|
163
169
|
"--repo",
|
|
164
170
|
type=str,
|
|
165
|
-
help='Which repository to run
|
|
171
|
+
help='Which repository to run dump on, in "<username>/<repo_name>" format',
|
|
166
172
|
)
|
|
167
173
|
@click.option(
|
|
168
174
|
"-s",
|
|
@@ -183,7 +189,6 @@ def sync(env: Environment, repo: str | None):
|
|
|
183
189
|
help="Allow unsafe tar extraction, mostly for Python < 3.11",
|
|
184
190
|
)
|
|
185
191
|
@pass_env
|
|
186
|
-
@check_imports(ExtraDepsSet.CONNECT, logger)
|
|
187
192
|
@handle_api_exception(logger)
|
|
188
193
|
def dump(
|
|
189
194
|
env: Environment,
|
|
@@ -192,24 +197,13 @@ def dump(
|
|
|
192
197
|
output_accounts: str | None,
|
|
193
198
|
unsafe_tar_extract: bool,
|
|
194
199
|
):
|
|
195
|
-
import httpx
|
|
196
|
-
from ..internal_api.api.connect import create_dump_request
|
|
197
|
-
from ..internal_api.api.connect import get_dump_request
|
|
198
|
-
from ..internal_api.models import CreateDumpRequestRequest
|
|
199
|
-
from ..internal_api.models import CreateDumpRequestResponse
|
|
200
|
-
from ..internal_api.models import DumpRequestState
|
|
201
|
-
from ..internal_api.models import GetDumpRequestResponse
|
|
202
|
-
from nacl.encoding import URLSafeBase64Encoder
|
|
203
|
-
from nacl.public import PrivateKey
|
|
204
|
-
from nacl.public import SealedBox
|
|
205
|
-
|
|
206
200
|
if not hasattr(tarfile, "data_filter") and not unsafe_tar_extract:
|
|
207
201
|
logger.error(
|
|
208
202
|
"You need to use Python >= 3.11 in order to safely unpack the downloaded tar file, or you need to pass "
|
|
209
203
|
"in --unsafe-tar-extract argument to allow unsafe tar file extracting"
|
|
210
204
|
)
|
|
211
205
|
sys.exit(-1)
|
|
212
|
-
config =
|
|
206
|
+
config = ensure_auth_config(api_base_url=env.api_base_url, repo=repo)
|
|
213
207
|
if sync:
|
|
214
208
|
run_sync(env, config)
|
|
215
209
|
|
|
@@ -270,8 +264,8 @@ def dump(
|
|
|
270
264
|
logger.info("Decrypting downloaded file ...")
|
|
271
265
|
|
|
272
266
|
# delay import for testing purpose
|
|
273
|
-
from
|
|
274
|
-
from
|
|
267
|
+
from ..encryption import decrypt_file
|
|
268
|
+
from ..file_io import extract_tar
|
|
275
269
|
|
|
276
270
|
decrypt_file(
|
|
277
271
|
input_file=encrypted_file, output_file=decrypted_file, key=key, iv=iv
|
|
@@ -298,8 +292,8 @@ def dump(
|
|
|
298
292
|
)
|
|
299
293
|
|
|
300
294
|
# delay import for testing purpose
|
|
301
|
-
from
|
|
302
|
-
from
|
|
295
|
+
from ..encryption import decrypt_file
|
|
296
|
+
from ..file_io import extract_tar
|
|
303
297
|
|
|
304
298
|
decrypt_file(
|
|
305
299
|
input_file=encrypted_file, output_file=decrypted_file, key=key, iv=iv
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import io
|
|
2
2
|
|
|
3
|
+
from cryptography.hazmat.primitives import padding
|
|
4
|
+
from cryptography.hazmat.primitives.ciphers import algorithms
|
|
5
|
+
from cryptography.hazmat.primitives.ciphers import Cipher
|
|
6
|
+
from cryptography.hazmat.primitives.ciphers import modes
|
|
7
|
+
|
|
3
8
|
|
|
4
9
|
def decrypt_file(
|
|
5
10
|
input_file: io.BytesIO, output_file: io.BytesIO, iv: bytes, key: bytes
|
|
6
11
|
):
|
|
7
|
-
from cryptography.hazmat.primitives import padding
|
|
8
|
-
from cryptography.hazmat.primitives.ciphers import algorithms
|
|
9
|
-
from cryptography.hazmat.primitives.ciphers import Cipher
|
|
10
|
-
from cryptography.hazmat.primitives.ciphers import modes
|
|
11
|
-
|
|
12
12
|
cipher = Cipher(algorithms.AES256(key), modes.CBC(iv))
|
|
13
13
|
decryptor = cipher.decryptor()
|
|
14
14
|
padder = padding.PKCS7(128).unpadder()
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import io
|
|
2
|
+
import logging
|
|
3
|
+
import pathlib
|
|
4
|
+
import sys
|
|
5
|
+
import tarfile
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def extract_tar(input_file: io.BytesIO, logger: logging.Logger):
|
|
9
|
+
with tarfile.open(fileobj=input_file, mode="r:gz") as tar_file:
|
|
10
|
+
if hasattr(tarfile, "data_filter"):
|
|
11
|
+
tar_file.extractall(filter="data")
|
|
12
|
+
else:
|
|
13
|
+
logger.warning("Performing unsafe tar file extracting")
|
|
14
|
+
tar_file.extractall()
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def extract_inbox_tar(
|
|
18
|
+
input_file: io.BytesIO,
|
|
19
|
+
email_output_paths: dict[str, pathlib.Path],
|
|
20
|
+
workdir_path: pathlib.Path,
|
|
21
|
+
unsafe_tar_extract: bool,
|
|
22
|
+
logger: logging.Logger,
|
|
23
|
+
):
|
|
24
|
+
with tarfile.open(fileobj=input_file, mode="r:gz") as tar_file:
|
|
25
|
+
for member in tar_file:
|
|
26
|
+
if not member.isreg():
|
|
27
|
+
continue
|
|
28
|
+
member_path = pathlib.PurePosixPath(member.name)
|
|
29
|
+
email_id = member_path.stem
|
|
30
|
+
output_path = email_output_paths.get(email_id)
|
|
31
|
+
if output_path is None:
|
|
32
|
+
logger.error("Cannot find output path for email %s", email_id)
|
|
33
|
+
sys.exit(-1)
|
|
34
|
+
output_path.parent.mkdir(exist_ok=True, parents=True)
|
|
35
|
+
logger.info(
|
|
36
|
+
"Writing email [green]%s[/] to [green]%s[/]",
|
|
37
|
+
email_id,
|
|
38
|
+
output_path,
|
|
39
|
+
extra={"markup": True, "highlighter": None},
|
|
40
|
+
)
|
|
41
|
+
full_output_path = workdir_path / output_path
|
|
42
|
+
has_data_filter = hasattr(tarfile, "data_filter")
|
|
43
|
+
if not has_data_filter and not unsafe_tar_extract:
|
|
44
|
+
logger.error(
|
|
45
|
+
"You need to use Python >= 3.11 in order to safely unpack the downloaded tar file, or you need to pass "
|
|
46
|
+
"in --unsafe-tar-extract argument to allow unsafe tar file extracting"
|
|
47
|
+
)
|
|
48
|
+
sys.exit(-1)
|
|
49
|
+
member.name = output_path.name
|
|
50
|
+
tar_file.extract(
|
|
51
|
+
member,
|
|
52
|
+
full_output_path.parent,
|
|
53
|
+
set_attrs=False,
|
|
54
|
+
filter="data" if has_data_filter else None,
|
|
55
|
+
)
|
|
@@ -46,7 +46,7 @@ TABLE_COLUMN_STYLE = "cyan"
|
|
|
46
46
|
"--workdir",
|
|
47
47
|
type=click.Path(exists=True, dir_okay=True, file_okay=False),
|
|
48
48
|
default=str(pathlib.Path.cwd()),
|
|
49
|
-
help="The
|
|
49
|
+
help="The BeanHub project path to work on",
|
|
50
50
|
)
|
|
51
51
|
@click.option(
|
|
52
52
|
"-b",
|
|
@@ -111,7 +111,7 @@ def main(
|
|
|
111
111
|
env.logger.info("Skipped %s transactions", len(unprocessed_txns))
|
|
112
112
|
|
|
113
113
|
beanfile_path = (workdir_path / pathlib.Path(beanfile)).resolve()
|
|
114
|
-
if workdir_path.resolve()
|
|
114
|
+
if not beanfile_path.is_relative_to(workdir_path.resolve()):
|
|
115
115
|
env.logger.error(
|
|
116
116
|
"The provided beanfile path %s is not a sub-path of workdir %s",
|
|
117
117
|
beanfile_path,
|