Source code for richy.etfs.models

from django.core.cache import cache
from django.db import models

from ..core.models import BaseDividend, Item, ItemData
from ..indexes.models import Index


[docs] class Etf(Item): item_type = Item.Type.ETF indexes = models.ManyToManyField(Index, blank=True) def is_share(self): return False def is_index(self): return False def is_etf(self): return True def is_coin(self): return False # ItemData access methods.
[docs] def set_holdings(self, data): try: record = self.itemdata record.data["holdings"] = data except ItemData.DoesNotExist: record = ItemData(item=self, data={"holdings": data}) record.save()
[docs] def get_holdings(self): try: return self.itemdata.data["holdings"] except (ItemData.DoesNotExist, KeyError): return None
[docs] def update_cache(self): super().update_cache() from ..transactions.transactions import Performance cache.delete("etfs-transaction-performance-and-assets") cache.delete("etfs-transaction-profit-performance") Performance("etf", profit=False, use_cache=False).get_data() Performance("etf", profit=True, use_cache=False).get_data()
[docs] class Dividend(BaseDividend): etf = models.ForeignKey(Etf, on_delete=models.CASCADE)