generate placeholder for description and parser catch

This commit is contained in:
dal 2025-05-12 08:35:05 -06:00
parent e25b7d6639
commit ac7ad9cfd1
No known key found for this signature in database
GPG Key ID: 16F4B0E1E9F61122
2 changed files with 50 additions and 7 deletions

View File

@ -466,7 +466,7 @@ for (unique_id, node) in &dbt_catalog.nodes {
}
// Preserve manual description, otherwise update from catalog if catalog has one.
let placeholder_desc = "Description missing - please update.".to_string();
let placeholder_desc = "{DESCRIPTION_NEEDED}".to_string();
match &existing_model.description {
Some(existing_desc) if existing_desc != &placeholder_desc => {
// Manual description exists and is not the placeholder, do nothing to preserve it.
@ -525,7 +525,7 @@ for (unique_id, node) in &dbt_catalog.nodes {
}
// Preserve manual description if Some and not placeholder, otherwise update from catalog.
let placeholder_col_desc = "Description missing - please update.".to_string();
let placeholder_col_desc = "{DESCRIPTION_NEEDED}.".to_string();
match &updated_dim.description {
Some(existing_col_desc) if existing_col_desc != &placeholder_col_desc => {
// Manual description exists and is not placeholder, do nothing.
@ -574,7 +574,7 @@ for (unique_id, node) in &dbt_catalog.nodes {
}
// Preserve manual description if Some and not placeholder, otherwise update from catalog.
let placeholder_col_desc = "Description missing - please update.".to_string();
let placeholder_col_desc = "{DESCRIPTION_NEEDED}.".to_string();
match &updated_measure.description {
Some(existing_col_desc) if existing_col_desc != &placeholder_col_desc => {
// Manual description exists and is not placeholder, do nothing.
@ -607,13 +607,13 @@ for (unique_id, node) in &dbt_catalog.nodes {
if crate::commands::init::is_measure_type(&dbt_col.type_) {
current_measures.push(YamlMeasure {
name: dbt_col.name.clone(),
description: dbt_col.comment.as_ref().filter(|s| !s.is_empty()).cloned().or_else(|| Some("Description missing - please update.".to_string())),
description: dbt_col.comment.as_ref().filter(|s| !s.is_empty()).cloned().or_else(|| Some("{DESCRIPTION_NEEDED}.".to_string())),
type_: Some(dbt_col.type_.clone())
});
} else {
current_dims.push(YamlDimension {
name: dbt_col.name.clone(),
description: dbt_col.comment.as_ref().filter(|s| !s.is_empty()).cloned().or_else(|| Some("Description missing - please update.".to_string())),
description: dbt_col.comment.as_ref().filter(|s| !s.is_empty()).cloned().or_else(|| Some("{DESCRIPTION_NEEDED}.".to_string())),
type_: Some(dbt_col.type_.clone()),
searchable: false, // Ensure searchable is false
options: None
@ -640,13 +640,13 @@ for (unique_id, node) in &dbt_catalog.nodes {
if crate::commands::init::is_measure_type(&col_meta.type_) { // type_ is String
measures.push(YamlMeasure {
name: col_meta.name.clone(),
description: col_meta.comment.as_ref().filter(|s| !s.is_empty()).cloned().or_else(|| Some("Description missing - please update.".to_string())),
description: col_meta.comment.as_ref().filter(|s| !s.is_empty()).cloned().or_else(|| Some("{DESCRIPTION_NEEDED}.".to_string())),
type_: Some(col_meta.type_.clone())
});
} else {
dimensions.push(YamlDimension {
name: col_meta.name.clone(),
description: col_meta.comment.as_ref().filter(|s| !s.is_empty()).cloned().or_else(|| Some("Description missing - please update.".to_string())),
description: col_meta.comment.as_ref().filter(|s| !s.is_empty()).cloned().or_else(|| Some("{DESCRIPTION_NEEDED}.".to_string())),
type_: Some(col_meta.type_.clone()),
searchable: false, // Ensure searchable is false
options: None

View File

@ -251,6 +251,49 @@ pub async fn parse_models_command(path_arg: Option<String>) -> Result<()> {
model_errors.push("schema could not be resolved.".to_string());
}
// Check for placeholder description in the model itself
if let Some(desc) = &model.description {
if desc.contains("{DESCRIPTION_NEEDED}") {
model_errors.push("Model description contains placeholder '{DESCRIPTION_NEEDED}'. Please provide a description.".to_string());
}
}
// Check descriptions in dimensions
for dimension in &model.dimensions {
if let Some(desc) = &dimension.description {
if desc.contains("{DESCRIPTION_NEEDED}") {
model_errors.push(format!("Dimension '{}' description contains placeholder '{{DESCRIPTION_NEEDED}}'. Please provide a description.", dimension.name));
}
}
}
// Check descriptions in measures
for measure in &model.measures {
if let Some(desc) = &measure.description {
if desc.contains("{DESCRIPTION_NEEDED}") {
model_errors.push(format!("Measure '{}' description contains placeholder '{{DESCRIPTION_NEEDED}}'. Please provide a description.", measure.name));
}
}
}
// Check descriptions in metrics
for metric in &model.metrics {
if let Some(desc) = &metric.description {
if desc.contains("{DESCRIPTION_NEEDED}") {
model_errors.push(format!("Metric '{}' description contains placeholder '{{DESCRIPTION_NEEDED}}'. Please provide a description.", metric.name));
}
}
}
// Check descriptions in filters
for filter in &model.filters {
if let Some(desc) = &filter.description {
if desc.contains("{DESCRIPTION_NEEDED}") {
model_errors.push(format!("Filter '{}' description contains placeholder '{{DESCRIPTION_NEEDED}}'. Please provide a description.", filter.name));
}
}
}
if !model_errors.is_empty() {
progress.errors.push((
progress.current_file.clone(),