def distinct(self, *args, **_filter):
        self._check_dropped()
        qargs = []
        columns = []
        try:
            for c in args:
                if isinstance(c, ClauseElement):
                    qargs.append(c)
                else:
                    columns.append(self.table.c[c])
            for col, val in _filter.items():
                qargs.append(self.table.c[col] == val)
        except KeyError:
            return []

        q = expression.select(columns, distinct=True,
                              whereclause=and_(*qargs),
                              order_by=[c.asc() for c in columns])
        return self.database.query(q)
A generator that yields (token_hex, fail_time) pairs retrieved from
dataset/ETHPy150Open pudo/dataset/dataset/persistence/table.py/Table.distinct--crossover with--dataset/ETHPy150Open SafeSlingerProject/SafeSlinger-AppEngine/safeslinger-messenger/python/apns_enhanced.py/FeedbackConnection.items