""" AUTHOR: Khushal P Soonderji DATE: Monday, 6th Jan., 2024. OBJECTIVE: To provide a data model for describing the margin/funds of a user of Zerodha Kite. REFERENCES: N/A DOWNLOADS: N/A """ # ***************************************************************************************************************** # ***** **** # *** IMPORT *** # ***** **** # ***************************************************************************************************************** # To make sibling directories accessible for imports: import sys sys.path.append(".") sys.path.append("..") # For making data behaviour_models: from pydantic import BaseModel, Field, field_validator, model_validator, AwareDatetime from typing import Optional, Literal, Union, Dict, List, Any # Related to Google: from google.auth.transport.requests import Request from google.oauth2.credentials import Credentials # My utils: from utils_v2.string import json from utils_v2.string import regex from utils_v2.date_time import date_time # To work with date and time: import datetime import dateparser # To make API calls: import httpx # ***************************************************************************************************************** # ***** **** # *** MACROS / ONE-TIME INIT *** # ***** **** # ***************************************************************************************************************** # --- Nothing Yet # ***************************************************************************************************************** # ***** **** # *** VARIABLES *** # ***** **** # ***************************************************************************************************************** # --- Nothing Yet # ***************************************************************************************************************** # ***** **** # *** FUNCTIONS *** # ***** **** # ***************************************************************************************************************** class AvailableFunds(BaseModel): adhocMargin: float | int = Field(default = 0, alias = "adhoc_margin") cash: float | int = Field(default = 0, alias = "cash") openingBalance: float | int = Field(default = 0, alias = "opening_balance") liveBalance: float | int = Field(default = 0, alias = "live_balance") collateral: float | int = Field(default = 0, alias = "collateral") intradayPayin: float | int = Field(default = 0, alias = "intraday_payin") # ┏┓ ┏• # ┃ ┏┓┏┓╋┓┏┓ # ┗┛┗┛┛┗┛┗┗┫ # ┛ class Config: extra = "ignore" populate_by_name = True # ┓┏ ┓• ┓ • # ┃┃┏┓┃┓┏┫┏┓╋┓┏┓┏┓ # ┗┛┗┻┗┗┗┻┗┻┗┗┗┛┛┗ pass # ┏┓ • # ┃┃┏┓┏┓┏┓┏┓┏┓╋┓┏┓┏ # ┣┛┛ ┗┛┣┛┗ ┛ ┗┗┗ ┛ # ┛ pass # ┏┓ ┏┓ # ┃ ┓┏┏╋┏┓┏┳┓ ┣ ┓┏┏┓┏┏ # ┗┛┗┻┛┗┗┛┛┗┗ ┻ ┗┻┛┗┗┛ pass # --------------------------------------------------------------------------------------------------------------------- class UtilizedFunds(BaseModel): debits: float | int = Field(default = 0, alias = "debits") exposure: float | int = Field(default = 0, alias = "exposure") m2mRealized: float | int = Field(default = 0, alias = "m2m_realised") m2mUnrealized: float | int = Field(default = 0, alias = "m2m_unrealised") optionPremium: float | int = Field(default = 0, alias = "option_premium") payout: float | int = Field(default = 0, alias = "payout") span: float | int = Field(default = 0, alias = "span") holdingSales: float | int = Field(default = 0, alias = "holding_sales") turnover: float | int = Field(default = 0, alias = "turnover") liquidCollateral: float | int = Field(default = 0, alias = "liquid_collateral") stockCollateral: float | int = Field(default = 0, alias = "stock_collateral") equity: float | int = Field(default = 0, alias = "equity") delivery: float | int = Field(default = 0, alias = "delivery") # ┏┓ ┏• # ┃ ┏┓┏┓╋┓┏┓ # ┗┛┗┛┛┗┛┗┗┫ # ┛ class Config: extra = "ignore" populate_by_name = True # ┓┏ ┓• ┓ • # ┃┃┏┓┃┓┏┫┏┓╋┓┏┓┏┓ # ┗┛┗┻┗┗┗┻┗┻┗┗┗┛┛┗ pass # ┏┓ • # ┃┃┏┓┏┓┏┓┏┓┏┓╋┓┏┓┏ # ┣┛┛ ┗┛┣┛┗ ┛ ┗┗┗ ┛ # ┛ pass # ┏┓ ┏┓ # ┃ ┓┏┏╋┏┓┏┳┓ ┣ ┓┏┏┓┏┏ # ┗┛┗┻┛┗┗┛┛┗┗ ┻ ┗┻┛┗┗┛ pass # --------------------------------------------------------------------------------------------------------------------- class SegmentInfo(BaseModel): enabled: bool = Field(default = False, alias = "enabled") net: float | int = Field(default = 0, alias = "net") available: AvailableFunds = Field(default = AvailableFunds(), alias = "available") utilized: UtilizedFunds = Field(default = UtilizedFunds(), alias = "utilised") # ┏┓ ┏• # ┃ ┏┓┏┓╋┓┏┓ # ┗┛┗┛┛┗┛┗┗┫ # ┛ class Config: extra = "ignore" populate_by_name = True # ┓┏ ┓• ┓ • # ┃┃┏┓┃┓┏┫┏┓╋┓┏┓┏┓ # ┗┛┗┻┗┗┗┻┗┻┗┗┗┛┛┗ pass # ┏┓ • # ┃┃┏┓┏┓┏┓┏┓┏┓╋┓┏┓┏ # ┣┛┛ ┗┛┣┛┗ ┛ ┗┗┗ ┛ # ┛ pass # ┏┓ ┏┓ # ┃ ┓┏┏╋┏┓┏┳┓ ┣ ┓┏┏┓┏┏ # ┗┛┗┻┛┗┗┛┛┗┗ ┻ ┗┻┛┗┗┛ pass # --------------------------------------------------------------------------------------------------------------------- class ZerodhaKiteUserFunds(BaseModel): equity: SegmentInfo = Field(default = SegmentInfo(), alias = "equity") commodity: SegmentInfo = Field(default = SegmentInfo(), alias = "commodity") # ┏┓ ┏• # ┃ ┏┓┏┓╋┓┏┓ # ┗┛┗┛┛┗┛┗┗┫ # ┛ class Config: extra = "ignore" populate_by_name = True # ┓┏ ┓• ┓ • # ┃┃┏┓┃┓┏┫┏┓╋┓┏┓┏┓ # ┗┛┗┻┗┗┗┻┗┻┗┗┗┛┛┗ pass # ┏┓ • # ┃┃┏┓┏┓┏┓┏┓┏┓╋┓┏┓┏ # ┣┛┛ ┗┛┣┛┗ ┛ ┗┗┗ ┛ # ┛ pass # ┏┓ ┏┓ # ┃ ┓┏┏╋┏┓┏┳┓ ┣ ┓┏┏┓┏┏ # ┗┛┗┻┛┗┗┛┛┗┗ ┻ ┗┻┛┗┗┛ pass # ***************************************************************************************************************** # ***** **** # *** MAIN PROGRAM *** # ***** **** # ***************************************************************************************************************** if __name__ == "__main__": pass