Example #1
0
    def update(self):
        """Update a label.
        """

        if self.request.form.get('form.delete', None):
            return self.remove()

        label_id = self.request.form.get('label_id', None)
        if not label_id:
            raise BadRequest('The "label_id" request argument is required.')

        jar = ILabelJar(self.context)
        label = jar.get(label_id)

        title = self.request.form.get('title', None)
        if title:
            label['title'] = title

        color = self.request.form.get('color', None)
        if color:
            label['color'] = color

        by_user = bool(self.request.form.get('by_user', False))
        label['by_user'] = by_user

        jar.update(**label)
        return self._redirect()
Example #2
0
    def update(self):
        """Update a label.
        """

        if self.request.form.get('form.delete', None):
            return self.remove()

        label_id = self.request.form.get('label_id', None)
        if not label_id:
            raise BadRequest('The "label_id" request argument is required.')

        jar = ILabelJar(self.context)
        label = jar.get(label_id)

        title = self.request.form.get('title', None)
        if title:
            label['title'] = title

        color = self.request.form.get('color', None)
        if color:
            label['color'] = color

        by_user = bool(self.request.form.get('by_user', False))
        label['by_user'] = by_user

        jar.update(**label)
        return self._redirect()
Example #3
0
    def create(self):
        """Create a new label.
        """

        title = self.request.form.get('title', None)
        if not title:
            api.portal.show_message(
                _(u'lable_title_is_missing',
                  default=u'Please choose a title.'),
                self.request, 'error')

            return self._redirect()

        color = self.request.form.get('color', None)
        if not color:
            color = self._get_random_color()

        jar = ILabelJar(self.context)
        jar.get(jar.add(title, color))
        return self._redirect()
Example #4
0
    def create(self):
        """Create a new label.
        """

        title = self.request.form.get('title', None)
        if not title:
            api.portal.show_message(
                _(u'lable_title_is_missing',
                  default=u'Please choose a title.'),
                self.request, 'error')

            return self._redirect()

        color = self.request.form.get('color', None)
        if not color:
            color = self._get_random_color()

        by_user = bool(self.request.form.get('by_user', False))  # received value is 'on' when checked

        jar = ILabelJar(self.context)
        jar.get(jar.add(title, color, by_user))
        return self._redirect()
Example #5
0
    def create(self):
        """Create a new label.
        """

        title = self.request.form.get('title', None)
        if not title:
            api.portal.show_message(
                _(u'lable_title_is_missing',
                  default=u'Please choose a title.'), self.request, 'error')

            return self._redirect()

        color = self.request.form.get('color', None)
        if not color:
            color = self._get_random_color()

        by_user = bool(self.request.form.get(
            'by_user', False))  # received value is 'on' when checked

        jar = ILabelJar(self.context)
        jar.get(jar.add(title, color, by_user))
        return self._redirect()
Example #6
0
class Labeling(object):
    implements(ILabeling)
    adapts(ILabelSupport)

    def __init__(self, context):
        self.context = context
        self.jar = ILabelJar(self.context)

    def update(self, label_ids):
        available_labels = self.jar.storage.keys()

        for label_id in label_ids:
            if label_id not in available_labels:
                raise LookupError(
                    'Cannot activate label: '
                    'the label "{0}" is not in the label jar. '
                    'Following labels ids are available: {1}'.format(
                        label_id, ', '.join(available_labels)))

        # Do not replace self.storage, since it is a PersistentList!
        self.storage[:] = label_ids

    def active_labels(self):
        labels = []
        for label_id in self.storage:
            try:
                labels.append(self.jar.get(label_id))
            except KeyError:
                pass
        return sorted(labels, key=lambda cls: make_sortable(cls['title']))

    def available_labels(self):
        for label in self.jar.list():
            label['active'] = (label.get('label_id') in self.storage)
            yield label

    @property
    def storage(self):
        if getattr(self, '_storage', None) is None:
            annotation = IAnnotations(self.context)
            if ANNOTATION_KEY not in annotation:
                annotation[ANNOTATION_KEY] = PersistentList()
            self._storage = annotation[ANNOTATION_KEY]
        return self._storage
Example #7
0
class Labeling(object):
    implements(ILabeling)
    adapts(ILabelSupport)

    def __init__(self, context):
        self.context = context
        self.jar = ILabelJar(self.context)

    def update(self, label_ids):
        jar_keys = self.jar.storage.keys()
        # removes deselected labels
        for label_id in self.storage.keys(
        ):  # use keys to avoid RuntimeError: dictionary changed size during iteration
            if label_id not in jar_keys:
                continue  # do we remove key ??
            label = self.jar.get(label_id)
            if label_id not in label_ids:
                if not label['by_user']:
                    self.storage.pop(label_id)

        # adds selected labels
        for label_id in label_ids:
            if label_id not in jar_keys:
                raise LookupError(
                    'Cannot activate label: '
                    'the label "{0}" is not in the label jar. '
                    'Following labels ids are available: {1}'.format(
                        label_id, ', '.join(jar_keys)))
            if label_id not in self.storage:
                self.storage[label_id] = PersistentList()

    def pers_update(self, label_ids, activate):
        user_id = self.user_id()
        if not user_id:
            return False
        if activate:
            for label_id in label_ids:
                if label_id not in self.storage:
                    self.storage[label_id] = PersistentList()
                if user_id not in self.storage[label_id]:
                    self.storage[label_id].append(user_id)
        else:
            for label_id in label_ids:
                if label_id not in self.storage:
                    continue
                if user_id in self.storage[label_id]:
                    self.storage[label_id].remove(user_id)
                if not self.storage[label_id]:
                    self.storage.pop(label_id)
        return True

    def active_labels(self):
        # selected labels
        labels = []
        for label_id in self.storage:
            try:
                label = self.jar.get(label_id)
                if label['by_user']:
                    if self.user_id() in self.storage[label_id]:
                        labels.append(label)
                else:
                    labels.append(label)
            except KeyError:
                pass
        return sorted(labels, key=lambda cls: make_sortable(cls['title']))

    def available_labels(self):
        # possible labels, marking active ones
        labels = [[], []]
        for label in self.jar.list():
            if label['by_user']:
                label['active'] = (label['label_id'] in self.storage
                                   and self.user_id()
                                   in self.storage[label['label_id']])
                labels[0].append(label)
            else:
                label['active'] = (label.get('label_id') in self.storage)
                labels[1].append(label)
        labels[0].sort(key=lambda cls: make_sortable(cls['title']))
        labels[1].sort(key=lambda cls: make_sortable(cls['title']))
        return labels

    def user_id(default=None):
        """ Return current userid """
        cur_user = api.user.get_current()
        if not cur_user:
            return default
        return cur_user.getId()

    @property
    def storage(self):
        if getattr(self, '_storage', None) is None:
            annotation = IAnnotations(self.context)
            if ANNOTATION_KEY not in annotation:
                annotation[ANNOTATION_KEY] = PersistentMapping()
            self._storage = annotation[ANNOTATION_KEY]
        return self._storage
Example #8
0
class Labeling(object):
    implements(ILabeling)
    adapts(ILabelSupport)

    def __init__(self, context):
        self.context = context
        self.jar = ILabelJar(self.context)

    def update(self, label_ids):
        jar_keys = self.jar.storage.keys()
        # removes deselected labels
        for label_id in self.storage.keys():  # use keys to avoid RuntimeError: dictionary changed size during iteration
            if label_id not in jar_keys:
                continue  # do we remove key ??
            label = self.jar.get(label_id)
            if label_id not in label_ids:
                if not label['by_user']:
                    self.storage.pop(label_id)

        # adds selected labels
        for label_id in label_ids:
            if label_id not in jar_keys:
                raise LookupError(
                    'Cannot activate label: '
                    'the label "{0}" is not in the label jar. '
                    'Following labels ids are available: {1}'.format(
                        label_id, ', '.join(jar_keys)))
            if label_id not in self.storage:
                self.storage[label_id] = PersistentList()

    def pers_update(self, label_id, activate):
        user_id = self.user_id()
        if not user_id:
            return False
        if activate:
            if label_id not in self.storage:
                self.storage[label_id] = PersistentList()
            if user_id not in self.storage[label_id]:
                self.storage[label_id].append(user_id)
        else:
            if user_id in self.storage[label_id]:
                self.storage[label_id].remove(user_id)
            if not self.storage[label_id]:
                self.storage.pop(label_id)
        return True

    def active_labels(self):
        # selected labels
        labels = []
        for label_id in self.storage:
            try:
                label = self.jar.get(label_id)
                if label['by_user']:
                    if self.user_id() in self.storage[label_id]:
                        labels.append(label)
                else:
                    labels.append(label)
            except KeyError:
                pass
        return sorted(labels, key=lambda cls: make_sortable(cls['title']))

    def available_labels(self):
        # possible labels, marking active ones
        labels = [[], []]
        for label in self.jar.list():
            if label['by_user']:
                label['active'] = (label['label_id'] in self.storage and
                                   self.user_id() in self.storage[label['label_id']])
                labels[0].append(label)
            else:
                label['active'] = (label.get('label_id') in self.storage)
                labels[1].append(label)
        labels[0].sort(key=lambda cls: make_sortable(cls['title']))
        labels[1].sort(key=lambda cls: make_sortable(cls['title']))
        return labels

    def user_id(default=None):
        """ Return current userid """
        cur_user = api.user.get_current()
        if not cur_user:
            return default
        return cur_user.getId()

    @property
    def storage(self):
        if getattr(self, '_storage', None) is None:
            annotation = IAnnotations(self.context)
            if ANNOTATION_KEY not in annotation:
                annotation[ANNOTATION_KEY] = PersistentMapping()
            self._storage = annotation[ANNOTATION_KEY]
        return self._storage