_literal_as_text_role=roles.ByOfRole,
)
- # validate frame spec and assign clause
- _frame_spec_map = {"range_": range_, "rows": rows, "groups": groups}
- if sum([v is not None for v in _frame_spec_map.values()]) > 1:
- _clauses = [
- f"'{k}'"
- for i, k in enumerate(_frame_spec_map.keys())
- if list(_frame_spec_map.values())[i]
- ]
- _clauses_str = ' and '.join(_clauses)
+ if (range_ and (rows or groups)) or (rows and (range_ or groups)):
raise exc.ArgumentError(
- f"too many frame spec clauses provided: {_clauses_str}"
+ "only one of 'rows', 'range_', or 'groups' may be provided"
)
else:
- self.range_, self.rows, self.groups = [
- (_FrameClause(v) if v else None)
- for v in _frame_spec_map.values()
- ]
+ self.range_ = _FrameClause(range_) if range_ else None
+ self.rows = _FrameClause(rows) if rows else None
+ self.groups = _FrameClause(groups) if groups else None
if not TYPE_CHECKING:
assert_raises_message(
exc.ArgumentError,
- "too many frame spec clauses provided: "
- "'range_' and 'rows'",
+ "only one of 'rows', 'range_', or 'groups' may be provided",
func.row_number().over,
range_=(-5, 8),
rows=(-2, 5),
assert_raises_message(
exc.ArgumentError,
- "too many frame spec clauses provided: "
- "'range_' and 'groups'",
+ "only one of 'rows', 'range_', or 'groups' may be provided",
func.row_number().over,
range_=(-5, 8),
groups=(None, None),
assert_raises_message(
exc.ArgumentError,
- "too many frame spec clauses provided: "
- "'rows' and 'groups'",
+ "only one of 'rows', 'range_', or 'groups' may be provided",
func.row_number().over,
rows=(-2, 5),
groups=(None, None),
assert_raises_message(
exc.ArgumentError,
- "too many frame spec clauses provided: "
- "'range_' and 'rows' and 'groups'",
+ "only one of 'rows', 'range_', or 'groups' may be provided",
func.row_number().over,
range_=(-5, 8),
rows=(-2, 5),