Exemple #1
0
def freezify(cls, frameCount=1):
    """Returns a 'frozen' namedtuple type of the given SlotCompare subclass."""
    assert issubclass(cls, SlotCompare)
    frozenName = 'Frozen' + cls.__name__

    # namedtuple constructs the base class.
    baseType = namedtuple(frozenName, cls.__slots__)

    # Subclass the namedtuple to add a thaw() mixin and to copy read-only
    # versions of the thawed class' properties.
    frozenDict = {'__slots__': (), '_thawedType': cls}
    for name, value in inspect.getmembers(cls):
        if isinstance(value, property):
            frozenDict[name] = property(value.fget)
    frozenType = type(frozenName, (baseType, _Thawable), frozenDict)

    # Stash forward and backward type references.
    cls._frozenType = frozenType
    frozenType._thawedType = cls

    # Frozen types are always safe to unpickle.
    module = sys._getframe(frameCount).f_globals.get('__name__', '__main__')
    frozenType.__module__ = module
    chutney.register(frozenType, _force=True)

    return frozenType
Exemple #2
0
        assigned = len(worker.tasks)
        available = worker.slots.get(self.slotType, 2)
        free = max(available - assigned, 0)
        if free:
            return core_const.A_NOW, free
        else:
            return core_const.A_LATER, None

    ## Freezer machinery

    def getData(self):
        return self.job.data.getObject()

    def setData(self, obj):
        if not isinstance(obj, rmk_types.FrozenObject):
            obj = rmk_types.FrozenObject.fromObject(obj)
        self.job.data = obj


TaskCallbacks = namedtuple('TaskCallbacks', 'deferred callbacks')


try:
    BaseException
except NameError:
    BaseException = Exception


class TasksFailed(BaseException):
    pass