Last active
October 25, 2018 14:43
-
-
Save madsmtm/37b7fef6cb6eb8588676dc92f1044b7f to your computer and use it in GitHub Desktop.
Minimal example of Eve-SQLAlchemy enumerators not working when using enumerated classes
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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