diff --git a/doc/development/api/index.rst b/doc/development/api/index.rst index aa9eca294a..1be6a3a8c1 100644 --- a/doc/development/api/index.rst +++ b/doc/development/api/index.rst @@ -8,3 +8,4 @@ Contents: plugins restriction + payment diff --git a/doc/development/api/plugins.rst b/doc/development/api/plugins.rst index 22d13e3d14..78e0edff76 100644 --- a/doc/development/api/plugins.rst +++ b/doc/development/api/plugins.rst @@ -57,5 +57,12 @@ example, taken from the time restriction module (see next chapter) as a template You have to implement a ``PretixPluginMeta`` class like in the example to make your plugin available to the users. +Currently, the ``PluginType`` enum has the following values defined: + +* ``RESTRICTION`` +* ``PAYMENT`` + +The next pages provide details on their usage. + .. _signal dispatcher: https://docs.djangoproject.com/en/1.7/topics/signals/ .. _namespace packages: http://legacy.python.org/dev/peps/pep-0420/ diff --git a/src/pretix/base/payment.py b/src/pretix/base/payment.py new file mode 100644 index 0000000000..129dd87c2d --- /dev/null +++ b/src/pretix/base/payment.py @@ -0,0 +1,10 @@ +class BasePaymentProvider: + """ + This is the base class for all payment providers. + """ + + def get_identifier(self) -> str: + """ + Return a unique identifier for this payment provider + """ + raise NotImplementedError() diff --git a/src/pretix/base/plugins.py b/src/pretix/base/plugins.py index 5be7a2d4a0..bbf760624b 100644 --- a/src/pretix/base/plugins.py +++ b/src/pretix/base/plugins.py @@ -8,6 +8,7 @@ from django.apps import apps class PluginType(Enum): RESTRICTION = 1 + PAYMENT = 2 def get_all_plugins() -> "List[class]": diff --git a/src/pretix/base/signals.py b/src/pretix/base/signals.py index d175743018..800d064414 100644 --- a/src/pretix/base/signals.py +++ b/src/pretix/base/signals.py @@ -51,3 +51,11 @@ return a positive result (see plugin API documentation for details). determine_availability = EventPluginSignal( providing_args=["item", "variations", "context", "cache"] ) + +""" +This signal is sent out to get all known payment providers. Receivers should return a +subclass of pretix.base.payment.BasePaymentProvider +""" +register_payment_providers = EventPluginSignal( + providing_args=[] +) diff --git a/src/pretix/plugins/banktransfer/__init__.py b/src/pretix/plugins/banktransfer/__init__.py new file mode 100644 index 0000000000..a6ce5d9723 --- /dev/null +++ b/src/pretix/plugins/banktransfer/__init__.py @@ -0,0 +1,22 @@ +from django.apps import AppConfig +from django.utils.translation import ugettext_lazy as _ +from pretix.base.plugins import PluginType + + +class BankTransferApp(AppConfig): + name = 'pretix.plugins.banktransfer' + verbose_name = _("Bank transfer") + + class PretixPluginMeta: + type = PluginType.PAYMENT + name = _("Bank transfer") + author = _("the pretix team") + version = '1.0.0' + description = _("This plugin allows you to receive payments " + + "via bank transfer ") + + def ready(self): + from . import signals # NOQA + + +default_app_config = 'pretix.plugins.banktransfer.BankTransferApp' diff --git a/src/pretix/plugins/banktransfer/payment.py b/src/pretix/plugins/banktransfer/payment.py new file mode 100644 index 0000000000..33302517ac --- /dev/null +++ b/src/pretix/plugins/banktransfer/payment.py @@ -0,0 +1,5 @@ +from pretix.base.payment import BasePaymentProvider + + +class BankTransfer(BasePaymentProvider): + pass diff --git a/src/pretix/plugins/banktransfer/signals.py b/src/pretix/plugins/banktransfer/signals.py new file mode 100644 index 0000000000..ece6a37b21 --- /dev/null +++ b/src/pretix/plugins/banktransfer/signals.py @@ -0,0 +1,10 @@ +from django.dispatch import receiver + +from pretix.base.signals import register_payment_providers + +from .payment import BankTransfer + + +@receiver(register_payment_providers) +def register_payment_provider(sender, **kwargs): + return BankTransfer diff --git a/src/pretix/settings.py b/src/pretix/settings.py index dbadc08d94..f1b04456a4 100644 --- a/src/pretix/settings.py +++ b/src/pretix/settings.py @@ -46,6 +46,7 @@ INSTALLED_APPS = ( 'djangoformsetjs', 'pretix.plugins.testdummy', 'pretix.plugins.timerestriction', + 'pretix.plugins.banktransfer', ) MIDDLEWARE_CLASSES = (