def __init__(self, tree, obj, parent=None): cache = tree.cache self.isposition = False if isinstance(obj, jsonFund): obj = obj.dbobj if isinstance(obj, jsonPosition): self.isposition = obj obj = obj.dbobj self.folder = False self.movable = True self.__mkt_risk = MarketRiskPosition(cache, self) self.fund = parent.fund elif isinstance(obj, Fund): self.isfund = True self.__mkt_risk = MarketRiskPortfolio(cache, self) self.fund = obj else: self.canaddto = True self.editable = True self.movable = True self.__mkt_risk = MarketRiskPortfolio(cache, self) self.fund = parent.fund self.tree = tree self.parent = parent self.children = [] positionBase.__init__(self, cache, obj, tree.dte)
def __init__(self, tree, obj, parent = None): cache = tree.cache self.isposition = False if isinstance(obj,jsonFund): obj = obj.dbobj if isinstance(obj,jsonPosition): self.isposition = obj obj = obj.dbobj self.folder = False self.movable = True self.__mkt_risk = MarketRiskPosition(cache,self) self.fund = parent.fund elif isinstance(obj,Fund): self.isfund = True self.__mkt_risk = MarketRiskPortfolio(cache,self) self.fund = obj else: self.canaddto = True self.editable = True self.movable = True self.__mkt_risk = MarketRiskPortfolio(cache,self) self.fund = parent.fund self.tree = tree self.parent = parent self.children = [] positionBase.__init__(self, cache, obj, tree.dte)
def _build(self): self.__mkt_risk = MarketRiskPortfolio(self.cache, self) dt = self.dte.dateonly funds = self.dbobj.fund_set.all() self.funds = [] # debugging #funds = funds[:1] # Create the funds for f in funds: self.funds.append(self.cache.portfolio(f, dt)) # Add the callbacks funds = self.funds[:] for f in funds: f.addcallback(self.addfund)
def _build(self): self.__mkt_risk = MarketRiskPortfolio(self.cache, self) dt = self.dte.dateonly funds = self.dbobj.fund_set.all() self.funds = [] # debugging #funds = funds[:1] # Create the funds for f in funds: self.funds.append(self.cache.portfolio(f,dt)) # Add the callbacks funds = self.funds[:] for f in funds: f.addcallback(self.addfund)
class jsonTeam(positionBase): ''' A Fund JSON object. This object mantains the information for a Team object ''' def __init__(self, cache, obj, dte): super(jsonTeam,self).__init__(cache, obj, dte) self.parent = None self.children = [] self.jelements = [] self.element_objects = {} self.json['elements'] = self.jelements def _build(self): self.__mkt_risk = MarketRiskPortfolio(self.cache, self) dt = self.dte.dateonly funds = self.dbobj.fund_set.all() self.funds = [] # debugging #funds = funds[:1] # Create the funds for f in funds: self.funds.append(self.cache.portfolio(f,dt)) # Add the callbacks funds = self.funds[:] for f in funds: f.addcallback(self.addfund) def addfund(self, f): self.funds.remove(f) elems = self.element_objects jelems = self.jelements for jpos in f.element_objects.values(): if isinstance(jpos,jsonPosition): code = jpos.code aggp = elems.get(code,None) if not aggp: aggp = jsonAggregatePosition(self.cache, jpos.fininst, jpos.dbobj, self.ccy) # Register self as observer of aggp aggp.attach(self) elems[code] = aggp self.children.append(code) jelems.append(aggp.json) else: aggp.append(jpos.dbobj, withinfo = True) # when finished, build the object if not self.funds: self.log('Finished adding funds') self.register() self._closebuild() def register(self): for jp in self.element_objects.values(): jp.register() super(jsonTeam,self).register() def _get_ccy(self): return 'USD' ccy = property(fget = _get_ccy) def __get_mktrisk(self): mr = self.__mkt_risk return mr mktrisk = property(fget = __get_mktrisk) def refresh_me(self): ''' Called by observer superclass to refresh self values if needed ''' #positionBase.refresh_me(self) self.__mkt_risk.calculate(withRisk = False)
class jsonTeam(positionBase): ''' A Fund JSON object. This object mantains the information for a Team object ''' def __init__(self, cache, obj, dte): super(jsonTeam, self).__init__(cache, obj, dte) self.parent = None self.children = [] self.jelements = [] self.element_objects = {} self.json['elements'] = self.jelements def _build(self): self.__mkt_risk = MarketRiskPortfolio(self.cache, self) dt = self.dte.dateonly funds = self.dbobj.fund_set.all() self.funds = [] # debugging #funds = funds[:1] # Create the funds for f in funds: self.funds.append(self.cache.portfolio(f, dt)) # Add the callbacks funds = self.funds[:] for f in funds: f.addcallback(self.addfund) def addfund(self, f): self.funds.remove(f) elems = self.element_objects jelems = self.jelements for jpos in f.element_objects.values(): if isinstance(jpos, jsonPosition): code = jpos.code aggp = elems.get(code, None) if not aggp: aggp = jsonAggregatePosition(self.cache, jpos.fininst, jpos.dbobj, self.ccy) # Register self as observer of aggp aggp.attach(self) elems[code] = aggp self.children.append(code) jelems.append(aggp.json) else: aggp.append(jpos.dbobj, withinfo=True) # when finished, build the object if not self.funds: self.log('Finished adding funds') self.register() self._closebuild() def register(self): for jp in self.element_objects.values(): jp.register() super(jsonTeam, self).register() def _get_ccy(self): return 'USD' ccy = property(fget=_get_ccy) def __get_mktrisk(self): mr = self.__mkt_risk return mr mktrisk = property(fget=__get_mktrisk) def refresh_me(self): ''' Called by observer superclass to refresh self values if needed ''' #positionBase.refresh_me(self) self.__mkt_risk.calculate(withRisk=False)
class jsonPortfolio(positionBase, MktPositionInterface): ''' A Portfolio View JSON object This class is used in the json Portfolio Tree. It maintain a node in the portfolio view. This node can be a position, a subportfolio or a fund. ''' def __init__(self, tree, obj, parent=None): cache = tree.cache self.isposition = False if isinstance(obj, jsonFund): obj = obj.dbobj if isinstance(obj, jsonPosition): self.isposition = obj obj = obj.dbobj self.folder = False self.movable = True self.__mkt_risk = MarketRiskPosition(cache, self) self.fund = parent.fund elif isinstance(obj, Fund): self.isfund = True self.__mkt_risk = MarketRiskPortfolio(cache, self) self.fund = obj else: self.canaddto = True self.editable = True self.movable = True self.__mkt_risk = MarketRiskPortfolio(cache, self) self.fund = parent.fund self.tree = tree self.parent = parent self.children = [] positionBase.__init__(self, cache, obj, tree.dte) def __get_mktrisk(self): ''' refresh if needed and return the market risk object ''' self.refresh() return self.__mkt_risk mktrisk = property(fget=__get_mktrisk) def build(self, **kwargs): parent = self.parent self._build() self.register() self.setparent(parent) def register(self): ''' Override registration ''' reg = False if self.isposition: self.isposition.register() if not self.rowdata: self.rowdata = self.isposition.rowdata[:] self.setstaticjson() self.register_to_fxcross(self.cache) reg = True else: reg = positionBase.register(self) if reg: json = self.json json['folder'] = self.folder json['canaddto'] = self.canaddto json['editable'] = self.editable json['movable'] = self.movable json['tree'] = self.children return reg def __get_instype(self): if self.isfund: return 'portfolio' elif self.isposition: return 'position' else: return 'folder' instype = property(fget=__get_instype) def __get_view(self): return self.tree.view view = property(fget=__get_view) def __get_elements(self): return self.tree.elements elements = property(fget=__get_elements) def __get_element_objects(self): return self.tree.element_objects element_objects = property(fget=__get_element_objects) def setparent(self, parent): if self.parent: self.parent.removechild(self) pid = None self.parent = parent if parent: pid = parent.id self.json['parent'] = pid parent.children.append(self.id) if self.isfund: self.fund = self.dbobj else: self.fund = self.parent.fund # # Set the parent as an observer self.attach(parent) def removechild(self, el): el.detach(self) return listpop(self.children, el.id) def __unicode__(self): return '%s in %s' % (self.dbobj, self.view) def __get_ccy(self): return self.isposition.ccy ccy = property(fget=__get_ccy) def _build(self): dte = self.dte obj = self.dbobj folders = [] parent = self.parent ppositions = None self.parent = None # Fund if self.isfund: jsonfund = self.cache.portfolio(obj, dte) folders = jsonfund.funds if not folders: self.canaddto = True folders = obj.rootfolders(self.view) self.positionset = jsonfund.positionsdict() # Position elif self.isposition: self.isposition.attach(self) # Portfolio else: folders = obj.subfolders() self.positionset = parent.positionset ppositions = obj.position_for_date(dte.dateonly, status=POSITION_STATUS) elements = self.elements elemobjs = self.element_objects # Add self to the elements dictionaries elements[self.id] = self.json elemobjs[self.id] = self # Loop over folders and create new jsonPortfolios for f in folders: self.append(f) # Now handle positions for funds if self.isfund and self.positionset: for jp in self.positionset.values(): jf = self.append(jp) self.positionset.pop(jf.id) elif ppositions: for p in ppositions: id = get_object_id(p) jp = self.positionset.pop(id, None) if jp: jf = self.append(jp) else: log("Critical Warning, position %s not in portfolio" % p) def append(self, f): ''' 1 - Create a new jsonPortfolio element from f 2 - Register self as observer of the new jsonPortfolio element @param f: portfolio element @return the new jsonPortfolio element ''' jf = jsonPortfolio(self.tree, f, self) jf.build() return jf def name(self): n = getattr(self.dbobj, "name", None) if n: if callable(n): n = n() return n return "" def refresh_me(self): positionBase.refresh_me(self) self.__mkt_risk.calculate(withRisk=True) def calc_ccy(self): return self.fund.curncy
class jsonPortfolio(positionBase, MktPositionInterface): ''' A Portfolio View JSON object This class is used in the json Portfolio Tree. It maintain a node in the portfolio view. This node can be a position, a subportfolio or a fund. ''' def __init__(self, tree, obj, parent = None): cache = tree.cache self.isposition = False if isinstance(obj,jsonFund): obj = obj.dbobj if isinstance(obj,jsonPosition): self.isposition = obj obj = obj.dbobj self.folder = False self.movable = True self.__mkt_risk = MarketRiskPosition(cache,self) self.fund = parent.fund elif isinstance(obj,Fund): self.isfund = True self.__mkt_risk = MarketRiskPortfolio(cache,self) self.fund = obj else: self.canaddto = True self.editable = True self.movable = True self.__mkt_risk = MarketRiskPortfolio(cache,self) self.fund = parent.fund self.tree = tree self.parent = parent self.children = [] positionBase.__init__(self, cache, obj, tree.dte) def __get_mktrisk(self): ''' refresh if needed and return the market risk object ''' self.refresh() return self.__mkt_risk mktrisk = property(fget = __get_mktrisk) def build(self, **kwargs): parent = self.parent self._build() self.register() self.setparent(parent) def register(self): ''' Override registration ''' reg = False if self.isposition: self.isposition.register() if not self.rowdata: self.rowdata = self.isposition.rowdata[:] self.setstaticjson() self.register_to_fxcross(self.cache) reg = True else: reg = positionBase.register(self) if reg: json = self.json json['folder'] = self.folder json['canaddto'] = self.canaddto json['editable'] = self.editable json['movable'] = self.movable json['tree'] = self.children return reg def __get_instype(self): if self.isfund: return 'portfolio' elif self.isposition: return 'position' else: return 'folder' instype = property(fget = __get_instype) def __get_view(self): return self.tree.view view = property(fget = __get_view) def __get_elements(self): return self.tree.elements elements = property(fget = __get_elements) def __get_element_objects(self): return self.tree.element_objects element_objects = property(fget = __get_element_objects) def setparent(self, parent): if self.parent: self.parent.removechild(self) pid = None self.parent = parent if parent: pid = parent.id self.json['parent'] = pid parent.children.append(self.id) if self.isfund: self.fund = self.dbobj else: self.fund = self.parent.fund # # Set the parent as an observer self.attach(parent) def removechild(self, el): el.detach(self) return listpop(self.children, el.id) def __unicode__(self): return '%s in %s' % (self.dbobj,self.view) def __get_ccy(self): return self.isposition.ccy ccy = property(fget = __get_ccy) def _build(self): dte = self.dte obj = self.dbobj folders = [] parent = self.parent ppositions = None self.parent = None # Fund if self.isfund: jsonfund = self.cache.portfolio(obj, dte) folders = jsonfund.funds if not folders: self.canaddto = True folders = obj.rootfolders(self.view) self.positionset = jsonfund.positionsdict() # Position elif self.isposition: self.isposition.attach(self) # Portfolio else: folders = obj.subfolders() self.positionset = parent.positionset ppositions = obj.position_for_date(dte.dateonly, status = POSITION_STATUS) elements = self.elements elemobjs = self.element_objects # Add self to the elements dictionaries elements[self.id] = self.json elemobjs[self.id] = self # Loop over folders and create new jsonPortfolios for f in folders: self.append(f) # Now handle positions for funds if self.isfund and self.positionset: for jp in self.positionset.values(): jf = self.append(jp) self.positionset.pop(jf.id) elif ppositions: for p in ppositions: id = get_object_id(p) jp = self.positionset.pop(id,None) if jp: jf = self.append(jp) else: log("Critical Warning, position %s not in portfolio" % p) def append(self, f): ''' 1 - Create a new jsonPortfolio element from f 2 - Register self as observer of the new jsonPortfolio element @param f: portfolio element @return the new jsonPortfolio element ''' jf = jsonPortfolio(self.tree, f, self) jf.build() return jf def name(self): n = getattr(self.dbobj,"name",None) if n: if callable(n): n = n() return n return "" def refresh_me(self): positionBase.refresh_me(self) self.__mkt_risk.calculate(withRisk = True) def calc_ccy(self): return self.fund.curncy