text2sql / core /models.py
ns-devel
Added print logs
8b9a027
import uuid
from django.db import models, connection
class BaseModel(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
created_at = models.DateTimeField(auto_now_add=True, null=True, blank=True)
updated_at = models.DateTimeField(auto_now=True, null=True, blank=True)
class Meta:
abstract = True
class MutualFund(BaseModel):
"""
This model will store the mutual fund data
"""
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
fund_name = models.CharField(max_length=200, unique=True)
isin_number = models.CharField(max_length=50, unique=True, null=True)
security_id = models.CharField(max_length=50, unique=True)
data = models.JSONField(null=True)
rank = models.IntegerField(unique=True, null=True)
crisil_rank = models.IntegerField(null=True)
aum = models.FloatField(null=True)
expense_ratio = models.FloatField(null=True, blank=True)
return_m12 = models.FloatField(null=True, blank=True)
nav = models.FloatField(null=True, blank=True)
@staticmethod
def execute_raw_sql_query(sql_query):
with connection.cursor() as cursor:
cursor.execute(sql_query)
columns = [col[0] for col in cursor.description]
results = [dict(zip(columns, row)) for row in cursor.fetchall()]
return results
@classmethod
def execute_query(cls, query):
try:
return cls.execute_raw_sql_query(query)
except Exception as e:
print("Error: ", repr(e))
return []
class Stock(BaseModel):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
name = models.CharField(max_length=200)
ltp = models.CharField(max_length=50, null=True)
percentage_change = models.CharField(max_length=50, null=True)
price_change = models.CharField(max_length=50, null=True)
link = models.URLField(max_length=200, null=True)
volume = models.CharField(max_length=50, null=True)
data = models.JSONField(null=True)
isin_number = models.CharField(max_length=50, unique=True, null=True)
rank = models.IntegerField(unique=True, null=True)
class MFHoldings(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
isin_number = models.CharField(max_length=20, null=True, blank=True)
security_id = models.CharField(max_length=20, null=True, blank=True)
sector = models.CharField(max_length=50, null=True, blank=True)
country = models.CharField(max_length=50, null=True, blank=True)
currency = models.CharField(max_length=100, null=True, blank=True)
weighting = models.FloatField(null=True, blank=True)
sector_code = models.CharField(max_length=100, null=True, blank=True)
holding_type = models.CharField(max_length=100, null=True, blank=True)
market_value = models.FloatField(null=True, blank=True)
stock_rating = models.CharField(max_length=100, null=True, blank=True)
total_assets = models.FloatField(null=True, blank=True)
currency_name = models.CharField(max_length=150, null=True, blank=True)
holding_name = models.CharField(max_length=100, null=True, blank=True)
holding_type = models.CharField(max_length=100, null=True, blank=True)
holding_type_id = models.CharField(max_length=100, null=True, blank=True)
number_of_shares = models.FloatField(null=True, blank=True)
one_year_return = models.FloatField(null=True, blank=True)
mutual_fund = models.ForeignKey(MutualFund, on_delete=models.CASCADE)
def __str__(self):
return f"{self.ticker} - {self.securityName}"
class MFVolatility(models.Model):
VOLATILITY_CHOICES = (
(1, "for1Year"),
(3, "for3Year"),
(5, "for5Year"),
(10, "for10Year"),
(15, "for15Year"),
)
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
mutual_fund = models.ForeignKey(MutualFund, on_delete=models.CASCADE)
year = models.CharField(max_length=100, choices=VOLATILITY_CHOICES)
alpha = models.FloatField(null=True, blank=True)
beta = models.FloatField(null=True, blank=True)
sharpe_ratio = models.FloatField(null=True, blank=True)
standard_deviation = models.FloatField(null=True, blank=True)