Exemple #1
0
    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)
Exemple #2
0
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"))
Exemple #3
0
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()
Exemple #4
0
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()