I took the ABCMeta approach in the branch I landed in 2016. Now I've merged a further refactoring to re-raise exceptions with diamond-inheritance exception types so that both "except <dbapi type>" and "except StormError" (etc.) keep working, while making things work in Python 3. This is somewhat like what Django ended up with after extensive discussion though with Storm-appropriate backward compatibility, and it's the best I've been able to come up with; some careful wrapper classes and context managers make the required boilerplate quite tolerable.
I took the ABCMeta approach in the branch I landed in 2016. Now I've merged a further refactoring to re-raise exceptions with diamond-inheritance exception types so that both "except <dbapi type>" and "except StormError" (etc.) keep working, while making things work in Python 3. This is somewhat like what Django ended up with after extensive discussion though with Storm-appropriate backward compatibility, and it's the best I've been able to come up with; some careful wrapper classes and context managers make the required boilerplate quite tolerable.