Skip to content

Instantly share code, notes, and snippets.

@madsmtm
Last active October 25, 2018 14:43
Show Gist options
  • Save madsmtm/37b7fef6cb6eb8588676dc92f1044b7f to your computer and use it in GitHub Desktop.
Save madsmtm/37b7fef6cb6eb8588676dc92f1044b7f to your computer and use it in GitHub Desktop.
Minimal example of Eve-SQLAlchemy enumerators not working when using enumerated classes
import enum
from eve import Eve
from sqlalchemy import Column, Integer, Enum
from sqlalchemy.ext.declarative import declarative_base
from eve_sqlalchemy import SQL
from eve_sqlalchemy.config import DomainConfig, ResourceConfig
from eve_sqlalchemy.validation import ValidatorSQL
Base = declarative_base()
class ABEnum(enum.Enum):
A = "A"
B = "B"
class Things(Base):
__tablename__ = "things"
id = Column(Integer, primary_key=True)
# These are the important lines
works = Column(Enum("A", "B"))
broken = Column(Enum(ABEnum))
# See https://docs.sqlalchemy.org/en/latest/core/type_basics.html#sqlalchemy.types.Enum
# Setup the app
DOMAIN = DomainConfig({"things": ResourceConfig(Things)}).render()
app = Eve(settings={"DOMAIN": DOMAIN}, validator=ValidatorSQL, data=SQL)
db = app.data.driver
Base.metadata.bind = db.engine
db.Model = Base
db.create_all()
db.session.add_all([Things(broken=ABEnum.A, works="A"), Things(broken=ABEnum.B, works="B")])
db.session.commit()
app.run()
# Navigating to /things raises `TypeError: Object of type Enumerator is not JSON serializable`
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment