Refactor - db enum types into enums crate

This commit is contained in:
Brandon Thomas committed 2023-01-11 00:33:40 -05:00
1 parent 7a33c0721a
commit 9e589c2b72
25 files changed
+47 -37

No files matched your search

+2
View File
@@ -28,3 +28,5 @@ mod macros;
pub mod core;
pub mod files;
pub mod ml;
pub mod workers;
+1
View File
@@ -0,0 +1 @@
pub mod vocoder_type;
@@ -33,7 +33,7 @@ impl VocoderType {
#[cfg(test)]
mod tests {
use crate::db::enums::vocoder_type::VocoderType;
use crate::ml::vocoder_type::VocoderType;
use crate::test_helpers::assert_serialization;
#[test]
@@ -1,3 +1,6 @@
// TODO: Use macro-derived impls
/// Our "generic downloads" pipeline supports a wide variety of ML models and other media.
/// They are serialized in the database table `generic_download_jobs` as a VARCHAR(32).
///
@@ -59,7 +62,7 @@ impl GenericDownloadType {
#[cfg(test)]
mod tests {
use crate::db::enums::generic_download_type::GenericDownloadType;
use crate::workers::generic_download_type::GenericDownloadType;
use crate::test_helpers::assert_serialization;
#[test]
@@ -1,3 +1,6 @@
// TODO: Use macro-derived impls
/// Our "generic inference" pipeline supports a wide variety of ML models and other media.
/// Each type of inference is identified by the following enum variants.
/// These types are present in the HTTP API and database columns as serialized here.
@@ -34,7 +37,7 @@ impl GenericInferenceType {
#[cfg(test)]
mod tests {
use crate::db::enums::generic_inference_type::GenericInferenceType;
use crate::workers::generic_inference_type::GenericInferenceType;
use crate::test_helpers::assert_serialization;
#[test]
+2
View File
@@ -0,0 +1,2 @@
pub mod generic_inference_type;
pub mod generic_download_type;
@@ -1,6 +0,0 @@
//! This is meant to handle `enum` or `enum`-like columns in the database.
//! These are not Rust-like enums (sum types) that can have internal payloads.
pub mod generic_download_type;
pub mod generic_inference_type;
pub mod vocoder_type;
@@ -1,2 +1 @@
pub mod enums;
pub mod payloads;
@@ -5,7 +5,7 @@ use crate::column_types::job_status::JobStatus;
use crate::queries::generic_download::job::_keys::GenericDownloadJobId;
use crate::tokens::Tokens;
use enums::core::visibility::Visibility;
use reusable_types::db::enums::generic_download_type::GenericDownloadType;
use enums::workers::generic_download_type::GenericDownloadType;
use sqlx::MySqlPool;
use std::path::Path;
use tokens::jobs::download::DownloadJobToken;
@@ -47,7 +47,7 @@ SELECT
creator_ip_address,
creator_set_visibility as `creator_set_visibility: enums::core::visibility::Visibility`,
download_type as `download_type: reusable_types::db::enums::generic_download_type::GenericDownloadType`,
download_type as `download_type: enums::workers::generic_download_type::GenericDownloadType`,
download_url,
title,
@@ -2,7 +2,6 @@ use anyhow::anyhow;
use chrono::{DateTime, Utc};
use container_common::anyhow_result::AnyhowResult;
use log::warn;
use reusable_types::db::enums::generic_download_type::GenericDownloadType;
use sqlx::MySqlPool;
use tokens::jobs::download::DownloadJobToken;
@@ -1,7 +1,7 @@
use anyhow::anyhow;
use container_common::anyhow_result::AnyhowResult;
use enums::core::visibility::Visibility;
use reusable_types::db::enums::generic_download_type::GenericDownloadType;
use enums::workers::generic_download_type::GenericDownloadType;
use sqlx::MySqlPool;
use tokens::jobs::download::DownloadJobToken;
@@ -5,7 +5,7 @@ use crate::column_types::job_status::JobStatus;
use crate::helpers::boolean_converters::i8_to_bool;
use crate::queries::generic_inference::job::_keys::GenericInferenceJobId;
use enums::core::visibility::Visibility;
use reusable_types::db::enums::generic_inference_type::GenericInferenceType;
use enums::workers::generic_inference_type::GenericInferenceType;
use sqlx::MySqlPool;
use std::path::Path;
use tokens::jobs::inference::InferenceJobToken;
@@ -51,7 +51,7 @@ SELECT
id as `id: crate::queries::generic_inference::job::_keys::GenericInferenceJobId`,
token AS `inference_job_token: tokens::jobs::inference::InferenceJobToken`,
inference_type as `inference_type: reusable_types::db::enums::generic_inference_type::GenericInferenceType`,
inference_type as `inference_type: enums::workers::generic_inference_type::GenericInferenceType`,
maybe_inference_args,
maybe_raw_inference_text,
maybe_model_token,
@@ -1,7 +1,7 @@
use anyhow::anyhow;
use container_common::anyhow_result::AnyhowResult;
use enums::core::visibility::Visibility;
use reusable_types::db::enums::generic_inference_type::GenericInferenceType;
use enums::workers::generic_inference_type::GenericInferenceType;
use sqlx::MySqlPool;
use tokens::jobs::inference::InferenceJobToken;
use tokens::users::user::UserToken;
@@ -4,10 +4,10 @@
#![forbid(unused_variables)]
use chrono::{Utc, DateTime};
use enums::ml::vocoder_type::VocoderType;
use log::warn;
use sqlx::MySqlPool;
use sqlx;
use reusable_types::db::enums::vocoder_type::VocoderType;
// TODO: Can probably just reuse another query.
@@ -91,7 +91,7 @@ SELECT
tts.maybe_default_pretrained_vocoder,
tts.maybe_custom_vocoder_token,
vocoder.vocoder_type as `maybe_custom_vocoder_type: reusable_types::db::enums::vocoder_type::VocoderType`,
vocoder.vocoder_type as `maybe_custom_vocoder_type: enums::ml::vocoder_type::VocoderType`,
vocoder.title as maybe_custom_vocoder_title,
vocoder.private_bucket_hash as maybe_custom_vocoder_private_bucket_hash,
@@ -8,8 +8,8 @@ use chrono::{DateTime, Utc};
use container_common::anyhow_result::AnyhowResult;
use crate::helpers::boolean_converters::i8_to_bool;
use enums::core::visibility::Visibility;
use enums::ml::vocoder_type::VocoderType;
use log::warn;
use reusable_types::db::enums::vocoder_type::VocoderType;
use sqlx::MySqlPool;
// FIXME: This is the old style of query scoping and shouldn't be copied.
@@ -120,7 +120,7 @@ async fn select_including_deleted(
r#"
SELECT
vocoder.token as vocoder_token,
vocoder.vocoder_type as `vocoder_type: reusable_types::db::enums::vocoder_type::VocoderType`,
vocoder.vocoder_type as `vocoder_type: enums::ml::vocoder_type::VocoderType`,
vocoder.creator_user_token,
users.username as creator_username,
@@ -168,7 +168,7 @@ async fn select_without_deleted(
r#"
SELECT
vocoder.token as vocoder_token,
vocoder.vocoder_type as `vocoder_type: reusable_types::db::enums::vocoder_type::VocoderType`,
vocoder.vocoder_type as `vocoder_type: enums::ml::vocoder_type::VocoderType`,
vocoder.creator_user_token,
users.username as creator_username,
@@ -7,7 +7,7 @@ use anyhow::anyhow;
use container_common::anyhow_result::AnyhowResult;
use crate::tokens::Tokens;
use enums::core::visibility::Visibility;
use reusable_types::db::enums::vocoder_type::VocoderType;
use enums::ml::vocoder_type::VocoderType;
use sqlx::MySqlPool;
use std::path::Path;
@@ -7,8 +7,8 @@ use anyhow::anyhow;
use chrono::{DateTime, Utc};
use container_common::anyhow_result::AnyhowResult;
use crate::helpers::boolean_converters::i8_to_bool;
use enums::ml::vocoder_type::VocoderType;
use log::{warn, info};
use reusable_types::db::enums::vocoder_type::VocoderType;
use sqlx::MySqlPool;
// FIXME: This is the old style of query scoping and shouldn't be copied.
@@ -115,7 +115,7 @@ async fn list_vocoder_models_for_all_creators(
r#"
SELECT
vocoder.token as vocoder_token,
vocoder.vocoder_type as `vocoder_type: reusable_types::db::enums::vocoder_type::VocoderType`,
vocoder.vocoder_type as `vocoder_type: enums::ml::vocoder_type::VocoderType`,
vocoder.creator_user_token,
users.username as creator_username,
users.display_name as creator_display_name,
@@ -147,7 +147,7 @@ WHERE
r#"
SELECT
vocoder.token as vocoder_token,
vocoder.vocoder_type as `vocoder_type: reusable_types::db::enums::vocoder_type::VocoderType`,
vocoder.vocoder_type as `vocoder_type: enums::ml::vocoder_type::VocoderType`,
vocoder.creator_user_token,
users.username as creator_username,
users.display_name as creator_display_name,
@@ -187,7 +187,7 @@ async fn list_vocoder_models_creator_scoped(
r#"
SELECT
vocoder.token as vocoder_token,
vocoder.vocoder_type as `vocoder_type: reusable_types::db::enums::vocoder_type::VocoderType`,
vocoder.vocoder_type as `vocoder_type: enums::ml::vocoder_type::VocoderType`,
vocoder.creator_user_token,
users.username as creator_username,
users.display_name as creator_display_name,
@@ -221,7 +221,7 @@ WHERE
r#"
SELECT
vocoder.token as vocoder_token,
vocoder.vocoder_type as `vocoder_type: reusable_types::db::enums::vocoder_type::VocoderType`,
vocoder.vocoder_type as `vocoder_type: enums::ml::vocoder_type::VocoderType`,
vocoder.creator_user_token,
users.username as creator_username,
users.display_name as creator_display_name,
@@ -10,9 +10,9 @@ use crate::job_types::tacotron::process_tacotron_model::process_tacotron_model;
use database_queries::queries::generic_download::job::list_available_generic_download_jobs::AvailableDownloadJob;
use database_queries::queries::generic_download::job::mark_generic_download_job_done::mark_generic_download_job_done;
use database_queries::queries::generic_download::job::mark_generic_download_job_pending_and_grab_lock::mark_generic_download_job_pending_and_grab_lock;
use enums::workers::generic_download_type::GenericDownloadType;
use jobs_common::redis_job_status_logger::RedisJobStatusLogger;
use log::{info, warn};
use reusable_types::db::enums::generic_download_type::GenericDownloadType;
use tempdir::TempDir;
pub async fn process_single_job(job_state: &JobState, job: &AvailableDownloadJob) -> AnyhowResult<()> {
@@ -8,9 +8,9 @@ use crate::JobState;
use crate::job_steps::job_results::JobResults;
use database_queries::queries::generic_download::job::list_available_generic_download_jobs::AvailableDownloadJob;
use database_queries::queries::vocoder::insert_vocoder_model::{Args, insert_vocoder_model};
use enums::ml::vocoder_type::VocoderType;
use jobs_common::redis_job_status_logger::RedisJobStatusLogger;
use log::{info, warn};
use reusable_types::db::enums::vocoder_type::VocoderType;
use std::fs::File;
use std::io::Read;
use std::path::PathBuf;
@@ -8,9 +8,9 @@ use crate::JobState;
use crate::job_steps::job_results::JobResults;
use database_queries::queries::generic_download::job::list_available_generic_download_jobs::AvailableDownloadJob;
use database_queries::queries::vocoder::insert_vocoder_model::{Args, insert_vocoder_model};
use enums::ml::vocoder_type::VocoderType;
use jobs_common::redis_job_status_logger::RedisJobStatusLogger;
use log::{info, warn};
use reusable_types::db::enums::vocoder_type::VocoderType;
use std::fs::File;
use std::io::Read;
use std::path::PathBuf;
@@ -13,11 +13,11 @@ use crate::validations::validate_idempotency_token_format::validate_idempotency_
use database_queries::queries::generic_download::web::insert_generic_download_job::{Args, insert_generic_download_job};
use database_queries::tokens::Tokens;
use enums::core::visibility::Visibility;
use enums::workers::generic_download_type::GenericDownloadType;
use http_server_common::request::get_request_ip::get_request_ip;
use http_server_common::response::serialize_as_json_error::serialize_as_json_error;
use log::{info, warn, log};
use regex::Regex;
use reusable_types::db::enums::generic_download_type::GenericDownloadType;
use sqlx::error::DatabaseError;
use sqlx::error::Error::Database;
use sqlx::mysql::MySqlDatabaseError;
@@ -24,7 +24,6 @@ use http_server_common::response::serialize_as_json_error::serialize_as_json_err
use log::{info, warn, log};
use media::decode_basic_audio_info::decode_basic_audio_info;
use regex::Regex;
use reusable_types::db::enums::generic_download_type::GenericDownloadType;
use reusable_types::db::payloads::MediaUploadDetails;
use sqlx::error::DatabaseError;
use sqlx::error::Error::Database;
@@ -12,8 +12,8 @@ use crate::http_server::web_utils::response_error_helpers::to_simple_json_error;
use crate::server_state::ServerState;
use database_queries::queries::vocoder::get_vocoder_model::get_vocoder_model_by_token;
use enums::core::visibility::Visibility;
use enums::ml::vocoder_type::VocoderType;
use log::warn;
use reusable_types::db::enums::vocoder_type::VocoderType;
use std::fmt;
use std::sync::Arc;
@@ -10,8 +10,8 @@ use chrono::{DateTime, Utc};
use crate::http_server::web_utils::response_error_helpers::to_simple_json_error;
use crate::server_state::ServerState;
use database_queries::queries::vocoder::list_vocoder_models::{list_vocoder_models, VocoderModelListItem};
use enums::ml::vocoder_type::VocoderType;
use log::warn;
use reusable_types::db::enums::vocoder_type::VocoderType;
use std::fmt;
use std::sync::Arc;
@@ -12,12 +12,12 @@ use crate::http_server::web_utils::response_error_helpers::to_simple_json_error;
use crate::server_state::ServerState;
use database_queries::queries::generic_inference::web::insert_generic_inference_job::{Args, insert_generic_inference_job};
use enums::core::visibility::Visibility;
use enums::workers::generic_inference_type::GenericInferenceType;
use http_server_common::request::get_request_header_optional::get_request_header_optional;
use http_server_common::request::get_request_ip::get_request_ip;
use log::{info, warn};
use r2d2_redis::redis::Commands;
use redis_common::redis_keys::RedisKeys;
use reusable_types::db::enums::generic_inference_type::GenericInferenceType;
use std::fmt;
use std::sync::Arc;
use tokens::jobs::inference::InferenceJobToken;
@@ -208,10 +208,18 @@ pub async fn enqueue_voice_conversion_inference_handler(
info!("Creating voice conversion inference job record...");
// TODO TODO TODO TODO --- InferenceArgs. ! This is where the media token will live.
// - Also maybe move reusable_types stuff to `_types` as a manner of cleanup
// - Also figure out which serializable types are giving the DB trouble. Wasn't this solved?
// I don't want to call to_str, as_str, etc. everywhere.
// - INFERENCE JOB(1) -> Voice Conversion (w/ Docker sidecar)
// - INFERENCE JOB(2) -> Get it working with TTS too, and update the frontend
let query_result = insert_generic_inference_job(Args {
job_token: &job_token,
uuid_idempotency_token: &request.uuid_idempotency_token,
inference_type: GenericInferenceType::VoiceConversion, // TODO: Move from `reusable_types`
inference_type: GenericInferenceType::VoiceConversion,
maybe_inference_args: None, // TODO: Include both tokens as well as allowed duration.
maybe_raw_inference_text: None,
maybe_model_token: Some(model_token),