예제 #1
0
    def withItemForUUID(self, alias, itype=Item, **attrs):
        """Handle recurrence modification aliases."""
        uuid, recurrence_id = splitUUID(alias)
        if not recurrence_id:
            return super(SharingTranslator,
                         self).withItemForUUID(uuid, itype, **attrs)

        occurrence = self.getItemForAlias(alias)
        master = self.getItemForAlias(uuid)
        master_recur = Recurrence(master)

        add_on = itype if itype is not Item else None

        # recurrence triage is a special case
        if add_on is Triage and 'manual' in attrs and 'manual_timestamp' in attrs:
            status, timestamp = attrs['manual'], attrs['manual_timestamp']
            if status is eim.Inherit:
                master_recur.clear_occurrence_triage(recurrence_id)
            else:
                master_recur.triage_occurrence(recurrence_id, timestamp,
                                               status)
            del attrs['manual']
            del attrs['manual_timestamp']

        for name, value in attrs.items():
            if value is eim.Inherit:
                occurrence.remove_change(add_on, name)
            elif value is not eim.NoChange:
                occurrence.modify(add_on, name, value)

        value = occurrence if add_on is None else add_on(occurrence)
        if issubclass(itype, Extension):
            if not itype.installed_on(occurrence) and attrs:
                value.add()

        def decorator(func):
            try:
                return func(value)
            except Exception, e:
                self.recordFailure(e)
예제 #2
0
    def withItemForUUID(self, alias, itype=Item, **attrs):
        """Handle recurrence modification aliases."""
        uuid, recurrence_id = splitUUID(alias)
        if not recurrence_id:
            return super(SharingTranslator, self).withItemForUUID(uuid, itype, **attrs)

        occurrence = self.getItemForAlias(alias)
        master = self.getItemForAlias(uuid)
        master_recur = Recurrence(master)

        add_on = itype if itype is not Item else None

        # recurrence triage is a special case
        if add_on is Triage and 'manual' in attrs and 'manual_timestamp' in attrs:
            status, timestamp = attrs['manual'], attrs['manual_timestamp']
            if status is eim.Inherit:
                master_recur.clear_occurrence_triage(recurrence_id)
            else:
                master_recur.triage_occurrence(recurrence_id, timestamp, status)
            del attrs['manual']
            del attrs['manual_timestamp']

        for name, value in attrs.items():
            if value is eim.Inherit:
                occurrence.remove_change(add_on, name)
            elif value is not eim.NoChange:
                occurrence.modify(add_on, name, value)

        value = occurrence if add_on is None else add_on(occurrence)
        if issubclass(itype, Extension):
            if not itype.installed_on(occurrence) and attrs:
                value.add()

        def decorator(func):
            try:
                return func(value)
            except Exception, e:
                self.recordFailure(e)