Skip to main content
Django Pummel
=============
**Django app providing PML templates, tags and middleware.**

|travis|_

.. |travis| image:: https://magnum.travis-ci.com/praekelt/django-pummel.svg?token=hvdqE3zapc2LPyKs2zQC&branch=develop

.. contents:: Contents
:depth: 5


Usage
-----

Forms
~~~~~

Form fields, widgets and renderers are included so you can easily render forms. Forms should inherit from ``PMLForm`` and utilize included PML fields as illustrated by the following::

from pml import forms

class DemoForm(forms.PMLForm):
submit_text = "Submit Text"
text_field = forms.PMLTextField(
label="Text Field Label",
help_text="Text Field Help Text"
)
select_field = forms.PMLSelectField(
label="Select Field Label",
help_text="Select Field Help Text",
choices=(
("value1", "select 1"),
("value2", "select 2"),
)
)
checkbox_field = forms.PMLCheckBoxField(
label="Check Box Field Label",
help_text="Check Box Field Help Text",
choices=(
("value1", "checkbox 1"),
("value2", "checkbox 2"),
)
)
radio_field = forms.PMLRadioField(
label="Radio Field Label",
help_text="Radio Field Help Text",
choices=(
("value1", "radio 1"),
("value2", "radio 2"),
)
)

You can then render the form by calling the following include in your template(which assumes a ``form`` context variable is available), i.e.::

{% include 'pml/inclusion_tags/form.xml' %}

which will render as

.. image:: https://github.com/praekelt/django-pummel/raw/develop/rst_media/form.png

Middleware
~~~~~~~~~~

VLiveRemoteUserMiddleware
+++++++++++++++++++++++++

To automatically create and authenticate users using MSISDNs as provided by VLive include ``VLiveRemoteUserMiddleware`` and ``RemoteUserBackend`` in your settings, i.e::

MIDDLEWARE_CLASSES = (
...
'django.contrib.auth.middleware.AuthenticationMiddleware',
'pml.middleware.VLiveRemoteUserMiddleware',
...
)

AUTHENTICATION_BACKENDS = (
...
'django.contrib.auth.backends.RemoteUserBackend',
)

With this setup ``VLiveRemoteUserMiddleware`` will detect the username in ``request.META['HTTP_X_UP_CALLING_LINE_ID']`` and will authenticate and auto-login that user using the ``RemoteUserBackend``.

You can also specify ``REMOTE_USER_IGNORE_PATH = ['/vlivebanner/', ]`` to ignore certain paths. Especially for banners, you don't want new users logged when they in actual fact haven't visited the site but only seen the banner.


RedirectMiddleware
++++++++++++++++++

PML requires an intermediary page when redirecting, conventional HTTP 302's are not supported. To automatically create this intermediary page include ``RedirectMiddleware`` as your first middleware class, i.e.::

MIDDLEWARE_CLASSES = (
'pml.middleware.RedirectMiddleware',
...
)

With this setup all redirects will be intercepted and the ``pml/redirect.xml`` template will be rendered as a normal ``HttpResponse``, including `user messages <https://docs.djangoproject.com/en/dev/ref/contrib/messages/>`_ and PML redirect XML as created by the ``redirect`` tag (see below).


Inclusion Tags
~~~~~~~~~~~~~~

banner
++++++

Renders an image specified by ``image_url`` argument as a banner, i.e.::

{% banner image_url='/url/to/image.png' %}

will render as

.. image:: https://github.com/praekelt/django-pummel/raw/develop/rst_media/banner.png

The provided image should have a resolution of 241x60px. The Vodafone Live PML platform will resize it for specific devices.

divider
++++++

Renders a divider, i.e.::

{% divider %}

will render as

.. image:: https://github.com/praekelt/django-pummel/raw/develop/rst_media/divider.png

Headers are tandalone modules so you can not use them within other modules.

header
++++++

Renders a header bar with provided ``text`` and ``color``, i.e.::

{% header text='Featured' color='pink' %}

will render as

.. image:: https://github.com/praekelt/django-pummel/raw/develop/rst_media/header.png

Headers are standalone modules so you can not use them within other modules.


horizontal_links
++++++++++++++++

Renders horizontal links for collection of ``objects``. Link url and text is looked up from properties on individual objects as specified by the ``url_property`` and ``text_property`` arguments i.e.::

{% horizontal_links objects=object_list url_property='get_absolute_url' text_property='title' %}

will render as

.. image:: https://github.com/praekelt/django-pummel/raw/develop/rst_media/horizontal_links.png

link_list
+++++++++

Renders bulleted links for collection of ``objects``. Link url and text is looked up from properties on individual objects as specified by the ``url_property`` and ``text_property`` arguments i.e.::

{% link_list objects=object_list url_property='get_absolute_url' text_property='title' %}

will render as

.. image:: https://github.com/praekelt/django-pummel/raw/develop/rst_media/link_list.png


redirect
++++++++

Renders PML redirect XML causing a client side HTML redirect to provided ``url`` after the specified ``seconds`` i.e.::

{% redirect seconds='2' url='http://www.google.com' %}

will render the following XML::

<TIMER href="http://www.google.com" tenthsOfSecond="20"/>

If no ``url`` is provided ``request.META['HTTP_REFERER']`` will be used instead. ``redirect`` will only work if included before ``<VZV-DEFAULT>`` in your templates (if you extend from ``pml/base.xml`` include it as part of the ``header`` block) and your template contains other content (empty templates won't redirect).


text_module
+++++++++++

Renders evaluated HTML reformated for display within a PML ``<TEXT>`` element. The provided ``html`` is evaluated so you can specify tags and context variables is if you were creating normal Django template code, i.e.::

{% text_module html='<b>bold</b><br /><a href="{{ object_url }}">link</a><br /><i>italic</i>' %}

will render as

.. image:: https://github.com/praekelt/django-pummel/raw/develop/rst_media/text_module.png

thumbnail_html
++++++++++++++

Renders a thumbnail image followed by evaluated HTML reformated for display within a PML ``<TEXT>`` element. The provided ``html`` is evaluated so you can specify tags and context variables is if you were creating normal Django template code, i.e.::

{% thumbnail_html image_url='/url/to/image.png' html='<b>bold</b><br /><a href="{{ object_url }}">link</a><br /><i>italic</i>' %}

will render as

.. image:: https://github.com/praekelt/django-pummel/raw/develop/rst_media/thumbnail_html.png

thumbnail_include
+++++++++++++++++

Renders a thumbnail image followed by evaluated HTML reformated for display within a PML ``<TEXT>`` element, as included from the provided ``template`` argument. This should be used instead of ``thumbnail_html`` above if you need to include complex elements (i.e. other tags) that can't be included as part of other tags, i.e. ::

{% thumbnail_include image_url='/url/to/image.png' template='path/to/template' %}

with the template containing::

<b>bold</b><br />
<a href="{{ object_url }}">link</a><br />
<i>italic</i>

will render as

.. image:: https://github.com/praekelt/django-pummel/raw/develop/rst_media/thumbnail_html.png

.. note::

All tags accept a ``color`` argument allowing you to specify background and link colors. Valid colors are orange, green, dove, marine, violet, red, black, grey, sand, pink, and darkred.

Templates
~~~~~~~~~

A ``pml/base.xml`` template is included from which you can ``extend`` as a starting point for your PML templates. The template includes a ``header`` and ``body`` block. You'll use the ``body`` block for the most of your content, but some tags like ``redirect`` needs to be placed in the ``header`` block.

Metadata

Release files for django-pummel 0.0.8

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django-pummel 0.0.8
File Size Uploaded Provenance Actions
django-pummel-0.0.8.tar.gz 141.6 kB Without provenance Details for django-pummel-0.0.8.tar.gz

Release files / django-pummel-0.0.8.tar.gz

Download URL django-pummel-0.0.8.tar.gz
Size 141.6 kB
Tags Source
SHA-256 checksum
How to use checksums
9dd915a9ffef4d7e1b2f072f99005ba499a8284a7299cb99a1e2bab8f4ed6453
BLAKE2b-256 checksum
How to use checksums
0aa93c62457c7ad594332bb3bb408503cc19df8c120bd42ba45cb4a4575194e0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Security for django-pummel 0.0.8

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page