summaryrefslogtreecommitdiff
path: root/payments/core.py
diff options
context:
space:
mode:
Diffstat (limited to 'payments/core.py')
-rw-r--r--payments/core.py26
1 files 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)