Skip to content

Commit eae612c

Browse files
authored
fix: update range to use query parameters instead of headers (#375)
1 parent 0faa8c3 commit eae612c

File tree

3 files changed

+40
-3
lines changed

3 files changed

+40
-3
lines changed

postgrest/base_request_builder.py

+10-3
Original file line numberDiff line numberDiff line change
@@ -565,7 +565,14 @@ def offset(self: _FilterT, size: int) -> _FilterT:
565565
)
566566
return self
567567

568-
def range(self: Self, start: int, end: int) -> Self:
569-
self.headers["Range-Unit"] = "items"
570-
self.headers["Range"] = f"{start}-{end - 1}"
568+
def range(
569+
self: Self, start: int, end: int, foreign_table: Optional[str] = None
570+
) -> Self:
571+
self.params = self.params.add(
572+
f"{foreign_table}.offset" if foreign_table else "offset", start
573+
)
574+
self.params = self.params.add(
575+
f"{foreign_table}.limit" if foreign_table else "limit",
576+
end - start + 1,
577+
)
571578
return self

tests/_async/test_request_builder.py

+15
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,21 @@ def test_explain_options(self, request_builder: AsyncRequestBuilder):
152152
)
153153

154154

155+
class TestRange:
156+
def test_range_on_own_table(self, request_builder: AsyncRequestBuilder):
157+
builder = request_builder.select("*").range(0, 1)
158+
assert builder.params["select"] == "*"
159+
assert builder.params["limit"] == "2"
160+
assert builder.params["offset"] == "0"
161+
162+
def test_range_on_foreign_table(self, request_builder: AsyncRequestBuilder):
163+
foreign_table = "cities"
164+
builder = request_builder.select("*").range(1, 2, foreign_table)
165+
assert builder.params["select"] == "*"
166+
assert builder.params[f"{foreign_table}.limit"] == "2"
167+
assert builder.params[f"{foreign_table}.offset"] == "1"
168+
169+
155170
@pytest.fixture
156171
def csv_api_response() -> str:
157172
return "id,name\n1,foo\n"

tests/_sync/test_request_builder.py

+15
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,21 @@ def test_explain_options(self, request_builder: SyncRequestBuilder):
152152
)
153153

154154

155+
class TestRange:
156+
def test_range_on_own_table(self, request_builder: SyncRequestBuilder):
157+
builder = request_builder.select("*").range(0, 1)
158+
assert builder.params["select"] == "*"
159+
assert builder.params["limit"] == "2"
160+
assert builder.params["offset"] == "0"
161+
162+
def test_range_on_foreign_table(self, request_builder: SyncRequestBuilder):
163+
foreign_table = "cities"
164+
builder = request_builder.select("*").range(1, 2, foreign_table)
165+
assert builder.params["select"] == "*"
166+
assert builder.params[f"{foreign_table}.limit"] == "2"
167+
assert builder.params[f"{foreign_table}.offset"] == "1"
168+
169+
155170
@pytest.fixture
156171
def csv_api_response() -> str:
157172
return "id,name\n1,foo\n"

0 commit comments

Comments
 (0)