Utilities
All utilities are in pragmatic.utils.
build_absolute_uri
Builds an absolute URI, gracefully handling the case where no request is
available by falling back to django.contrib.sites.
from pragmatic.utils import build_absolute_uri
# With a request (delegates to request.build_absolute_uri)
url = build_absolute_uri(request, '/path/to/page/')
# Without a request (requires django.contrib.sites)
url = build_absolute_uri(None, '/path/to/page/')
url = build_absolute_uri(None, '/path/to/page/', protocol='https')
When request is None:
django.contrib.sitesmust be inINSTALLED_APPSProtocol defaults to
'http'in DEBUG mode,'https'in productionThe domain is read from the current
Siteobject
This function is also available as the {% uri %} template tag:
{% load pragmatic_tags %}
{% uri '/path/to/page/' %}
get_task_decorator
Returns the task decorator configured by PRAGMATIC_TASK_DECORATOR.
Abstracts away the differences between Django’s built-in tasks, django-rq,
and Celery.
from pragmatic.utils import get_task_decorator
task = get_task_decorator()
@task
def my_background_task(arg):
...
# With a named RQ queue
job = get_task_decorator(queue='high')
@job
def priority_task():
...
The queue parameter is only used when PRAGMATIC_TASK_DECORATOR is
'django_rq.job'.
Raises ImportError if the configured decorator’s module is not installed.
compress
Creates an in-memory ZIP file from a list of {'name': ..., 'content': ...}
dicts.
from pragmatic.utils import compress
files = [
{'name': 'report.csv', 'content': csv_bytes},
{'name': 'summary.txt', 'content': 'Summary text'},
]
zip_buffer = compress(files)
# In a Django view
response = HttpResponse(zip_buffer, content_type='application/zip')
response['Content-Disposition'] = 'attachment; filename="export.zip"'
return response
Returns a BytesIO object seeked to position 0.
import_name
Dynamically imports a name from a dotted module path string.
from pragmatic.utils import import_name
MyClass = import_name('myapp.models.MyClass')
instance = MyClass()