From e68689540cd87163af7016ba2eb2e2cad07b8c80 Mon Sep 17 00:00:00 2001 From: Krzysztof Wolski Date: Mon, 6 Feb 2017 17:40:06 +0100 Subject: Use django import_string --- payments/core.py | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/payments/core.py b/payments/core.py index 22badd8..1a6e1da 100644 --- a/payments/core.py +++ b/payments/core.py @@ -1,6 +1,5 @@ from __future__ import unicode_literals import re -import importlib try: from urllib.parse import urljoin, urlencode except ImportError: @@ -8,6 +7,8 @@ except ImportError: from urlparse import urljoin from django.conf import settings from django.core.exceptions import ImproperlyConfigured +from django.utils.module_loading import import_string + PAYMENT_VARIANTS = { 'default': ('payments.dummy.DummyProvider', {})} @@ -22,26 +23,25 @@ if not PAYMENT_HOST: PAYMENT_USES_SSL = getattr(settings, 'PAYMENT_USES_SSL', not settings.DEBUG) -def get_function(function_name): - """Imports function with given name""" - splitted_path = function_name.split('.') - module_name = '.'.join(splitted_path[:-1]) - function_name = splitted_path[-1] - module = importlib.import_module(module_name) - return getattr(module, function_name) - - def get_base_url(): + """ + Returns host url according to project settings. Protocol is chosen by + checking PAYMENT_USES_SSL variable. + If PAYMENT_HOST is not specified, gets domain from Sites. Otherwise, + checks if it's callable and returns it's result. If there is no function + treats it as domain. + """ protocol = 'https' if PAYMENT_USES_SSL else 'http' if not PAYMENT_HOST: current_site = Site.objects.get_current() return '%s://%s' % (protocol, current_site.domain) try: - function = get_function(PAYMENT_HOST) - domain = function() - except (ImportError, AttributeError, TypeError, ValueError): + function = import_string(PAYMENT_HOST) + except ImportError: domain = PAYMENT_HOST + else: + domain = function() return '%s://%s' % (protocol, domain) -- cgit v1.2.3