Skip to content

Commit 5daf37b

Browse files
committed
fix(cli): add error handling for invalid sort field; filter private attrs in currency_assets serialization
1 parent 78966d4 commit 5daf37b

2 files changed

Lines changed: 20 additions & 12 deletions

File tree

tigeropen/cli/account_cmd.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def _segment_to_dict(segment):
3131
"""Serialize a Segment object to a plain dict."""
3232
d = {k: v for k, v in segment.__dict__.items() if not k.startswith('_')}
3333
d['currency_assets'] = {
34-
currency: {k: v for k, v in ca.__dict__.items()}
34+
currency: {k: v for k, v in ca.__dict__.items() if not k.startswith('_')}
3535
for currency, ca in segment.currency_assets.items()
3636
}
3737
return d

tigeropen/cli/quote_cmd.py

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -525,17 +525,25 @@ def scanner(ctx, market, filters, sort, sort_dir, limit, page_size):
525525
raw_sort = sort_parts[0]
526526
sort_period = None
527527

528-
if raw_sort.lower().startswith('acc.'):
529-
sort_field = AccumulateField[raw_sort[4:]]
530-
if len(sort_parts) > 1 and sort_parts[1]:
531-
try:
532-
sort_period = AccumulatePeriod[sort_parts[1].upper()]
533-
except KeyError:
534-
pass
535-
elif raw_sort.lower().startswith('fin.'):
536-
sort_field = FinancialField[raw_sort[4:]]
537-
else:
538-
sort_field = StockField[raw_sort]
528+
try:
529+
if raw_sort.lower().startswith('acc.'):
530+
sort_field = AccumulateField[raw_sort[4:]]
531+
if len(sort_parts) > 1 and sort_parts[1]:
532+
try:
533+
sort_period = AccumulatePeriod[sort_parts[1].upper()]
534+
except KeyError:
535+
raise click.BadParameter(
536+
f"Unknown AccumulatePeriod: {sort_parts[1]}. Options: ANNUAL, QUARTERLY, SEMIANNUAL"
537+
)
538+
elif raw_sort.lower().startswith('fin.'):
539+
sort_field = FinancialField[raw_sort[4:]]
540+
else:
541+
sort_field = StockField[raw_sort]
542+
except KeyError:
543+
raise click.BadParameter(
544+
f"Unknown sort field: {raw_sort}. Use acc./fin. prefix for accumulate/financial fields. "
545+
f"Examples: MarketValue, acc.ROE:ANNUAL, fin.Revenue"
546+
)
539547

540548
sd = SortDirection.DESC if sort_dir.upper() == 'DESC' else SortDirection.ASC
541549
sort_filter_data = SortFilterData(sort_field, sort_dir=sd, period=sort_period)

0 commit comments

Comments
 (0)