fin-infra 0.1.79__tar.gz → 0.1.80__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 (180) hide show
  1. {fin_infra-0.1.79 → fin_infra-0.1.80}/PKG-INFO +1 -1
  2. {fin_infra-0.1.79 → fin_infra-0.1.80}/pyproject.toml +5 -1
  3. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/analytics/__init__.py +10 -0
  4. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/banking/__init__.py +0 -1
  5. fin_infra-0.1.80/src/fin_infra/clients/__init__.py +25 -0
  6. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/markets/__init__.py +4 -2
  7. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/net_worth/__init__.py +7 -0
  8. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/providers/base.py +25 -1
  9. fin_infra-0.1.79/src/fin_infra/clients/__init__.py +0 -3
  10. {fin_infra-0.1.79 → fin_infra-0.1.80}/LICENSE +0 -0
  11. {fin_infra-0.1.79 → fin_infra-0.1.80}/README.md +0 -0
  12. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/__init__.py +0 -0
  13. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/__main__.py +0 -0
  14. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/analytics/add.py +0 -0
  15. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/analytics/cash_flow.py +0 -0
  16. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/analytics/ease.py +0 -0
  17. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/analytics/models.py +0 -0
  18. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/analytics/portfolio.py +0 -0
  19. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/analytics/projections.py +0 -0
  20. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/analytics/rebalancing.py +0 -0
  21. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/analytics/savings.py +0 -0
  22. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/analytics/scenarios.py +0 -0
  23. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/analytics/spending.py +0 -0
  24. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/banking/history.py +0 -0
  25. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/banking/utils.py +0 -0
  26. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/brokerage/__init__.py +0 -0
  27. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/budgets/__init__.py +0 -0
  28. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/budgets/add.py +0 -0
  29. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/budgets/alerts.py +0 -0
  30. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/budgets/ease.py +0 -0
  31. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/budgets/models.py +0 -0
  32. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/budgets/scaffold_templates/README.md +0 -0
  33. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/budgets/scaffold_templates/__init__.py +0 -0
  34. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/budgets/scaffold_templates/models.py.tmpl +0 -0
  35. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/budgets/scaffold_templates/repository.py.tmpl +0 -0
  36. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/budgets/scaffold_templates/schemas.py.tmpl +0 -0
  37. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/budgets/templates.py +0 -0
  38. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/budgets/tracker.py +0 -0
  39. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/cashflows/__init__.py +0 -0
  40. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/cashflows/core.py +0 -0
  41. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/categorization/__init__.py +0 -0
  42. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/categorization/add.py +0 -0
  43. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/categorization/ease.py +0 -0
  44. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/categorization/engine.py +0 -0
  45. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/categorization/llm_layer.py +0 -0
  46. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/categorization/models.py +0 -0
  47. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/categorization/rules.py +0 -0
  48. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/categorization/taxonomy.py +0 -0
  49. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/chat/__init__.py +0 -0
  50. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/chat/ease.py +0 -0
  51. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/chat/planning.py +0 -0
  52. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/cli/__init__.py +0 -0
  53. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/cli/cmds/__init__.py +0 -0
  54. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/cli/cmds/scaffold_cmds.py +0 -0
  55. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/clients/base.py +0 -0
  56. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/clients/plaid.py +0 -0
  57. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/compliance/__init__.py +0 -0
  58. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/credit/__init__.py +0 -0
  59. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/credit/add.py +0 -0
  60. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/credit/experian/__init__.py +0 -0
  61. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/credit/experian/auth.py +0 -0
  62. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/credit/experian/client.py +0 -0
  63. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/credit/experian/parser.py +0 -0
  64. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/credit/experian/provider.py +0 -0
  65. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/credit/mock.py +0 -0
  66. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/crypto/__init__.py +0 -0
  67. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/crypto/insights.py +0 -0
  68. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/documents/__init__.py +0 -0
  69. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/documents/add.py +0 -0
  70. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/documents/analysis.py +0 -0
  71. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/documents/ease.py +0 -0
  72. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/documents/models.py +0 -0
  73. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/documents/ocr.py +0 -0
  74. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/documents/storage.py +0 -0
  75. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/exceptions.py +0 -0
  76. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/goals/__init__.py +0 -0
  77. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/goals/add.py +0 -0
  78. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/goals/funding.py +0 -0
  79. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/goals/management.py +0 -0
  80. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/goals/milestones.py +0 -0
  81. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/goals/models.py +0 -0
  82. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/goals/scaffold_templates/README.md +0 -0
  83. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/goals/scaffold_templates/__init__.py +0 -0
  84. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/goals/scaffold_templates/models.py.tmpl +0 -0
  85. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/goals/scaffold_templates/repository.py.tmpl +0 -0
  86. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/goals/scaffold_templates/schemas.py.tmpl +0 -0
  87. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/insights/__init__.py +0 -0
  88. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/insights/aggregator.py +0 -0
  89. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/insights/models.py +0 -0
  90. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/investments/__init__.py +0 -0
  91. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/investments/add.py +0 -0
  92. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/investments/ease.py +0 -0
  93. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/investments/models.py +0 -0
  94. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/investments/providers/__init__.py +0 -0
  95. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/investments/providers/base.py +0 -0
  96. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/investments/providers/plaid.py +0 -0
  97. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/investments/providers/snaptrade.py +0 -0
  98. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/investments/scaffold_templates/README.md +0 -0
  99. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/investments/scaffold_templates/__init__.py +0 -0
  100. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/investments/scaffold_templates/models.py.tmpl +0 -0
  101. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/investments/scaffold_templates/repository.py.tmpl +0 -0
  102. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/investments/scaffold_templates/schemas.py.tmpl +0 -0
  103. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/models/__init__.py +0 -0
  104. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/models/accounts.py +0 -0
  105. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/models/brokerage.py +0 -0
  106. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/models/candle.py +0 -0
  107. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/models/credit.py +0 -0
  108. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/models/money.py +0 -0
  109. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/models/quotes.py +0 -0
  110. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/models/tax.py +0 -0
  111. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/models/transactions.py +0 -0
  112. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/net_worth/add.py +0 -0
  113. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/net_worth/aggregator.py +0 -0
  114. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/net_worth/calculator.py +0 -0
  115. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/net_worth/ease.py +0 -0
  116. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/net_worth/goals.py +0 -0
  117. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/net_worth/insights.py +0 -0
  118. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/net_worth/models.py +0 -0
  119. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/net_worth/scaffold_templates/README.md +0 -0
  120. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/net_worth/scaffold_templates/__init__.py +0 -0
  121. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/net_worth/scaffold_templates/models.py.tmpl +0 -0
  122. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/net_worth/scaffold_templates/repository.py.tmpl +0 -0
  123. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/net_worth/scaffold_templates/schemas.py.tmpl +0 -0
  124. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/normalization/__init__.py +0 -0
  125. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/normalization/currency_converter.py +0 -0
  126. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/normalization/models.py +0 -0
  127. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/normalization/providers/__init__.py +0 -0
  128. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/normalization/providers/exchangerate.py +0 -0
  129. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/normalization/providers/static_mappings.py +0 -0
  130. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/normalization/symbol_resolver.py +0 -0
  131. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/obs/__init__.py +0 -0
  132. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/obs/classifier.py +0 -0
  133. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/providers/__init__.py +0 -0
  134. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/providers/banking/base.py +0 -0
  135. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/providers/banking/plaid_client.py +0 -0
  136. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/providers/banking/teller_client.py +0 -0
  137. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/providers/brokerage/alpaca.py +0 -0
  138. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/providers/brokerage/base.py +0 -0
  139. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/providers/credit/experian.py +0 -0
  140. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/providers/identity/stripe_identity.py +0 -0
  141. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/providers/market/alphavantage.py +0 -0
  142. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/providers/market/base.py +0 -0
  143. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/providers/market/ccxt_crypto.py +0 -0
  144. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/providers/market/coingecko.py +0 -0
  145. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/providers/market/yahoo.py +0 -0
  146. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/providers/registry.py +0 -0
  147. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/providers/tax/__init__.py +0 -0
  148. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/providers/tax/irs.py +0 -0
  149. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/providers/tax/mock.py +0 -0
  150. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/providers/tax/taxbit.py +0 -0
  151. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/py.typed +0 -0
  152. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/recurring/__init__.py +0 -0
  153. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/recurring/add.py +0 -0
  154. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/recurring/detector.py +0 -0
  155. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/recurring/detectors_llm.py +0 -0
  156. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/recurring/ease.py +0 -0
  157. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/recurring/insights.py +0 -0
  158. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/recurring/models.py +0 -0
  159. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/recurring/normalizer.py +0 -0
  160. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/recurring/normalizers.py +0 -0
  161. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/recurring/summary.py +0 -0
  162. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/scaffold/__init__.py +0 -0
  163. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/scaffold/budgets.py +0 -0
  164. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/scaffold/goals.py +0 -0
  165. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/security/__init__.py +0 -0
  166. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/security/add.py +0 -0
  167. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/security/audit.py +0 -0
  168. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/security/encryption.py +0 -0
  169. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/security/models.py +0 -0
  170. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/security/pii_filter.py +0 -0
  171. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/security/pii_patterns.py +0 -0
  172. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/security/token_store.py +0 -0
  173. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/settings.py +0 -0
  174. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/tax/__init__.py +0 -0
  175. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/tax/add.py +0 -0
  176. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/tax/tlh.py +0 -0
  177. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/utils/__init__.py +0 -0
  178. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/utils/http.py +0 -0
  179. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/utils/retry.py +0 -0
  180. {fin_infra-0.1.79 → fin_infra-0.1.80}/src/fin_infra/version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: fin-infra
3
- Version: 0.1.79
3
+ Version: 0.1.80
4
4
  Summary: Financial infrastructure toolkit: banking connections, market data, credit, cashflows, and brokerage integrations
5
5
  License: MIT
6
6
  Keywords: finance,banking,plaid,brokerage,markets,credit,tax,cashflow,fintech,infra
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "fin-infra"
3
- version = "0.1.79"
3
+ version = "0.1.80"
4
4
  description = "Financial infrastructure toolkit: banking connections, market data, credit, cashflows, and brokerage integrations"
5
5
  authors = ["Ali Khatami <aliikhatami94@gmail.com>"]
6
6
  license = "MIT"
@@ -81,6 +81,10 @@ pre-commit = ">=3.0.0"
81
81
  types-requests = ">=2.31.0"
82
82
  pytest-cov = ">=4.0.0"
83
83
  aiosqlite = ">=0.20.0"
84
+ # Documentation
85
+ mkdocs = ">=1.6.0"
86
+ mkdocs-material = ">=9.5.0"
87
+ mkdocstrings = {extras = ["python"], version = ">=0.25.0"}
84
88
 
85
89
  [tool.pytest.ini_options]
86
90
  testpaths = ["tests"]
@@ -7,6 +7,16 @@ This module provides comprehensive financial analytics capabilities including:
7
7
  - Portfolio analytics (returns, allocation, benchmarking)
8
8
  - Growth projections (net worth forecasting with scenarios)
9
9
 
10
+ Feature Status:
11
+ ✅ STABLE: Core calculation functions (all analytics work with provided data)
12
+ ⚠️ INTEGRATION: Auto-fetching from providers requires setup:
13
+ - Banking provider for transaction data
14
+ - Brokerage provider for investment data
15
+ - Categorization for expense categorization
16
+
17
+ When providers aren't configured, functions accept data directly or return
18
+ sensible placeholder values for testing/development.
19
+
10
20
  Serves multiple use cases:
11
21
  - Personal finance apps (cash flow, savings tracking)
12
22
  - Wealth management platforms (portfolio analytics, projections)
@@ -174,7 +174,6 @@ def easy_banking(provider: str = "teller", **config) -> BankingProvider:
174
174
  See Also:
175
175
  - add_banking(): For FastAPI integration with routes
176
176
  - docs/banking.md: Comprehensive banking integration guide
177
- - docs/adr/0003-banking-integration.md: Architecture decisions
178
177
  """
179
178
  # Auto-detect provider config from environment if not explicitly provided
180
179
  # Only auto-detect if no config params were passed
@@ -0,0 +1,25 @@
1
+ """DEPRECATED: Use fin_infra.providers instead.
2
+
3
+ This module is deprecated and will be removed in a future version.
4
+ All ABCs have been consolidated into fin_infra.providers.base.
5
+
6
+ Migration:
7
+ # Old (deprecated)
8
+ from fin_infra.clients import BankingClient, MarketDataClient
9
+
10
+ # New
11
+ from fin_infra.providers.base import BankingProvider, MarketDataProvider
12
+ """
13
+
14
+ import warnings
15
+
16
+ from .base import BankingClient, CreditClient, MarketDataClient
17
+
18
+ warnings.warn(
19
+ "fin_infra.clients is deprecated. Use fin_infra.providers instead. "
20
+ "This module will be removed in a future version.",
21
+ DeprecationWarning,
22
+ stacklevel=2,
23
+ )
24
+
25
+ __all__ = ["BankingClient", "MarketDataClient", "CreditClient"]
@@ -20,7 +20,10 @@ if TYPE_CHECKING:
20
20
  from fastapi import FastAPI
21
21
 
22
22
  from ..providers.base import MarketDataProvider
23
- from ..clients.base import MarketDataClient
23
+
24
+ # Deprecated: MarketDataClient alias for backward compatibility
25
+ # Use MarketDataProvider instead
26
+ MarketDataClient = MarketDataProvider # type: ignore[misc]
24
27
 
25
28
 
26
29
  def easy_market(
@@ -178,7 +181,6 @@ def add_market_data(
178
181
  See Also:
179
182
  - easy_market(): For standalone provider usage without FastAPI
180
183
  - docs/market-data.md: API documentation and examples
181
- - docs/adr/0004-market-data-integration.md: Architecture decisions
182
184
  """
183
185
  from fastapi import HTTPException, Query
184
186
 
@@ -4,6 +4,13 @@ Net Worth Tracking Module
4
4
  Calculates net worth by aggregating balances from multiple financial providers
5
5
  (banking, brokerage, crypto) with historical snapshots and change detection.
6
6
 
7
+ **Feature Status**:
8
+ ✅ STABLE: Core calculation (works with provided data)
9
+ ✅ STABLE: Banking integration (Plaid, Teller)
10
+ ⚠️ INTEGRATION: Brokerage integration (requires provider setup)
11
+ ⚠️ INTEGRATION: Crypto integration (requires provider setup)
12
+ ⚠️ INTEGRATION: Currency conversion (pass exchange_rate manually)
13
+
7
14
  **Key Features**:
8
15
  - Multi-provider aggregation (banking + brokerage + crypto)
9
16
  - Currency normalization (all currencies → USD)
@@ -1,9 +1,33 @@
1
+ """Base provider ABCs for fin-infra.
2
+
3
+ This module defines abstract base classes for all financial data providers.
4
+ These are the canonical ABCs - use these instead of fin_infra.clients.
5
+
6
+ Sync vs Async Pattern:
7
+ Most providers use SYNCHRONOUS methods for simplicity. The exceptions are:
8
+ - InvestmentProvider: Uses async methods (get_holdings, get_investment_accounts)
9
+
10
+ If you need async, wrap sync providers with asyncio.to_thread():
11
+ import asyncio
12
+ result = await asyncio.to_thread(provider.quote, "AAPL")
13
+
14
+ Provider Categories:
15
+ - MarketDataProvider: Stock/equity quotes and historical data
16
+ - CryptoDataProvider: Cryptocurrency market data
17
+ - BankingProvider: Bank account aggregation (Plaid, Teller, MX)
18
+ - BrokerageProvider: Trading operations (Alpaca, Interactive Brokers)
19
+ - CreditProvider: Credit scores and reports
20
+ - TaxProvider: Tax documents and calculations
21
+ - IdentityProvider: Identity verification
22
+ - InvestmentProvider: Investment holdings (async)
23
+ """
24
+
1
25
  from __future__ import annotations
2
26
 
3
27
  from abc import ABC, abstractmethod
4
28
  from typing import Any, Iterable, Sequence
5
29
 
6
- from ..models import Quote, Candle
30
+ from ..models import Candle, Quote
7
31
 
8
32
 
9
33
  class MarketDataProvider(ABC):
@@ -1,3 +0,0 @@
1
- from .base import BankingClient, MarketDataClient, CreditClient
2
-
3
- __all__ = ["BankingClient", "MarketDataClient", "CreditClient"]
File without changes
File without changes