def needed_addresses(self): """Return the addresses and address ranges this formula needs""" if self._needed_addresses is None: # get all the cells/ranges this formula refers to, and remove dupes if self.python_code: self._needed_addresses = uniqueify( AddressRange(eval_call[1][2:-2]) for eval_call in EVAL_REGEX.findall(self.python_code)) else: self._needed_addresses = () return self._needed_addresses
def needed_addresses(self): """Return the addresses and address ranges this formula needs""" if self._needed_addresses is None: # get all the cells/ranges this formula refers to, and remove dupes if self.python_code: code = iter((self.python_code.encode(), )) tokens = tuple(tk.tokenize(lambda: next(code))) addrs = [] for i, t in enumerate(tokens): if t.type == 1 and t.string in ADDR_FUNCS_NAMES and ( tokens[i + 1].string == '(' and tokens[i + 3].string == ')'): addrs.append(AddressRange(tokens[i + 2].string[1:-1])) self._needed_addresses = uniqueify(addrs) else: self._needed_addresses = () return self._needed_addresses
def needed_addresses(self): """Return the addresses and address ranges this formula needs""" if self._needed_addresses is None: # get all the cells/ranges this formula refers to, and remove dupes if self.python_code: code = iter((self.python_code.encode(),)) tokens = tuple(tk.tokenize(lambda: next(code))) addrs = [] for i, t in enumerate(tokens): if t.type == 1 and t.string in ADDR_FUNCS_NAMES and ( tokens[i + 1].string == '(' and tokens[i + 3].string == ')'): addrs.append(AddressRange(tokens[i + 2].string[1:-1])) self._needed_addresses = uniqueify(addrs) else: self._needed_addresses = () return self._needed_addresses
def test_uniqueify(): assert (1, 2, 3, 4) == uniqueify((1, 2, 3, 4, 3)) assert (4, 1, 2, 3) == uniqueify((4, 1, 2, 3, 4, 3))