Azure / Azure/azure-functions-durable-python

Proposal: Support Class-Based Syntax for Python Entities

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

Description

Currently, Entities in Python (and JavaScript) only support function-based syntax, where operations are delineated by a cascade of if-statements. In C#, a class-based syntax is supported, which allows individual operations to be split into methods belonging to a larger class that represents the Entity itself.

Implementing this alternative syntax should not be too difficult, it's mostly just a layer of indirection. Making matters simpler, we already have a community-driven example of how to do this for TypeScript here: https://scale-tone.github.io/2021/03/15/durable-mvc .

As an example for the syntax, consider the following entity function using the current implementation syntax

```Python
def entity_function(context: df.DurableEntityContext):
current_value = context.get_state(lambda: 0)
operation = context.operation_name
if operation == "add":
amount = context.get_input()
current_value += amount
elif operation == "reset":
current_value = 0
elif operation == "get":
pass

context.set_state(current_value)
context.set_result(current_value)
```

It's class-based syntax alternative would look as follows:

```Python
class Counter:
def __init__(self): # this corresponds to state initializer, or the `lambda: 0` in the function-based syntax
self.entity_state= 0

def add(self, amount):
self.entity_state+= amount
return self.entity_state
def get(self):
return self.entity_state
def reset(self):
return self.entity_state= 0
```

Finally, it makes sense to me that the `return` statement would set the value for `context.set_result`. A more difficult question is to know what value to save for `set_state`. One easy solution is to require the state to be under the name `self.entity_state` but perhaps that's too restrictive. What do others think?

Guide de contribution

Ouvrir le guide de contribution

Piste de recherche

L’issue ne mentionne aucun fichier ni test. Commencez par examiner la gestion existante des entités basée sur des fonctions autour de DurableEntityContext et l’exemple TypeScript lié, puis déterminez comment les méthodes de classe, l’initialisation, les résultats renvoyés et l’état persisté doivent correspondre au modèle d’entités actuel. La tâche ne pourra être considérée comme terminée qu’une fois qu’une conception validée de la syntaxe et de la gestion de l’état aura été définie avant l’implémentation.

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

Évaluation

Stack technique
python
Domaine
backend
Type d'issue
Fonctionnalité
Difficulté
5/5
Temps estimé
Plus d'une semaine
Activité
À l'abandon
Clarté
À clarifier
Accessibilité débutants
25/100

Recevez les nouvelles issues par e-mail

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