Source code for pyams_content.component.video

#
# 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.interface import implementer
from zope.schema.fieldproperty import FieldProperty

from pyams_content import _
from pyams_content.component.video.interfaces import IExternalVideo, IExternalVideoProvider, IExternalVideoSettings
from pyams_content.features.checker import BaseContentChecker, VALUE_OK
from pyams_content.features.checker.interfaces import IContentChecker, MISSING_VALUE, MISSING_LANG_VALUE
from pyams_i18n.interfaces import II18nManager, INegotiator, II18n
from pyams_utils.adapter import adapter_config, get_annotation_adapter
from pyams_utils.registry import query_utility, get_utility
from pyams_utils.traversing import get_parent


[docs]@implementer(IExternalVideo) class ExternalVideo(Persistent, Contained): """External video persistent class""" author = FieldProperty(IExternalVideo['author']) description = FieldProperty(IExternalVideo['description']) provider_name = FieldProperty(IExternalVideo['provider_name'])
[docs] def get_provider(self): return query_utility(IExternalVideoProvider, name=self.provider_name or '')
@property def settings(self): provider = self.get_provider() if provider is None: return None return provider.settings_interface(self)
EXTERNAL_VIDEO_SETTINGS_KEY = 'pyams_content.video::{0}'
[docs]@adapter_config(context=IExternalVideo, provides=IExternalVideoSettings) def external_video_settings_factory(context): """External video settings factory""" if not context.provider_name: return None provider = context.get_provider() settings_key = EXTERNAL_VIDEO_SETTINGS_KEY.format(context.provider_name.lower()) return get_annotation_adapter(context, settings_key, factory=lambda: IExternalVideoSettings(provider))
[docs]@adapter_config(context=IExternalVideo, provides=IContentChecker) class ExternalVideoContentChecker(BaseContentChecker): """External video content checker""" label = _("External video") weight = 50
[docs] def inner_check(self, request): output = [] translate = request.localizer.translate manager = get_parent(self.context, II18nManager) if manager is not None: langs = manager.get_languages() else: negotiator = get_utility(INegotiator) langs = (negotiator.server_language, ) missing_value = translate(MISSING_VALUE) missing_lang_value = translate(MISSING_LANG_VALUE) i18n = II18n(self.context) for attr in ('description', ): for lang in langs: value = i18n.get_attribute(attr, lang, request) if not value: if len(langs) == 1: output.append(missing_value.format(field=translate(IExternalVideo[attr].title))) else: output.append(missing_lang_value.format(field=translate(IExternalVideo[attr].title), lang=lang)) for attr in ('author', 'provider_name'): value = getattr(self.context, attr) if not value: output.append(missing_value.format(field=translate(IExternalVideo[attr].title))) settings = self.context.settings if settings is None: pass else: checker = IContentChecker(settings, None) if checker is not None: checker_output = checker.inner_check(request) if checker_output: output.append('<div class="padding-left-20">') output.append('- {0} :'.format(translate(checker.label))) output.append([checker.sep.join(checker_output)]) output.append('</div>') else: output.append('- {0} : {1}'.format(translate(checker.label), translate(VALUE_OK))) return output