wrapper api / proxying third party exception?

Benjamin Risher brisher777 at gmail.com
Tue Dec 15 07:37:57 EST 2015


Ok, here's my issue.  I have a plugin framework I wrote that relies on a third party library that I can't change.  As a part of that framework, I wrote a small stub library to proxy calls to the third party library, so that if their api ever changes, plugins written against the stub won't have to change, I'll just have to update the back-half that interfaces with the library.  I think this is called an adapter design pattern...?  

plugin --> my api --> their api --> their library 

It works, for the most part.  Most of my classes look similar to this

    class MYClass:
        def __init__(self, *args, **kwargs):
            self.__theirclass = TheirClass(*args, **kwargs)

        def __getattr__(self, attr):
            return getattr(self.__theirclass, attr)

What I'm having issue with, is their exception class.  

1.  A plugin calls a stub in my library
2.  That stub calls the corresponding call in the third party library
3.  The call raises an exception from the library
4.  The plugin can't catch the exception without importing directly from the third party library

What is the correct way to allow plugins to import my stub exception, but catch the ones raised by the library?  I was looking at monkeying with subclasshook or something along those lines, but it doesn't seem like the best approach.  Hoping for some help from here.  

Please let me know if you need any clarification to help!

Thank you.



More information about the Python-list mailing list