Beispiel #1
0
    def add_properties(s, cls):
        if not s.Mixin in cls.__bases__:
            cls.__bases__ += (s.Mixin, )

        if not hasattr(cls, 'Model'):
            import_form_base = '.'.join(cls.__module__.split('.')[:-2])
            # Attempt to import the model automatically
            model_name = inflector.singularize(cls.__name__)
            try:
                module = __import__(
                    '%s.models.%s' %
                    (import_form_base, inflector.underscore(model_name)),
                    fromlist=['*'])
                setattr(cls, 'Model', getattr(module, model_name))
            except (ImportError, AttributeError):
                raise RuntimeError(
                    "Scaffold coudn't automatically determine a model class for handler %s, please assign it a Model class variable."
                    % cls.__name__)

        if cls.ModelForm == None:
            cls.ModelForm = model_form(cls.Model)

        # self.scaffold.method
        methods = inspect.getmembers(s.Handler, predicate=inspect.ismethod)
        for n, f in methods:
            cls.scaffold[n] = f.__func__
    def __init__(self, controller):

        defaults = dict(
            query_factory=default_query_factory,
            create_factory=default_create_factory,
            title=inflector.titleize(controller.proper_name),
            plural=inflector.underscore(controller.name),
            singular=inflector.underscore(
                inflector.singularize(controller.name)),
            ModelForm=model_form(controller.meta.Model),
            display_properties=sorted([
                name for name, property in
                controller.meta.Model._properties.items()
            ]),
            redirect=controller.uri(action='list') if controller.uri_exists(
                action='list') else None,
            form_action=None,
            form_encoding='application/x-www-form-urlencoded',
            flash_messages=True,
            layouts={
                None: 'layouts/default.html',
                'admin': 'layouts/admin.html'
            })

        for k, v in defaults.iteritems():
            if not hasattr(self, k):
                setattr(self, k, v)
def _load_model(controller):
    import_form_base = '.'.join(controller.__module__.split('.')[:-2])
    # Attempt to import the model automatically
    model_name = inflector.singularize(controller.__class__.__name__)
    try:
        module = __import__('%s.models.%s' % (import_form_base, inflector.underscore(model_name)), fromlist=['*'])
        setattr(controller.Meta, 'Model', getattr(module, model_name))
    except (ImportError, AttributeError):
        raise RuntimeError("Scaffold coudn't automatically determine a model class for controller %s, please assign it a Meta.Model class variable." % controller.__class__.__name__)
Beispiel #4
0
    def view(self, id):
        """
        Passes a single entity by id to the template.

        If your handler is Cats, it does::

            self.set(cat=self.key_from_string(id).get())

        The entity is always at ``inflector.singularize(self.name)``, so 'cat', 'post', etc.
        """
        item = self.key_from_string(id).get()
        if item == None:
            return 404
        self.set(inflector.singularize(self.name), item)
Beispiel #5
0
    def __init__(self, handler):
        self.handler = handler
        self.render_as_json = False
        self.indent = None
        self.try_vars = [
            'data',
            inflector.pluralize(self.handler.name),
            inflector.singularize(self.handler.name),
            'edited_item',
            'added_item',
            'item']

        self.handler.events.before_dispatch += self.before_dispatch_callback.__get__(self)
        self.handler.events.after_dispatch += self.after_dispatch_callback.__get__(self)
Beispiel #6
0
    def __init__(self, handler):
        self.handler = handler
        self.render_as_json = False
        self.indent = None
        self.try_vars = [
            'data',
            inflector.pluralize(self.handler.name),
            inflector.singularize(self.handler.name),
            'edited_item',
            'added_item',
            'item']

        self.handler.events.before_dispatch += self.before_dispatch_callback.__get__(self)
        self.handler.events.after_dispatch += self.after_dispatch_callback.__get__(self)
Beispiel #7
0
    def view(self, id):
        """
        Passes a single entity by id to the template.

        If your handler is Cats, it does::

            self.set(cat=self.key_from_string(id).get())

        The entity is always at ``inflector.singularize(self.name)``, so 'cat', 'post', etc.
        """
        item = self.key_from_string(id).get()
        if item == None:
            return 404
        self.set(inflector.singularize(self.name), item)
Beispiel #8
0
    def edit(self, id):
        """
        Displays a form for editing an entity and processes form submissions to update the entity.

        The form displayed is an instance of ``self.ModelForm``, created via ``self.get_modelform()`` and is exposed via the ``form`` template variable.

        If an item is saved, then the ``edited_item`` template variable will be set.
        """
        item = self.key_from_string(id).get()
        if item == None:
            return 404

        self.get_modelform(obj=item)

        if self.request.method != 'GET' and self.scaffold.should_save:
            if self.modelform.validate():

                self._delegate_event('scaffold_before_apply',
                                     handler=self,
                                     form=self.modelform,
                                     item=None)

                self.modelform.populate_obj(item)

                self._delegate_event('scaffold_before_save',
                                     handler=self,
                                     form=self.modelform,
                                     item=item)

                item.put()

                self._delegate_event('scaffold_after_save',
                                     handler=self,
                                     form=self.modelform,
                                     item=item)

                self.set('edited_item', item)

                self.flash('The item was saved successfully.', 'success')

                if self.should_redirect():
                    return self.redirect(self.uri(action='list'))
            else:
                self.flash(
                    'There were errors on the form, please correct and try again.',
                    'error')

        self.set(inflector.singularize(self.name), item)
        self.set('form', self.modelform)
Beispiel #9
0
    def _scaffold_on_before_render(self, handler):

        self.template_vars['scaffolding'] = {
            'name': self.name,
            'proper_name': self.proper_name,
            'title': inflector.titleize(self.proper_name),
            'pluralized': inflector.pluralize(self.name),
            'singularized': inflector.singularize(self.name),
            'key_id_for': ndb_util.key_id_for,
            'key_urlsafe_for': ndb_util.key_urlsafe_for,
            'url_id_for': self.url_id_for,
            'use_ids': self.scaffold.use_ids,
            'form_action': self.scaffold.form_action,
            'form_encoding': self.scaffold.form_encoding
        }

        self._determine_display_properties()
Beispiel #10
0
    def __init__(self, controller):

        defaults = dict(
            title=inflector.titleize(controller.proper_name),
            plural=inflector.underscore(controller.name),
            singular=inflector.underscore(inflector.singularize(controller.name)),
            ModelForm=model_form(controller.meta.Model),
            display_properties=[name for name, property in controller.meta.Model._properties.items()],
            redirect=controller.uri(action="list") if controller.uri_exists(action="list") else None,
            form_action=None,
            form_encoding="application/x-www-form-urlencoded",
            flash_messages=True,
        )

        for k, v in defaults.iteritems():
            if not hasattr(self, k):
                setattr(self, k, v)
Beispiel #11
0
    def _scaffold_on_before_render(self, handler):

        self.template_vars['scaffolding'] = {
            'name': self.name,
            'proper_name': self.proper_name,
            'title': inflector.titleize(self.proper_name),
            'pluralized': inflector.pluralize(self.name),
            'singularized': inflector.singularize(self.name),
            'key_id_for': ndb_util.key_id_for,
            'key_urlsafe_for': ndb_util.key_urlsafe_for,
            'url_id_for': self.url_id_for,
            'use_ids': self.scaffold.use_ids,
            'form_action': self.scaffold.form_action,
            'form_encoding': self.scaffold.form_encoding
        }

        self._determine_display_properties()
Beispiel #12
0
    def _scaffold_on_before_render(self, handler):

        self.template_vars["scaffolding"] = {
            "name": self.name,
            "proper_name": self.proper_name,
            "title": inflector.titleize(self.proper_name),
            "pluralized": inflector.pluralize(self.name),
            "singularized": inflector.singularize(self.name),
            "key_id_for": ndb_util.key_id_for,
            "key_urlsafe_for": ndb_util.key_urlsafe_for,
            "url_id_for": self.url_id_for,
            "use_ids": self.scaffold.use_ids,
            "form_action": self.scaffold.form_action,
            "form_encoding": self.scaffold.form_encoding,
        }

        self._determine_display_properties()
Beispiel #13
0
    def __init__(self, controller):

        defaults = dict(
            query_factory=default_query_factory,
            create_factory=default_create_factory,
            title=inflector.titleize(controller.proper_name),
            plural=inflector.underscore(controller.name),
            singular=inflector.underscore(inflector.singularize(controller.name)),
            ModelForm=model_form(controller.meta.Model),
            display_properties=sorted([name for name, property in controller.meta.Model._properties.items()]),
            redirect=controller.uri(action="list") if controller.uri_exists(action="list") else None,
            form_action=None,
            form_encoding="application/x-www-form-urlencoded",
            flash_messages=True,
            layouts={None: "layouts/default.html", "admin": "layouts/admin.html"},
        )

        for k, v in defaults.iteritems():
            if not hasattr(self, k):
                setattr(self, k, v)
    def add_properties(s, cls):
        if not s.Mixin in cls.__bases__:
            cls.__bases__ += (s.Mixin,)

        if not hasattr(cls, 'Model'):
            import_form_base = '.'.join(cls.__module__.split('.')[:-2])
            # Attempt to import the model automatically
            model_name = inflector.singularize(cls.__name__)
            try:
                module = __import__('%s.models.%s' % (import_form_base, inflector.underscore(model_name)), fromlist=['*'])
                setattr(cls, 'Model', getattr(module, model_name))
            except (ImportError, AttributeError):
                raise RuntimeError("Scaffold coudn't automatically determine a model class for handler %s, please assign it a Model class variable." % cls.__name__)

        if cls.ModelForm == None:
            cls.ModelForm = model_form(cls.Model)

        # self.scaffold.method
        methods = inspect.getmembers(s.Handler, predicate=inspect.ismethod)
        for n, f in methods:
            cls.scaffold[n] = f.__func__
Beispiel #15
0
    def __init__(self, controller):

        defaults = dict(
            title=inflector.titleize(controller.proper_name),
            plural=inflector.underscore(controller.name),
            singular=inflector.underscore(
                inflector.singularize(controller.name)),
            ModelForm=model_form(controller.meta.Model),
            display_properties=[
                name for name, property in
                controller.meta.Model._properties.items()
            ],
            redirect=controller.uri(action='list') if controller.uri_exists(
                action='list') else None,
            form_action=None,
            form_encoding='application/x-www-form-urlencoded',
            flash_messages=True)

        for k, v in defaults.iteritems():
            if not hasattr(self, k):
                setattr(self, k, v)
Beispiel #16
0
    def edit(self, id):
        """
        Displays a form for editing an entity and processes form submissions to update the entity.

        The form displayed is an instance of ``self.ModelForm``, created via ``self.get_modelform()`` and is exposed via the ``form`` template variable.

        If an item is saved, then the ``edited_item`` template variable will be set.
        """
        item = self.key_from_string(id).get()
        if item == None:
            return 404

        self.get_modelform(obj=item)

        if self.request.method != 'GET' and self.scaffold.should_save:
            if self.modelform.validate():

                self._delegate_event('scaffold_before_apply', handler=self, form=self.modelform, item=None)

                self.modelform.populate_obj(item)

                self._delegate_event('scaffold_before_save', handler=self, form=self.modelform, item=item)

                item.put()

                self._delegate_event('scaffold_after_save', handler=self, form=self.modelform, item=item)

                self.set('edited_item', item)

                self.flash('The item was saved successfully.', 'success')

                if self.should_redirect():
                    return self.redirect(self.uri(action='list'))
            else:
                self.flash('There were errors on the form, please correct and try again.', 'error')

        self.set(inflector.singularize(self.name), item)
        self.set('form', self.modelform)