I'd like to use an abstract base class as declarative base class for my SQLAlchemy model.
Take the following ABC:
from abc import ABCMeta, abstractmethod
class DealMeta(ABCMeta):
pass
class DealBase(metaclass=DealMeta):
"""
"""
def __init__(self, valuation_model):
self.valuation_model = valuation_model
@abstractmethod
def create(self):
"""
"""
raise NotImplementedError()
@property
def valuation(self):
return self.valuation_model.get_valuation(self)
And the following model:
from sqlalchemy import Column, Integer, Float, String
from sqlalchemy.orm import relationship
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base(cls=DealBase)
class Deal(Base):
__tablename__ = "deals"
# columns
deal_name = Column(String)
customer_name = Column(String)
def __init__(self, **kwargs):
# Call the constructur
super(Deal, self).__init__(**kwargs)
def create(self):
pass
This returns the following error:
When importing Deal
I receive the following error:
TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases
I'm confused about the error. Which is the metaclass that must be subclassed here?
How do I do this properly?