wcs: refactor access to KNOWN_SERVICES to really be uniform (#7273)

This commit is contained in:
Frédéric Péters 2015-05-18 16:18:56 +02:00
parent c667a9018a
commit ec06dabf2f
2 changed files with 21 additions and 16 deletions

View File

@ -29,10 +29,7 @@ from combo.data.models import CellBase
from combo.data.library import register_cell_class
from combo.utils import NothingInCacheException
from .utils import get_wcs_json
def is_wcs_enabled(cls):
return hasattr(settings, 'KNOWN_SERVICES') and settings.KNOWN_SERVICES.get('wcs')
from .utils import get_wcs_json, is_wcs_enabled, get_wcs_services
@register_cell_class
class WcsFormCell(CellBase):
@ -53,7 +50,7 @@ class WcsFormCell(CellBase):
def save(self, *args, **kwargs):
if self.formdef_reference:
wcs_key, form_slug = self.formdef_reference.split(':')
wcs_site = settings.KNOWN_SERVICES.get('wcs', {}).get(wcs_key)
wcs_site = get_wcs_services().get(wcs_key)
forms_response_json = get_wcs_json(wcs_site.get('url') + 'json')
for form in forms_response_json:
slug = form.get('slug')
@ -89,7 +86,7 @@ class WcsCommonCategoryCell(CellBase):
def save(self, *args, **kwargs):
if self.category_reference:
wcs_key, category_slug = self.category_reference.split(':')
wcs_site = settings.KNOWN_SERVICES.get('wcs', {}).get(wcs_key)
wcs_site = get_wcs_services().get(wcs_key)
categories_response_json = get_wcs_json(wcs_site.get('url') + 'categories')
for category in categories_response_json.get('data'):
slug = category.get('slug')
@ -135,7 +132,7 @@ class WcsBlurpMixin(object):
def get_blurp_renderer(self, context):
if self.wcs_site:
try:
wcs_sites = {self.wcs_site: settings.KNOWN_SERVICES['wcs'][self.wcs_site]}
wcs_sites = {self.wcs_site: get_wcs_services()[self.wcs_site]}
except KeyError:
# in case of the site disappeared from settings
return cmsplugin_blurp.utils.create_renderer(self.variable_name, {
@ -143,7 +140,7 @@ class WcsBlurpMixin(object):
'template': ''
})
else:
wcs_sites = settings.KNOWN_SERVICES['wcs']
wcs_sites = get_wcs_services()
sources = []
for slug, wcs_site in wcs_sites.items():
@ -195,10 +192,10 @@ class WcsDataBaseCell(CellBase, WcsBlurpMixin):
abstract = True
def get_default_form_class(self):
if len(settings.KNOWN_SERVICES.get('wcs')) == 1:
if len(get_wcs_services()) == 1:
return None
combo_wcs_sites = [('', _('All'))]
combo_wcs_sites.extend([(x, y.get('title')) for x, y in settings.KNOWN_SERVICES.get('wcs', {}).items()])
combo_wcs_sites.extend([(x, y.get('title')) for x, y in get_wcs_services().items()])
return model_forms.modelform_factory(self.__class__,
fields=['wcs_site'],
widgets={'wcs_site': Select(choices=combo_wcs_sites)})
@ -305,9 +302,9 @@ class TrackingCodeInputCell(CellBase):
verbose_name = _('Tracking Code Input')
def get_default_form_class(self):
if len(settings.KNOWN_SERVICES.get('wcs')) == 1:
if len(get_wcs_services()) == 1:
return None
combo_wcs_sites = [(x, y.get('title')) for x, y in settings.KNOWN_SERVICES.get('wcs', {}).items()]
combo_wcs_sites = [(x, y.get('title')) for x, y in get_wcs_services().items()]
return model_forms.modelform_factory(self.__class__,
fields=['wcs_site'],
widgets={'wcs_site': Select(choices=combo_wcs_sites)})
@ -315,6 +312,6 @@ class TrackingCodeInputCell(CellBase):
def render(self, context):
tmpl = template.loader.get_template(self.template_name)
if not self.wcs_site:
self.wcs_site = settings.KNOWN_SERVICES['wcs'].keys()[0]
context['url'] = settings.KNOWN_SERVICES['wcs'].get(self.wcs_site).get('url')
self.wcs_site = get_wcs_services().keys()[0]
context['url'] = get_wcs_services().get(self.wcs_site).get('url')
return tmpl.render(context)

View File

@ -19,6 +19,14 @@ import requests
from django.conf import settings
from django.core.cache import cache
def is_wcs_enabled(cls):
return hasattr(settings, 'KNOWN_SERVICES') and settings.KNOWN_SERVICES.get('wcs')
def get_wcs_services():
if not is_wcs_enabled(None):
return {}
return settings.KNOWN_SERVICES.get('wcs')
def get_wcs_json(url):
response_json = cache.get(url)
if response_json is None:
@ -28,7 +36,7 @@ def get_wcs_json(url):
def get_wcs_options(url):
references = []
for wcs_key, wcs_site in settings.KNOWN_SERVICES.get('wcs', {}).iteritems():
for wcs_key, wcs_site in get_wcs_services().iteritems():
site_title = wcs_site.get('title')
response_json = get_wcs_json(wcs_site.get('url') + url)
if type(response_json) is dict:
@ -36,7 +44,7 @@ def get_wcs_options(url):
for element in response_json:
slug = element.get('slug')
title = element.get('title')
if len(settings.KNOWN_SERVICES['wcs']) == 1:
if len(get_wcs_services()) == 1:
label = title
else:
label = '%s : %s' % (site_title, title)