Beispiel #1
0
    def __init__(self, context, request, form, retrieve_data=True,
            defaults=None):

        """ Initiate the form view. If retrieve_data is True(ish), the
        submission handler will be asked for the data. If defaults is
        given, any fields available in the defaults will be preloaded.
        """

        if not defaults:
            defaults = {}

        self.context = context
        self.request = request
        self.form = form

        # vocabs
        for method in getmembers(context, ismethod):

            if getattr(method[1], "__vocab__", False):

                Registry.register_vocab(method[0], method[1])

        if retrieve_data:
            try:
                data = self.form.submission.retrieve(form, context)
                self.form.data.update(data)
            except:
                pass

        if defaults:
            for key in defaults.keys():
                self.form.data.getField(key).value = defaults[key]
Beispiel #2
0
    def lexVal(self, value, **kwargs):
        """ Lexical value of select should return the label of the
        matching option. """

        if type([]) == type(value):

            res = []

            for val in value:
                res.append(self.lexVal(val))

            return res

        options = []

        if self.vocab:
            vocab = Registry.get_vocab(self.vocab)

            args = []
            if self.vocab_args:
                args = self.vocab_args.split(",")

            if callable(vocab):
                options = vocab(*args, **kwargs)

        options.extend(self.options)

        for opt in options:

            if self._is_same(opt.value, value):
                return opt.label

        return value
def get_template(tpl_type):

    """ Return a template for the given type. If template path is set, try
    that, but fall back on default template."""

    if tpl_type in TPL_CACHE.keys():
        return TPL_CACHE[tpl_type]

    tpl_paths = Registry.get_html_template_path()

    tpl = None

    for tpl_path in tpl_paths:
        if tpl_path and not tpl_path.startswith("."):
            tpl = "%s/%s.pt" % (tpl_path, tpl_type)
        else:
            tpl = find_file("templates/%s/%s.pt" % (tpl_path, tpl_type), __file__)

        if os.path.isfile(tpl):
            break

    if not (tpl and os.path.isfile(tpl)):
        tpl = find_file("templates/%s.pt" % tpl_type, __file__)

    tpl = PageTemplateFile(tpl, encoding="utf-8")

    TPL_CACHE[tpl_type] = tpl

    return tpl
Beispiel #4
0
    def processInput(self, data=None, datatype="string"):

        """ Base implementation """

        val = None

        if data:
            # for multiselects we need to read all values from the request.
            # TODO: note that this is done in different ways per framework
            # I think for plone the HTML markup should use ":list" as a
            # control name. But for now I need this in pyramid, and the
            # getall method works fine..
            if self.multiple:
                val = data.getall(self.id)
            else:
                val = data.get(self.id, None)

        try:
            converter = Registry.get_converter(datatype)
            val = converter(val)
            # TODO: what to do when multiple values are present? convert each
            # item in the list?
            # if self.multiple:
            #     newval = []
            #     for item in val:
            #         newval.append(converter(item))
            #     val = newval
            # else:
            #     val = converter(val)
        except:
            pass

        return val
Beispiel #5
0
    def processInput(self, data=None, datatype="string"):
        """ Base implementation """

        val = None

        if data:
            # for multiselects we need to read all values from the request.
            # TODO: note that this is done in different ways per framework
            # I think for plone the HTML markup should use ":list" as a
            # control name. But for now I need this in pyramid, and the
            # getall method works fine..
            if self.multiple:
                val = data.getall(self.id)
            else:
                val = data.get(self.id, None)

        try:
            converter = Registry.get_converter(datatype)
            val = converter(val)
            # TODO: what to do when multiple values are present? convert each
            # item in the list?
            # if self.multiple:
            #     newval = []
            #     for item in val:
            #         newval.append(converter(item))
            #     val = newval
            # else:
            #     val = converter(val)
        except:
            pass

        return val
Beispiel #6
0
    def lexVal(self, value, **kwargs):

        """ Lexical value of select should return the label of the
        matching option. """

        if type([]) == type(value):

            res = []

            for val in value:
                res.append(self.lexVal(val))

            return res

        options = []

        if self.vocab:
            vocab = Registry.get_vocab(self.vocab)

            args = []
            if self.vocab_args:
                args = self.vocab_args.split(",")

            if callable(vocab):
                options = vocab(*args, **kwargs)

        options.extend(self.options)

        for opt in options:

            if self._is_same(opt.value, value):
                return opt.label

        return value
Beispiel #7
0
    def render(self, renderer, form, renderable, out, **kwargs):

        fmtmap = renderer.createFormatMap(form, renderable, **kwargs)

        opts = []
        
        if renderable.vocab:
            
            vocab = Registry.get_vocab(renderable.vocab)
            
            if callable(vocab):
                
                opts = vocab()
        else:
            opts = renderable.options

        value = form.data[renderable.bind]

        if renderable.format == "full":

            print >> out, TEMPLATES['SELECT_FULL'](
                control=renderable, 
                value=value,
                options=opts,
                extra_classes=fmtmap['extra_classes']
                )

        else:

            print >> out, TEMPLATES['SELECT_COMPACT'](
                control=renderable, 
                value=value,
                options=opts,
                extra_classes=fmtmap['extra_classes']
                )
Beispiel #8
0
    def processInput(self, data=None, datatype="string"):

        val = None

        if data:
            val = data.get(self.id, None)

        try:
            converter = Registry.get_converter(datatype)
            val = converter(val)
        except:
            pass

        return val
Beispiel #9
0
    def create_submission(self, root):

        cls = Registry.get_submission(root.get("type"))

        if not cls:
            return None

        kwargs = {}

        for prop in root.xpath("./property"):
            kwargs[prop.get("name")] = prop.text

        submission = cls(**kwargs)

        return submission
    def create_submission(self, root):

        cls = Registry.get_submission(root.get("type"))

        if not cls:
            return None

        kwargs = {}

        for prop in root.xpath("./property"):
            kwargs[prop.get("name")] = prop.text

        submission = cls(**kwargs)

        return submission
Beispiel #11
0
    def processInput(self, data=None, datatype="datetime"):
        """ Base implementation """

        val = None

        if data:
            val = data.get(self.id, None)

        try:
            converter = Registry.get_converter(datatype)

            val = converter(val.strip(), self.format)
        except:
            pass

        return val
Beispiel #12
0
    def processInput(self, data=None, datatype="datetime"):

        """ Base implementation """

        val = None

        if data:
            val = data.get(self.id, None)

        try:
            converter = Registry.get_converter(datatype)

            val = converter(val.strip(), self.format)
        except:
            pass

        return val
Beispiel #13
0
    def render(self, renderer, form, renderable, out, **kwargs):

        fmtmap = renderer.createFormatMap(form, renderable, **kwargs)

        opts = []

        if renderable.vocab:

            vocab = Registry.get_vocab(renderable.vocab)

            if callable(vocab):

                args = []
                if renderable.vocab_args:
                    args = renderable.vocab_args.split(",")

                opts = vocab(*args, **kwargs)

        opts.extend(renderable.options)

        value = form.data[renderable.bind]

        # some hacking for multiple type. sometimes the saved data is just a
        # plain old type (int) and we expect a list of strings in the template
        if fmtmap['multiple'] and fmtmap['multiple'].lower() == 'true':
            value = form.getFieldValue(renderable.id, lexical=False)
            if type(value) == ListType:  # just to be sure?
                value = [str(val) for val in value]

        if renderable.format == "full":

            print >> out, get_template('select_full')(control=renderable,
                                                      value=value,
                                                      options=opts,
                                                      fmtmap=fmtmap)

        else:

            print >> out, get_template('select')(control=renderable,
                                                 value=value,
                                                 options=opts,
                                                 multiple=fmtmap['multiple'],
                                                 fmtmap=fmtmap)
    def render(self, renderer, form, renderable, out, **kwargs):

        fmtmap = renderer.createFormatMap(form, renderable, **kwargs)

        opts = []

        if renderable.vocab:

            vocab = Registry.get_vocab(renderable.vocab)

            if callable(vocab):

                args = []
                if renderable.vocab_args:
                    args = renderable.vocab_args.split(",")

                opts = vocab(*args, **kwargs)

        opts.extend(renderable.options)

        value = form.data[renderable.bind]

        # some hacking for multiple type. sometimes the saved data is just a
        # plain old type (int) and we expect a list of strings in the template
        if fmtmap["multiple"] and fmtmap["multiple"].lower() == "true":
            value = form.getFieldValue(renderable.id, lexical=False)
            if type(value) == ListType:  # just to be sure?
                value = [str(val) for val in value]

        if renderable.format == "full":

            print >> out, get_template("select_full")(control=renderable, value=value, options=opts, fmtmap=fmtmap)

        else:

            print >> out, get_template("select")(
                control=renderable, value=value, options=opts, multiple=fmtmap["multiple"], fmtmap=fmtmap
            )
Beispiel #15
0
from select import SelectRenderer
from checkbox import CheckboxRenderer
from input import InputRenderer
from password import PasswordRenderer
from hidden import HiddenRenderer
from text import TextRenderer
from cardgroup import CardGroupRenderer
from flowgroup import FlowGroupRenderer
from stepgroup import StepGroupRenderer
from submit import SubmitRenderer
from cancel import CancelRenderer
from reset import ResetRenderer
from richtext import RichTextRenderer
from file import FileRenderer

Registry.register_renderer("submit", "html", SubmitRenderer)
Registry.register_renderer("cancel", "html", CancelRenderer)
Registry.register_renderer("reset", "html", ResetRenderer)
Registry.register_renderer("text", "html", TextRenderer)
Registry.register_renderer("input", "html", InputRenderer)
Registry.register_renderer("datetime", "html", InputRenderer)
Registry.register_renderer("password", "html", PasswordRenderer)
Registry.register_renderer("hidden", "html", HiddenRenderer)
Registry.register_renderer("file", "html", FileRenderer)
Registry.register_renderer("checkbox", "html", CheckboxRenderer)
Registry.register_renderer("richtext", "html", RichTextRenderer)
Registry.register_renderer("select", "html", SelectRenderer)
Registry.register_renderer("range", "html", SelectRenderer)
Registry.register_renderer("flowgroup", "html", FlowGroupRenderer)
Registry.register_renderer("cardgroup", "html", CardGroupRenderer)
Registry.register_renderer("stepgroup", "html", StepGroupRenderer)
Beispiel #16
0
""" Being there """

from control import *
#from group import Group
from renderables import *
from w20e.forms.registry import Registry

Registry.register_renderable('input', Input)
Registry.register_renderable('hidden', Hidden)
Registry.register_renderable('password', Password)
Registry.register_renderable('table', Table)
Registry.register_renderable('select', Select)
Registry.register_renderable('range', Range)
Registry.register_renderable('group', None)
Registry.register_renderable('text', Text)
Registry.register_renderable('richtext', RichText)
Registry.register_renderable('file', File)
Registry.register_renderable('submit', Submit)
Registry.register_renderable('cancel', Cancel)
Registry.register_renderable('checkbox', Checkbox)
Registry.register_renderable('date', Date)
Beispiel #17
0
""" Being there """

from w20e.forms.registry import Registry
from attrstorage import AttrStorage
from attrsstorage import AttrsStorage
from pyramidsession import PyramidSessionStorage
from methodcall import MethodCall
from none import NoSubmission

Registry.register_submission('attr', AttrStorage)
Registry.register_submission('attrs', AttrsStorage)
Registry.register_submission('methodcall', MethodCall)
Registry.register_submission('none', NoSubmission)
Registry.register_submission('pyramidsession', PyramidSessionStorage)


try:
  from emailsubmission import EmailSubmission
  Registry.register_submission('email', EmailSubmission)
except:
  pass
Beispiel #18
0
    def getRendererForType(self, renderableType, rendererType):

        return Registry.get_renderer(renderableType, rendererType)
Beispiel #19
0
def register():

    Registry.register_converter("string", to_str)
    Registry.register_converter("str", to_str)
    Registry.register_converter("int", int)
    Registry.register_converter("bool", to_bool)
    Registry.register_converter("float", float)
    Registry.register_converter("date", to_date)
    Registry.register_converter("datetime", to_date)
    Registry.register_converter("list", to_list)
Beispiel #20
0
from checkbox import CheckboxRenderer
from input import InputRenderer
from password import PasswordRenderer
from hidden import HiddenRenderer
from text import TextRenderer
from cardgroup import CardGroupRenderer
from flowgroup import FlowGroupRenderer
from stepgroup import StepGroupRenderer
from submit import SubmitRenderer
from cancel import CancelRenderer
from richtext import RichTextRenderer

from file import FileRenderer
from table import TableRenderer

Registry.register_renderer("submit", "html", SubmitRenderer)
Registry.register_renderer("cancel", "html", CancelRenderer)
Registry.register_renderer("text", "html", TextRenderer)
Registry.register_renderer("input", "html", InputRenderer)
Registry.register_renderer("password", "html", PasswordRenderer)
Registry.register_renderer("hidden", "html", HiddenRenderer)
Registry.register_renderer("table", "html", TableRenderer)
Registry.register_renderer("file", "html", FileRenderer)
Registry.register_renderer("checkbox", "html", CheckboxRenderer)
Registry.register_renderer("richtext", "html", RichTextRenderer)
try:
    from plonerichtext import PloneRichTextRenderer
    Registry.register_renderer("plonerichtext", "html", PloneRichTextRenderer)
except:
    ##No Plone available!
    pass
Beispiel #21
0
def register():

    validate_int = CheckInstance(int)
    validate_bool = CheckInstance(bool)
    validate_float = CheckInstance(float)
    validate_date = CheckInstance(datetime)

    Registry.register_validator("string", validate_string)
    Registry.register_validator("int", validate_int)
    Registry.register_validator("bool", validate_bool)
    Registry.register_validator("float", validate_float)
    Registry.register_validator("date", validate_date)
    Registry.register_validator("datetime", validate_date)
    Registry.register_validator("file", validate_file)
Beispiel #22
0
    def getRendererForType(self, renderableType, rendererType):

        clazz = Registry.get_renderer(renderableType, rendererType)
        return clazz()
Beispiel #23
0
""" Being there """

from control import *
#from group import Group
from renderables import *
from w20e.forms.registry import Registry


Registry.register_renderable('input', Input)
Registry.register_renderable('hidden', Hidden)
Registry.register_renderable('password', Password)
Registry.register_renderable('table', Table)
Registry.register_renderable('select', Select)
Registry.register_renderable('range', Range)
Registry.register_renderable('group', None)
Registry.register_renderable('text', Text)
Registry.register_renderable('richtext', RichText)
Registry.register_renderable('file', File)
Registry.register_renderable('submit', Submit)
Registry.register_renderable('cancel', Cancel)
Registry.register_renderable('checkbox', Checkbox)
Registry.register_renderable('date', Date)
Beispiel #24
0
    def _create_renderables(self, child, view):

        cls = ""

        if child.tag in XMLFormFactory.controlClasses:
            cls = XMLFormFactory.controlClasses[child.tag]
        elif Registry.get_renderable(child.tag):
            cls = Registry.get_renderable(child.tag)
        else:
            cls = eval(child.tag.capitalize())

        kwargs = {}

        for elt in child.xpath("./property"):
            kwargs[elt.get("name")] = elt.text

        for elt in ["hint", "help", "alert"]:
            if child.xpath("./%s" % elt):
                kwargs[elt] = child.xpath("./%s" % elt)[0].text or ''

        if cls == Text:
            ctrl = cls(child.get("id"),
                       child.text,
                       bind=child.get("bind"),
                       **kwargs)

        elif cls.__name__ == "Hidden":
            ctrl = cls(child.get("id"), bind=child.get("bind"), **kwargs)

        elif cls == Submit:
            ctrl = cls(child.get("id"), child.find("label").text, **kwargs)
        elif cls == Group:
            cls = eval("%sGroup" % child.get("layout", "flow").capitalize())

            label = ''

            try:
                label = child.find("label").text
            except:
                pass

            ctrl = cls(child.get("id"), label, **kwargs)
        else:
            label = ''

            try:
                label = child.find("label").text
            except:
                pass

            ctrl = cls(child.get("id"),
                       label,
                       bind=child.get("bind"),
                       **kwargs)

        if hasattr(ctrl, "addOption"):

            for subchild in child.xpath("option"):
                ctrl.addOption(
                    Option(subchild.get("value"), subchild.text or ''))

        for subchild in child.xpath("|".join(
                Registry.get_registered_renderables())):

            self._create_renderables(subchild, ctrl)

        view.addRenderable(ctrl)
Beispiel #25
0
from zope.component import getSiteManager
from pyramid.config import Configurator
from pyramid_zodbconn import get_connection
from pyramid.session import (
    UnencryptedCookieSessionFactoryConfig as SessionFactory)
import pyramid_zcml
from events import AppRootReady
from w20e.forms.registry import Registry
from w20e.forms.pyramid.file import PyramidFile
from models.imagefolder import ImageFolder
from json_adapters import register_json_adapters
from migration import migrate
import pkg_resources


Registry.register_renderable("file", PyramidFile)

tpl_path = os.path.join(os.path.dirname(__file__),
                        "templates/w20e_forms_overrides/")
Registry.add_html_template_path(tpl_path)
Registry.add_html_template_path("./bootstrap")

here = os.path.abspath(os.path.dirname(__file__))
version = pkg_resources.get_distribution("w20e.pycms").version


def class_from_string(clazz_name):

    """ We'll need to follow the dotted path, and find the module that
    starts with some part, and provides the rest of the path... """
    def _create_renderables(self, child, view):

        cls = ""

        if child.tag in XMLFormFactory.controlClasses:
            cls = XMLFormFactory.controlClasses[child.tag]
        elif Registry.get_renderable(child.tag):
            cls = Registry.get_renderable(child.tag)
        else:
            cls = eval(child.tag.capitalize())

        kwargs = {}

        for attrib in child.keys():
            if attrib in kwargs_attrs:
                kwargs[attrib] = child.get(attrib)

        for elt in child.xpath("./property"):
            kwargs[elt.get("name")] = elt.text

        for elt in ["hint", "help", "alert", "placeholder"]:
            if child.xpath("./%s" % elt):
                kwargs[elt] = child.xpath("./%s" % elt)[0].text or ''

        if cls == Text:

            ctrl = cls(child.get("id"),
                       ''.join(child.xpath("./text()")),
                       **kwargs)

        elif cls == Hidden:
            ctrl = cls(child.get("id"),
                       **kwargs)

        elif cls == Submit:

            ctrl = cls(child.get("id"),
                       child.find("label").text,
                       **kwargs)
        elif cls == Group:

            layout_class = "%sGroup" % child.get("layout", "flow").capitalize()

            if Registry.get_renderable(layout_class.lower()):
                cls = Registry.get_renderable(layout_class.lower())
            else:
                cls = eval(layout_class)

            label = ''

            try:
                label = child.find("label").text
            except:
                pass

            ctrl = cls(child.get("id"),
                       label,
                       **kwargs)
        else:
            label = ''

            try:
                label = child.find("label").text
            except:
                pass

            ctrl = cls(child.get("id"),
                       label,
                       **kwargs)

        if hasattr(ctrl, "addOption") and getattr(ctrl, "addOption"):

            for subchild in child.xpath("option"):
                if subchild.xpath("label"):
                    # assume only one
                    text = subchild.xpath("label")[0].text
                else:
                    text = subchild.text or ''

                ctrl.addOption(Option(subchild.get("value"), text))

        for subchild in child.xpath("|".join(
                Registry.get_registered_renderables())):
            self._create_renderables(subchild, ctrl)

        view.addRenderable(ctrl)
Beispiel #27
0
""" Being there """

from w20e.forms.registry import Registry
from attrstorage import AttrStorage
from attrsstorage import AttrsStorage
from pyramidsession import PyramidSessionStorage
from methodcall import MethodCall
from none import NoSubmission

Registry.register_submission('attr', AttrStorage)
Registry.register_submission('attrs', AttrsStorage)
Registry.register_submission('methodcall', MethodCall)
Registry.register_submission('none', NoSubmission)
Registry.register_submission('pyramidsession', PyramidSessionStorage)

try:
    from emailsubmission import EmailSubmission
    Registry.register_submission('email', EmailSubmission)
except:
    pass