fin-infra 0.8.0__tar.gz → 0.9.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.
- {fin_infra-0.8.0 → fin_infra-0.9.0}/PKG-INFO +1 -1
- {fin_infra-0.8.0 → fin_infra-0.9.0}/pyproject.toml +1 -1
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/providers/banking/plaid_client.py +11 -9
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/recurring/insights.py +1 -1
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/recurring/normalizers.py +1 -1
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/settings.py +8 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/LICENSE +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/README.md +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/__init__.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/__main__.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/analytics/__init__.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/analytics/add.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/analytics/benchmark.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/analytics/cash_flow.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/analytics/ease.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/analytics/models.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/analytics/portfolio.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/analytics/projections.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/analytics/rebalancing.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/analytics/rebalancing_llm.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/analytics/savings.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/analytics/scenarios.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/analytics/spending.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/banking/__init__.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/banking/history.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/banking/utils.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/brokerage/__init__.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/budgets/__init__.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/budgets/add.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/budgets/alerts.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/budgets/ease.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/budgets/models.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/budgets/scaffold_templates/README.md +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/budgets/scaffold_templates/__init__.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/budgets/scaffold_templates/models.py.tmpl +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/budgets/scaffold_templates/repository.py.tmpl +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/budgets/scaffold_templates/schemas.py.tmpl +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/budgets/templates.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/budgets/tracker.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/cashflows/__init__.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/cashflows/core.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/categorization/__init__.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/categorization/add.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/categorization/ease.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/categorization/engine.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/categorization/llm_layer.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/categorization/models.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/categorization/rules.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/categorization/taxonomy.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/chat/__init__.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/chat/ease.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/chat/planning.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/cli/__init__.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/cli/cmds/__init__.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/cli/cmds/scaffold_cmds.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/clients/__init__.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/clients/base.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/clients/plaid.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/compliance/__init__.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/credit/__init__.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/credit/add.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/credit/experian/__init__.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/credit/experian/auth.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/credit/experian/client.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/credit/experian/parser.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/credit/experian/provider.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/credit/mock.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/crypto/__init__.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/crypto/insights.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/documents/__init__.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/documents/add.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/documents/analysis.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/documents/ease.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/documents/models.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/documents/ocr.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/documents/storage.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/exceptions.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/goals/__init__.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/goals/add.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/goals/funding.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/goals/management.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/goals/milestones.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/goals/models.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/goals/scaffold_templates/README.md +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/goals/scaffold_templates/__init__.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/goals/scaffold_templates/models.py.tmpl +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/goals/scaffold_templates/repository.py.tmpl +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/goals/scaffold_templates/schemas.py.tmpl +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/insights/__init__.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/insights/aggregator.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/insights/models.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/investments/__init__.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/investments/add.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/investments/ease.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/investments/models.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/investments/providers/__init__.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/investments/providers/base.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/investments/providers/plaid.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/investments/providers/snaptrade.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/investments/scaffold_templates/README.md +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/investments/scaffold_templates/__init__.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/investments/scaffold_templates/models.py.tmpl +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/investments/scaffold_templates/repository.py.tmpl +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/investments/scaffold_templates/schemas.py.tmpl +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/markets/__init__.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/models/__init__.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/models/accounts.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/models/brokerage.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/models/candle.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/models/credit.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/models/money.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/models/quotes.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/models/tax.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/models/transactions.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/net_worth/__init__.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/net_worth/add.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/net_worth/aggregator.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/net_worth/calculator.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/net_worth/ease.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/net_worth/goals.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/net_worth/insights.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/net_worth/models.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/net_worth/scaffold_templates/README.md +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/net_worth/scaffold_templates/__init__.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/net_worth/scaffold_templates/models.py.tmpl +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/net_worth/scaffold_templates/repository.py.tmpl +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/net_worth/scaffold_templates/schemas.py.tmpl +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/normalization/__init__.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/normalization/currency_converter.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/normalization/models.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/normalization/providers/__init__.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/normalization/providers/exchangerate.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/normalization/providers/static_mappings.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/normalization/symbol_resolver.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/obs/__init__.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/obs/classifier.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/providers/__init__.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/providers/banking/base.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/providers/banking/teller_client.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/providers/base.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/providers/brokerage/alpaca.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/providers/brokerage/base.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/providers/credit/experian.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/providers/identity/stripe_identity.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/providers/market/alphavantage.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/providers/market/base.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/providers/market/ccxt_crypto.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/providers/market/coingecko.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/providers/market/yahoo.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/providers/registry.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/providers/tax/__init__.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/providers/tax/irs.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/providers/tax/mock.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/providers/tax/taxbit.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/py.typed +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/recurring/__init__.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/recurring/add.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/recurring/detector.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/recurring/detectors_llm.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/recurring/ease.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/recurring/models.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/recurring/normalizer.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/recurring/summary.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/scaffold/__init__.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/scaffold/budgets.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/scaffold/goals.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/security/__init__.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/security/add.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/security/audit.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/security/encryption.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/security/models.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/security/pii_filter.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/security/pii_patterns.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/security/token_store.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/tax/__init__.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/tax/add.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/tax/tlh.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/utils/__init__.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/utils/deprecation.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/utils/http.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/utils/retry.py +0 -0
- {fin_infra-0.8.0 → fin_infra-0.9.0}/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.
|
|
3
|
+
Version: 0.9.0
|
|
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.
|
|
3
|
+
version = "0.9.0"
|
|
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"
|
|
@@ -52,6 +52,12 @@ class PlaidClient(BankingProvider):
|
|
|
52
52
|
client_id = client_id or settings.plaid_client_id
|
|
53
53
|
secret = secret or settings.plaid_secret
|
|
54
54
|
environment = environment or settings.plaid_env
|
|
55
|
+
self._products = settings.plaid_products
|
|
56
|
+
else:
|
|
57
|
+
# Use default products when no settings object provided
|
|
58
|
+
from ...settings import DEFAULT_PLAID_PRODUCTS
|
|
59
|
+
|
|
60
|
+
self._products = DEFAULT_PLAID_PRODUCTS
|
|
55
61
|
|
|
56
62
|
# Map environment string to Plaid Environment enum
|
|
57
63
|
# Note: Plaid only has Sandbox and Production (no Development in SDK)
|
|
@@ -105,15 +111,11 @@ class PlaidClient(BankingProvider):
|
|
|
105
111
|
# Don't include products - Plaid uses existing item's products
|
|
106
112
|
request_params["access_token"] = access_token
|
|
107
113
|
else:
|
|
108
|
-
# New connection: specify products
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
Products("investments"), # Brokerage, retirement accounts
|
|
114
|
-
Products("assets"), # Asset reports for lending/verification
|
|
115
|
-
Products("identity"), # Account holder info (name, email, phone)
|
|
116
|
-
]
|
|
114
|
+
# New connection: specify products from settings
|
|
115
|
+
# Configurable via PLAID_PRODUCTS env var (comma-separated)
|
|
116
|
+
# Default: auth,transactions,investments (excludes costly unused products)
|
|
117
|
+
product_list = [Products(p.strip()) for p in self._products.split(",") if p.strip()]
|
|
118
|
+
request_params["products"] = product_list
|
|
117
119
|
|
|
118
120
|
request = LinkTokenCreateRequest(**request_params)
|
|
119
121
|
response = self.client.link_token_create(request)
|
|
@@ -331,7 +331,7 @@ class SubscriptionInsightsGenerator:
|
|
|
331
331
|
cache_key = self._make_cache_key(subscriptions, user_id)
|
|
332
332
|
|
|
333
333
|
try:
|
|
334
|
-
await self.cache.set(cache_key, result.model_dump(),
|
|
334
|
+
await self.cache.set(cache_key, result.model_dump(), expire=self.cache_ttl)
|
|
335
335
|
except Exception as e:
|
|
336
336
|
logger.warning(f"Cache set failed for insights: {e}")
|
|
337
337
|
|
|
@@ -318,7 +318,7 @@ class MerchantNormalizer:
|
|
|
318
318
|
cache_key = self._make_cache_key(merchant_name)
|
|
319
319
|
|
|
320
320
|
try:
|
|
321
|
-
await self.cache.set(cache_key, result.model_dump(),
|
|
321
|
+
await self.cache.set(cache_key, result.model_dump(), expire=self.cache_ttl)
|
|
322
322
|
except Exception as e:
|
|
323
323
|
logger.warning(f"Cache set failed for '{merchant_name}': {e}")
|
|
324
324
|
|
|
@@ -5,6 +5,13 @@ from functools import lru_cache
|
|
|
5
5
|
from pydantic import Field
|
|
6
6
|
from pydantic_settings import BaseSettings, SettingsConfigDict
|
|
7
7
|
|
|
8
|
+
# Default products: only the ones we actually use
|
|
9
|
+
# auth: Account/routing numbers for ACH
|
|
10
|
+
# transactions: Transaction history
|
|
11
|
+
# investments: Brokerage, retirement accounts
|
|
12
|
+
# Excluded: identity, liabilities, assets (not used, cost extra per API call)
|
|
13
|
+
DEFAULT_PLAID_PRODUCTS = "auth,transactions,investments"
|
|
14
|
+
|
|
8
15
|
|
|
9
16
|
class Settings(BaseSettings):
|
|
10
17
|
# Cache / infra
|
|
@@ -14,6 +21,7 @@ class Settings(BaseSettings):
|
|
|
14
21
|
plaid_client_id: str | None = Field(default=None, alias="PLAID_CLIENT_ID")
|
|
15
22
|
plaid_secret: str | None = Field(default=None, alias="PLAID_SECRET")
|
|
16
23
|
plaid_env: str = Field(default="sandbox", alias="PLAID_ENVIRONMENT")
|
|
24
|
+
plaid_products: str = Field(default=DEFAULT_PLAID_PRODUCTS, alias="PLAID_PRODUCTS")
|
|
17
25
|
|
|
18
26
|
# Alpaca
|
|
19
27
|
alpaca_api_key: str | None = Field(default=None, alias="ALPACA_API_KEY")
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/budgets/scaffold_templates/repository.py.tmpl
RENAMED
|
File without changes
|
{fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/budgets/scaffold_templates/schemas.py.tmpl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/goals/scaffold_templates/repository.py.tmpl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/investments/scaffold_templates/__init__.py
RENAMED
|
File without changes
|
{fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/investments/scaffold_templates/models.py.tmpl
RENAMED
|
File without changes
|
{fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/investments/scaffold_templates/repository.py.tmpl
RENAMED
|
File without changes
|
{fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/investments/scaffold_templates/schemas.py.tmpl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/net_worth/scaffold_templates/models.py.tmpl
RENAMED
|
File without changes
|
{fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/net_worth/scaffold_templates/repository.py.tmpl
RENAMED
|
File without changes
|
{fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/net_worth/scaffold_templates/schemas.py.tmpl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fin_infra-0.8.0 → fin_infra-0.9.0}/src/fin_infra/normalization/providers/static_mappings.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|