def get_navigate_url(self, resource: Resource, request: Request, view_name: t.Optional[str] = None): """Get the link where clicking this item should take the user. By default, navigate to "show" view of the resource. TODO: Switch resource/request argument order. :param resource: Traversal context :param request: Current HTTP Request. :param view_name: Override class' ``navigate_view_name``. """ if self.navigate_url_getter: return self.navigate_url_getter(request, resource) if not self.navigate_view_name: return None target = self.get_navigate_target(resource, request) if not target: return None view_name = view_name or self.navigate_view_name return request.resource_url(target)
def change_publish_status(context: PostAdmin.Resource, request: Request): """Change publish status.""" post = context.get_object() if post.published_at: post.published_at = None messages.add(request, kind="info", msg="The post has been retracted.", msg_id="msg-unpublished") else: post.published_at = now() messages.add(request, kind="info", msg="The post has been published.", msg_id="msg-published") # Back to show page return HTTPFound(request.resource_url(context, "show"))
def deposit(resource: UserAddress, request: Request): current_url = request.resource_url(resource, "deposit") breadcrumbs = get_breadcrumbs(resource, request, current_view_url=current_url, current_view_name="Deposit") address = resource.address.address if not address.address: # Not generated yet address = None # Whose wallet we are dealing with wallet = resource.wallet return locals()
def newsletter(context: Admin, request: Request): """Newsletter admin form.""" schema = NewsletterSend().bind(request=request) # Create a styled button with some extra Bootstrap 3 CSS classes b = deform.Button(name='process', title="Send", css_class="btn-block btn-lg btn-primary") form = deform.Form(schema, buttons=(b, ), resource_registry=ResourceRegistry(request)) secrets = get_secrets(request.registry) api_key = secrets.get("mailgun.api_key", "") domain = secrets.get("mailgun.domain", "") mailing_list = secrets.get("mailgun.mailing_list", "") preview_url = request.resource_url(context, "newsletter-preview") # TODO: Use user registry here User = get_user_class(request.registry) user_count = request.dbsession.query(User).count() state = NewsletterState(request) rendered_form = None # User submitted this form if request.method == "POST": if 'process' in request.POST: try: appstruct = form.validate(request.POST.items()) if appstruct["preview"]: send_newsletter( request, appstruct["subject"], preview_email=appstruct["email"], import_subscribers=appstruct["import_subscribers"]) messages.add(request, "Preview email sent.") else: send_newsletter( request, appstruct["subject"], import_subscribers=appstruct["import_subscribers"]) messages.add(request, "Newsletter sent.") return httpexceptions.HTTPFound(request.url) except MailgunError as e: # Do a form level error message exc = colander.Invalid(form.widget, "Could not sent newsletter:" + str(e)) form.widget.handle_error(form, exc) except deform.ValidationFailure as e: # Render a form version where errors are visible next to the fields, # and the submitted values are posted back rendered_form = e.render() else: # We don't know which control caused form submission return httpexceptions.HTTPBadRequest("Unknown form button pressed") # Render initial form # Default values for read only fields if rendered_form is None: rendered_form = form.render({ "api_key": api_key, "domain": domain, "mailing_list": mailing_list, }) # This loads widgets specific CSS/JavaScript in HTML code, # if form widgets specify any static assets. form.resource_registry.pull_in_resources(request, form) return locals()