Skip to content

Commit

Permalink
Add route params
Browse files Browse the repository at this point in the history
  • Loading branch information
sansyrox committed Oct 3, 2021
1 parent 9d42ea2 commit 248f27e
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 8 deletions.
19 changes: 17 additions & 2 deletions src/processor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,9 @@ pub async fn handle_request(
headers: &Arc<Headers>,
payload: &mut web::Payload,
req: &HttpRequest,
route_params: HashMap<String, String>,
) -> HttpResponse {
let contents = match execute_function(function, payload, headers, req).await {
let contents = match execute_function(function, payload, headers, req, route_params).await {
Ok(res) => res,
Err(err) => {
println!("Error: {:?}", err);
Expand Down Expand Up @@ -74,6 +75,7 @@ async fn execute_function(
payload: &mut web::Payload,
headers: &Headers,
req: &HttpRequest,
route_params: HashMap<String, String>,
) -> Result<String> {
let mut data: Option<Vec<u8>> = None;

Expand Down Expand Up @@ -105,11 +107,22 @@ async fn execute_function(
PyFunction::CoRoutine(handler) => {
let output = Python::with_gil(|py| {
let handler = handler.as_ref(py);
request.insert("params", route_params.into_py(py));
request.insert("headers", headers_python.into_py(py));

<<<<<<< HEAD
if let Some(res) = data {
let data = res.into_py(py);
request.insert("body", data);
request.insert("headers", headers_python.into_py(py));
=======
match data {
Some(res) => {
let data = res.into_py(py);
request.insert("body", data);
}
None => {}
>>>>>>> 5ce3932 (Add route params)
};

// this makes the request object to be accessible across every route
Expand Down Expand Up @@ -158,11 +171,13 @@ async fn execute_function(
tokio::task::spawn_blocking(move || {
Python::with_gil(|py| {
let handler = handler.as_ref(py);
request.insert("params", route_params.into_py(py));
request.insert("headers", headers_python.into_py(py));
let output: PyResult<&PyAny> = match data {
Some(res) => {
let data = res.into_py(py);
request.insert("body", data);
request.insert("headers", headers_python.into_py(py));

handler.call1((request,))
}
None => handler.call1((request,)),
Expand Down
18 changes: 15 additions & 3 deletions src/router.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use dashmap::DashMap;
use std::collections::HashMap;
use std::sync::{Arc, RwLock};
// pyo3 modules
use crate::types::PyFunction;
Expand Down Expand Up @@ -84,10 +84,22 @@ impl Router {
.unwrap();
}

pub fn get_route(&self, route_method: Method, route: &str) -> Option<PyFunction> {
pub fn get_route(
&self,
route_method: Method,
route: &str,
) -> Option<(PyFunction, HashMap<String, String>)> {
let table = self.get_relevant_map(route_method)?;
match table.read().unwrap().at(route) {
Ok(res) => Some(res.value.clone()),
Ok(res) => {
let mut route_params = HashMap::new();

for (key, value) in res.params.iter() {
route_params.insert(key.to_string(), value.to_string());
}

Some((res.value.clone(), route_params))
}
Err(_) => None,
}
}
Expand Down
4 changes: 2 additions & 2 deletions src/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -164,8 +164,8 @@ async fn index(
req: HttpRequest,
) -> impl Responder {
match router.get_route(req.method().clone(), req.uri().path()) {
Some(handler_function) => {
handle_request(handler_function, &headers, &mut payload, &req).await
Some((handler_function, route_params)) => {
handle_request(handler_function, &headers, &mut payload, &req, route_params).await
}
None => {
let mut response = HttpResponse::Ok();
Expand Down
3 changes: 2 additions & 1 deletion test_python/base_routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,15 @@ async def h(request):

@app.get("/test/:id")
async def test(request):
print(request)
return static_file("./index.html")

@app.get("/jsonify")
async def json_get(request):
return jsonify({"hello": "world"})


@app.post("/jsonify")
@app.post("/jsonify/:id")
async def json(request):
print(request)
return jsonify({"hello": "world"})
Expand Down

0 comments on commit 248f27e

Please sign in to comment.