Azure / Azure/azure-functions-durable-python

Proposal: Support Class-Based Syntax for Python Entities

Abierto
#278 4 comentarios 0 reacciones 0 asignados Ver en GitHub
Enhancement fixed-in-v2
Lenguaje dominante
Python
Estrellas
157
Forks
70
Merge medio
2 d 10 h
PR fusionados (30 d)
2

Descripción

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?

Guía de contribución

Abrir la guía de contribución

Línea de trabajo

El issue no menciona ningún archivo ni prueba. Empieza revisando el manejo existente de entidades basado en funciones alrededor de DurableEntityContext y el ejemplo de TypeScript enlazado; después, determina cómo deberían corresponder los métodos de clase, la inicialización, los resultados devueltos y el estado persistido con el modelo de entidades actual. La tarea requiere contar con un diseño acordado para la sintaxis y la gestión del estado antes de la implementación.

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

Evaluación

Stack tecnológico
python
Área
backend
Tipo de issue
Nueva funcionalidad
Dificultad
5/5
Tiempo estimado
Más de una semana
Estado de actividad
Estancado
Claridad
Necesita aclaración
Aptitud para principiantes
25/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.