Skip to content

Commit 8ef9db7

Browse files
committed
add auto accrue dates
1 parent 4fb4a50 commit 8ef9db7

File tree

5 files changed

+59
-23
lines changed

5 files changed

+59
-23
lines changed

absbox/client.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,8 @@ def __post_init__(self) -> None:
186186
if _r is None:
187187
raise RuntimeError(f"Failed to get version from url:{self.url}")
188188
self.server_info = self.server_info | json.loads(_r)
189+
if "_version" not in self.server_info:
190+
raise RuntimeError(f"Failed to get version info from server:{self.server_info}")
189191
engine_version = self.server_info['_version'].split(".")
190192
if self.check and (self.version[1] != engine_version[1]):
191193
console.print("pls upgrade your api package by: pip -U absbox")

absbox/library.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ def login(self, user, pw, **q):
8989
else:
9090
console.print(f"❌ Failed to login,{r['msg']}")
9191
self.token = None
92-
return None
92+
return r
9393

9494
def ack(self):
9595
"""acknowledge library connection
@@ -152,7 +152,6 @@ def get(self, q):
152152
,"Content-Type":"application/octet-stream"})
153153

154154
return r
155-
#console.print(f"✅ Get deal success")
156155

157156
def run(self, _id, **p):
158157
"""send deal id with assumptions to remote server and get result back

absbox/local/component.py

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -44,25 +44,25 @@ def mkDatePattern(x):
4444
return mkTag(("DayOfMonth", vInt(_d)))
4545
case ["MonthDayOfYear", _m, _d] | ["每年", _m, _d] | ("每年", _m, _d):
4646
return mkTag(("MonthDayOfYear",[vInt(_m), vInt(_d)]))
47-
case ["CustomDate", *_ds] | ["Custom", *_ds] :
47+
case ["CustomDate", *_ds] | ["Custom", *_ds] | ("Custom", *_ds) :
4848
return mkTag(("CustomDate", _ds))
49-
case ["EveryNMonth", d, n]:
49+
case ["EveryNMonth", d, n] | ("EveryNMonth", d, n):
5050
return mkTag(("EveryNMonth", [vDate(d), vInt(n)]))
5151
case ["Weekday", n] if n >= 0 and n <= 6:
5252
return mkTag(("Weekday", vInt(n)))
53-
case ["all", *_dps] | ["All", *_dps] | ["AllDatePattern", *_dps] | ["+", *_dps]:
53+
case ["all", *_dps] | ["All", *_dps] | ["AllDatePattern", *_dps] | ["+", *_dps] | ("+", *_dps) | ("all", *_dps) | ("AllDatePattern", *_dps):
5454
return mkTag(("AllDatePattern", lmap(mkDatePattern, _dps)))
55-
case [">", _d, dp] | ["After", _d, dp] | ["之后", _d, dp]:
55+
case [">", _d, dp] | ["After", _d, dp] | ["之后", _d, dp] | (">", _d, dp) | ("After", _d, dp):
5656
return mkTag(("StartsAt", ["Exc", vDate(_d), mkDatePattern(dp) ]))
57-
case [">=", _d, dp] :
57+
case [">=", _d, dp] | (">=", _d, dp):
5858
return mkTag(("StartsAt", ["Inc", vDate(_d), mkDatePattern(dp) ]))
59-
case ["<", _d, dp] | ["Before", _d, dp] | ["之前", _d, dp]:
59+
case ["<", _d, dp] | ["Before", _d, dp] | ["之前", _d, dp] | ("<", _d, dp) | ("Before", _d, dp):
6060
return mkTag(("EndsAt", ["Exc", vDate(_d), mkDatePattern(dp) ]))
61-
case ["<=", _d, dp] :
61+
case ["<=", _d, dp] | ("<=", _d, dp):
6262
return mkTag(("EndsAt", ["Inc", vDate(_d), mkDatePattern(dp) ]))
63-
case ["Exclude", _d, _dps] | ["ExcludeDatePattern", _d, _dps] | ["排除", _d, _dps] | ["-", _d, _dps]:
63+
case ["Exclude", _d, _dps] | ["ExcludeDatePattern", _d, _dps] | ["排除", _d, _dps] | ["-", _d, _dps] | ("Exclude", _d, _dps) | ("-", _d, _dps):
6464
return mkTag(("Exclude", [mkDatePattern(_d), [mkDatePattern(_) for _ in _dps]]))
65-
case ["Offset", _dp, n] | ["OffsetDateDattern", _dp, n] | ["平移", _dp, n]:
65+
case ["Offset", _dp, n] | ["OffsetDateDattern", _dp, n] | ["平移", _dp, n] | ("Offset", _dp, n):
6666
return mkTag(("OffsetBy", [mkDatePattern(_dp), vInt(n)]))
6767
case _x if (_x in datePattern.values()):
6868
return mkTag((_x))
@@ -73,7 +73,7 @@ def mkDatePattern(x):
7373
case _:
7474
raise RuntimeError(f"Failed to match {x}")
7575

76-
76+
# TODO need to deprecate it
7777
def getStartDate(x:dict) -> tuple:
7878
match x:
7979
case {"封包日": a, "起息日": b, "首次兑付日": c, "法定到期日": d, "收款频率": pf, "付款频率": bf} | \
@@ -87,14 +87,20 @@ def getStartDate(x:dict) -> tuple:
8787
return (vDate(lastCollected), vDate(pp))
8888
case {"lastCollect":a,"lastPay":b}:
8989
return (a, b)
90+
case ("accrue", m):
91+
return getStartDate(m)
9092
case _:
9193
raise RuntimeError(f"Failed to get Start Date from {x}")
9294

9395

9496
def mkDate(x):
9597
''' make dates component for deal '''
9698
match x:
97-
case {"cutoff": a, "closing": b, "firstPay": c,"firstCollect": d, "stated": e, "poolFreq": pf, "payFreq": bf, "cust":cust} if isinstance(cust, dict):
99+
case ("accrue", m):
100+
return mkDate(m) | {"tag": "AccruedGenericDates"}
101+
102+
case {"cutoff": a, "closing": b, "firstPay": c,"firstCollect": d, "stated": e, "poolFreq": pf, "payFreq": bf}:
103+
cust = x.get("cust", {})
98104
custom = {f"CustomExeDates {k}":mkDatePattern(v) for k,v in cust.items()}
99105
m = {
100106
"CutoffDate":mkDatePattern(vDate(a)),
@@ -106,7 +112,8 @@ def mkDate(x):
106112
"CollectionDates":mkDatePattern(pf),
107113
} | custom
108114
return mkTag(("GenericDates",m))
109-
case {"lastCollect": a, "lastPay": b, "nextPay": c,"nextCollect": d, "stated": e, "poolFreq": pf, "payFreq": bf, "cust":cust} if isinstance(cust, dict):
115+
case {"lastCollect": a, "lastPay": b, "nextPay": c,"nextCollect": d, "stated": e, "poolFreq": pf, "payFreq": bf} :
116+
cust = x.get("cust", {})
110117
custom = {f"CustomExeDates {k}":mkDatePattern(v) for k,v in cust.items()}
111118
m = {
112119
"LastCollectDate":mkDatePattern(vDate(a)),
@@ -128,8 +135,7 @@ def mkDate(x):
128135
"DistributionDates":mkDatePattern(bf),
129136
"CollectionDates":mkDatePattern(pf),
130137
}
131-
y = mkTag(("GenericDates",m))
132-
return y
138+
return mkTag(("GenericDates",m))
133139
case {"封包日": a, "起息日": b, "首次兑付日": c, "法定到期日": d, "收款频率": pf, "付款频率": bf} | \
134140
{"cutoff": a, "closing": b, "firstPay": c, "stated": d, "poolFreq": pf, "payFreq": bf} if (not "cust" in x):
135141
firstCollection = x.get("首次归集日", b)
@@ -2600,7 +2606,4 @@ def translate(y) -> dict:
26002606
return r
26012607
case [x,*rest]:
26022608
return mkNonPerfAssumps(r | translate(x),rest)
2603-
from enum import Enum
2604-
import itertools
2605-
import sys
2606-
import functools
2609+

absbox/local/generic.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,14 +51,13 @@ class Generic:
5151

5252
@property
5353
def json(self) -> dict:
54-
parsedDates = mkDate(self.dates)
55-
(lastAssetDate, lastCloseDate) = getStartDate(self.dates)
54+
(lastAssetDate, _) = getStartDate(self.dates)
5655
mixedAssetFlag = isMixedDeal(self.pool)
5756
"""
5857
get the json formatted string
5958
"""
6059
_r = {
61-
"dates": parsedDates,
60+
"dates": mkDate(self.dates),
6261
"name": vStr(self.name),
6362
"status":mkStatus(self.status),
6463
"pool":mkPoolType(lastAssetDate, self.pool, mixedAssetFlag),

justfile

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
2+
3+
4+
test:
5+
echo "Running Tests"
6+
pytest absbox/tests/regression/test_main.py
7+
8+
update-version version:
9+
echo "Update Version: {version}"
10+
# sed -i "s/^version = .*/version = \"{version}\"/g" pyproject.toml
11+
sed -i "s/^version = .*/version = {{version}}/g" setup.cfg
12+
sed -i "s/^release = .*/release = \"{{version}}\"/g" docs/source/conf.py
13+
sed -i "s/^version = .*/version = \"{{version}}\"/g" docs/source/conf.py
14+
15+
tag version:
16+
echo "Tagging"
17+
git add pyproject.toml setup.cfg
18+
git commit -m "bump version to-> < {{version}} >"
19+
git tag -a {{env}}{{version}} -m "{{env}}{{version}}"
20+
git push origin HEAD --tag
21+
22+
untag version:
23+
echo "Untagging"
24+
git tag -d {{version}}
25+
git push --delete origin
26+
27+
push-tag:
28+
echo "Pushing Tag"
29+
git push origin HEAD --tag
30+
31+
push-code:
32+
echo "Pushing Code"
33+
git push origin HEAD

0 commit comments

Comments
 (0)