@classmethod
    def _implement_virtual(mcs, cls, bases):
        # pylint: disable=cell-var-from-loop,unused-argument
        methods = {}
        for vmname in mcs.virtual_methods:
            clsmethod = getattr(cls, vmname, None)
            if clsmethod:
                basemethods = [getattr(b, vmname) for b in bases if hasattr(b, vmname)]
                methods[vmname] = [bm for bm in basemethods if bm != clsmethod]
                methods[vmname].append(clsmethod)

                def generate_method_wrapper(vname):
                    name__ = vmname

                    def wrapper(self, *args, **kwargs):
                        for dm in methods[name__]:
                            dm(self, *args, **kwargs)
                    return wrapper
                setattr(cls, vmname, generate_method_wrapper(vmname))
Gets a job by id.
dataset/ETHPy150Open ARM-software/workload-automation/wlauto/tests/test_execution.py/BadDeviceMeta._implement_virtual--crossover with--dataset/ETHPy150Open tethysplatform/tethys/tethys_compute/job_manager.py/JobManager.get_job