Exemple #1
0
class BodyAdapterBase(NodeAdapterBase):

    """Body im- and exporter base.
    """

    implementsOnly(IBody)

    def _exportSimpleNode(self):
        """Export the object as a DOM node.
        """
        return self._getObjectNode('object', False)

    def _importSimpleNode(self, node):
        """Import the object from the DOM node.
        """

    node = property(_exportSimpleNode, _importSimpleNode)

    def _exportBody(self):
        """Export the object as a file body.
        """
        return ''

    def _importBody(self, body):
        """Import the object from the file body.
        """

    body = property(_exportBody, _importBody)

    mime_type = 'text/plain'

    name = ''

    suffix = ''
Exemple #2
0
class DateWidget(BaseWidget, HTMLInputWidget):
    """Date widget for z3c.form."""

    _base = InputWidget
    _converter = DateWidgetConverter
    _formater = 'date'

    implementsOnly(IDateWidget)

    pattern = 'pickadate'
    pattern_options = BaseWidget.pattern_options.copy()

    def _base_args(self):
        """Method which will calculate _base class arguments.

        Returns (as python dictionary):
            - `pattern`: pattern name
            - `pattern_options`: pattern options
            - `name`: field name
            - `value`: field value

        :returns: Arguments which will be passed to _base
        :rtype: dict
        """
        args = super(DateWidget, self)._base_args()
        args['name'] = self.name
        args['value'] = (self.request.get(self.name, self.value)
                         or u'').strip()

        args.setdefault('pattern_options', {})
        args['pattern_options'] = dict_merge(get_date_options(self.request),
                                             args['pattern_options'])

        return args

    def render(self):
        """Render widget.

        :returns: Widget's HTML.
        :rtype: string
        """
        if self.mode != 'display':
            return super(DateWidget, self).render()

        if not self.value:
            return ''

        field_value = self._converter(self.field,
                                      self).toFieldValue(self.value)
        if field_value is self.field.missing_value:
            return u''

        formatter = self.request.locale.dates.getFormatter(
            self._formater, "short")
        if field_value.year > 1900:
            return formatter.format(field_value)

        # due to fantastic datetime.strftime we need this hack
        # for now ctime is default
        return field_value.ctime()
Exemple #3
0
class XMLAdapterBase(BodyAdapterBase):

    """XML im- and exporter base.
    """

    implementsOnly(IBody)

    def _exportBody(self):
        """Export the object as a file body.
        """
        self._doc.appendChild(self._exportNode())
        xml = self._doc.toprettyxml(' ')
        self._doc.unlink()
        return xml

    def _importBody(self, body):
        """Import the object from the file body.
        """
        try:
            dom = parseString(body)
        except ExpatError, e:
            filename = (self.filename or
                        '/'.join(self.context.getPhysicalPath()))
            raise ExpatError('%s: %s' % (filename, e))
        self._importNode(dom.documentElement)
Exemple #4
0
class Client(tcp.Client):
    """I am an SSL client."""

    implementsOnly(
        interfaces.ISSLTransport, *[
            i for i in implementedBy(tcp.Client)
            if i != interfaces.ITLSTransport
        ])

    def __init__(self,
                 host,
                 port,
                 bindAddress,
                 ctxFactory,
                 connector,
                 reactor=None):
        # tcp.Client.__init__ depends on self.ctxFactory being set
        self.ctxFactory = ctxFactory
        tcp.Client.__init__(self, host, port, bindAddress, connector, reactor)

    def getHost(self):
        """Returns the address from which I am connecting."""
        h, p = self.socket.getsockname()
        return address.IPv4Address('TCP', h, p, 'SSL')

    def getPeer(self):
        """Returns the address that I am connected."""
        return address.IPv4Address('TCP', self.addr[0], self.addr[1], 'SSL')

    def _connectDone(self):
        self.startTLS(self.ctxFactory)
        self.startWriting()
        tcp.Client._connectDone(self)
class SimpleRichTextWidget(TextAreaWidget):
    """
    A widget that implements the rte-light editor
    http://code.google.com/p/rte-light/
    """

    implementsOnly(ISimpleRichTextWidget)

    klass = u"simple-rich-text-widget"

    def rte_conf(self):
        conf = {}
        conf['iframe_height'] = getattr(self.field, 'iframe_height', 100)
        conf['format_block'] = str(getattr(self.field, 'format_block',
                                           True)).lower()
        conf['bold'] = str(getattr(self.field, 'bold', True)).lower()
        conf['italic'] = str(getattr(self.field, 'italic', True)).lower()
        conf['unordered_list'] = str(
            getattr(self.field, 'unordered_list', True)).lower()
        conf['link'] = str(getattr(self.field, 'link', True)).lower()
        conf['image'] = str(getattr(self.field, 'image', True)).lower()
        conf['allow_disable'] = str(getattr(self.field, 'allow_disable',
                                            True)).lower()

        return conf
Exemple #6
0
class WorkspaceContainerTraverser(SimpleComponentTraverser):
    """Custom Workspace (domain IBungeniGroup object) container traverser.
    This object is the "root" of each user's workspace.
    """
    interface.implementsOnly(IPublishTraverse)
    component.adapts(interfaces.IWorkspaceContainer, IHTTPRequest)

    def __init__(self, context, request):
        assert interfaces.IWorkspaceContainer.providedBy(context)
        self.context = context  # workspace domain object
        self.request = request
        log.debug(" __init__ %s context=%s url=%s" %
                  (self, self.context, request.getURL()))

    def publishTraverse(self, request, name):
        workspace = self.context
        _meth_id = "%s.publishTraverse" % self.__class__.__name__
        log.debug("%s: name=%s context=%s " % (_meth_id, name, workspace))
        if name == "pi":
            return getWorkSpacePISection(workspace)
        elif name == "archive":
            return getWorkSpaceArchiveSection(workspace)
        elif name == "mi":
            return getWorkSpaceMISection(workspace)
        return super(WorkspaceContainerTraverser,
                     self).publishTraverse(request, name)
Exemple #7
0
class Client(tcp.Client):
    """
    I am an SSL client.
    """

    implementsOnly(
        interfaces.ISSLTransport, *[
            i for i in implementedBy(tcp.Client)
            if i != interfaces.ITLSTransport
        ])

    def __init__(self,
                 host,
                 port,
                 bindAddress,
                 ctxFactory,
                 connector,
                 reactor=None):
        # tcp.Client.__init__ depends on self.ctxFactory being set
        self.ctxFactory = ctxFactory
        tcp.Client.__init__(self, host, port, bindAddress, connector, reactor)

    def _connectDone(self):
        self.startTLS(self.ctxFactory)
        self.startWriting()
        tcp.Client._connectDone(self)
Exemple #8
0
class QueryStringWidget(BaseWidget, z3cform_TextWidget):
    """QueryString widget for z3c.form."""

    _base = InputWidget

    implementsOnly(IQueryStringWidget)

    pattern = 'querystring'
    pattern_options = BaseWidget.pattern_options.copy()

    querystring_view = '@@qsOptions'

    def _base_args(self):
        """Method which will calculate _base class arguments.

        Returns (as python dictionary):
            - `pattern`: pattern name
            - `pattern_options`: pattern options
            - `name`: field name
            - `value`: field value

        :returns: Arguments which will be passed to _base
        :rtype: dict
        """
        args = super(QueryStringWidget, self)._base_args()
        args['name'] = self.name
        args['value'] = self.value

        args.setdefault('pattern_options', {})
        args['pattern_options'] = dict_merge(
            get_querystring_options(self.context, self.querystring_view),
            args['pattern_options'])

        return args
class AbsoluteURL(zope.traversing.browser.absoluteurl.AbsoluteURL):

    implementsOnly(IAbsoluteURL)
    adapts(IResource, IBrowserRequest)

    def __init__(self, context, request):
        self.context = context
        self.request = request

    def _createUrl(self, baseUrl, name):
        return "%s/@@/%s" % (baseUrl, name)

    def __str__(self):
        name = self.context.__name__
        if name.startswith('++resource++'):
            name = name[12:]

        site = zope.component.hooks.getSite()
        base = queryMultiAdapter((site, self.request),
                                 IAbsoluteURL,
                                 name="resource")
        if base is None:
            url = str(getMultiAdapter((site, self.request), IAbsoluteURL))
        else:
            url = str(base)

        return self._createUrl(url, name)
class TextLineMultiChoiceField(TextLineChoiceField):
    interface.implementsOnly(se_schema.ITextLineChoice)
    component.adapts(schema_ifaces.ISet)

    def __init__(self, field):
        self.__dict__['field'] = field

    def __getattr__(self, name):
        if name == 'values':
            return [
                term.value for term in (self.field.value_type.vocabulary or [])
            ]

        return getattr(self.field, name)

    def __setattr__(self, name, value):
        if name == 'values' and value:
            vocab = self._constructVocabulary(value)
            return setattr(self.field.value_type, 'vocabulary', vocab)
        elif name == 'values' and not value:
            return

        if name == 'vocabularyName' and value:
            setattr(self.field.value_type, 'values', None)
            setattr(self.field.value_type, 'vocabulary', None)
            setattr(self.field.value_type, 'vocabularyName', value)
            return setattr(self.field, 'vocabularyName', value)
        elif name == 'vocabularyName' and not value:
            setattr(self.field.value_type, 'vocabularyName', None)
            return setattr(self.field, 'vocabularyName', None)

        return setattr(self.field, name, value)
Exemple #11
0
class SchedulingContextTraverser(SimpleComponentTraverser):
    """Custom scheduling context traverser which allows traversing to
    calendar days (using integer timestamps) or a ``get_%s`` method
    from the scheduling context class.
    """

    component.adapts(ISchedulingContext, IHTTPRequest)
    interface.implementsOnly(IPublishTraverse)

    def publishTraverse(self, request, name):
        try:
            timestamp = int(name)
            obj = DailySchedulingContext(
                self.context, utils.datetimedict.fromtimestamp(timestamp))
        except (ValueError, TypeError):
            # this is the primary condition; traverse to ``name`` by
            # looking up methods on this class
            try:
                method = getattr(self.context, 'get_%s' % name)
            except AttributeError:
                # fall back to default traversal (view lookup)
                def method():
                    return super(SchedulingContextTraverser,
                                 self).publishTraverse(request, name)

            obj = method()
            assert ILocation.providedBy(obj)
        log.debug("SchedulingContextTraverser.publishTraverse: " \
            "self=%s context=%s name=%s obj=%s" % (self, self.context, name, obj))
        return ProxyFactory(
            LocationProxy(removeSecurityProxy(obj),
                          container=self.context,
                          name=name))
Exemple #12
0
class DummySite(FiveTraversableFolder):
    """A very dummy Site
    """
    # we specifically do not let this site inherit any interfaces from
    # the superclasses so that this class does not implement
    # IPossibleSite under any circumstances
    implementsOnly(IDummySite)
Exemple #13
0
class RelatedItemsWidget(Select2Widget):

    _widget_klass = base.Select2Widget

    implementsOnly(IRelatedItemsWidget)

    pattern = 'relateditems'
    pattern_options = Select2Widget.pattern_options.copy()
class DateWidget(base.AbstractDateWidget, AbstractDXDateWidget):
    """ Date widget.

    Please note: zope.schema date/datetime field values are python datetime
    instances.

    """
    implementsOnly(IDateWidget)
Exemple #15
0
class RecurrenceWidget(TextAreaWidget):
    """Recurrence widget implementation."""
    implementsOnly(IRecurrenceWidget)

    klass = u'recurrence-widget'
    value = u''
    start_field = None
    show_repeat_forever = True

    def site_url(self):
        return absoluteURL(getSite(), self.request)

    def translation(self):
        return translations(self.request)

    def read_only(self):
        return self.mode == 'display'

    def get_start_field(self):
        if self.mode == 'display':
            return self.id + '-start'
        if hasattr(self.form.widgets[self.start_field], 'js_field'):
            return self.form.widgets[self.start_field].js_field
        if hasattr(self.form.widgets[self.start_field], 'name'):
            # plone.app.widgets passes name instead of id to input
            return self.form.widgets[self.start_field].name
        return self.form.widgets[self.start_field].id

    def get_start_date(self):
        start = self.form.fields[self.start_field].field.get(self.context)
        return start.strftime('%Y-%m-%d %H:%M')

    def first_day(self):
        """ First day of the Week. 0..Sunday, 6..Saturday.

        .. Note::
            This value is likely to be overwritten by the widget configuration.
        """
        calendar = self.request.locale.dates.calendars[u'gregorian']
        return calendar.week.get('firstDay', 0)

    def get_recurrenceinput_params(self):
        portal = getToolByName(getSite(), 'portal_url').getPortalObject()
        ajax_url = portal.absolute_url() + '/@@json_recurrence'
        params = dict(
            ajaxContentType='application/x-www-form-urlencoded; charset=UTF-8',
            ajaxURL=ajax_url,
            firstDay=self.first_day(),
            hasRepeatForeverButton=self.show_repeat_forever,
            lang=self.request.LANGUAGE,
            readOnly=self.read_only(),
            ributtonExtraClass='allowMultiSubmit',
            startField=self.get_start_field(),
        )
        return params

    def js_recurrenceinput_params(self):
        return json.dumps(self.get_recurrenceinput_params())
Exemple #16
0
class ReCaptchaWidget(text.TextWidget):
    maxlength = 7
    size = 8

    implementsOnly(IReCaptchaWidget)

    def public_key(self):
        registry = getUtility(IRegistry)
        return registry.get('castle.recaptcha_public_key', '')
Exemple #17
0
class InputMarkdownWidget(HTMLTextAreaWidget, Widget):
    implementsOnly(IMarkdownWidget)

    klass = u'markdown-widget'
    value = u''

    def update(self):
        super(InputMarkdownWidget, self).update()
        addFieldClass(self)
class DatetimeWidget(base.AbstractDatetimeWidget, AbstractDXDateWidget):
    """ DateTime widget """
    implementsOnly(IDatetimeWidget)

    def extract(self, default=NOVALUE):
        # get normal input fields
        day = self.request.get(self.name + '-day', default)
        month = self.request.get(self.name + '-month', default)
        year = self.request.get(self.name + '-year', default)
        hour = self.request.get(self.name + '-hour', default)
        minute = self.request.get(self.name + '-minute', default)
        timezone = self.request.get(self.name + '-timezone', default)

        if (self.ampm is True and hour is not default and minute is not default
                and hour):
            ampm = self.request.get(self.name + '-ampm', default)
            if ampm == 'PM':
                if hour != u'12':
                    hour = str(12 + int(hour))
            elif ampm == 'AM':
                if hour == u'12':
                    hour = u'00'  # 12 a.m. midnight hour == 00:**
            # something strange happened since we either
            # should have 'PM' or 'AM', return default
            elif ampm != 'AM':
                return default

        if default not in (year, month, day, hour, minute):
            dt = (year, month, day, hour, minute)
            if timezone != default:
                # can be naive datetime
                dt += (timezone, )
            return dt

        # get a hidden value
        formatter = self._dtformatter
        try:
            if formatter is not None:
                hidden_date = self.request.get(self.name, '')
                dateobj = formatter.parse(hidden_date)
                tz = getattr(dateobj, 'tzinfo', '')
                if tz:
                    tz = str(tz)
                else:
                    ts = ''
                return (
                    str(dateobj.year),
                    str(dateobj.month),
                    str(dateobj.day),
                    str(dateobj.hour),
                    str(dateobj.minute),
                    tz,
                )
        except DateTimeParseError:
            pass

        return default
Exemple #19
0
class RelatedItemsWidget(BaseWidget, z3cform_TextWidget):
    """RelatedItems widget for z3c.form."""

    _base = InputWidget

    implementsOnly(IRelatedItemsWidget)

    pattern = 'relateditems'
    pattern_options = BaseWidget.pattern_options.copy()

    separator = ';'
    vocabulary = 'plone.app.vocabularies.Catalog'
    vocabulary_view = '@@getVocabulary'
    orderable = False

    def _base_args(self):
        """Method which will calculate _base class arguments.

        Returns (as python dictionary):
            - `pattern`: pattern name
            - `pattern_options`: pattern options
            - `name`: field name
            - `value`: field value

        :returns: Arguments which will be passed to _base
        :rtype: dict
        """
        args = super(RelatedItemsWidget, self)._base_args()

        args['name'] = self.name
        args['value'] = self.value
        args.setdefault('pattern_options', {})

        vocabulary_name = self.vocabulary
        field = None
        if IChoice.providedBy(self.field):
            args['pattern_options']['maximumSelectionSize'] = 1
            field = self.field
        elif ICollection.providedBy(self.field):
            field = self.field.value_type
        if field is not None and field.vocabularyName:
            vocabulary_name = field.vocabularyName

        field_name = self.field and self.field.__name__ or None
        args['pattern_options'] = dict_merge(
            get_relateditems_options(self.context, args['value'],
                                     self.separator, vocabulary_name,
                                     self.vocabulary_view, field_name),
            args['pattern_options'])

        if field and getattr(field, 'vocabulary', None):
            form_url = self.request.getURL()
            source_url = "%s/++widget++%s/@@getSource" % (form_url, self.name)
            args['pattern_options']['vocabularyUrl'] = source_url

        return args
class MultiLanguageExtraOptionsAdapter(LanguageControlPanelAdapter):
    implementsOnly(IMultiLanguageExtraOptionsSetupSchema)

    def __init__(self, context):
        super(MultiLanguageExtraOptionsAdapter, self).__init__(context)
        self.registry = getUtility(IRegistry)
        self.settings = self.registry.forInterface(
            IMultiLanguageExtraOptionsSchema)

    def get_filter_content(self):
        return self.settings.filter_content

    def set_filter_content(self, value):
        self.settings.filter_content = value

    def get_google_translation_key(self):
        return self.settings.google_translation_key

    def set_google_translation_key(self, value):
        self.settings.google_translation_key = value

    def get_redirect_babel_view(self):
        return self.settings.redirect_babel_view

    def set_redirect_babel_view(self, value):
        self.settings.redirect_babel_view = value

    def get_set_default_language(self):
        return False

    def set_set_default_language(self, value):
        if value:
            SetupMultilingualSite(self.context).set_default_language_content()

    def get_move_content_to_language_folder(self):
        return False

    def set_move_content_to_language_folder(self, value):
        if value:
            SetupMultilingualSite(self.context).move_default_language_content()

    google_translation_key = property(get_google_translation_key,
                              set_google_translation_key)

    filter_content = property(get_filter_content,
                              set_filter_content)

    redirect_babel_view = property(get_redirect_babel_view,
                                   set_redirect_babel_view)

    set_default_language = property(get_set_default_language,
                                    set_set_default_language)

    move_content_to_language_folder = property(
        get_move_content_to_language_folder,
        set_move_content_to_language_folder)
Exemple #21
0
class I18NTextAreaWidget(I18NWidget, textarea.TextAreaWidget):
    """I18N text input type implementation."""
    implementsOnly(II18NTextAreaWidget)

    default_widget = textarea.TextAreaWidget

    rows = I18NWidgetProperty('rows')
    cols = I18NWidgetProperty('cols')
    readonly = I18NWidgetProperty('readonly')
    onselect = I18NWidgetProperty('onselect')
Exemple #22
0
class ConnectedDatagramPort(DatagramPort):
    """
    A connected datagram UNIX socket.
    """

    implementsOnly(interfaces.IUNIXDatagramConnectedTransport,
                   *(implementedBy(base.BasePort)))

    def __init__(self, addr, proto, maxPacketSize=8192, mode=0666,
                 bindAddress=None, reactor=None):
Exemple #23
0
class CkeditorZ3CFormWidget(TextAreaWidget,
                             HTMLFragmentWidget,
                             CkeditorWidgetBase):
    """CKEditor z3c.form widget implementation."""
    implementsOnly(ICkeditorWidget)

    config = None
    value = u''

    _adapterValueAttributes = Widget._adapterValueAttributes + ('config', )
Exemple #24
0
class FileUploadFieldsWidget(MapPointsWidget):
    implementsOnly(IFileUploadFieldsWidget)
    pattern = 'fileuploadfieldswidget'

    def _base_args(self):
        args = super(FileUploadFieldsWidget, self)._base_args()
        args['name'] = self.name
        args['value'] = (self.request.get(self.name, self.value)
                         or u'[]').strip()
        return args
Exemple #25
0
class ManagePortlets(ManageContextualPortlets):
    """View used for the edit screen
    """
    implementsOnly(IManagePortletPagePortletsView)

    __call__ = ViewPageTemplateFile('manage-portletpage-portlets.pt')

    def __init__(self, context, request):
        # Skip past the main parent constructor, since it sets disable_border
        super(ManageContextualPortlets, self).__init__(context, request)
Exemple #26
0
class MapMarkersWidget(JsonListWidget):
    implementsOnly(IMapMarkersWidget)

    pattern = 'mapselect'
    pattern_options = JsonListWidget.pattern_options.copy()

    def _base_args(self):
        args = super(MapMarkersWidget, self)._base_args()
        args.setdefault('pattern_options')
        args['pattern_options']['type'] = 'markers'
        return args
Exemple #27
0
class StripeTokenWidget(text.TextWidget):
    """A widget for a named file object
    """
    implementsOnly(IFieldWidget)

    klass = u'stripe-token-widget'
    value = None  # don't default to a string

    def extract(self, default=NOVALUE):
        value = super(StripeTokenWidget, self).extract(default)
        return value
class MonthYearWidget(base.AbstractMonthYearWidget, AbstractDXDateWidget):
    """ Month and year widget """
    implementsOnly(IMonthYearWidget)

    def extract(self, default=NOVALUE):
        day = self.request.get(self.name + '-day', default)
        year = self.request.get(self.name + '-year', default)
        month = self.request.get(self.name + '-month', default)
        # only make default for day if year/month are set !
        if ((not default in (year, month)) and (day == default)):
            self.request.form[self.name + '-day'] = '1'
        return AbstractDXDateWidget.extract(self)
Exemple #29
0
class I18NTextWidget(I18NWidget, text.TextWidget):
    """I18N text input type implementation."""
    implementsOnly(II18NTextWidget)

    default_widget = text.TextWidget

    maxlength = I18NWidgetProperty('maxlength')
    size = I18NWidgetProperty('size')

    def updateWidget(self, widget, language):
        super(I18NTextWidget, self).updateWidget(widget, language)
        widget.maxlength = widget.field.max_length
Exemple #30
0
class ConnectionUserAndKey(ConnectionKey):
    """
    Base connection which accepts a user_id and key
    """
    interface.implementsOnly(IConnectionUserAndKey)
    interface.classProvides(IConnectionUserAndKey)

    user_id = None

    def __init__(self, user_id, key, secure=True):
        super(ConnectionUserAndKey, self).__init__(key, secure)
        self.user_id = user_id