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__)
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)
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)
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)
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()
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)
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()
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__
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)
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)