def iter_investment(self, account): for row, elem_repartition, elem_pocket, elem_diff in self.iter_invest_rows(account=account): inv = Investment() inv._account = account inv._el_pocket = elem_pocket inv.label = CleanText('.//td[1]')(row) inv.valuation = MyDecimal('.//td[2]')(row) # On all Cmes children the row shows percentages and the popup shows absolute values in currency. # On Cmes it is mirrored, the popup contains the percentage. is_mirrored = '%' in row.text_content() if not is_mirrored: inv.diff = MyDecimal('.//td[3]')(row) if elem_diff is not None: inv.diff_ratio = Eval(lambda x: x / 100, MyDecimal(Regexp(CleanText('.'), r'([+-]?[\d\s]+[\d,]+)\s*%')))(elem_diff) else: inv.diff = MyDecimal('.')(elem_diff) if elem_diff is not None: inv.diff_ratio = Eval(lambda x: x / 100, MyDecimal(Regexp(CleanText('.//td[3]'), r'([+-]?[\d\s]+[\d,]+)\s*%')))(row) if account.balance != 0: inv.portfolio_share = inv.valuation / account.balance yield inv
def iter_investments(self, account): for row, elem_repartition, elem_pocket, elem_diff in self.iter_invest_rows( account=account): inv = Investment() inv._account = account inv._el_pocket = elem_pocket inv.label = CleanText('.//td[1]')(row) _url = Link('.//td[1]/a', default=None)(row) if _url: inv._url = self.absurl(_url) else: # If _url is None, self.absurl returns the BASEURL, so we need to set the value manually. inv._url = None inv.valuation = MyDecimal('.//td[2]')(row) # On all Cmes children the row shows percentages and the popup shows absolute values in currency. # On Cmes it is mirrored, the popup contains the percentage. is_mirrored = '%' in row.text_content() if not is_mirrored: inv.diff = MyDecimal('.//td[3]')(row) if elem_diff is not None: inv.diff_ratio = Eval( lambda x: x / 100, MyDecimal( Regexp(CleanText('.'), r'([+-]?[\d\s]+[\d,]+)\s*%')))(elem_diff) else: inv.diff = MyDecimal('.')(elem_diff) if elem_diff is not None: inv.diff_ratio = Eval( lambda x: x / 100, MyDecimal( Regexp(CleanText('.//td[3]'), r'([+-]?[\d\s]+[\d,]+)\s*%')))(row) yield inv