msgprop.EnumProperty 和 messages.Enum 使用 Python 3 和 Cloud NDB 的最佳实践是什么?

What are Best Practice for msgprop.EnumProperty and messages.Enum with Python 3 and Cloud NDB?

使用 Python 2 和 NDB,我们可以这样将 Enum 存储在实体的属性中:

from google.appengine.ext import ndb
from google.appengine.ext.ndb import msgprop
from protorpc import messages

class CoreWebhookService(messages.Enum):
    UNKNOWN = 0
    AUTH0 = 1

class CoreWebhook(ndb.model):
    service = msgprop.EnumProperty(CoreWebhookService, required=True)
    url = ndb.StringProperty(required=True)

使用 Python 3,基于 this guide,它表示 google.appengine.ext.ndb.msgprop.EnumProperty 的 If you try to create these objects, a NotImplementedError will be raised.

明白

from google.appengine.ext import ndb

取代
from google.cloud import ndb

但是 从现在开始,Enum 的最佳实践是什么,因为它没有实现?

谢谢

抱歉,我没有测试项目来验证这一点,但是 python 3 有枚举。你应该能够直接做一些事情,比如:

from enum import IntEnum

class CoreWebhookService(IntEnum):
    UNKNOWN = 0
    AUTH0 = 1

class CoreWebhook(ndb.model):
  service = IntegerProperty(required = true, choices=list(CoreWebhookService))
  url = ndb.StringProperty(required=True)