diff options
author | Avital Fine <79420960+AvitalFineRedis@users.noreply.github.com> | 2021-12-01 17:32:38 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-01 18:32:38 +0200 |
commit | e16e26ea597e6e0c576d7462d3a2285a8647617d (patch) | |
tree | 90300e5ccd3e7d4ee7f1486ed2082246acb462bc | |
parent | 175a05f4de17918b74bde7f554182968b1f6aabb (diff) | |
download | redis-py-e16e26ea597e6e0c576d7462d3a2285a8647617d.tar.gz |
Remove unused aggregation subclasses (#1754)
-rw-r--r-- | redis/commands/search/aggregation.py | 104 |
1 files changed, 27 insertions, 77 deletions
diff --git a/redis/commands/search/aggregation.py b/redis/commands/search/aggregation.py index b1ac6b0..3db5542 100644 --- a/redis/commands/search/aggregation.py +++ b/redis/commands/search/aggregation.py @@ -82,75 +82,6 @@ class Desc(SortDirection): DIRSTRING = "DESC" -class Group: - """ - This object automatically created in the `AggregateRequest.group_by()` - """ - - def __init__(self, fields, reducers): - if not reducers: - raise ValueError("Need at least one reducer") - - fields = [fields] if isinstance(fields, str) else fields - reducers = [reducers] if isinstance(reducers, Reducer) else reducers - - self.fields = fields - self.reducers = reducers - self.limit = Limit() - - def build_args(self): - ret = ["GROUPBY", str(len(self.fields))] - ret.extend(self.fields) - for reducer in self.reducers: - ret += ["REDUCE", reducer.NAME, str(len(reducer.args))] - ret.extend(reducer.args) - if reducer._alias is not None: - ret += ["AS", reducer._alias] - return ret - - -class Projection: - """ - This object automatically created in the `AggregateRequest.apply()` - """ - - def __init__(self, projector, alias=None): - self.alias = alias - self.projector = projector - - def build_args(self): - ret = ["APPLY", self.projector] - if self.alias is not None: - ret += ["AS", self.alias] - - return ret - - -class SortBy: - """ - This object automatically created in the `AggregateRequest.sort_by()` - """ - - def __init__(self, fields, max=0): - self.fields = fields - self.max = max - - def build_args(self): - fields_args = [] - for f in self.fields: - if isinstance(f, SortDirection): - fields_args += [f.field, f.DIRSTRING] - else: - fields_args += [f] - - ret = ["SORTBY", str(len(fields_args))] - ret.extend(fields_args) - if self.max > 0: - ret += ["MAX", str(self.max)] - - return ret - - class AggregateRequest: """ Aggregation request which can be passed to `Client.aggregate`. @@ -202,9 +133,17 @@ class AggregateRequest: - **reducers**: One or more reducers. Reducers may be found in the `aggregation` module. """ - group = Group(fields, reducers) - self._aggregateplan.extend(group.build_args()) + fields = [fields] if isinstance(fields, str) else fields + reducers = [reducers] if isinstance(reducers, Reducer) else reducers + ret = ["GROUPBY", str(len(fields)), *fields] + for reducer in reducers: + ret += ["REDUCE", reducer.NAME, str(len(reducer.args))] + ret.extend(reducer.args) + if reducer._alias is not None: + ret += ["AS", reducer._alias] + + self._aggregateplan.extend(ret) return self def apply(self, **kwexpr): @@ -218,8 +157,10 @@ class AggregateRequest: expression itself, for example `apply(square_root="sqrt(@foo)")` """ for alias, expr in kwexpr.items(): - projection = Projection(expr, alias) - self._aggregateplan.extend(projection.build_args()) + ret = ["APPLY", expr] + if alias is not None: + ret += ["AS", alias] + self._aggregateplan.extend(ret) return self @@ -265,8 +206,7 @@ class AggregateRequest: `sort_by()` instead. """ - limit = Limit(offset, num) - self._limit = limit + self._limit = Limit(offset, num) return self def sort_by(self, *fields, **kwargs): @@ -300,10 +240,20 @@ class AggregateRequest: if isinstance(fields, (str, SortDirection)): fields = [fields] + fields_args = [] + for f in fields: + if isinstance(f, SortDirection): + fields_args += [f.field, f.DIRSTRING] + else: + fields_args += [f] + + ret = ["SORTBY", str(len(fields_args))] + ret.extend(fields_args) max = kwargs.get("max", 0) - sortby = SortBy(fields, max) + if max > 0: + ret += ["MAX", str(max)] - self._aggregateplan.extend(sortby.build_args()) + self._aggregateplan.extend(ret) return self def filter(self, expressions): |