blob: 86f586cecf580cf671465109e6c75e3f30fccd08 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
|
"""Pydantic response schemas for the Prism v2 Overview API."""
from typing import Literal
from pydantic import BaseModel, Field
class SearchResult(BaseModel):
symbol: str
name: str
exchange: str | None = None
class MarketIndex(BaseModel):
name: str
price: float | None = None
change_pct: float | None = None
class Quote(BaseModel):
price: float | None = None
prev_close: float | None = None
change: float | None = None
change_pct: float | None = None
class Signal(BaseModel):
key: str
state: Literal["pos", "warn", "neg", "neu"]
value: str
description: str
class OverviewStats(BaseModel):
market_cap: float | None = None
trailing_pe: float | None = None
trailing_eps: float | None = None
volume: float | None = None
average_volume: float | None = None
beta: float | None = None
class OverviewRatios(BaseModel):
price_to_book: float | None = None
price_to_sales: float | None = None
ev_to_sales: float | None = None
ev_to_ebitda: float | None = None
gross_margin_ttm: float | None = None
operating_margin_ttm: float | None = None
net_margin_ttm: float | None = None
roe_ttm: float | None = None
roa_ttm: float | None = None
roic_ttm: float | None = None
debt_to_equity: float | None = None
current_ratio: float | None = None
dividend_yield_ttm: float | None = None
dividend_payout_ratio_ttm: float | None = None
class Range52Week(BaseModel):
low: float | None = None
high: float | None = None
price: float | None = None
class ShortInterest(BaseModel):
short_percent_of_float: float | None = None
short_ratio: float | None = None
shares_short: int | None = None
shares_short_prior_month: int | None = None
shares_short_delta_pct: float | None = None
class CompanyProfile(BaseModel):
symbol: str
name: str
sector: str | None = None
industry: str | None = None
exchange: str | None = None
website: str | None = None
summary: str | None = None
class OverviewMeta(BaseModel):
status: Literal["complete", "partial"]
is_partial: bool = False
field_availability: dict[str, bool] = Field(default_factory=dict)
sources: dict[str, str] = Field(default_factory=dict)
class TickerOverview(BaseModel):
profile: CompanyProfile
quote: Quote
signals: list[Signal] = Field(default_factory=list)
stats: OverviewStats
ratios: OverviewRatios
range_52w: Range52Week
short_interest: ShortInterest
meta: OverviewMeta
class HistoryPoint(BaseModel):
date: str
open: float | None = None
high: float | None = None
low: float | None = None
close: float | None = None
volume: float | None = None
class FinancialRow(BaseModel):
label: str
indent: int = 0
is_total: bool = False
is_section: bool = False
is_margin: bool = False
values: list[float | None] = Field(default_factory=list)
class FinancialStatement(BaseModel):
columns: list[str] = Field(default_factory=list)
rows: list[FinancialRow] = Field(default_factory=list)
class FinancialsResponse(BaseModel):
period: Literal["annual", "quarterly"]
income: FinancialStatement
balance: FinancialStatement
cash_flow: FinancialStatement
class WatchlistItem(BaseModel):
symbol: str
created_at: str
quote: Quote | None = None
class WatchlistResponse(BaseModel):
items: list[WatchlistItem]
limit: int = 10
class ErrorResponse(BaseModel):
detail: str
|