def delete_one(self, _filter: dict, **kwargs) -> QueryResult: match = filter_data(_filter, self._data) if match != (): self._data.remove(match[0]) return QueryResult(deleted_count=1) else: return QueryResult(deleted_count=0)
def find_one(self, _filter: dict = {}, **kwargs) -> dict: if _filter == {}: return self._data[0] else: try: inverse = kwargs['inverse'] except KeyError: inverse = False results = filter_data(_filter, self._data, inverse=inverse) return results[0]
def find(self, _filter: dict = {}, **kwargs) -> QueryResult: if _filter == {}: matched_count = len(self._data) return QueryResult(*self._data, matched_count=matched_count) else: try: inverse = kwargs['inverse'] except KeyError: inverse = False matched = filter_data(_filter, self._data, inverse=inverse) matched_count = len(matched) return QueryResult(*matched, matched_count=matched_count)
def update_many(self, _filter: dict, _update: dict, **kwargs) -> str: match = filter_data(_filter, self._data) matched_count = len(match) updated_count = 0 if matched_count == 0: return QueryResult(matched_count=0) for i, j in enumerate(self._data): if updated_count < matched_count: if j in match: self._data[i] = _update updated_count += 1 else: return QueryResult(matched_count=matched_count, updated_count=updated_count)
def delete_many(self, _filter: dict = {}, **kwargs) -> QueryResult: deleted_count = 0 if _filter == {}: deleted_count = len(self._data) self._data = [] return QueryResult(deleted_count=deleted_count) match = filter_data(_filter, self._data) matched_count = len(match) if matched_count == 0: return QueryResult(matched_count=0) for i, j in enumerate(self._data): if deleted_count <= matched_count: if j in match: self._data.pop(i) deleted_count += 1 else: return QueryResult(deleted_count=deleted_count)