support/gym_remote/exceptions.py (31 lines of code) (raw):

import gym_remote as gr class GymRemoteErrorMeta(type): ID_MAX = 0 ID_LIST = [] def __new__(cls, name, bases, dictionary): dictionary['ID'] = cls.ID_MAX cls.ID_MAX += 1 try: bases = (*bases, GymRemoteError) except NameError: assert name == 'GymRemoteError' newcls = super(GymRemoteErrorMeta, cls).__new__(cls, name, bases, dictionary) cls.ID_LIST.append(newcls) return newcls @classmethod def make(cls, id, *args, **kwargs): return cls.ID_LIST[id](*args, **kwargs) class GymRemoteError(RuntimeError, metaclass=GymRemoteErrorMeta): pass class TimestepTimeoutError(TimeoutError, metaclass=GymRemoteErrorMeta): pass class WallClockTimeoutError(TimeoutError, metaclass=GymRemoteErrorMeta): pass class ClientDisconnectError(gr.Bridge.Closed, metaclass=GymRemoteErrorMeta): pass class ServerDisconnectError(gr.Bridge.Closed, metaclass=GymRemoteErrorMeta): pass class ResetError(metaclass=GymRemoteErrorMeta): pass def make(id, *args, **kwargs): return GymRemoteErrorMeta.make(id, *args, **kwargs)