Files
pretix_original/src/pretix/base/ticketoutput.py
2016-08-13 21:19:36 +02:00

117 lines
3.7 KiB
Python

from collections import OrderedDict
from typing import Tuple
from django import forms
from django.http import HttpRequest
from django.utils.translation import ugettext_lazy as _
from pretix.base.models import Event, Order
from pretix.base.settings import SettingsSandbox
class BaseTicketOutput:
"""
This is the base class for all ticket outputs.
"""
def __init__(self, event: Event):
self.event = event
self.settings = SettingsSandbox('ticketoutput', self.identifier, event)
def __str__(self):
return self.identifier
@property
def is_enabled(self) -> bool:
"""
Returns whether or whether not this output is enabled.
By default, this is determined by the value of the ``_enabled`` setting.
"""
return self.settings.get('_enabled', as_type=bool)
def generate(self, order: Order) -> Tuple[str, str, str]:
"""
This method should generate the download file and return a tuple consisting of a
filename, a file type and file content.
"""
raise NotImplementedError()
@property
def verbose_name(self) -> str:
"""
A human-readable name for this ticket output. This should
be short but self-explaining. Good examples include 'PDF tickets'
and 'Passbook'.
"""
raise NotImplementedError() # NOQA
@property
def identifier(self) -> str:
"""
A short and unique identifier for this ticket output.
This should only contain lowercase letters and in most
cases will be the same as your packagename.
"""
raise NotImplementedError() # NOQA
@property
def settings_form_fields(self) -> dict:
"""
When the event's administrator visits the event configuration
page, this method is called to return the configuration fields available.
It should therefore return a dictionary where the keys should be (unprefixed)
settings keys and the values should be corresponding Django form fields.
The default implementation returns the appropriate fields for the ``_enabled``
setting mentioned above.
We suggest that you return an ``OrderedDict`` object instead of a dictionary
and make use of the default implementation. Your implementation could look
like this::
@property
def settings_form_fields(self):
return OrderedDict(
list(super().settings_form_fields.items()) + [
('paper_size',
forms.CharField(
label=_('Paper size'),
required=False
))
]
)
.. WARNING:: It is highly discouraged to alter the ``_enabled`` field of the default
implementation.
"""
return OrderedDict([
('_enabled',
forms.BooleanField(
label=_('Enable output'),
required=False,
)),
])
def settings_content_render(self, request: HttpRequest) -> str:
"""
When the event's administrator visits the event configuration
page, this method is called. It may return HTML containing additional information
that is displayed below the form fields configured in ``settings_form_fields``.
"""
pass
@property
def download_button_text(self) -> str:
"""
The text on the download button in the frontend.
"""
return _('Download ticket')
@property
def download_button_icon(self) -> str:
"""
The name of the icon on the download button in the frontend
"""
return None