cms.utils.placeholder: 54 total statements, 0.0% covered

Generated: Wed 2013-03-13 10:33 CET

Source file: /media/Envs/Envs/filer-gallery/lib/python2.7/site-packages/cms/utils/placeholder.py

Stats: 0 executed, 50 missed, 4 excluded, 30 ignored

  1. # -*- coding: utf-8 -*-
  2. from django.conf import settings
  3. from django.core.exceptions import MultipleObjectsReturned, ImproperlyConfigured
  4. from django.db.models.query_utils import Q
  5. def get_placeholder_conf(setting, placeholder, template=None, default=None):
  6. """
  7. Returns the placeholder configuration for a given setting. The key would for
  8. example be 'plugins' or 'name'.
  9. If a template is given, it will try
  10. CMS_PLACEHOLDER_CONF['template placeholder'] and
  11. CMS_PLACEHOLDER_CONF['placeholder'], if no template is given only the latter
  12. is checked.
  13. """
  14. if placeholder:
  15. keys = []
  16. if template:
  17. keys.append("%s %s" % (template, placeholder))
  18. keys.append(placeholder)
  19. for key in keys:
  20. conf = settings.CMS_PLACEHOLDER_CONF.get(key)
  21. if not conf:
  22. continue
  23. value = conf.get(setting)
  24. if value:
  25. return value
  26. return default
  27. def get_page_from_placeholder_if_exists(placeholder):
  28. import warnings
  29. warnings.warn(
  30. "The get_page_from_placeholder_if_exists function is deprecated. Use placeholder.page instead",
  31. DeprecationWarning
  32. )
  33. return placeholder.page if placeholder else None
  34. def validate_placeholder_name(name):
  35. try:
  36. name.decode('ascii')
  37. except (UnicodeDecodeError, UnicodeEncodeError):
  38. raise ImproperlyConfigured("Placeholder identifiers names may not "
  39. "contain non-ascii characters. If you wish your placeholder "
  40. "identifiers to contain non-ascii characters when displayed to "
  41. "users, please use the CMS_PLACEHOLDER_CONF setting with the 'name' "
  42. "key to specify a verbose name.")
  43. class PlaceholderNoAction(object):
  44. can_copy = False
  45. def copy(self, **kwargs):
  46. return False
  47. def get_copy_languages(self, **kwargs):
  48. return []
  49. class MLNGPlaceholderActions(PlaceholderNoAction):
  50. can_copy = True
  51. def copy(self, target_placeholder, source_language, fieldname, model, target_language, **kwargs):
  52. trgt = model.objects.get(**{fieldname: target_placeholder})
  53. src = model.objects.get(master=trgt.master, language_code=source_language)
  54. source_placeholder = getattr(src, fieldname, None)
  55. if not source_placeholder:
  56. return False
  57. plugins = source_placeholder.get_plugins_list()
  58. ptree = []
  59. new_plugins = []
  60. for p in plugins:
  61. new_plugins.append(p.copy_plugin(target_placeholder, target_language, ptree))
  62. return new_plugins
  63. def get_copy_languages(self, placeholder, model, fieldname, **kwargs):
  64. manager = model.objects
  65. src = manager.get(**{fieldname: placeholder})
  66. query = Q(master=src.master)
  67. query &= Q(**{'%s__cmsplugin__isnull' % fieldname: False})
  68. query &= ~Q(pk=src.pk)
  69. language_codes = manager.filter(query).values_list('language_code', flat=True).distinct()
  70. return [(lc, dict(settings.LANGUAGES)[lc]) for lc in language_codes]