fin-infra 0.1.65__py3-none-any.whl → 0.1.67__py3-none-any.whl
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/analytics/cash_flow.py +6 -5
- fin_infra/analytics/portfolio.py +1 -2
- fin_infra/analytics/spending.py +6 -6
- fin_infra/banking/__init__.py +1 -1
- fin_infra/banking/utils.py +5 -6
- fin_infra/cashflows/__init__.py +6 -8
- fin_infra/categorization/engine.py +3 -3
- fin_infra/categorization/llm_layer.py +3 -4
- fin_infra/categorization/models.py +1 -1
- fin_infra/chat/__init__.py +6 -6
- fin_infra/chat/ease.py +1 -1
- fin_infra/compliance/__init__.py +0 -1
- fin_infra/crypto/insights.py +2 -4
- fin_infra/documents/add.py +1 -1
- fin_infra/insights/__init__.py +7 -7
- fin_infra/investments/__init__.py +1 -1
- fin_infra/investments/add.py +2 -3
- fin_infra/investments/models.py +100 -46
- fin_infra/investments/providers/plaid.py +2 -3
- fin_infra/investments/providers/snaptrade.py +2 -2
- fin_infra/markets/__init__.py +0 -4
- fin_infra/models/transactions.py +1 -1
- fin_infra/net_worth/add.py +8 -5
- fin_infra/net_worth/aggregator.py +5 -4
- fin_infra/net_worth/ease.py +1 -1
- fin_infra/net_worth/models.py +237 -116
- fin_infra/normalization/__init__.py +6 -6
- fin_infra/obs/classifier.py +2 -2
- fin_infra/providers/base.py +12 -17
- fin_infra/recurring/add.py +8 -8
- fin_infra/recurring/detectors_llm.py +9 -8
- fin_infra/recurring/ease.py +1 -1
- fin_infra/recurring/insights.py +8 -7
- fin_infra/recurring/models.py +3 -3
- fin_infra/recurring/normalizers.py +8 -7
- {fin_infra-0.1.65.dist-info → fin_infra-0.1.67.dist-info}/METADATA +1 -2
- {fin_infra-0.1.65.dist-info → fin_infra-0.1.67.dist-info}/RECORD +40 -40
- {fin_infra-0.1.65.dist-info → fin_infra-0.1.67.dist-info}/LICENSE +0 -0
- {fin_infra-0.1.65.dist-info → fin_infra-0.1.67.dist-info}/WHEEL +0 -0
- {fin_infra-0.1.65.dist-info → fin_infra-0.1.67.dist-info}/entry_points.txt +0 -0
|
@@ -20,9 +20,12 @@ from pydantic import BaseModel, ConfigDict, Field
|
|
|
20
20
|
|
|
21
21
|
# Lazy import for optional dependency (ai-infra)
|
|
22
22
|
try:
|
|
23
|
-
from ai_infra.llm import LLM
|
|
23
|
+
from ai_infra.llm import LLM
|
|
24
|
+
|
|
25
|
+
LLM_AVAILABLE = True
|
|
24
26
|
except ImportError:
|
|
25
|
-
LLM = None
|
|
27
|
+
LLM = None # type: ignore[misc,assignment]
|
|
28
|
+
LLM_AVAILABLE = False
|
|
26
29
|
|
|
27
30
|
logger = logging.getLogger(__name__)
|
|
28
31
|
|
|
@@ -73,7 +76,7 @@ class VariableRecurringPattern(BaseModel):
|
|
|
73
76
|
"example": {
|
|
74
77
|
"is_recurring": True,
|
|
75
78
|
"cadence": "monthly",
|
|
76
|
-
"expected_range":
|
|
79
|
+
"expected_range": [45.0, 60.0],
|
|
77
80
|
"reasoning": "Seasonal winter heating causes variance",
|
|
78
81
|
"confidence": 0.85,
|
|
79
82
|
}
|
|
@@ -278,12 +281,10 @@ class VariableDetectorLLM:
|
|
|
278
281
|
)
|
|
279
282
|
|
|
280
283
|
response = await self.llm.achat(
|
|
284
|
+
user_msg=user_prompt,
|
|
281
285
|
provider=self.provider,
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
{"role": "system", "content": VARIABLE_DETECTION_SYSTEM_PROMPT},
|
|
285
|
-
{"role": "user", "content": user_prompt},
|
|
286
|
-
],
|
|
286
|
+
model_name=self.model_name,
|
|
287
|
+
system=VARIABLE_DETECTION_SYSTEM_PROMPT,
|
|
287
288
|
output_schema=VariableRecurringPattern,
|
|
288
289
|
output_method="prompt", # Cross-provider compatibility
|
|
289
290
|
temperature=0.0, # Deterministic
|
fin_infra/recurring/ease.py
CHANGED
|
@@ -200,7 +200,7 @@ def easy_recurring_detection(
|
|
|
200
200
|
)
|
|
201
201
|
|
|
202
202
|
# Validate config keys (reserved for future use)
|
|
203
|
-
valid_config_keys = set() # Will expand in future versions
|
|
203
|
+
valid_config_keys: set[str] = set() # Will expand in future versions
|
|
204
204
|
invalid_keys = set(config.keys()) - valid_config_keys
|
|
205
205
|
if invalid_keys:
|
|
206
206
|
raise ValueError(
|
fin_infra/recurring/insights.py
CHANGED
|
@@ -21,9 +21,12 @@ from pydantic import BaseModel, ConfigDict, Field
|
|
|
21
21
|
|
|
22
22
|
# Lazy import for optional dependency (ai-infra)
|
|
23
23
|
try:
|
|
24
|
-
from ai_infra.llm import LLM
|
|
24
|
+
from ai_infra.llm import LLM
|
|
25
|
+
|
|
26
|
+
LLM_AVAILABLE = True
|
|
25
27
|
except ImportError:
|
|
26
|
-
LLM = None
|
|
28
|
+
LLM = None # type: ignore[misc,assignment]
|
|
29
|
+
LLM_AVAILABLE = False
|
|
27
30
|
|
|
28
31
|
logger = logging.getLogger(__name__)
|
|
29
32
|
|
|
@@ -369,12 +372,10 @@ class SubscriptionInsightsGenerator:
|
|
|
369
372
|
user_prompt = INSIGHTS_GENERATION_USER_PROMPT.format(subscriptions_json=subscriptions_json)
|
|
370
373
|
|
|
371
374
|
response = await self.llm.achat(
|
|
375
|
+
user_msg=user_prompt,
|
|
372
376
|
provider=self.provider,
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
{"role": "system", "content": INSIGHTS_GENERATION_SYSTEM_PROMPT},
|
|
376
|
-
{"role": "user", "content": user_prompt},
|
|
377
|
-
],
|
|
377
|
+
model_name=self.model_name,
|
|
378
|
+
system=INSIGHTS_GENERATION_SYSTEM_PROMPT,
|
|
378
379
|
output_schema=SubscriptionInsights,
|
|
379
380
|
output_method="prompt", # Cross-provider compatibility
|
|
380
381
|
temperature=0.3, # Slight creativity for recommendations
|
fin_infra/recurring/models.py
CHANGED
|
@@ -228,9 +228,9 @@ class SubscriptionStats(BaseModel):
|
|
|
228
228
|
"by_pattern_type": {"fixed": 12, "variable": 2, "irregular": 1},
|
|
229
229
|
"by_cadence": {"monthly": 13, "quarterly": 1, "annual": 1},
|
|
230
230
|
"top_merchants": [
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
231
|
+
["Netflix", 15.99],
|
|
232
|
+
["Spotify", 9.99],
|
|
233
|
+
["Amazon Prime", 14.99],
|
|
234
234
|
],
|
|
235
235
|
"confidence_distribution": {
|
|
236
236
|
"high (0.85-1.0)": 12,
|
|
@@ -22,9 +22,12 @@ from pydantic import BaseModel, ConfigDict, Field
|
|
|
22
22
|
|
|
23
23
|
# Lazy import for optional dependency (ai-infra)
|
|
24
24
|
try:
|
|
25
|
-
from ai_infra.llm import LLM
|
|
25
|
+
from ai_infra.llm import LLM
|
|
26
|
+
|
|
27
|
+
LLM_AVAILABLE = True
|
|
26
28
|
except ImportError:
|
|
27
|
-
LLM = None
|
|
29
|
+
LLM = None # type: ignore[misc,assignment]
|
|
30
|
+
LLM_AVAILABLE = False
|
|
28
31
|
|
|
29
32
|
logger = logging.getLogger(__name__)
|
|
30
33
|
|
|
@@ -340,12 +343,10 @@ class MerchantNormalizer:
|
|
|
340
343
|
user_prompt = MERCHANT_NORMALIZATION_USER_PROMPT.format(merchant_name=merchant_name)
|
|
341
344
|
|
|
342
345
|
response = await self.llm.achat(
|
|
346
|
+
user_msg=user_prompt,
|
|
343
347
|
provider=self.provider,
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
{"role": "system", "content": MERCHANT_NORMALIZATION_SYSTEM_PROMPT},
|
|
347
|
-
{"role": "user", "content": user_prompt},
|
|
348
|
-
],
|
|
348
|
+
model_name=self.model_name,
|
|
349
|
+
system=MERCHANT_NORMALIZATION_SYSTEM_PROMPT,
|
|
349
350
|
output_schema=MerchantNormalized,
|
|
350
351
|
output_method="prompt", # Cross-provider compatibility
|
|
351
352
|
temperature=0.0, # Deterministic
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: fin-infra
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.67
|
|
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
|
|
@@ -30,7 +30,6 @@ Requires-Dist: plaid-python (>=25.0.0)
|
|
|
30
30
|
Requires-Dist: pydantic (>=2.0)
|
|
31
31
|
Requires-Dist: pydantic-settings (>=2.0)
|
|
32
32
|
Requires-Dist: python-dotenv (>=1.0.0)
|
|
33
|
-
Requires-Dist: svc-infra (>=0.1.0)
|
|
34
33
|
Requires-Dist: tenacity (>=8.0.0)
|
|
35
34
|
Requires-Dist: typing-extensions (>=4.0)
|
|
36
35
|
Requires-Dist: yahooquery (>=2.3.0)
|
|
@@ -2,18 +2,18 @@ fin_infra/__init__.py,sha256=5vcHN0u9CE43mnK2VgiMyWTiyANupUISawvxx-2AfqE,480
|
|
|
2
2
|
fin_infra/__main__.py,sha256=1qNP7j0ffw0wFs1dBwDcJ9TNXlC6FcYuulzoV87pMi8,262
|
|
3
3
|
fin_infra/analytics/__init__.py,sha256=aiuNnii0vc34XlNzrSiMbz33lzgmR7W1nHkmAEXavCY,1870
|
|
4
4
|
fin_infra/analytics/add.py,sha256=a8ZcVc0-3gxq64IFs9fN7XVMayzE6RCCnBWV3zzc7GU,12832
|
|
5
|
-
fin_infra/analytics/cash_flow.py,sha256=
|
|
5
|
+
fin_infra/analytics/cash_flow.py,sha256=lH-J6RIUzcV9Fuy56i12N6vuIdPaGz-rhWquSgjkldU,10300
|
|
6
6
|
fin_infra/analytics/ease.py,sha256=p8WwFP4ivvFsvZzYRCZZVHgnPThiODve9r4-m0xnxQQ,14343
|
|
7
7
|
fin_infra/analytics/models.py,sha256=cK6VKLZ763zXfn9REXOnLGx0v3Q8bUa-vH8aoNs2w-A,8215
|
|
8
|
-
fin_infra/analytics/portfolio.py,sha256=
|
|
8
|
+
fin_infra/analytics/portfolio.py,sha256=_-whS-jwLpkhwSPmZOSipilcY2oujSItsvTzVtUsEbM,26497
|
|
9
9
|
fin_infra/analytics/projections.py,sha256=7cuG6w1KXq8sd3UNufu5aOcxG5n-foswrHqrgWWKQUM,9186
|
|
10
10
|
fin_infra/analytics/rebalancing.py,sha256=K3S7KQiIU2LwyAwWN9VrSly4AOl24vN9tz_JX7I9FJ8,14642
|
|
11
11
|
fin_infra/analytics/savings.py,sha256=tavIRZtu9FjCm-DeWg5f060GcsdgD-cl-vgKOnieOUw,7574
|
|
12
12
|
fin_infra/analytics/scenarios.py,sha256=LE_dZVkbxxAx5sxitGhiOhZfWTlYtVbIvS9pEXkijLc,12246
|
|
13
|
-
fin_infra/analytics/spending.py,sha256
|
|
14
|
-
fin_infra/banking/__init__.py,sha256
|
|
13
|
+
fin_infra/analytics/spending.py,sha256=pubio9mFpTyVrebLsMYTYPPrgQ1_ML8ostwFenC7nb4,26225
|
|
14
|
+
fin_infra/banking/__init__.py,sha256=6brdnsK6ddLhypk4h0sblM1yv6BkQ46Nyq8Zvf5AewY,22570
|
|
15
15
|
fin_infra/banking/history.py,sha256=1ufAwkTnXr-QJetFzJl4xA2e3dqd1-TkT8pf46MNfho,10630
|
|
16
|
-
fin_infra/banking/utils.py,sha256=
|
|
16
|
+
fin_infra/banking/utils.py,sha256=qQRJR0jUWXzRTBSy9vMYC4h7APub7Jb2drJH10vtY40,15678
|
|
17
17
|
fin_infra/brokerage/__init__.py,sha256=2Qmiubu9kxouidrCcIHOMvYGHEgVDD5y2S2XRBAWng8,17263
|
|
18
18
|
fin_infra/budgets/__init__.py,sha256=V6euagDkFHvWyjHeI64fxfddhOHDlIWwOc-PnTyyQb4,3986
|
|
19
19
|
fin_infra/budgets/add.py,sha256=tdfNXD9deEEzy0xCRbTwbx70SX9wiJkWj0Huk_uCjFg,13584
|
|
@@ -27,18 +27,18 @@ fin_infra/budgets/scaffold_templates/repository.py.tmpl,sha256=khFgnQnVNnOo8DWYD
|
|
|
27
27
|
fin_infra/budgets/scaffold_templates/schemas.py.tmpl,sha256=x5gSQ7Kiuq08tum5joKmeY0ib2r3ekLKk09dFOl0PS0,5658
|
|
28
28
|
fin_infra/budgets/templates.py,sha256=Sbc7RcHXscq34g4t7J8OXM2Kfkt5DHuvqVnFU0Jiddc,12112
|
|
29
29
|
fin_infra/budgets/tracker.py,sha256=U8C7k2VV8bOjtjPIWR8qXktsBNSyBAUnE9o2mjEs1MU,16490
|
|
30
|
-
fin_infra/cashflows/__init__.py,sha256=
|
|
30
|
+
fin_infra/cashflows/__init__.py,sha256=zwuST5PYHJHXwfqKaKo19ubvD0T3lR54RVOvzjOCNPI,8521
|
|
31
31
|
fin_infra/cashflows/core.py,sha256=Or0hPqCvY_ypV0YiMXh-mle6xWK0tE8WuPPAqHGUp8E,532
|
|
32
32
|
fin_infra/categorization/__init__.py,sha256=efLje12AW-ec9Vs5ynb41r4XCIWx5a-Z9WoGb3kQdIE,2030
|
|
33
33
|
fin_infra/categorization/add.py,sha256=JDOvxngh-7oWHTddOyP4GAse9vLuxSTfoIhrDKUHOKg,6278
|
|
34
34
|
fin_infra/categorization/ease.py,sha256=oIcPVuxXOPaAhSe_OcfO4eumCg9WpfIZUdg-k-Xx800,5859
|
|
35
|
-
fin_infra/categorization/engine.py,sha256=
|
|
36
|
-
fin_infra/categorization/llm_layer.py,sha256=
|
|
37
|
-
fin_infra/categorization/models.py,sha256
|
|
35
|
+
fin_infra/categorization/engine.py,sha256=Qk14HQQB6rBwEZ0cSz47l_jD4eFpWlSJzHg8kjC0KK8,12107
|
|
36
|
+
fin_infra/categorization/llm_layer.py,sha256=5QjDcvYzzqFMsjYe-izl7QEp_SCe_qJ7P5I5gLa0vf8,12699
|
|
37
|
+
fin_infra/categorization/models.py,sha256=-rGXR0RW2EU_FQ7ZfDWBIXxx8QGJDxeBF9zKGYyVgqY,5931
|
|
38
38
|
fin_infra/categorization/rules.py,sha256=m3OogJY0hJe5BrmZqOvOKS2-HRdW4Y5jvvtlPDn9Pn8,12884
|
|
39
39
|
fin_infra/categorization/taxonomy.py,sha256=qsgo7VJkM6GFBBOaTRHWP82vl5SinRKnMsj4ICarEyQ,13281
|
|
40
|
-
fin_infra/chat/__init__.py,sha256=
|
|
41
|
-
fin_infra/chat/ease.py,sha256=
|
|
40
|
+
fin_infra/chat/__init__.py,sha256=NENUXr0Gb39avrUI75g6Wi0GXQo8KhvxKTrcNHYo4vs,6328
|
|
41
|
+
fin_infra/chat/ease.py,sha256=8T0BQUkWQVpaTooD5-ZtinackkciqGargXnzWzayj3M,3113
|
|
42
42
|
fin_infra/chat/planning.py,sha256=eKUW6VDHJS-xQTks7bgjNQaO32Fr5gA_oP5NLt2y5Zs,19916
|
|
43
43
|
fin_infra/cli/__init__.py,sha256=7M8gKULnui4__9kXRKRHgETuFwZlacK9xrq5rSZ31CM,376
|
|
44
44
|
fin_infra/cli/cmds/__init__.py,sha256=BvL3wRoUl3cO5wesv1Cqoatup7VeYMhq82tS19iNZHE,136
|
|
@@ -46,7 +46,7 @@ fin_infra/cli/cmds/scaffold_cmds.py,sha256=HZrnJ6NgTBYbt6LuJeoi7JKJgWE_umX9v7zjt
|
|
|
46
46
|
fin_infra/clients/__init__.py,sha256=EiKkAW8WY5dWtu7DDmpf3DBNcjJArxcQnE_wTAtVRho,129
|
|
47
47
|
fin_infra/clients/base.py,sha256=K5nI4GJzT36oUUYGynV3b4eywJdTTa5EX26QK7XdTcc,970
|
|
48
48
|
fin_infra/clients/plaid.py,sha256=jwcLdQe0G7afLO5JH5jsBosE4iz_cFsb04I8_hCbIb0,807
|
|
49
|
-
fin_infra/compliance/__init__.py,sha256=
|
|
49
|
+
fin_infra/compliance/__init__.py,sha256=IpeFi0ztw619Etvq2ln6kYFVwr6OrcVX6W7n5Mh3Nf4,5222
|
|
50
50
|
fin_infra/credit/__init__.py,sha256=cwCP_WlrG-0yb_L4zYsuzEsSalcfiCY9ItqXfD7Jx9E,6719
|
|
51
51
|
fin_infra/credit/add.py,sha256=D3btx9pmZ3tF6AYC6P4Y3dYaUuWp7M3FpDrFksxi5uM,8553
|
|
52
52
|
fin_infra/credit/experian/__init__.py,sha256=g3IJGvDOMsnB0er0Uwdvl6hGKKTOazqJxSDnB2oIBm0,761
|
|
@@ -56,9 +56,9 @@ fin_infra/credit/experian/parser.py,sha256=7ptdLyTWWqHWqCo1CXn6L7XaIn9ZRRuOaATbF
|
|
|
56
56
|
fin_infra/credit/experian/provider.py,sha256=l3NW6dppgxeUkrThftH-IB43bwuZGhNcW0jVBGF8XGY,13783
|
|
57
57
|
fin_infra/credit/mock.py,sha256=xKWZk3fhuIYRfiZkNc9fbHUNViNKjmOLSj0MTI1f4ik,5356
|
|
58
58
|
fin_infra/crypto/__init__.py,sha256=HpplYEY8GiBz55ehYRDQxs8SWJIW1smBs9eFOKt_nzI,8318
|
|
59
|
-
fin_infra/crypto/insights.py,sha256=
|
|
59
|
+
fin_infra/crypto/insights.py,sha256=BBC7SSxD6FJAXKPvOkC8KK4HNy7Gtzfn0egUx_wzVJM,11444
|
|
60
60
|
fin_infra/documents/__init__.py,sha256=Ub1hbX3PTrBSsBdcbL8PFf6oq8jSH4pYxW45-qOYPqs,1909
|
|
61
|
-
fin_infra/documents/add.py,sha256=
|
|
61
|
+
fin_infra/documents/add.py,sha256=qvy_TWAHhSUjEnvKGgtDTEc8YbRx97cxXtpkc7pU5uc,8145
|
|
62
62
|
fin_infra/documents/analysis.py,sha256=zY5OQEIlq3JLNND_cg2KheFdryUmIecPOR2lR6oKhPw,13992
|
|
63
63
|
fin_infra/documents/ease.py,sha256=rnxEIMjf6vLvD-h5WD4wM6PwmcB4iUtAtnvGxbFA5zA,9625
|
|
64
64
|
fin_infra/documents/models.py,sha256=5MK5Mvs7s6HfNuNldT4xxwLGV4z1f7vNJLwDD-jalgw,6889
|
|
@@ -76,23 +76,23 @@ fin_infra/goals/scaffold_templates/__init__.py,sha256=rLFam-mRsj8LvJu5kRBEIJtw9r
|
|
|
76
76
|
fin_infra/goals/scaffold_templates/models.py.tmpl,sha256=b23Nlwm05MFMQE4qkrylTPXqulsN6cuFzNev2liY7DI,5714
|
|
77
77
|
fin_infra/goals/scaffold_templates/repository.py.tmpl,sha256=4BFy-fPBR412p8wb8VzsekxM3uGno-odqZP_BuMAXBU,11046
|
|
78
78
|
fin_infra/goals/scaffold_templates/schemas.py.tmpl,sha256=M1hS1pK9UDXcNqPW-NGu9804hTFe4FPdUDVgDSMcQl4,5331
|
|
79
|
-
fin_infra/insights/__init__.py,sha256=
|
|
79
|
+
fin_infra/insights/__init__.py,sha256=3rQvgC6a-4Nh_mv3HbS1bIN0Hc7IgRNncM0BVGo21NA,3959
|
|
80
80
|
fin_infra/insights/aggregator.py,sha256=XG32mN5w5Nc4AZllmfl1esL4q44mFAf0Fvj9mWev_zk,10249
|
|
81
81
|
fin_infra/insights/models.py,sha256=xov_YV8oBLJt3YdyVjbryRfcXqmGeGiPvZsZHSbvtl8,3202
|
|
82
|
-
fin_infra/investments/__init__.py,sha256=
|
|
83
|
-
fin_infra/investments/add.py,sha256=
|
|
82
|
+
fin_infra/investments/__init__.py,sha256=5B7m5gp9WRJHOzelYn29B4edDKIl_ZwN0kYiJ6c9LiA,6758
|
|
83
|
+
fin_infra/investments/add.py,sha256=lC2oK6TnJN0wbw7j5k4AKKuV1bQwi67PHG5u2PwUkNw,17560
|
|
84
84
|
fin_infra/investments/ease.py,sha256=7oyMcTVmnc8pn3lqriLRruBLEznI_grpDkH7hfXmGhE,9527
|
|
85
|
-
fin_infra/investments/models.py,sha256=
|
|
85
|
+
fin_infra/investments/models.py,sha256=_ltCQNfQ8b34ywJvheEUhmXH-gSVwCGbmZlsaNNbznE,18305
|
|
86
86
|
fin_infra/investments/providers/__init__.py,sha256=V1eIzz6EnGJ-pq-9L3S2-evmcExF-YdZfd5P6JMyDtc,383
|
|
87
87
|
fin_infra/investments/providers/base.py,sha256=KaJdIdeWi2WaWAogcFZw7jcqQ_IzMZw6misBNk-n6bE,9890
|
|
88
|
-
fin_infra/investments/providers/plaid.py,sha256=
|
|
89
|
-
fin_infra/investments/providers/snaptrade.py,sha256=
|
|
88
|
+
fin_infra/investments/providers/plaid.py,sha256=9alF6vQs41CO5D75anumhMzzBbQ_E3s1DzMMwHD9igc,18109
|
|
89
|
+
fin_infra/investments/providers/snaptrade.py,sha256=gK4BMqMqqxFJWCyBNBdd5cllRTruVA_xvgZz4rWgxrM,23556
|
|
90
90
|
fin_infra/investments/scaffold_templates/README.md,sha256=PhgxfMLrro2Jz83b7XEnBi7lexiWKqlMrd2UU2Rbs8A,12149
|
|
91
91
|
fin_infra/investments/scaffold_templates/__init__.py,sha256=iR0oiAzXFYXHBnVJjaEnAzk6omncYOLg0TKMJ7xomBc,82
|
|
92
92
|
fin_infra/investments/scaffold_templates/models.py.tmpl,sha256=5inP5-jw-qEfPYxSN71tn4AojZ9PesOIeuHTw181N-c,5849
|
|
93
93
|
fin_infra/investments/scaffold_templates/repository.py.tmpl,sha256=XwOEpQZfuXut1WLiq-GSSvv0oX0iYCW54eJNL0Cav94,14656
|
|
94
94
|
fin_infra/investments/scaffold_templates/schemas.py.tmpl,sha256=knWmn-Kyr7AdgPD4ZPMb6T49ZuPXeuOMqmjYNyA0CA0,5451
|
|
95
|
-
fin_infra/markets/__init__.py,sha256=
|
|
95
|
+
fin_infra/markets/__init__.py,sha256=BKyJsqA0Da3L9KOgnOXYXq4LTgTMggD6KU-Sa7nFf24,9786
|
|
96
96
|
fin_infra/models/__init__.py,sha256=q3SkGzDGFkoAMxwqJw8i4cHWt5NGU5ypjOgntxDGVKo,860
|
|
97
97
|
fin_infra/models/accounts.py,sha256=PeobjGg6WM70OvOTe0JIo0zo7tBM0PDAcyClQT-Jo4o,1141
|
|
98
98
|
fin_infra/models/brokerage.py,sha256=z6Zyf0N5zmmXtrN2y_4fNmtIP5wNq40H8lrHLBwY7rc,8311
|
|
@@ -101,21 +101,21 @@ fin_infra/models/credit.py,sha256=rSdSURsMe9_i2gxmwPTDwNQWOuM2zutL-OhvHsnbtmw,12
|
|
|
101
101
|
fin_infra/models/money.py,sha256=5BX8IQZkrNtjjnGIQAK2tyKnVim0R-yc1F_EBxUhcr0,400
|
|
102
102
|
fin_infra/models/quotes.py,sha256=_2cDJS8_RLo4tLpJlqWd32J8uFNP0bbf1V_0u3NuLwo,543
|
|
103
103
|
fin_infra/models/tax.py,sha256=lhNVIW650CdtpfgmSyMMJdojV7QnpHOUFQKiwMLTT4A,15656
|
|
104
|
-
fin_infra/models/transactions.py,sha256
|
|
104
|
+
fin_infra/models/transactions.py,sha256=-tLG9bYGRrV_ixaNmiJU0bf9BgngIRE7T6MD88r9rtA,868
|
|
105
105
|
fin_infra/net_worth/__init__.py,sha256=EjEuHNg8gEfFwbfko1-o5j-gSUZ2FcO9h7l05C-zAJM,3101
|
|
106
|
-
fin_infra/net_worth/add.py,sha256=
|
|
107
|
-
fin_infra/net_worth/aggregator.py,sha256=
|
|
106
|
+
fin_infra/net_worth/add.py,sha256=QWfHIHJs2CV99WRBqjQ2OteiOrn5cR9nurmxTF9v5rg,23191
|
|
107
|
+
fin_infra/net_worth/aggregator.py,sha256=3iZGPE3AlS2Za90Mnw9XfKa2-BmCWLKkTUmDLztP9EQ,12779
|
|
108
108
|
fin_infra/net_worth/calculator.py,sha256=JERDtZyFurw5x2NYqfHvJzv6qigamI3AFfR-wesTj_E,13133
|
|
109
|
-
fin_infra/net_worth/ease.py,sha256=
|
|
109
|
+
fin_infra/net_worth/ease.py,sha256=gioKs6uwatOXKubWtyLsg8W0bXDP9DwhBEGyzwhuj2k,15890
|
|
110
110
|
fin_infra/net_worth/goals.py,sha256=BJGxdsMjvgQDELFEJo-ai3DvsAzUNXvzMXkwovHr8yQ,1238
|
|
111
111
|
fin_infra/net_worth/insights.py,sha256=vVK4BtfHNJGb1wyk9XD0fLpoadATTdorF8OxHOgD9b0,25222
|
|
112
|
-
fin_infra/net_worth/models.py,sha256=
|
|
112
|
+
fin_infra/net_worth/models.py,sha256=sZv3dGw5zwckE2XQ7n5ehK7sv4jdGCo9c2g4ZtZHwCI,26880
|
|
113
113
|
fin_infra/net_worth/scaffold_templates/README.md,sha256=Wqd6ksqFjmtNdDFOWVV_duuAcePWwiu3_YgkVM9N_WY,14363
|
|
114
114
|
fin_infra/net_worth/scaffold_templates/__init__.py,sha256=OKeMCC_JNw6m8rBWr_wesOIJ1OR9LCBeIkXKahbCGC4,132
|
|
115
115
|
fin_infra/net_worth/scaffold_templates/models.py.tmpl,sha256=9BKsoD08RZbSdOm0wFTbx5OzKfAEtuA1NcWyS1Aywx4,5934
|
|
116
116
|
fin_infra/net_worth/scaffold_templates/repository.py.tmpl,sha256=DSErnNxeAe4pWeefARRK3bU0hHltqdIFffENfVwdd7c,12798
|
|
117
117
|
fin_infra/net_worth/scaffold_templates/schemas.py.tmpl,sha256=VkFsxyZx4DFDhXDhn-7KT0IgrXCvgaS5ZdWbjyezWj0,4709
|
|
118
|
-
fin_infra/normalization/__init__.py,sha256=
|
|
118
|
+
fin_infra/normalization/__init__.py,sha256=npvKMnCCAhbuPZAskN8PBIiq89MIU2FNpVxuOGG0DlY,6224
|
|
119
119
|
fin_infra/normalization/currency_converter.py,sha256=uuu8ASa5ppEniWLEVEpiDxXjZzln9nopWrhrATcD6Z4,7058
|
|
120
120
|
fin_infra/normalization/models.py,sha256=gNC9chpbQPRN58V2j__VEPVNReO1N8jH_AHObwGPWu0,1928
|
|
121
121
|
fin_infra/normalization/providers/__init__.py,sha256=LFU1tB2hVO42Yrkw-IDpPexD4mIlxob9lRrJEeGYqpE,559
|
|
@@ -123,12 +123,12 @@ fin_infra/normalization/providers/exchangerate.py,sha256=vA1W2yVpCf89kOx6lctbHOQ
|
|
|
123
123
|
fin_infra/normalization/providers/static_mappings.py,sha256=m14VHmTZipbqrgyE0ABToabVx-pDcyB577LNWrACEUM,6809
|
|
124
124
|
fin_infra/normalization/symbol_resolver.py,sha256=M7Li7LFiH4xpvxXcYQlJyk0iqgqpwaj6zQKsTzWZzas,8130
|
|
125
125
|
fin_infra/obs/__init__.py,sha256=kMMVl0fdwtJtZeKiusTuw0iO61Jo9-HNXsLmn3ffLRE,631
|
|
126
|
-
fin_infra/obs/classifier.py,sha256=
|
|
126
|
+
fin_infra/obs/classifier.py,sha256=FEwL1lEV_f9bFBr36PaZsV4DxU3spwIXPoegwBgzSMc,5146
|
|
127
127
|
fin_infra/providers/__init__.py,sha256=jxhQm79T6DVXf7Wpy7luL-p50cE_IMUbjt4o3apzJQU,768
|
|
128
128
|
fin_infra/providers/banking/base.py,sha256=KeNU4ur3zLKHVsBF1LQifcs2AKX06IEE-Rx_SetFeAs,102
|
|
129
129
|
fin_infra/providers/banking/plaid_client.py,sha256=21m6ZkovwXuUuj0-dgQVDLxSfxZVjhuXj8di_-q3jGc,6617
|
|
130
130
|
fin_infra/providers/banking/teller_client.py,sha256=QmrsBlk3_rHT-pTQPrIAA74kjIjcgdi-gOb8NA3oBO8,10268
|
|
131
|
-
fin_infra/providers/base.py,sha256=
|
|
131
|
+
fin_infra/providers/base.py,sha256=_Ez3WFGY4TwWks2juqt0yv2lR6VQxdIl3mh4z8I2kY0,6698
|
|
132
132
|
fin_infra/providers/brokerage/alpaca.py,sha256=wRVfVmExiYXCk1pLRmHSrfo91714JIm3rrD0djrNfT8,9938
|
|
133
133
|
fin_infra/providers/brokerage/base.py,sha256=JJFH0Cqca4Rg4rmxfiwcQt-peRoBf4JpG3g6jx8DVks,106
|
|
134
134
|
fin_infra/providers/credit/experian.py,sha256=r7lpFecgOdNEhb_Lxz2Z-BG8R3p2n0XlqDKL7y8NZ-0,482
|
|
@@ -145,14 +145,14 @@ fin_infra/providers/tax/mock.py,sha256=AxI3RmEn3exdQeeUNkQYqZ-war5PS--WnLGXfRRee
|
|
|
145
145
|
fin_infra/providers/tax/taxbit.py,sha256=DEA7vgQPYMjz4ZdC0DpY7112FLZJ2kvwgAbDZnpHFy0,4271
|
|
146
146
|
fin_infra/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
147
147
|
fin_infra/recurring/__init__.py,sha256=ihMPywft8pGqzMu6EXxbQCU7ByoMl_dvad00gWV1mnk,2308
|
|
148
|
-
fin_infra/recurring/add.py,sha256=
|
|
148
|
+
fin_infra/recurring/add.py,sha256=cW1mqNwTWR8IUX3GIEeD-aLHnulorCqwG4H7iGvUJI4,19050
|
|
149
149
|
fin_infra/recurring/detector.py,sha256=1e6PRoBAT2NxoGAgcVHAWwpPtznkJMaYSrJtvSq0YqM,20154
|
|
150
|
-
fin_infra/recurring/detectors_llm.py,sha256=
|
|
151
|
-
fin_infra/recurring/ease.py,sha256=
|
|
152
|
-
fin_infra/recurring/insights.py,sha256=
|
|
153
|
-
fin_infra/recurring/models.py,sha256=
|
|
150
|
+
fin_infra/recurring/detectors_llm.py,sha256=YNG3GOvto8ua9yNacmejYcDOHZzN9UUpDtRdrzDsLSY,11504
|
|
151
|
+
fin_infra/recurring/ease.py,sha256=Vsg_AnTLjb5QXfFjijH2C50Or9hJGIVLtczk0U71h74,11189
|
|
152
|
+
fin_infra/recurring/insights.py,sha256=a4fhASyiNQTdUl2ijaxi2HqhWDhf-aJND2c62d9lgEo,15886
|
|
153
|
+
fin_infra/recurring/models.py,sha256=o0N8G-QhVb4zILEyry6M1VZ7liFJIOHwlejvn6p4K8M,8894
|
|
154
154
|
fin_infra/recurring/normalizer.py,sha256=Rc1ntIDGir6X-I5lgv49kdLry_zHGJ8cys_Jf3F6Lhk,9761
|
|
155
|
-
fin_infra/recurring/normalizers.py,sha256=
|
|
155
|
+
fin_infra/recurring/normalizers.py,sha256=37-ER4deeJhywrNVEe9KteecC_eH7xesTl2CWhRbdi0,15928
|
|
156
156
|
fin_infra/recurring/summary.py,sha256=1Wte58ZZkEFulkb-nnpwfC5h7C_JrqByy47itdVdWwc,14665
|
|
157
157
|
fin_infra/scaffold/__init__.py,sha256=OyD8ZtIC4eNTHqD16rbpT8KU0TpZUI6VV4xne4vpaHg,831
|
|
158
158
|
fin_infra/scaffold/budgets.py,sha256=XXOLlEcyBXVwdbJB__qObRXJ0oe1okwDT_-5tG8c9Yk,9515
|
|
@@ -173,8 +173,8 @@ fin_infra/utils/__init__.py,sha256=gKacLSWMAis--pasd8AuVN7ap0e9Z1TjRGur0J23EDo,6
|
|
|
173
173
|
fin_infra/utils/http.py,sha256=pvcxbNQ9oisoGPkNe3xX9aAgWzEN6mmdtr1w-L02Xj8,629
|
|
174
174
|
fin_infra/utils/retry.py,sha256=ISBrup5XCuXqHZh9kjTGvGQYcuyYyqZE4u26wW7r3CM,1030
|
|
175
175
|
fin_infra/version.py,sha256=4t_crzhrLum--oyowUMxtjBTzUtWp7oRTF22ewEvJG4,49
|
|
176
|
-
fin_infra-0.1.
|
|
177
|
-
fin_infra-0.1.
|
|
178
|
-
fin_infra-0.1.
|
|
179
|
-
fin_infra-0.1.
|
|
180
|
-
fin_infra-0.1.
|
|
176
|
+
fin_infra-0.1.67.dist-info/LICENSE,sha256=wK-Ya7Ylxa38dSIZRhvNj1ZVLIrHC-BAI8v38PNADiA,1061
|
|
177
|
+
fin_infra-0.1.67.dist-info/METADATA,sha256=rLRLOO3W23-NmLTScjmv7yPD49BxzoyRkc3bQ5ApJNU,10183
|
|
178
|
+
fin_infra-0.1.67.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
|
|
179
|
+
fin_infra-0.1.67.dist-info/entry_points.txt,sha256=Sr1uikvALZMeKm-DIkeKG4L9c4SNqysXGO_IRF8_9eU,53
|
|
180
|
+
fin_infra-0.1.67.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|