#-*- coding: utf-8 -*-
"""

.. moduleauthor:: Martí Congost <*****@*****.**>
"""
from cocktail import schema
from cocktail.translations import translations
from woost.models import add_setting, Configuration

translations.load_bundle("woost.extensions.nocaptcha.settings")

add_setting(
    schema.String(
        "x_nocaptcha_public_key",
        text_search = False
    )
)

add_setting(
    schema.String(
        "x_nocaptcha_private_key",
        text_search = False
    )
)

Ejemplo n.º 2
0
"""

@author:		Javier Marrero
@contact:		[email protected]
@organization:	Whads/Accent SL
@since:			February 2009
"""
import cherrypy
import hashlib
from mimetypes import guess_type
from cocktail.translations import translations
from cocktail.memoryutils import parse_bytes, format_bytes
from cocktail import schema
from cocktail.schema.exceptions import ValidationError

translations.load_bundle("cocktail.controllers.fileupload")


class FileUpload(schema.Schema):

    _special_copy_keys = (schema.Schema._special_copy_keys
                          | set(["async_uploader"]))

    chunk_size = 8192
    normalization = None
    hash_algorithm = None
    __max_size = None

    async = False
    async_uploader = None
    async_upload_url = None
"""

.. moduleauthor:: Martí Congost <*****@*****.**>
"""
from cocktail.translations import translations
from cocktail.events import when
from woost.admin.sections import Settings
from woost.admin.sections.contentsection import ContentSection

translations.load_bundle("woost.extensions.googlesearch.admin.sections")


class GoogleSearchSettings(Settings):

    icon_uri = "woost.extensions.googlesearch.admin.ui://images/googlesearch.svg"

    members = [
        "x_googlesearch_api_key", "x_googlesearch_engine_id",
        "x_googlesearch_results_page"
    ]


@when(ContentSection.declared)
def fill(e):
    e.source.append(GoogleSearchSettings("googlesearch"))
Ejemplo n.º 4
0
"""

.. moduleauthor:: Martí Congost <*****@*****.**>
"""
from cocktail.events import when
from cocktail.translations import translations
from woost.admin.sections import Settings
from woost.admin.sections.contentsection import ContentSection

translations.load_bundle("woost.extensions.sentry.admin.sections")


class SentrySettings(Settings):
    icon_uri = ("woost.extensions.sentry.admin.ui://"
                "images/sections/sentry.svg")
    members = ["x_sentry_dsn"]


@when(ContentSection.declared)
def fill(e):
    e.source.append(SentrySettings("sentry"))
Ejemplo n.º 5
0
#-*- coding: utf-8 -*-
"""

.. moduleauthor:: Martí Congost <*****@*****.**>
"""
from cocktail.translations import translations
from cocktail.events import when
from cocktail.schema.exceptions import ValidationError

translations.load_bundle("cocktail.controllers.fieldconfirmation")


def field_confirmation(member_name):
    """A decorator that adds a confirmation field for the given member of a
    form.
    """
    def decorator(form_class):
        @when(form_class.declared)
        def modify_form(e):

            form = e.source
            source_member = form.schema.get_member(member_name)
            confirmation_member_name = member_name + "_confirmation"
            confirmation_member = source_member.copy(
                name=confirmation_member_name,
                custom_translation_key="cocktail.controllers.fieldconfirmation."
                "confirmation_field",
                after_member=member_name)

            form.adapter.exclude(confirmation_member_name)
Ejemplo n.º 6
0
#-*- coding: utf-8 -*-
"""

@author:		Martí Congost
@contact:		[email protected]
@organization:	Whads/Accent SL
@since:			October 2009
"""
from datetime import date, datetime
from cocktail.pkgutils import get_full_name
from cocktail.translations import translations, get_language
from cocktail.schema import Member, Date, Time, DateTime
from cocktail.schema.expressions import (PositiveExpression,
                                         NegativeExpression)

translations.load_bundle("cocktail.controllers.grouping")


class MemberGrouping(object):

    member = None
    language = None
    variants = ()
    variant = None
    sign = PositiveExpression

    def get_grouping_value(self, item):
        return item.get(self.member, self.language)

    @property
    def order(self):
#-*- coding: utf-8 -*-
u"""

.. moduleauthor:: Martí Congost <*****@*****.**>
"""
import json
import cherrypy
from cocktail.translations import translations
from woost import app
from woost.controllers.filecontroller import FileController
from woost.controllers.uricontroller import URIController
from .tracker import Tracker

translations.load_bundle("woost.extensions.googleanalytics.eventredirection")


class GAEventRedirection(object):

    delay = 300

    overridable_category = True
    overridable_action = True
    overridable_label = True

    default_category = None
    default_action = "open"

    template = """
        <!DOCTYPE html>
        <html>
            <head>
Ejemplo n.º 8
0
                                            GeoCoordinates)
from cocktail.schema.color import Color
from cocktail.schema.creditcardnumber import CreditCardNumber
from cocktail.schema.bankaccountnumber import BankAccountNumber
from cocktail.schema.iban import IBAN
from cocktail.schema.swiftbic import SWIFTBIC
from cocktail.schema.codeblock import CodeBlock
from cocktail.schema.html import HTML
from cocktail.schema.jsonmember import JSON
from cocktail.schema.regularexpression import RegularExpression
from cocktail.schema.errorlist import ErrorList
from cocktail.schema.accessors import (get_accessor, get, set, MemberAccessor,
                                       AttributeAccessor, DictAccessor,
                                       undefined)
from cocktail.schema.schemaobject import (SchemaObject, SchemaClass,
                                          SchemaObjectAccessor,
                                          TranslatedValues, TranslationMapping,
                                          translate_schema_object,
                                          generic_schema_object_translation,
                                          DO_NOT_COPY, SHALLOW_COPY, DEEP_COPY)
from cocktail.schema.adapter import (reference, shallow, deep, Adapter,
                                     RuleSet, Rule, Copy, Exclusion, Split,
                                     Join)
from cocktail.schema.textextractor import TextExtractor
from cocktail.schema.searchhighlighter import SearchHighlighter
from cocktail.schema.validationcontext import ValidationContext
from cocktail.schema.differences import diff

from cocktail.translations import translations
translations.load_bundle("cocktail.schema.package")
Ejemplo n.º 9
0
"""

.. moduleauthor:: Martí Congost <*****@*****.**>
"""
from cocktail.translations import translations
from cocktail import schema
from woost.models import Publishable, URI

translations.load_bundle("woost.extensions.staticpub.publishable")

Publishable.add_member(
    schema.Boolean(
        "x_staticpub_exportable",
        required=True,
        default=True,
        indexed=True,
        affects_cache_invalidation=False,
        listed_by_default=False,
        member_group="publication",
        shadows_attribute=True
    )
)

URI.default_x_staticpub_exportable = False

Ejemplo n.º 10
0
#-*- coding: utf-8 -*-
"""

.. moduleauthor:: Martí Congost <*****@*****.**>
"""
from cocktail.translations import translations
from cocktail import schema

translations.load_bundle("woost.extensions.locations.locationtype")


class LocationType(schema.String):
    def __init__(self, *args, **kwargs):
        kwargs.setdefault("enumeration", [
            "continent", "country", "autonomous_community", "province", "town"
        ])
        kwargs.setdefault("text_search", False)
        kwargs.setdefault("ui_form_control", "cocktail.ui.DropdownSelector")
        schema.String.__init__(self, *args, **kwargs)
Ejemplo n.º 11
0
#-*- coding: utf-8 -*-
u"""

.. moduleauthor:: Martí Congost <*****@*****.**>
"""
from cocktail.translations import translations
from cocktail import schema
from woost.models import VideoPlayerSettings
from .youtubevideo import YouTubeVideo

translations.load_bundle("woost.extensions.youtube.videoplayersettings")

VideoPlayerSettings.members_order = VideoPlayerSettings.members_order + [
    "youtube_allow_fullscreen",
    "youtube_show_info",
    "youtube_show_related_videos"
]

VideoPlayerSettings.add_member(
    schema.Boolean(
        "youtube_allow_fullscreen",
        required = True,
        default = True,
        listed_by_default = False,
        member_group = "youtube"
    )
)

VideoPlayerSettings.add_member(
    schema.Boolean(
        "youtube_show_info",
"""

.. moduleauthor:: Jordi Fernández <*****@*****.**>
"""
from createsend import CreateSend, Subscriber, BadRequest
from cocktail.translations import translations
from cocktail import schema
from cocktail.pkgutils import import_object
from cocktail.controllers import (Controller, FormProcessor, Form,
                                  request_property, redirect)
from woost.models import Configuration
from .campaignmonitorlist import CampaignMonitorList

translations.load_bundle("woost.extensions.campaign3.subscriptioncontroller")


class SubscriptionController(FormProcessor, Controller):
    class SubscriptionForm(Form):

        is_new = None

        @request_property
        def model(self):
            return import_object(self.controller.block.subscriber_model)

        @request_property
        def schema(self):
            adapted_schema = Form.schema(self)

            if len(self.controller.block.lists) > 1:
                lists = schema.Collection(
"""

.. moduleauthor:: Martí Congost <*****@*****.**>
"""
from cocktail import schema
from cocktail.translations import translations
from woost.models import add_setting, Document

translations.load_bundle("woost.extensions.googlesearch.settings")

add_setting(schema.String("x_googlesearch_api_key"))

add_setting(schema.String("x_googlesearch_engine_id"))

add_setting(schema.Reference("x_googlesearch_results_page", type=Document))
#-*- coding: utf-8 -*-
"""

.. moduleauthor:: Martí Congost <*****@*****.**>
"""
from cocktail.translations import translations
from woost.models import add_setting
from .containerid import ContainerId

translations.load_bundle("woost.extensions.googletagmanager.settings")

add_setting(ContainerId(
    "x_googletagmananager_container",
    text_search=False,
))
Ejemplo n.º 15
0
@organization:	Whads/Accent SL
@since:			July 2008
"""
import re
import operator
import fnmatch
from cocktail.translations import (
    translations,
    get_language,
    language_context,
    words
)
from cocktail.schema.accessors import get_accessor
from cocktail.stringutils import normalize

translations.load_bundle("cocktail.schema.expressions")


class Expression(object):

    operands = ()

    def __init__(self, *operands):
        self.operands = tuple(self.wrap(operand) for operand in operands)

    def op(self, *args):
        raise TypeError("%s doesn't implement its op() method" % self)

    def __eq__(self, other):
        return type(self) is type(other) and self.operands == other.operands
Ejemplo n.º 16
0
#-*- coding: utf-8 -*-
"""

.. moduleauthor:: Martí Congost <*****@*****.**>
"""
from cocktail.events import when
from cocktail.translations import translations
from woost.admin.sections.settings import Settings
from woost.admin.sections.contentsection import ContentSection

translations.load_bundle("woost.extensions.googletagmanager.admin.sections")


class GoogleTagManagerSettings(Settings):
    icon_uri = ("woost.extensions.googletagmanager.admin.ui://"
                "images/sections/google-tag-manager.svg")
    members = ["x_googletagmananager_container"]


@when(ContentSection.declared)
def fill(e):
    e.source.append(GoogleTagManagerSettings("google-tag-manager"))
Ejemplo n.º 17
0
"""

.. moduleauthor:: Martí Congost <*****@*****.**>
"""
from cocktail import schema
from cocktail.translations import translations
from cocktail.html.datadisplay import display_factory
from cocktail.html.grouping import GroupByMember
from woost.models import Publishable, Document, News, File
from woost.extensions.opengraph.opengraphtype import OpenGraphType
from woost.extensions.opengraph.utils import (export_content,
                                              get_publishable_website)

translations.load_bundle("woost.extensions.opengraph.publishable")

File.default_x_opengraph_enabled = False
File.default_x_opengraph_type = None

Publishable.members_order += ["x_opengraph_enabled", "x_opengraph_type"]


class GroupByOpenGraphCategory(GroupByMember):
    member = OpenGraphType.category


Publishable.add_member(
    schema.Boolean("x_opengraph_enabled",
                   required=True,
                   default=True,
                   listed_by_default=False,
                   member_group="meta.x_opengraph"))
#-*- coding: utf-8 -*-
"""

.. moduleauthor:: Martí Congost <*****@*****.**>
"""
from cocktail import schema
from cocktail.translations import translations
from woost.models import add_setting, LocaleMember
from .customdefinition import CustomDefinition

translations.load_bundle("woost.extensions.googleanalytics.settings")

add_setting(schema.String(
    "x_googleanalytics_account",
    text_search=False,
))

add_setting(schema.String(
    "x_googleanalytics_domain",
    text_search=False,
))

add_setting(LocaleMember("x_googleanalytics_language"))

add_setting(
    schema.Collection("x_googleanalytics_custom_definitions",
                      items=schema.Reference(type=CustomDefinition)))
Ejemplo n.º 19
0
from cocktail import schema
from cocktail.urls import URL
from cocktail.persistence import transaction
from cocktail.controllers import (Controller, request_property, get_parameter,
                                  json_out)
from woost import app
from woost.models import (Item, Document, LocaleMember, changeset_context)
from woost.controllers.cmscontroller import CMSController
from woost.admin.dataexport import Export as DataExport

from woost.extensions.staticpub.destination import Destination
from woost.extensions.staticpub.export import Export
from woost.extensions.staticpub.exportpermission import ExportPermission
from .utils import iter_exportable_languages, iter_all_exportable_items

translations.load_bundle("woost.extensions.staticpub.publicationcontroller")


class ExportStateController(Controller):
    @json_out
    def __call__(self, export_id, lang, **kwargs):

        set_language(lang)

        try:
            export_id = int(export_id)
        except ValueError:
            raise cherrypy.HTTPError(400)

        export = Export.get_instance(export_id)
        if export is None:
"""

.. moduleauthor:: Martí Congost <*****@*****.**>
"""
from cocktail.translations import translations
from cocktail.events import when
from woost.admin.sections import Settings
from woost.admin.sections.contentsection import ContentSection

translations.load_bundle("woost.extensions.opengraph.admin.sections")


class OpenGraphSettings(Settings):

    icon_uri = "woost.extensions.opengraph.admin.ui://images/opengraph.svg"

    members = [
        "x_opengraph_fb_admins",
        "x_opengraph_fb_apps",
        "x_opengraph_default_image"
    ]


@when(ContentSection.declared)
def fill(e):
    e.source.append(OpenGraphSettings("opengraph"))

Ejemplo n.º 21
0
#-*- coding: utf-8 -*-
"""

.. moduleauthor:: Martí Congost <*****@*****.**>
"""
from cocktail import schema
from cocktail.translations import translations
from woost.models import add_setting, Configuration
from .locationtype import LocationType

translations.load_bundle("woost.extensions.locations.settings")

add_setting(schema.String("x_locations_service_uri",
                          required=True,
                          default="http://services.woost.info/locations",
                          text_search=False),
            scopes=(Configuration, ))

add_setting(schema.Integer("x_locations_update_frequency", min=1, default=15),
            scopes=(Configuration, ))

add_setting(schema.Collection("x_locations_updated_location_types",
                              default=[
                                  "continent", "country",
                                  "autonomous_community", "province", "town"
                              ],
                              items=LocationType(required=True),
                              text_search=False,
                              ui_form_control="cocktail.ui.CheckList"),
            scopes=(Configuration, ))
#-*- coding: utf-8 -*-
"""

.. moduleauthor:: Martí Congost <*****@*****.**>
"""
from cocktail import schema
from cocktail.translations import translations
from woost.models import add_setting

translations.load_bundle("woost.extensions.youtube.settings")

Ejemplo n.º 23
0
#-*- coding: utf-8 -*-
"""

.. moduleauthor:: Pepe Osca <*****@*****.**>
"""
from cocktail.translations import translations
from cocktail import schema
from woost.models import User

translations.load_bundle("woost.extensions.identity.google.user")

User.add_member(
    schema.String("x_identity_google_user_id",
                  indexed=True,
                  unique=True,
                  editable=schema.NOT_EDITABLE,
                  listed_by_default=False,
                  member_group="administration"))
#-*- coding: utf-8 -*-
"""

.. moduleauthor:: Martí Congost <*****@*****.**>
"""
from cocktail.events import when
from cocktail.translations import translations
from woost.admin.sections import Folder, CRUD, Settings
from woost.admin.sections.contentsection import ContentSection
from woost.extensions.googleanalytics.view import View

translations.load_bundle("woost.extensions.googleanalytics.admin.sections")


class GoogleAnalyticsSection(Folder):

    icon_uri = ("woost.extensions.googleanalytics.admin.ui://"
                "images/google-analytics.svg")

    def _fill(self):
        self.append(GoogleAnalyticsSettings("settings"))
        self.append(CRUD("views", model=View))


class GoogleAnalyticsSettings(Settings):

    icon_uri = ("woost.extensions.googleanalytics.admin.ui://"
                "images/google-analytics.svg")

    members = [
        "x_googleanalytics_account", "x_googleanalytics_domain",
#-*- coding: utf-8 -*-
"""

.. moduleauthor:: Martí Congost <*****@*****.**>
"""
import cherrypy
from json import loads
import urllib.request, urllib.parse, urllib.error
import urllib.request, urllib.error, urllib.parse
from cocktail.translations import translations
from cocktail import schema
from cocktail.html.uigeneration import default_edit_control
from cocktail.schema.exceptions import ValidationError
from woost.models import get_setting

translations.load_bundle("woost.extensions.nocaptcha.member")


class NoCaptcha(schema.String):
    """A member that handles noCaptcha values."""

    VERIFY_SERVER = "https://www.google.com/recaptcha/api/siteverify"

    def __init__(self, name=None, *args, **kwargs):

        kwargs.setdefault("parameter_name", "g-recaptcha-response")

        if not name:
            name = "nocaptcha"

        schema.String.__init__(self, name, *args, **kwargs)
#-*- coding: utf-8 -*-
"""

.. moduleauthor:: Martí Congost <*****@*****.**>
"""
from cocktail.events import when
from cocktail.translations import translations
from woost.admin.sections import Settings
from woost.admin.sections.contentsection import ContentSection

translations.load_bundle("woost.extensions.nocaptcha.admin.sections")


class NoCaptchaSection(Settings):

    icon_uri = "woost.extensions.nocaptcha.admin.ui://images/nocaptcha.svg"

    members = [
        "x_nocaptcha_public_key",
        "x_nocaptcha_private_key",
    ]


@when(ContentSection.declared)
def fill(e):
    e.source.append(NoCaptchaSection("nocaptcha"))

Ejemplo n.º 27
0
#-*- coding: utf-8 -*-
"""

.. moduleauthor:: Pepe Osca <*****@*****.**>
"""
from cocktail.translations import translations
from cocktail import schema
from woost.models import add_setting, Configuration
from .identityprovider import IdentityProvider

translations.load_bundle("woost.extensions.identity.settings")

add_setting(schema.Collection("x_identity_providers",
                              items=schema.Reference(type=IdentityProvider),
                              integral=True,
                              bidirectional=True),
            scopes=(Configuration, ))
#-*- coding: utf-8 -*-
"""

@author:		Martí Congost
@contact:		[email protected]
@organization:	Whads/Accent SL
@since:			February 2010
"""
from decimal import Decimal
from cocktail.translations import translations
from cocktail import schema
from woost.models import Publishable, URI

translations.load_bundle("woost.extensions.sitemap.publishable")

URI.default_sitemap_indexable = False

Publishable.add_member(schema.String("x_sitemap_change_frequency",
                                     enumeration=[
                                         "always", "hourly", "daily", "weekly",
                                         "monthly", "yearly", "never"
                                     ],
                                     member_group="meta.robots",
                                     text_search=False,
                                     listed_by_default=False),
                       append=True)

Publishable.add_member(schema.Decimal("x_sitemap_priority",
                                      min=0,
                                      max=1,
                                      listed_by_default=False,
Ejemplo n.º 29
0
#-*- coding: utf-8 -*-
"""
Declares exception classes specific to the package.

@author:		Martí Congost
@contact:		[email protected]
@organization:	Whads/Accent SL
@since:			March 2008
"""
from cocktail.stringutils import decapitalize
from cocktail.translations import translations, translate_locale

translations.load_bundle("cocktail.schema.exceptions")


class SchemaIntegrityError(Exception):
    """Base class for all exceptions that are raised to prevent breaking the
    integrity of a schema."""


class SchemaInheritanceCycleError(Exception):
    """An exception raised when a schema tries to inherit itself, either
    directly or indirectly."""
    def __init__(self, schema):
        super().__init__(
            f"{schema} tried to use itself as an inheritance base.")
        self.schema = schema


class MemberRenamedError(SchemaIntegrityError):
    """An exception raised when changing the name of a schema member that is
Ejemplo n.º 30
0
#-*- coding: utf-8 -*-
"""

.. moduleauthor:: Martí Congost <*****@*****.**>
"""
from cocktail.translations import translations
from woost.models import add_setting, LocaleMember

translations.load_bundle("woost.extensions.attributes.settings")

add_setting(
    LocaleMember(
        "x_attributes_language"
    )
)