pix / models.py
sarim's picture
get all currency
0e6871c
from typing import Dict, List, Optional
from pydantic import BaseModel, Field, validator, field_validator
from datetime import datetime
class PsxStock(BaseModel):
script_code: str
script_name: str
ldcp: str
open: str
high: str
low: str
current: str
change: str
volume: str
trend: str
class PsxMarketResponse(BaseModel):
sectors: Dict[str, List[PsxStock]]
class CircuitBreaker(BaseModel):
lower_limit: float = Field(..., alias="lowerLimit")
upper_limit: float = Field(..., alias="upperLimit")
current_price: float = Field(..., alias="currentPrice")
class DayRange(BaseModel):
low: float
high: float
current: float
class YearRange(BaseModel):
low: float
high: float
current: float
class TradingStats(BaseModel):
open_price: Optional[float] = Field(None, alias="open")
high_price: Optional[float] = Field(None, alias="high")
low_price: Optional[float] = Field(None, alias="low")
close_price: Optional[float] = Field(None, alias="close")
volume: Optional[int] = None
ask_price: Optional[float] = Field(None, alias="askPrice")
ask_volume: Optional[int] = Field(None, alias="askVolume")
bid_price: Optional[float] = Field(None, alias="bidPrice")
bid_volume: Optional[int] = Field(None, alias="bidVolume")
ldcp: Optional[float] = None
var: Optional[float] = None
haircut: Optional[float] = None
pe_ratio: Optional[float] = Field(None, alias="peRatio")
class QuoteData(BaseModel):
company_name: str = Field(..., alias="companyName")
symbol: str
sector: str
current_price: float = Field(..., alias="currentPrice")
change: float
change_percent: float = Field(..., alias="changePercent")
circuit_breaker: CircuitBreaker
day_range: DayRange = Field(..., alias="dayRange")
year_range: YearRange = Field(..., alias="yearRange")
trading_stats: TradingStats = Field(..., alias="tradingStats")
one_year_change: Optional[float] = Field(None, alias="oneYearChange")
ytd_change: Optional[float] = Field(None, alias="ytdChange")
class FinancialResult(BaseModel):
date: str
title: str
document_link: Optional[str] = Field(None, alias="documentLink")
pdf_link: Optional[str] = Field(None, alias="pdfLink")
class FinancialEntry(BaseModel):
period: str
sales: Optional[float] = None
profit_after_tax: Optional[float] = Field(None, alias="profitAfterTax")
eps: Optional[float] = None
class Financials(BaseModel):
annual: List[FinancialEntry]
quarterly: List[FinancialEntry]
class RatioEntry(BaseModel):
period: str
gross_profit_margin: Optional[float] = Field(None, alias="grossProfitMargin")
net_profit_margin: Optional[float] = Field(None, alias="netProfitMargin")
eps_growth: Optional[float] = Field(None, alias="epsGrowth")
peg: Optional[float] = None
class CompanyProfile(BaseModel):
business_description: str = Field(..., alias="businessDescription")
key_people: List[Dict[str, str]] = Field(..., alias="keyPeople")
address: str
website: str
registrar: str
auditor: str
fiscal_year_end: str = Field(..., alias="fiscalYearEnd")
class EquityProfile(BaseModel):
market_cap: float = Field(..., alias="marketCap")
shares: int
free_float_units: int = Field(..., alias="freeFloatUnits")
free_float_percent: float = Field(..., alias="freeFloatPercent")
class CompanyData(BaseModel):
# quote: QuoteData
# profile: CompanyProfile
# equity: EquityProfile
announcements: List[FinancialResult]
financials: Financials
ratios: List[RatioEntry]
timestamp: datetime = Field(default_factory=datetime.now)
class CircuitBreakerRow(BaseModel):
symbol: str
ldcp: float
open: float
high: float
low: float
current: float
change: float
change_percent: float
volume: int
@field_validator(
"ldcp", "open", "high", "low", "current", "change", "change_percent",
mode="before"
)
@classmethod
def parse_float(cls, v):
return float(v.replace(",", "").replace("%", ""))
@field_validator("volume", mode="before")
@classmethod
def parse_int(cls, v):
return int(v.replace(",", ""))
## Currency Model
from typing import Optional
from pydantic import BaseModel
class CountryName(BaseModel):
field_1inch: str = Field(..., alias='1inch')
aave: str
ada: str
aed: str
afn: str
agix: str
akt: str
algo: str
all: str
amd: str
amp: str
ang: str
aoa: str
ape: str
apt: str
ar: str
arb: str
ars: str
atom: str
aud: str
avax: str
awg: str
axs: str
azn: str
bake: str
bam: str
bat: str
bbd: str
bch: str
bdt: str
bgn: str
bhd: str
bif: str
bmd: str
bnb: str
bnd: str
bob: str
brl: str
bsd: str
bsv: str
bsw: str
btc: str
btg: str
btn: str
btt: str
busd: str
bwp: str
byn: str
byr: str
bzd: str
cad: str
cake: str
cdf: str
celo: str
cfx: str
chf: str
chz: str
clp: str
cnh: str
cny: str
comp: str
cop: str
crc: str
cro: str
crv: str
cspr: str
cuc: str
cup: str
cve: str
cvx: str
czk: str
dai: str
dash: str
dcr: str
dfi: str
djf: str
dkk: str
doge: str
dop: str
dot: str
dydx: str
dzd: str
egld: str
egp: str
enj: str
eos: str
ern: str
etb: str
etc: str
eth: str
eur: str
fei: str
fil: str
fjd: str
fkp: str
flow: str
flr: str
frax: str
ftt: str
gala: str
gbp: str
gel: str
ggp: str
ghs: str
gip: str
gmd: str
gmx: str
gnf: str
gno: str
grt: str
gt: str
gtq: str
gusd: str
gyd: str
hbar: str
hkd: str
hnl: str
hnt: str
hot: str
hrk: str
ht: str
htg: str
huf: str
icp: str
idr: str
ils: str
imp: str
imx: str
inj: str
inr: str
iqd: str
irr: str
isk: str
jep: str
jmd: str
jod: str
jpy: str
kas: str
kava: str
kcs: str
kda: str
kes: str
kgs: str
khr: str
kmf: str
knc: str
kpw: str
krw: str
ksm: str
kwd: str
kyd: str
kzt: str
lak: str
lbp: str
ldo: str
leo: str
link: str
lkr: str
lrc: str
lrd: str
lsl: str
ltc: str
ltl: str
luna: str
lunc: str
lvl: str
lyd: str
mad: str
mana: str
mbx: str
mdl: str
mga: str
mina: str
mkd: str
mkr: str
mmk: str
mnt: str
mop: str
mru: str
mur: str
mvr: str
mwk: str
mxn: str
myr: str
mzn: str
nad: str
near: str
neo: str
nexo: str
nft: str
ngn: str
nio: str
nok: str
npr: str
nzd: str
okb: str
omr: str
one: str
op: str
ordi: str
pab: str
paxg: str
pen: str
pepe: str
pgk: str
php: str
pi: str
pkr: str
pln: str
pol: str
pyg: str
qar: str
qnt: str
qtum: str
ron: str
rpl: str
rsd: str
rub: str
rune: str
rvn: str
rwf: str
sand: str
sar: str
sbd: str
scr: str
sdg: str
sek: str
sgd: str
shib: str
shp: str
sle: str
sll: str
snx: str
sol: str
sos: str
srd: str
std: str
stn: str
stx: str
sui: str
svc: str
syp: str
szl: str
thb: str
theta: str
tjs: str
tmt: str
tnd: str
ton: str
top: str
trx: str
try_: str = Field(..., alias='try')
ttd: str
tusd: str
twd: str
twt: str
tzs: str
uah: str
ugx: str
uni: str
usd: str
usdc: str
usdd: str
usdp: str
usdt: str
uyu: str
uzs: str
ves: str
vet: str
vnd: str
vuv: str
waves: str
wemix: str
woo: str
wst: str
xaf: str
xag: str
xau: str
xaut: str
xcd: str
xcg: str
xch: str
xdc: str
xdr: str
xec: str
xem: str
xlm: str
xmr: str
xof: str
xpf: str
xrp: str
xtz: str
yer: str
zar: str
zec: str
zil: str
zmk: str
zmw: str
zwl: str
class PkrRates(BaseModel):
"""Model for PKR exchange rates against various currencies"""
inch: float = Field(..., alias='1inch')
aave: Optional[float] = 0.000027870604
ada: Optional[float] = 0.01212527
aed: Optional[float] = 0.013141508
afn: Optional[float] = 0.22735161
agix: Optional[float] = 0.046521451
akt: Optional[float] = 0.010385581
algo: Optional[float] = 0.036216193
all: Optional[float] = 0.29080989
amd: Optional[float] = 1.36284581
amp: Optional[float] = 2.24984732
ang: Optional[float] = 0.0064189272
aoa: Optional[float] = 3.27135551
ape: Optional[float] = 0.026637767
apt: Optional[float] = 0.0036678014
ar: Optional[float] = 0.0017025592
arb: Optional[float] = 0.02994547
ars: Optional[float] = 4.99480145
atom: Optional[float] = 0.0016563239
ats: Optional[float] = 0.041480256
aud: Optional[float] = 0.0050590778
avax: Optional[float] = 0.00037492198
awg: Optional[float] = 0.0064052552
axs: Optional[float] = 0.0024467576
azm: Optional[float] = 30.44265554
azn: Optional[float] = 0.0060885311
bake: Optional[float] = 1.34151212
bam: Optional[float] = 0.0058958256
bat: Optional[float] = 0.026497622
bbd: Optional[float] = 0.0071567097
bch: Optional[float] = 0.000006389789
bdt: Optional[float] = 0.43772915
bef: Optional[float] = 0.12160414
bgn: Optional[float] = 0.0058958256
bhd: Optional[float] = 0.0013454614
bif: Optional[float] = 10.57869332
bmd: Optional[float] = 0.0035783548
bnb: Optional[float] = 0.0000056818118
bnd: Optional[float] = 0.0045205631
bob: Optional[float] = 0.024734743
brl: Optional[float] = 0.018678264
bsd: Optional[float] = 0.0035783548
bsv: Optional[float] = 0.00020956946
bsw: Optional[float] = 1.81327133
btc: Optional[float] = 0.000000051457291 # 5.1457291e-8
btg: Optional[float] = 0.0041817238
btn: Optional[float] = 0.32404079
btt: Optional[float] = 10075.74928564
busd: Optional[float] = 0.0035764397
bwp: Optional[float] = 0.046911298
byn: Optional[float] = 0.010237608
byr: Optional[float] = 102.37607704
bzd: Optional[float] = 0.0071995125
cad: Optional[float] = 0.0048731761
cake: Optional[float] = 0.0026684964
cdf: Optional[float] = 8.1224622
celo: Optional[float] = 0.039886713
cfx: Optional[float] = 0.062977778
chf: Optional[float] = 0.0027485132
chz: Optional[float] = 0.084007786
clp: Optional[float] = 3.08238532
cnh: Optional[float] = 0.024695302
cny: Optional[float] = 0.024721696
comp: Optional[float] = 0.00017687447
cop: Optional[float] = 13.09720649
crc: Optional[float] = 1.72893021
cro: Optional[float] = 0.043457367
crv: Optional[float] = 0.013495293
cspr: Optional[float] = 0.99753074
cuc: Optional[float] = 0.0035783548
cup: Optional[float] = 0.085787938
cve: Optional[float] = 0.33240757
cvx: Optional[float] = 0.001812335
cyp: Optional[float] = 0.0017643013
czk: Optional[float] = 0.073152658
dai: Optional[float] = 0.0035784301
dash: Optional[float] = 0.000088593379
dcr: Optional[float] = 0.00014578477
dem: Optional[float] = 0.0058958256
dfi: Optional[float] = 5.35164713
djf: Optional[float] = 0.63819024
dkk: Optional[float] = 0.022531693
doge: Optional[float] = 0.03161875
dop: Optional[float] = 0.2223377
dot: Optional[float] = 0.0025389979
dydx: Optional[float] = 0.031888397
dzd: Optional[float] = 0.46388719
eek: Optional[float] = 0.047166605
egld: Optional[float] = 0.00068601026
egp: Optional[float] = 0.16730156
enj: Optional[float] = 0.15902853
eos: Optional[float] = 0.040239152
ern: Optional[float] = 0.053675323
esp: Optional[float] = 0.50156856
etb: Optional[float] = 0.55621057
etc: Optional[float] = 0.0003995226
eth: Optional[float] = 0.0000017365799
eur: Optional[float] = 0.0030144878
eurc: Optional[float] = 0.0030166921
fei: Optional[float] = 0.0035090934
fil: Optional[float] = 0.0035277925
fim: Optional[float] = 0.01792333
fjd: Optional[float] = 0.0078727543
fkp: Optional[float] = 0.0026213082
flow: Optional[float] = 0.07995228
flr: Optional[float] = 0.36052625
frax: Optional[float] = 0.0036090592
frf: Optional[float] = 0.019773744
ftt: Optional[float] = 0.010051534
gala: Optional[float] = 0.83330051
gbp: Optional[float] = 0.0026213082
gel: Optional[float] = 0.009591452
ggp: Optional[float] = 0.0026213082
ghc: Optional[float] = 393.42404137
ghs: Optional[float] = 0.039342404
gip: Optional[float] = 0.0026213082
gmd: Optional[float] = 0.26411095
gmx: Optional[float] = 0.00054220394
gnf: Optional[float] = 31.40305737
gno: Optional[float] = 0.000027069202
grd: Optional[float] = 1.02718671
grt: Optional[float] = 0.12436019
gt: Optional[float] = 0.0004932477
gtq: Optional[float] = 0.027422428
gusd: Optional[float] = 0.0035820834
gyd: Optional[float] = 0.74824559
hbar: Optional[float] = 0.03468262
hkd: Optional[float] = 0.02797238
hnl: Optional[float] = 0.094857481
hnt: Optional[float] = 0.0031545799
hot: Optional[float] = 8.77272144
hrk: Optional[float] = 0.022712658
ht: Optional[float] = 0.014406174
htg: Optional[float] = 0.46996889
huf: Optional[float] = 1.14312086
icp: Optional[float] = 0.0014210805
idr: Optional[float] = 60.2210084
iep: Optional[float] = 0.002374102
ils: Optional[float] = 0.011043883
imp: Optional[float] = 0.0026213082
imx: Optional[float] = 0.020578292
inj: Optional[float] = 0.0010994197
inr: Optional[float] = 0.32404079
iqd: Optional[float] = 4.68801963
irr: Optional[float] = 4575.15188598
isk: Optional[float] = 0.43718127
itl: Optional[float] = 5.83686224
jep: Optional[float] = 0.0026213082
jmd: Optional[float] = 0.55854612
jod: Optional[float] = 0.0025370536
jpy: Optional[float] = 0.5464799
kas: Optional[float] = 0.10824109
kava: Optional[float] = 0.061803407
kcs: Optional[float] = 0.00041413697
kda: Optional[float] = 0.44424418
kes: Optional[float] = 0.46130149
kgs: Optional[float] = 0.31295651
khr: Optional[float] = 14.37682204
klay: Optional[float] = 0.05966859
kmf: Optional[float] = 1.48303077
knc: Optional[float] = 0.023756734
kpw: Optional[float] = 3.22057115
krw: Optional[float] = 5.15615217
ksm: Optional[float] = 0.00074242121
kwd: Optional[float] = 0.0010966712
kyd: Optional[float] = 0.0029556765
kzt: Optional[float] = 1.77225517
lak: Optional[float] = 76.63134176
lbp: Optional[float] = 321.24646567
ldo: Optional[float] = 0.010060335
leo: Optional[float] = 0.00040689885
link: Optional[float] = 0.00039577489
lkr: Optional[float] = 1.10636398
lrc: Optional[float] = 0.10452585
lrd: Optional[float] = 0.6665422
lsl: Optional[float] = 0.057056562
ltc: Optional[float] = 0.000064180737
ltl: Optional[float] = 0.010408423
luf: Optional[float] = 0.12160414
luna: Optional[float] = 0.055650373
lunc: Optional[float] = 103.17056374
lvl: Optional[float] = 0.002118582
lyd: Optional[float] = 0.022530779
mad: Optional[float] = 0.032674995
mana: Optional[float] = 0.033309473
mbx: Optional[float] = 0.067994222
mdl: Optional[float] = 0.060616726
mga: Optional[float] = 15.70701508
mgf: Optional[float] = 78.53507542
mina: Optional[float] = 0.052000424
mkd: Optional[float] = 0.18573365
mkr: Optional[float] = 0.0000021884969
mmk: Optional[float] = 7.5133109
mnt: Optional[float] = 12.76193802
mop: Optional[float] = 0.028811551
mro: Optional[float] = 1.42969127
mru: Optional[float] = 0.14296913
mtl: Optional[float] = 0.0012941196
mur: Optional[float] = 0.16422284
mvr: Optional[float] = 0.05529167
mwk: Optional[float] = 6.20471537
mxn: Optional[float] = 0.061423027
mxv: Optional[float] = 0.0070874814
myr: Optional[float] = 0.013980479
mzm: Optional[float] = 228.55055252
mzn: Optional[float] = 0.22855055
nad: Optional[float] = 0.057056562
near: Optional[float] = 0.0033478921
neo: Optional[float] = 0.0012221448
nexo: Optional[float] = 0.0041653116
nft: Optional[float] = 10324.6074446
ngn: Optional[float] = 4.85024477
nio: Optional[float] = 0.13151867
nlg: Optional[float] = 0.0066430568
nok: Optional[float] = 0.034016339
npr: Optional[float] = 0.51870829
nzd: Optional[float] = 0.0059255473
okb: Optional[float] = 0.000044555727
omr: Optional[float] = 0.0013744249
one: Optional[float] = 1.34065259
op: Optional[float] = 0.018308592
ordi: Optional[float] = 0.0012187735
pab: Optional[float] = 0.0035783548
paxg: Optional[float] = 0.0000007115336 # 7.115336e-7
pen: Optional[float] = 0.011999961
pepe: Optional[float] = 737.8067472
pgk: Optional[float] = 0.015333169
php: Optional[float] = 0.20716718
pi: Optional[float] = 0.018629944
pkr: Optional[float] = 1.0
pln: Optional[float] = 0.012697271
pol: Optional[float] = 0.033052428
pte: Optional[float] = 0.60435054
pyg: Optional[float] = 23.44895477
qar: Optional[float] = 0.013025212
qnt: Optional[float] = 0.000048647043
qtum: Optional[float] = 0.0034882245
rol: Optional[float] = 153.53159924
ron: Optional[float] = 0.01535316
rpl: Optional[float] = 0.0020615425
rsd: Optional[float] = 0.35404644
rub: Optional[float] = 0.27456613
rune: Optional[float] = 0.0085832862
rvn: Optional[float] = 0.56276866
rwf: Optional[float] = 5.21546965
sand: Optional[float] = 0.038975081
sar: Optional[float] = 0.013418831
sbd: Optional[float] = 0.028782375
scr: Optional[float] = 0.052206617
sdd: Optional[float] = 214.75529922
sdg: Optional[float] = 2.14755299
sek: Optional[float] = 0.031929605
sgd: Optional[float] = 0.0045205631
shib: Optional[float] = 518.99655842
shp: Optional[float] = 0.0026213082
sit: Optional[float] = 0.72239185
skk: Optional[float] = 0.090814459
sle: Optional[float] = 0.081765145
sll: Optional[float] = 81.76514481
snx: Optional[float] = 0.011623316
sol: Optional[float] = 0.000040638459
sos: Optional[float] = 2.04303502
spl: Optional[float] = 0.00059639247
srd: Optional[float] = 0.13559105
srg: Optional[float] = 135.59105178
ssp: Optional[float] = 16.29194282
std: Optional[float] = 74.1291884
stn: Optional[float] = 0.074129188
stx: Optional[float] = 0.012988158
sui: Optional[float] = 0.0034980047
svc: Optional[float] = 0.031310605
syp: Optional[float] = 0.3957423
szl: Optional[float] = 0.057056562
thb: Optional[float] = 0.11116065
theta: Optional[float] = 0.016388406
tjs: Optional[float] = 0.033782985
tmm: Optional[float] = 62.54995053
tmt: Optional[float] = 0.01250999
tnd: Optional[float] = 0.010272105
ton: Optional[float] = 0.0024115185
top: Optional[float] = 0.0084204575
trl: Optional[float] = 156077.25045115
trx: Optional[float] = 0.012694543
try_: float = Field(..., alias='try')
ttd: Optional[float] = 0.024142566
tusd: Optional[float] = 0.0035839966
tvd: Optional[float] = 0.0050590778
twd: Optional[float] = 0.11230099
twt: Optional[float] = 0.0068069886
tzs: Optional[float] = 9.23521055
uah: Optional[float] = 0.15408012
ugx: Optional[float] = 12.66715156
uni: Optional[float] = 0.00098728734
usd: Optional[float] = 0.0035783548
usdc: Optional[float] = 0.0035786866
usdd: Optional[float] = 0.0035802976
usdp: Optional[float] = 0.0035803197
usdt: Optional[float] = 0.003579871
uyu: Optional[float] = 0.13856147
uzs: Optional[float] = 43.73539013
val: Optional[float] = 5.83686224
veb: Optional[float] = 140480603.3195581
ved: Optional[float] = 1.40480603
vef: Optional[float] = 140480.60331956
ves: Optional[float] = 1.40480603
vet: Optional[float] = 0.40967996
vnd: Optional[float] = 92.87837846
vuv: Optional[float] = 0.42560658
waves: Optional[float] = 0.0063235068
wemix: Optional[float] = 0.011294285
woo: Optional[float] = 0.19966932
wst: Optional[float] = 0.0097052715
xaf: Optional[float] = 1.97737435
xag: Optional[float] = 0.000046224216
xau: Optional[float] = 0.00000070955592 # 7.0955592e-7
xaut: Optional[float] = 0.0000007159874 # 7.159874e-7
xbt: Optional[float] = 0.000000051485012 # 5.1485012e-8
xcd: Optional[float] = 0.0096659557
xcg: Optional[float] = 0.0064189272
xch: Optional[float] = 0.0011740879
xdc: Optional[float] = 0.095836852
xdr: Optional[float] = 0.0026022409
xec: Optional[float] = 417.58644553
xem: Optional[float] = 4.50114505
xlm: Optional[float] = 0.020355646
xmr: Optional[float] = 0.000010185332
xof: Optional[float] = 1.97737435
xpd: Optional[float] = 0.0000020938589
xpf: Optional[float] = 0.35972408
xpt: Optional[float] = 0.0000017299438
xrp: Optional[float] = 0.0023407297
xtz: Optional[float] = 0.0085248659
yer: Optional[float] = 0.85292226
zar: Optional[float] = 0.057056562
zec: Optional[float] = 0.000010949103
zil: Optional[float] = 0.79280654
zmk: Optional[float] = 65.25187985
zmw: Optional[float] = 0.06525188
zwd: Optional[float] = 1.29500661
zwg: Optional[float] = 0.091476953
zwl: Optional[float] = 228.57567566
class ExchangeRateResponse(BaseModel):
"""Main model for exchange rate data"""
date: datetime
pkr: PkrRates
class CurrencyResponse(BaseModel):
country: str
currency: float
class CurrencyCountryResponse(BaseModel):
response: List[CurrencyResponse]