Skip to content

Commit e80b437

Browse files
committed
You can now return response headers
1 parent 5d36bdc commit e80b437

File tree

4 files changed

+14
-17
lines changed

4 files changed

+14
-17
lines changed

.gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,6 @@ dist/
1111
# DS_Store
1212
*.DS_Store
1313
.vscode/settings.json
14+
15+
# python venv
16+
venv

integration_tests/base_routes.py

+1-13
Original file line numberDiff line numberDiff line change
@@ -166,26 +166,14 @@ def shutdown_handler():
166166

167167
@app.get("/redirect")
168168
async def redirect(request):
169-
return {"status_code": "307", "body": "", "type": "text"}
169+
return {"status_code": "307", "body": "", "type": "text", "headers": jsonify({"Location": "redirect_route"})}
170170

171171

172172
@app.get("/redirect_route")
173173
async def redirect_route(request):
174174
return "This is the redirected route"
175175

176176

177-
@app.before_request("/redirect")
178-
async def redirect_before_request(request):
179-
request["headers"]["Location"] = "redirect_route"
180-
return ""
181-
182-
183-
@app.after_request("/redirect")
184-
async def redirect_after_request(request):
185-
request["headers"]["Location"] = "redirect_route"
186-
return ""
187-
188-
189177
if __name__ == "__main__":
190178
ROBYN_URL = os.getenv("ROBYN_URL", "0.0.0.0")
191179
app.add_header("server", "robyn")

integration_tests/test_status_code.py

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ def test_404_post_request_status_code(session):
1212
r = requests.post(f"{BASE_URL}/404")
1313
assert r.status_code == 404
1414

15+
1516
def test_307_get_request(session):
1617
r = requests.get(f"{BASE_URL}/redirect")
1718
assert r.text == "This is the redirected route"

src/processor.rs

+9-4
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use std::sync::Arc;
44

55
use actix_web::{http::Method, web, HttpRequest, HttpResponse, HttpResponseBuilder};
66
use anyhow::{bail, Result};
7+
use serde_json::Value;
78
// pyO3 module
89
use crate::types::{Headers, PyFunction};
910
use futures_util::stream::StreamExt;
@@ -66,12 +67,16 @@ pub async fn handle_request(
6667
let body = contents.get("body").unwrap().to_owned();
6768
let status_code =
6869
actix_http::StatusCode::from_str(contents.get("status_code").unwrap()).unwrap();
69-
let headers = match contents.get("headers") {
70-
Some(headers) => headers,
71-
None => "",
70+
71+
let headers: HashMap<String, String> = match contents.get("headers") {
72+
Some(headers) => {
73+
let h: HashMap<String, String> = serde_json::from_str(headers).unwrap();
74+
h
75+
}
76+
None => HashMap::new(),
7277
};
7378

74-
let headers: HashMap<String, String> = serde_json::from_str(headers).unwrap();
79+
println!("These are the headers from serde {:?}", headers);
7580

7681
let mut response = HttpResponse::build(status_code);
7782
apply_headers(&mut response, headers.clone());

0 commit comments

Comments
 (0)