Azure / Azure/azure-functions-durable-python

Serialization/Deserialization doesn't handle Generics and generates Non-deterministic workflow error

Ouverte
#572 3 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
bug fixed-in-v2 P2
Langage dominant
Python
Étoiles
157
Forks
70
Merge moyen
2 j 10 h
PR mergées (30 j)
2

Description

🐛 **Describe the bug**
When a Pydantic Generic object is returned in an activity function `azure.functions._durable_functions._serialize_custom_object` returns "__class__": "ClassName[GenericSpecificClass]". When `azure.functions._durable_functions._deserialize_custom_object` is called in the calling orchestrator, getattr(module, "ClassName[GenericSpecificClass]") fails: ClassName exists but not the specialized "ClassName[GenericSpecificClass]".

🤔 **Expected behavior**
Serialization and deserialization handles Generics.

**Current behaviour**
Deserialization fails with `AttributeError: module 'xxx.xxx' has not attribute 'ClassName[GenericSpecificClass]'`and produces a Non-Deterministic Workflow error

☕ **Steps to reproduce**
```python
from pydantic import BaseModel
from typing import Generic
import azure.functions as func
import azure.durable_functions as df

class A(BaseModel, Generic[T]):
a: T

def to_json():
return self.model_dump(mode="json")

@classmethod
def from_json(cls, data: dict):
return cls(**data)

myApp = df.DFApp(http_auth_level=func.AuthLevel.ANONYMOUS)

@myApp.orchestration_trigger(context_name="context")
def orchestrator_function(context: df.DurableOrchestrationContext):
x = yield context.call_activity("hello", None)

@myApp.activity_trigger(input_name="params")
def hello(params):
return A[str](a="xxx")

```

Guide de contribution

Ouvrir le guide de contribution

Piste de recherche

Commencez par suivre azure.functions._durable_functions._serialize_custom_object et _deserialize_custom_object en utilisant l’exemple Pydantic Generic de l’issue. Reproduisez le flux de l’activité vers l’orchestrateur et examinez comment le nom de la classe générique est sérialisé et recherché. C’est terminé lorsque l’exemple se désérialise correctement sans AttributeError ni erreur de workflow non déterministe.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
python
Domaine
backend
Type d'issue
Bug
Difficulté
3/5
Temps estimé
1-2 jours
Activité
Calme
Clarté
Plutôt claire
Accessibilité débutants
48/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.