From 0ac98f51271923b7182d9a756733e6b97d592c8c Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Tue, 9 Jul 2019 10:06:33 +0200 Subject: [PATCH] Use `inspect` instead of TypeError for backwards-compatible APIs --- src/pretix/base/services/mail.py | 5 +++-- src/pretix/presale/checkoutflow.py | 5 +++-- src/pretix/presale/views/order.py | 9 +++++---- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/pretix/base/services/mail.py b/src/pretix/base/services/mail.py index b2cb978d6..03428fab1 100644 --- a/src/pretix/base/services/mail.py +++ b/src/pretix/base/services/mail.py @@ -1,3 +1,4 @@ +import inspect import logging import smtplib import warnings @@ -177,9 +178,9 @@ def mail(email: str, subject: str, template: Union[str, LazyI18nString], body_plain += "\r\n" try: - try: + if 'position' in inspect.signature(renderer.render).parameters: body_html = renderer.render(content_plain, signature, str(subject), order, position) - except TypeError: + else: # Backwards compatibility warnings.warn('E-mail renderer called without position argument because position argument is not ' 'supported.', diff --git a/src/pretix/presale/checkoutflow.py b/src/pretix/presale/checkoutflow.py index c88ed7ffd..e5c9804f8 100644 --- a/src/pretix/presale/checkoutflow.py +++ b/src/pretix/presale/checkoutflow.py @@ -1,3 +1,4 @@ +import inspect from decimal import Decimal from django.conf import settings @@ -513,9 +514,9 @@ class PaymentStep(QuestionsViewMixin, CartMixin, TemplateFlowStep): if not provider.is_enabled or not self._is_allowed(provider, self.request): continue fee = provider.calculate_fee(self._total_order_value) - try: + if 'total' in inspect.signature(provider.payment_form_render).parameters: form = provider.payment_form_render(self.request, self._total_order_value + fee) - except TypeError: + else: form = provider.payment_form_render(self.request) providers.append({ 'provider': provider, diff --git a/src/pretix/presale/views/order.py b/src/pretix/presale/views/order.py index 107a655bd..90262701a 100644 --- a/src/pretix/presale/views/order.py +++ b/src/pretix/presale/views/order.py @@ -1,3 +1,4 @@ +import inspect import mimetypes import os from decimal import Decimal @@ -306,9 +307,9 @@ class OrderPaymentStart(EventViewMixin, OrderDetailMixin, TemplateView): @cached_property def form(self): - try: + if 'total' in inspect.signature(self.payment.payment_provider.payment_form_render).parameters: return self.payment.payment_provider.payment_form_render(self.request, self.payment.amount) - except TypeError: + else: return self.payment.payment_provider.payment_form_render(self.request) @cached_property @@ -521,9 +522,9 @@ class OrderPayChangeMethod(EventViewMixin, OrderDetailMixin, TemplateView): continue current_fee = sum(f.value for f in self.open_fees) or Decimal('0.00') fee = provider.calculate_fee(pending_sum - current_fee) - try: + if 'total' in inspect.signature(provider.payment_form_render).parameters: form = provider.payment_form_render(self.request, abs(pending_sum + fee - current_fee)) - except TypeError: + else: form = provider.payment_form_render(self.request) providers.append({ 'provider': provider,