class Show(crud_views.Show): """Default show view for model admin.""" base_template = "admin/base.html" form_generator = SQLAlchemyFormGenerator() resource_buttons = [ TraverseLinkButton(id="edit", name="Edit", view_name="edit", permission="edit"), TraverseLinkButton(id="delete", name="Delete", view_name="delete", permission="delete"), TraverseLinkButton( id="shell", name="Shell", view_name="shell", permission="shell", tooltip= "Open IPython Notebook shell and have this item prepopulated in obj variable.", feature="notebook"), ] @view_config(context=ModelAdmin.Resource, name="show", renderer="crud/show.html", route_name="admin", permission='view') def show(self): # We override this method just to define admin route_name traversing return super(Show, self).show()
def resource_buttons(self): """Customize buttons toolbar.""" buttons = DefaultShow.resource_buttons.copy() # View on site button view_on_site = ResourceButton(id="btn-view-on-site", name="View on site") def link_on_site(context, request): resource = get_post_resource(request, context.get_object().slug) return request.resource_url(resource) view_on_site.get_link = link_on_site buttons.append(view_on_site) # Publish button if not self.get_object().published_at: change_publish_status = TraverseLinkButton(id="btn-change-publish-status", name="Publish", view_name="change_publish_status") else: change_publish_status = TraverseLinkButton(id="btn-change-publish-status", name="Unpublish", view_name="change_publish_status") # This is a state changing action, so we want to do HTTP POST change_publish_status.template = "crud/form_button.html" buttons.append(change_publish_status) return buttons
class UserListing(admin_views.Listing): """Listing view for Users.""" title = "All users" table = listing.Table(columns=[ listing.Column( "id", "Id", ), listing.Column("friendly_name", "Friendly name"), listing.Column("email", "Email"), listing.ControlsColumn() ]) # Include our CSV export button in the user interface resource_buttons = admin_views.Listing.resource_buttons + [ TraverseLinkButton(id="csv-export", name="CSV Export", view_name="csv-export", permission="view") ] def order_query(self, query): return query.order_by(self.get_model().created_at.desc()) @view_config(context=UserAdmin, route_name="admin", name="listing", renderer="crud/listing.html", permission='view') def listing(self): return super(UserListing, self).listing()
class UserShow(admin_views.Show): """Show one user.""" resource_buttons = admin_views.Show.resource_buttons + [TraverseLinkButton(id="set-password", name="Set password", view_name="set-password")] includes = ["id", "uuid", "enabled", "created_at", "updated_at", "username", colander.SchemaNode(colander.String(), name='full_name'), "email", "last_login_at", "last_login_ip", colander.SchemaNode(colander.String(), name="registration_source", missing=colander.drop), colander.SchemaNode(colander.String(), name="social"), colander.SchemaNode(GroupSet(), name="groups", widget=defer_widget_values(deform.widget.CheckboxChoiceWidget, group_vocabulary, css_class="groups")) ] form_generator = SQLAlchemyFormGenerator(includes=includes) def get_title(self): return "{} #{}".format(self.get_object().friendly_name, self.get_object().id) @view_config(context=UserAdmin.Resource, route_name="admin", name="show", renderer="crud/show.html", permission='view') def show(self): return super(UserShow, self).show()
def contribute_admin(event): """Add notebook entry to the admin user interface.""" # XXX: dummy way of adding button on context if not isinstance(event.get('context'), UserAdmin.Resource): return view = event.get('view') if view is None or not hasattr(view, 'resource_buttons'): return if "shell" in [i.id for i in event['view'].resource_buttons]: return button = TraverseLinkButton( id="shell", name="Shell", view_name="shell", permission="shell", tooltip= "Open IPython Notebook shell and have this item prepopulated in obj variable." ) event['view'].resource_buttons.append(button)