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.
Files changed (310) hide show
  1. beanhub_cli-3.0.0/.circleci/config.yml +51 -0
  2. beanhub_cli-3.0.0/.gitignore +163 -0
  3. beanhub_cli-3.0.0/.pre-commit-config.yaml +11 -0
  4. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/PKG-INFO +33 -36
  5. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/README.md +4 -0
  6. beanhub_cli-3.0.0/assets/beanhub.svg +4 -0
  7. beanhub_cli-3.0.0/assets/forms-screenshot.png +0 -0
  8. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/api_helpers.py +0 -8
  9. beanhub_cli-2.1.1/beanhub_cli/connect/config.py → beanhub_cli-3.0.0/beanhub_cli/auth.py +12 -6
  10. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/connect/main.py +27 -33
  11. {beanhub_cli-2.1.1/beanhub_cli/connect → beanhub_cli-3.0.0/beanhub_cli}/encryption.py +5 -5
  12. beanhub_cli-3.0.0/beanhub_cli/file_io.py +55 -0
  13. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/import_cli.py +2 -2
  14. beanhub_cli-3.0.0/beanhub_cli/inbox/cli.py +11 -0
  15. beanhub_cli-3.0.0/beanhub_cli/inbox/main.py +490 -0
  16. beanhub_cli-3.0.0/beanhub_cli/internal_api/api/inbox/__init__.py +0 -0
  17. beanhub_cli-3.0.0/beanhub_cli/internal_api/api/inbox/create_inbox_dump_request.py +194 -0
  18. beanhub_cli-3.0.0/beanhub_cli/internal_api/api/inbox/get_inbox_dump_request.py +185 -0
  19. beanhub_cli-3.0.0/beanhub_cli/internal_api/api/inbox/get_inbox_emails.py +199 -0
  20. beanhub_cli-3.0.0/beanhub_cli/internal_api/api/repo/__init__.py +0 -0
  21. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/models/__init__.py +14 -0
  22. beanhub_cli-3.0.0/beanhub_cli/internal_api/models/create_inbox_dump_request.py +68 -0
  23. beanhub_cli-3.0.0/beanhub_cli/internal_api/models/create_inbox_dump_request_response.py +60 -0
  24. beanhub_cli-3.0.0/beanhub_cli/internal_api/models/get_inbox_dump_request_response.py +134 -0
  25. beanhub_cli-3.0.0/beanhub_cli/internal_api/models/get_inbox_email_response.py +99 -0
  26. beanhub_cli-3.0.0/beanhub_cli/internal_api/models/inbox_dump_request_state.py +11 -0
  27. beanhub_cli-3.0.0/beanhub_cli/internal_api/models/inbox_email.py +142 -0
  28. beanhub_cli-3.0.0/beanhub_cli/internal_api/models/inbox_email_headers.py +44 -0
  29. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/login.py +9 -14
  30. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/main.py +1 -0
  31. beanhub_cli-3.0.0/data/internal-api-config.yaml +1 -0
  32. beanhub_cli-3.0.0/data/internal-openapi.json +1 -0
  33. beanhub_cli-3.0.0/docs/docs/assets/favicon.svg +4 -0
  34. beanhub_cli-3.0.0/docs/docs/assets/logo.svg +3 -0
  35. beanhub_cli-3.0.0/docs/docs/commands/connect.md +84 -0
  36. beanhub_cli-3.0.0/docs/docs/commands/form.md +34 -0
  37. beanhub_cli-3.0.0/docs/docs/commands/format.md +56 -0
  38. beanhub_cli-3.0.0/docs/docs/commands/import.md +9 -0
  39. beanhub_cli-3.0.0/docs/docs/commands/login.md +32 -0
  40. beanhub_cli-3.0.0/docs/docs/getting-started.md +16 -0
  41. beanhub_cli-3.0.0/docs/docs/img/auth-session-screenshot.png +0 -0
  42. beanhub_cli-3.0.0/docs/docs/img/beanhub-connect-list.png +0 -0
  43. beanhub_cli-3.0.0/docs/docs/img/beanhub-connect-pop-up.png +0 -0
  44. beanhub_cli-3.0.0/docs/docs/img/forms-screenshot.png +0 -0
  45. beanhub_cli-3.0.0/docs/docs/index.md +23 -0
  46. beanhub_cli-3.0.0/docs/mkdocs.yml +46 -0
  47. beanhub_cli-3.0.0/docs/netlify.toml +4 -0
  48. beanhub_cli-3.0.0/docs/overrides/partials/integrations/analytics/custom.html +1 -0
  49. beanhub_cli-3.0.0/docs/requirements.txt +1 -0
  50. beanhub_cli-3.0.0/pyproject.toml +55 -0
  51. beanhub_cli-3.0.0/pytest.ini +1 -0
  52. beanhub_cli-3.0.0/scripts/gen-internal-api.sh +10 -0
  53. beanhub_cli-3.0.0/tests/__init__.py +0 -0
  54. beanhub_cli-3.0.0/tests/conftest.py +47 -0
  55. beanhub_cli-3.0.0/tests/connect/__init__.py +0 -0
  56. beanhub_cli-3.0.0/tests/connect/test_dump.py +120 -0
  57. beanhub_cli-3.0.0/tests/connect/test_encryption.py +43 -0
  58. beanhub_cli-3.0.0/tests/connect/test_sync.py +94 -0
  59. beanhub_cli-3.0.0/tests/factories.py +22 -0
  60. beanhub_cli-3.0.0/tests/forms/__init__.py +0 -0
  61. beanhub_cli-3.0.0/tests/forms/app/__init__.py +0 -0
  62. beanhub_cli-3.0.0/tests/forms/app/conftest.py +77 -0
  63. beanhub_cli-3.0.0/tests/forms/app/test_forms.py +209 -0
  64. beanhub_cli-3.0.0/tests/forms/app/types_def.py +5 -0
  65. beanhub_cli-3.0.0/tests/forms/test_validator.py +152 -0
  66. beanhub_cli-3.0.0/tests/helper.py +13 -0
  67. beanhub_cli-3.0.0/tests/inbox/__init__.py +0 -0
  68. beanhub_cli-3.0.0/tests/inbox/test_dump.py +266 -0
  69. beanhub_cli-3.0.0/tests/test_format.py +37 -0
  70. beanhub_cli-3.0.0/tests/test_login.py +89 -0
  71. beanhub_cli-3.0.0/uv.lock +1664 -0
  72. beanhub_cli-2.1.1/beanhub_cli/connect/file_io.py +0 -12
  73. beanhub_cli-2.1.1/beanhub_cli/utils.py +0 -66
  74. beanhub_cli-2.1.1/pyproject.toml +0 -53
  75. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/LICENSE +0 -0
  76. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/__init__.py +0 -0
  77. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/aliase.py +0 -0
  78. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/cli.py +0 -0
  79. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/config.py +0 -0
  80. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/connect/__init__.py +0 -0
  81. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/connect/cli.py +0 -0
  82. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/environment.py +0 -0
  83. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/format.py +0 -0
  84. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/__init__.py +0 -0
  85. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/__init__.py +0 -0
  86. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/constants.py +0 -0
  87. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/data/sample_forms_doc.yaml +0 -0
  88. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/deps.py +0 -0
  89. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/helpers.py +0 -0
  90. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/main.py +0 -0
  91. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/routes.py +0 -0
  92. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/settings.py +0 -0
  93. {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
  94. {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
  95. {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
  96. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/LICENSE +0 -0
  97. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/css/bootstrap-datepicker.css +0 -0
  98. {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
  99. {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
  100. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/bootstrap-datepicker/js/bootstrap-datepicker.js +0 -0
  101. {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
  102. {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
  103. {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
  104. {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
  105. {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
  106. {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
  107. {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
  108. {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
  109. {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
  110. {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
  111. {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
  112. {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
  113. {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
  114. {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
  115. {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
  116. {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
  117. {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
  118. {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
  119. {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
  120. {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
  121. {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
  122. {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
  123. {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
  124. {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
  125. {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
  126. {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
  127. {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
  128. {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
  129. {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
  130. {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
  131. {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
  132. {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
  133. {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
  134. {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
  135. {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
  136. {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
  137. {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
  138. {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
  139. {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
  140. {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
  141. {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
  142. {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
  143. {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
  144. {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
  145. {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
  146. {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
  147. {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
  148. {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
  149. {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
  150. {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
  151. {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
  152. {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
  153. {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
  154. {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
  155. {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
  156. {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
  157. {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
  158. {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
  159. {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
  160. {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
  161. {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
  162. {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
  163. {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
  164. {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
  165. {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
  166. {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
  167. {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
  168. {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
  169. {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
  170. {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
  171. {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
  172. {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
  173. {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
  174. {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
  175. {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
  176. {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
  177. {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
  178. {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
  179. {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
  180. {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
  181. {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
  182. {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
  183. {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
  184. {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
  185. {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
  186. {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
  187. {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
  188. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/fontawesome6/LICENSE.txt +0 -0
  189. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/fontawesome6/css/all.min.css +0 -0
  190. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/fontawesome6/webfonts/fa-brands-400.ttf +0 -0
  191. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/fontawesome6/webfonts/fa-brands-400.woff2 +0 -0
  192. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/fontawesome6/webfonts/fa-regular-400.ttf +0 -0
  193. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/fontawesome6/webfonts/fa-regular-400.woff2 +0 -0
  194. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/fontawesome6/webfonts/fa-solid-900.ttf +0 -0
  195. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/fontawesome6/webfonts/fa-solid-900.woff2 +0 -0
  196. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/fontawesome6/webfonts/fa-v4compatibility.ttf +0 -0
  197. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/fontawesome6/webfonts/fa-v4compatibility.woff2 +0 -0
  198. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/LICENSE.md +0 -0
  199. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/css/select2.css +0 -0
  200. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/css/select2.min.css +0 -0
  201. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/af.js +0 -0
  202. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/ar.js +0 -0
  203. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/az.js +0 -0
  204. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/bg.js +0 -0
  205. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/bn.js +0 -0
  206. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/bs.js +0 -0
  207. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/ca.js +0 -0
  208. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/cs.js +0 -0
  209. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/da.js +0 -0
  210. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/de.js +0 -0
  211. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/dsb.js +0 -0
  212. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/el.js +0 -0
  213. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/en.js +0 -0
  214. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/eo.js +0 -0
  215. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/es.js +0 -0
  216. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/et.js +0 -0
  217. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/eu.js +0 -0
  218. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/fa.js +0 -0
  219. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/fi.js +0 -0
  220. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/fr.js +0 -0
  221. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/gl.js +0 -0
  222. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/he.js +0 -0
  223. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/hi.js +0 -0
  224. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/hr.js +0 -0
  225. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/hsb.js +0 -0
  226. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/hu.js +0 -0
  227. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/hy.js +0 -0
  228. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/id.js +0 -0
  229. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/is.js +0 -0
  230. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/it.js +0 -0
  231. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/ja.js +0 -0
  232. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/ka.js +0 -0
  233. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/km.js +0 -0
  234. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/ko.js +0 -0
  235. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/lt.js +0 -0
  236. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/lv.js +0 -0
  237. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/mk.js +0 -0
  238. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/ms.js +0 -0
  239. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/nb.js +0 -0
  240. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/ne.js +0 -0
  241. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/nl.js +0 -0
  242. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/pa.js +0 -0
  243. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/pl.js +0 -0
  244. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/ps.js +0 -0
  245. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/pt-BR.js +0 -0
  246. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/pt.js +0 -0
  247. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/ro.js +0 -0
  248. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/ru.js +0 -0
  249. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/sk.js +0 -0
  250. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/sl.js +0 -0
  251. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/sq.js +0 -0
  252. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/sr-Cyrl.js +0 -0
  253. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/sr.js +0 -0
  254. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/sv.js +0 -0
  255. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/te.js +0 -0
  256. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/th.js +0 -0
  257. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/tk.js +0 -0
  258. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/tr.js +0 -0
  259. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/uk.js +0 -0
  260. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/vi.js +0 -0
  261. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/zh-CN.js +0 -0
  262. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/i18n/zh-TW.js +0 -0
  263. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/select2.full.js +0 -0
  264. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/select2.full.min.js +0 -0
  265. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/select2.js +0 -0
  266. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/static/vendor/select2/js/select2.min.js +0 -0
  267. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/templates/errors.html +0 -0
  268. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/templates/flash_messages.html +0 -0
  269. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/templates/footer.html +0 -0
  270. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/templates/form.html +0 -0
  271. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/templates/home.html +0 -0
  272. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/app/templates/layout.html +0 -0
  273. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/cli.py +0 -0
  274. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/main.py +0 -0
  275. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/forms/validator.py +0 -0
  276. {beanhub_cli-2.1.1/beanhub_cli/internal_api/api/auth → beanhub_cli-3.0.0/beanhub_cli/inbox}/__init__.py +0 -0
  277. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/__init__.py +0 -0
  278. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/api/__init__.py +0 -0
  279. {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
  280. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/api/auth/create_auth_session.py +0 -0
  281. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/api/auth/poll_auth_session.py +0 -0
  282. {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
  283. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/api/connect/create_dump_request.py +0 -0
  284. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/api/connect/create_sync_batch.py +0 -0
  285. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/api/connect/get_dump_request.py +0 -0
  286. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/api/connect/get_sync_batch.py +0 -0
  287. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/api/repo/list_repo.py +0 -0
  288. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/client.py +0 -0
  289. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/errors.py +0 -0
  290. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/models/auth_session_not_ready_response.py +0 -0
  291. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/models/auth_session_poll_response.py +0 -0
  292. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/models/auth_session_request.py +0 -0
  293. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/models/auth_session_response.py +0 -0
  294. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/models/create_dump_request_request.py +0 -0
  295. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/models/create_dump_request_response.py +0 -0
  296. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/models/create_sync_batch_response.py +0 -0
  297. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/models/dump_request_state.py +0 -0
  298. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/models/generic_error.py +0 -0
  299. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/models/get_dump_request_response.py +0 -0
  300. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/models/get_sync_batch_response.py +0 -0
  301. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/models/http_validation_error.py +0 -0
  302. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/models/item_data.py +0 -0
  303. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/models/list_repositories_response.py +0 -0
  304. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/models/plaid_item_sync_state.py +0 -0
  305. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/models/repository.py +0 -0
  306. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/models/repository_type.py +0 -0
  307. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/models/sync_data.py +0 -0
  308. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/models/validation_error.py +0 -0
  309. {beanhub_cli-2.1.1 → beanhub_cli-3.0.0}/beanhub_cli/internal_api/py.typed +0 -0
  310. {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
1
+ Metadata-Version: 2.4
2
2
  Name: beanhub-cli
3
- Version: 2.1.1
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 [![CircleCI](https://dl.circleci.com/status-badge/img/gh/LaunchPlatform/beanhub-cli/tree/master.svg?style=svg)](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>
@@ -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 ..api_helpers import make_auth_client
7
- from ..config import load_config
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 ConnectConfig:
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 ensure_config(api_base_url: str, repo: str | None) -> ConnectConfig:
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 ..internal_api.api.repo import list_repo
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 ConnectConfig(
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 ..api_helpers import make_auth_client
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 ..utils import check_imports
21
- from ..utils import ExtraDepsSet
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: ConnectConfig):
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 = ensure_config(api_base_url=env.api_base_url, repo=repo)
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 sync on, in "<username>/<repo_name>" format',
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 = ensure_config(api_base_url=env.api_base_url, repo=repo)
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 .encryption import decrypt_file
274
- from .file_io import extract_tar
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 .encryption import decrypt_file
302
- from .file_io import extract_tar
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 beanhub project path to work on",
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().absolute() not in beanfile_path.absolute().parents:
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,
@@ -0,0 +1,11 @@
1
+ from ..aliase import AliasedGroup
2
+ from ..cli import cli as root_cli
3
+
4
+
5
+ @root_cli.group(
6
+ name="inbox",
7
+ help="BeanHub inbox features, such as dump (login required) or extract.",
8
+ cls=AliasedGroup,
9
+ )
10
+ def cli():
11
+ pass