Source code for pyams_content.reference.pictograms.manager

#
# Copyright (c) 2008-2015 Thierry Florac <tflorac AT ulthar.net>
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
#

__docformat__ = 'restructuredtext'

from persistent import Persistent
from zope.container.contained import Contained
from zope.schema.fieldproperty import FieldProperty
from zope.schema.vocabulary import SimpleTerm, SimpleVocabulary

from pyams_content.reference.pictograms.interfaces import IPictogramManager, IPictogramManagerTarget, IPictogramTable, \
    PICTOGRAM_MANAGER_KEY, SELECTED_PICTOGRAM_VOCABULARY
from pyams_i18n.interfaces import II18n
from pyams_utils.adapter import adapter_config, get_annotation_adapter
from pyams_utils.factory import factory_config
from pyams_utils.registry import query_utility
from pyams_utils.request import check_request
from pyams_utils.traversing import get_parent
from pyams_utils.vocabulary import vocabulary_config


[docs]@factory_config(IPictogramManager) class PictogramManager(Persistent, Contained): """Pictogram manager settings persistent class""" selected_pictograms = FieldProperty(IPictogramManager['selected_pictograms'])
[docs]@adapter_config(context=IPictogramManagerTarget, provides=IPictogramManager) def pictogram_manager_factory(target): """Pictogram manager factory""" return get_annotation_adapter(target, PICTOGRAM_MANAGER_KEY, IPictogramManager)
[docs]@vocabulary_config(name=SELECTED_PICTOGRAM_VOCABULARY) class SelectedPictogramsVocabulary(SimpleVocabulary): """Selected pictograms vocabulary""" def __init__(self, context=None): terms = [] table = query_utility(IPictogramTable) if table is not None: request = check_request() target = get_parent(context, IPictogramManagerTarget) if target is not None: manager = IPictogramManager(target) pictograms = [table.get(name) for name in manager.selected_pictograms or ()] terms = [SimpleTerm(v.__name__, title=II18n(v).query_attribute('title', request=request)) for v in pictograms if v is not None] else: terms = [SimpleTerm(v.__name__, title=II18n(v).query_attribute('title', request=request)) for v in table.values()] terms = sorted(terms, key=lambda x: x.title) super(SelectedPictogramsVocabulary, self).__init__(terms)