def _map(row): for fnc in args: if callable(fnc): try: row = fnc(Row(row)) except Exception: continue return Row(row)
def _map(row): if callable(fnc): try: row[alias] = fnc(Row(row)) except Exception: row[alias] = row.get(alias, None) else: row[alias] = fnc return Row(row)
def appendjoin_right_full(self, alias='join', data=[], where=lambda v1, v2: v1 == v2, item={}): app = False for row in data: row[alias] = row.get(alias, []) if where(row, item) is True: row[alias].append(item) self.items.append(Row(row)) else: self.items.append(Row({alias: [item]})) if app is False: self.items.append(Row({alias: [item]}))
def appendjoin_inner_left_full(self, alias='join', data=[], where=lambda v1, v2: v1 == v2, row={}): app = False row[alias] = row.get(alias, []) for item in data: if where(row, item) is True: row[alias].append(item) self.items.append(Row(row)) elif type in ['left', 'full']: self.items.append(Row(row)) if app is False and type != 'inner': self.items.append(Row(row))
def join_right_full(self, alias='join', data=[], where=lambda v1, v2: v1 == v2, item={}): app = False for row in data: row[alias] = row.get(alias, {}) if where(row, item) is True: tmp = copy.deepcopy(row) tmp[alias] = item self.items.append(Row(tmp)) else: self.items.append(Row({alias: item})) if app is False: self.items.append(Row({alias: item}))
def sort(self, **sort): order = [] asc = set() desc = set() for k in sort.keys(): if sort[k] in ['0', '-1', 'desc', 'DESC']: if len(asc) > 0: order.append([tuple(asc), False]) asc = set() desc.add(k) else: if len(desc) > 0: order.append([tuple(desc), True]) desc = set() asc.add(k) if len(asc) > 0: order.append([tuple(asc), False]) if len(desc) > 0: order.append([tuple(desc), True]) for sort in order: self.__DATA__ = sorted(self.__DATA__, key=Row.values_getter(*sort[0]), reverse=sort[1]) return self
def select(self, *args): self.__DATA__ = list(map(lambda row: Row(row).select(*args), self.__DATA__)) self.__SELECT__ = [] return self