Example #1
0
    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)
Example #2
0
 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)
Example #3
0
    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)
Example #4
0
 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)
Example #5
0
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)
Example #6
0
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)
Example #7
0
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
Example #8
0
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