mirror of
https://github.com/storytold/artcraft.git
synced 2026-11-05 17:58:55 +00:00
start using Json() for better typing, correctness, testability
This commit is contained in:
1 parent
17a4cf774d
commit
113ed359fd
3 files changed
+27
-55
No files matched your search
+16
-25
@@ -5,7 +5,7 @@ use std::sync::Arc;
|
||||
use actix_web::{HttpMessage, HttpRequest, HttpResponse, web};
|
||||
use actix_web::error::ResponseError;
|
||||
use actix_web::http::StatusCode;
|
||||
use actix_web::web::Path;
|
||||
use actix_web::web::{Json, Path};
|
||||
use actix_web_lab::extract::Query;
|
||||
use chrono::{DateTime, Utc};
|
||||
use log::error;
|
||||
@@ -174,8 +174,9 @@ impl fmt::Display for BatchGetInferenceJobStatusError {
|
||||
pub async fn batch_get_inference_job_status_handler(
|
||||
http_request: HttpRequest,
|
||||
query: Query<BatchGetInferenceJobStatusQueryParams>,
|
||||
server_state: web::Data<Arc<ServerState>>) -> Result<HttpResponse, BatchGetInferenceJobStatusError>
|
||||
{
|
||||
server_state: web::Data<Arc<ServerState>>
|
||||
) -> Result<Json<BatchGetInferenceJobStatusSuccessResponse>, BatchGetInferenceJobStatusError> {
|
||||
|
||||
let tokens = query.tokens.iter()
|
||||
.map(|token| token.trim())
|
||||
// NB: A bunch of Python clients use our API and can fail in this manner.
|
||||
@@ -186,7 +187,7 @@ pub async fn batch_get_inference_job_status_handler(
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
if tokens.is_empty() {
|
||||
return records_to_response(Vec::new());
|
||||
return Ok(records_to_response(Vec::new()));
|
||||
}
|
||||
|
||||
// NB: Since this is publicly exposed, we don't query sensitive data.
|
||||
@@ -230,30 +231,20 @@ pub async fn batch_get_inference_job_status_handler(
|
||||
};
|
||||
}
|
||||
|
||||
records_to_response(records)
|
||||
Ok(records_to_response(records))
|
||||
}
|
||||
|
||||
fn records_to_response(records: Vec<GenericInferenceJobStatus>) -> Result<HttpResponse, BatchGetInferenceJobStatusError> {
|
||||
let records = records.into_iter()
|
||||
.map(|record| {
|
||||
db_record_to_response_payload(record, None)
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
let response = BatchGetInferenceJobStatusSuccessResponse {
|
||||
fn records_to_response(records: Vec<GenericInferenceJobStatus>)
|
||||
-> Json<BatchGetInferenceJobStatusSuccessResponse>
|
||||
{
|
||||
Json(BatchGetInferenceJobStatusSuccessResponse {
|
||||
success: true,
|
||||
job_states: records,
|
||||
};
|
||||
|
||||
let body = serde_json::to_string(&response)
|
||||
.map_err(|e| {
|
||||
error!("error returning response: {:?}", e);
|
||||
BatchGetInferenceJobStatusError::ServerError
|
||||
})?;
|
||||
|
||||
Ok(HttpResponse::Ok()
|
||||
.content_type("application/json")
|
||||
.body(body))
|
||||
job_states: records.into_iter()
|
||||
.map(|record| {
|
||||
db_record_to_response_payload(record, None)
|
||||
})
|
||||
.collect::<Vec<_>>(),
|
||||
})
|
||||
}
|
||||
|
||||
fn db_record_to_response_payload(
|
||||
|
||||
+4
-14
@@ -4,7 +4,7 @@ use std::sync::Arc;
|
||||
use actix_web::{HttpMessage, HttpRequest, HttpResponse, web};
|
||||
use actix_web::error::ResponseError;
|
||||
use actix_web::http::StatusCode;
|
||||
use actix_web::web::Path;
|
||||
use actix_web::web::{Json, Path};
|
||||
use chrono::{DateTime, Utc};
|
||||
use log::error;
|
||||
use r2d2_redis::redis::{Commands, RedisResult};
|
||||
@@ -162,7 +162,7 @@ impl fmt::Display for GetInferenceJobStatusError {
|
||||
pub async fn get_inference_job_status_handler(
|
||||
http_request: HttpRequest,
|
||||
path: Path<GetInferenceJobStatusPathInfo>,
|
||||
server_state: web::Data<Arc<ServerState>>) -> Result<HttpResponse, GetInferenceJobStatusError>
|
||||
server_state: web::Data<Arc<ServerState>>) -> Result<Json<GetInferenceJobStatusSuccessResponse>, GetInferenceJobStatusError>
|
||||
{
|
||||
if path.token.as_str().trim() == "None" {
|
||||
// NB: A bunch of Python clients use our API and can fail in this manner.
|
||||
@@ -231,20 +231,10 @@ pub async fn get_inference_job_status_handler(
|
||||
let record_for_response = record_to_payload(
|
||||
record, maybe_extra_status_description);
|
||||
|
||||
let response = GetInferenceJobStatusSuccessResponse {
|
||||
Ok(Json(GetInferenceJobStatusSuccessResponse {
|
||||
success: true,
|
||||
state: record_for_response,
|
||||
};
|
||||
|
||||
let body = serde_json::to_string(&response)
|
||||
.map_err(|e| {
|
||||
error!("error returning response: {:?}", e);
|
||||
GetInferenceJobStatusError::ServerError
|
||||
})?;
|
||||
|
||||
Ok(HttpResponse::Ok()
|
||||
.content_type("application/json")
|
||||
.body(body))
|
||||
}))
|
||||
}
|
||||
|
||||
fn record_to_payload(
|
||||
|
||||
+7
-16
@@ -5,7 +5,7 @@ use std::sync::Arc;
|
||||
use actix_web::{HttpMessage, HttpRequest, HttpResponse, web};
|
||||
use actix_web::error::ResponseError;
|
||||
use actix_web::http::StatusCode;
|
||||
use actix_web::web::Path;
|
||||
use actix_web::web::{Json, Path};
|
||||
use actix_web_lab::extract::Query;
|
||||
use chrono::{DateTime, Duration, Utc};
|
||||
use log::{error, warn};
|
||||
@@ -188,8 +188,9 @@ impl fmt::Display for ListSessionJobsError {
|
||||
pub async fn list_session_jobs_handler(
|
||||
http_request: HttpRequest,
|
||||
query: Query<ListSessionJobsQueryParams>,
|
||||
server_state: web::Data<Arc<ServerState>>) -> Result<HttpResponse, ListSessionJobsError>
|
||||
{
|
||||
server_state: web::Data<Arc<ServerState>>
|
||||
) -> Result<Json<ListSessionJobsSuccessResponse>, ListSessionJobsError> {
|
||||
|
||||
let mut mysql_connection = server_state.mysql_pool
|
||||
.acquire()
|
||||
.await
|
||||
@@ -277,7 +278,7 @@ pub async fn list_session_jobs_handler(
|
||||
records_to_response(records)
|
||||
}
|
||||
|
||||
fn records_to_response(records: Vec<GenericInferenceJobStatus>) -> Result<HttpResponse, ListSessionJobsError> {
|
||||
fn records_to_response(records: Vec<GenericInferenceJobStatus>) -> Result<Json<ListSessionJobsSuccessResponse>, ListSessionJobsError> {
|
||||
let mut records = records.into_iter()
|
||||
.map(|record| {
|
||||
db_record_to_response_payload(record, None)
|
||||
@@ -296,20 +297,10 @@ fn records_to_response(records: Vec<GenericInferenceJobStatus>) -> Result<HttpRe
|
||||
success_count <= 3
|
||||
});
|
||||
|
||||
let response = ListSessionJobsSuccessResponse {
|
||||
Ok(Json(ListSessionJobsSuccessResponse {
|
||||
success: true,
|
||||
jobs: records,
|
||||
};
|
||||
|
||||
let body = serde_json::to_string(&response)
|
||||
.map_err(|e| {
|
||||
error!("error returning response: {:?}", e);
|
||||
ListSessionJobsError::ServerError
|
||||
})?;
|
||||
|
||||
Ok(HttpResponse::Ok()
|
||||
.content_type("application/json")
|
||||
.body(body))
|
||||
}))
|
||||
}
|
||||
|
||||
fn db_record_to_response_payload(
|
||||
|
||||
Reference in new issue
Block a user