DataFactoryTestingFrameworkExpressionsEvaluator adds status property even if None is set.

Abierto Apto para principiantes
#164 0 comentarios 0 reacciones 0 asignados Ver en GitHub

@LeonardHd ya está trabajando en esto.

Desde el 29/7/2025.

  • #165 de @LeonardHd — abierto

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
68/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Estancado
Stack tecnológico
azure, python
Área
testing-qa

Línea de trabajo

Abre src/data_factory_testing_framework/_pythonnet/data_factory_testing_framework_expressions_evaluator.py alrededor de la línea 40 e inspecciona cómo se añaden las propiedades del resultado de la actividad. Reproduce el caso de evaluación de expresiones descrito en el issue y verifica después que las propiedades establecidas en None se omiten, mientras que las propiedades que no son None siguen estando disponibles.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

bug

We have scenarios where certain Activity outputs (like status as described in #162 ) are not present on the Activity Outputs.

Currently neither functional tests nor activity tests can capture these scenarios because we add the status always to the activity results (see https://github.com/microsoft/data-factory-testing-framework/blob/main/src/data_factory_testing_framework/_pythonnet/data_factory_testing_framework_expressions_evaluator.py#L40).

The expression evaluator returns a error we can handle to mimic the behaviour:

>           raise Exception(f"Unknown error: {e}") from e
E           Exception: Unknown error: The template language expression 'contains(
E             createArray(
E               activity('Fail').status,
E               activity('Notebook').status
E             ),
E             'Failed'
E           )' cannot be evaluated because property 'status' doesn't exist, available properties are 'output, error'. Please see https://aka.ms/logicexpressions for usage details.
E              at Microsoft.Azure.Workflows.Templates.Expressions.TemplateFunctionTextExpression.SelectObjectProperty(JObject root, JToken property, Boolean safeDereference)
E              at Microsoft.Azure.Workflows.Templates.Expressions.TemplateFunctionTextExpression.SelectProperty(JToken root, TemplateDereferenceExpression[] dereferences, TemplateExpressionEvaluationContext context, Boolean failOnError)
E              at Microsoft.Azure.Workflows.Templates.Expressions.TemplateFunctionTextExpression.EvaluateRootExpression(TemplateExpressionEvaluationContext context, Boolean failOnError, ISkippableEnumerator`1 parameterValues, Int32 parametersCount)
E              at Microsoft.Azure.Workflows.Templates.Expressions.TemplateFunctionExpression.EvaluateExpression(TemplateExpressionEvaluationContext context, Boolean failOnError)
E              at Microsoft.Azure.Workflows.Templates.Expressions.TemplateFunctionExpression.LazyParameterEnumerator.MoveNext(Int32 skip)
E              at Microsoft.Azure.Workflows.Templates.ISkippableEnumeratorExtensions.ToEnumerable[T](ISkippableEnumerator`1 enumerator)+MoveNext()
E              at System.Collections.Generic.LargeArrayBuilder`1.AddRange(IEnumerable`1 items)
E              at System.Collections.Generic.EnumerableHelpers.ToArray[T](IEnumerable`1 source)
E              at Microsoft.Azure.Workflows.Templates.Expressions.TemplateExpressionBuiltInFunctions.EvaluateFunction(String functionName, ISkippableEnumerator`1 parameters, Int32 parametersCount, Boolean preserveAnnotations)
E              at Microsoft.Azure.Workflows.Templates.Expressions.TemplateExpressionEvaluationHelper.EvaluateFunction(String functionName, ISkippableEnumerator`1 parameters, Int32 parametersCount)
E              at Microsoft.Azure.Workflows.Templates.Expressions.TemplateFunctionTextExpression.EvaluateRootExpression(TemplateExpressionEvaluationContext context, Boolean failOnError, ISkippableEnumerator`1 parameterValues, Int32 parametersCount)
E              at Microsoft.Azure.Workflows.Templates.Expressions.TemplateFunctionExpression.EvaluateExpression(TemplateExpressionEvaluationContext context, Boolean failOnError)
E              at Microsoft.Azure.Workflows.Templates.Expressions.TemplateFunctionExpression.LazyParameterEnumerator.MoveNext(Int32 skip)
E              at Microsoft.Azure.Workflows.Templates.ISkippableEnumeratorExtensions.ToEnumerable[T](ISkippableEnumerator`1 enumerator)+MoveNext()
E              at System.Collections.Generic.LargeArrayBuilder`1.AddRange(IEnumerable`1 items)
E              at System.Collections.Generic.EnumerableHelpers.ToArray[T](IEnumerable`1 source)
E              at Microsoft.Azure.Workflows.Templates.Expressions.TemplateExpressionBuiltInFunctions.EvaluateFunction(String functionName, ISkippableEnumerator`1 parameters, Int32 parametersCount, Boolean preserveAnnotations)
E              at Microsoft.Azure.Workflows.Templates.Expressions.TemplateExpressionEvaluationHelper.EvaluateFunction(String functionName, ISkippableEnumerator`1 parameters, Int32 parametersCount)
E              at Microsoft.Azure.Workflows.Templates.Expressions.TemplateFunctionTextExpression.EvaluateRootExpression(TemplateExpressionEvaluationContext context, Boolean failOnError, ISkippableEnumerator`1 parameterValues, Int32 parametersCount)
E              at Microsoft.Azure.Workflows.Templates.Expressions.TemplateFunctionExpression.EvaluateExpression(TemplateExpressionEvaluationContext context, Boolean failOnError)
E              at Microsoft.Azure.Workflows.Templates.Helpers.TemplateExpressionsHelper.EvaluateTemplateLanguageExpression(String expression, TemplateExpressionEvaluationContext evaluationContext)
E              at Microsoft.Azure.DataFactoryTestingFramework.Expressions.Evaluator.EvaluateExpression(String expression, String parametersJson, String variablesJson, String itemValueJson, String activityValuesJson)
E              at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)
E              at System.Reflection.MethodBaseInvoker.InvokeWithManyArgs(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)

Proposed solution:

Only add the add properties if they are set to anything other than None.

Lenguaje dominante
Python
Estrellas
135
Forks
44
Merge medio
6 d 20 h
PR fusionados (30 d)
2

Preparar el entorno

Abrir en Codespaces

Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.

  • Sin Dockerfile ni archivo de Docker Compose
  • Sin plantilla de pull request
  • Sin guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de microsoft/data-factory-testing-framework

Todos los issues de microsoft/data-factory-testing-framework

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.