menus.utils: 60 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/menus/utils.py

Stats: 0 executed, 58 missed, 2 excluded, 42 ignored

  1. # -*- coding: utf-8 -*-
  2. from cms.models.titlemodels import Title
  3. def mark_descendants(nodes):
  4. for node in nodes:
  5. node.descendant = True
  6. mark_descendants(node.children)
  7. def cut_levels(nodes, level):
  8. """
  9. For cutting the nav_extender levels if you have a from_level in the navigation.
  10. """
  11. result = []
  12. if nodes:
  13. if nodes[0].level == level:
  14. return nodes
  15. for node in nodes:
  16. result += cut_levels(node.children, level)
  17. return result
  18. def find_selected(nodes):
  19. """
  20. Finds a selected nav_extender node
  21. """
  22. for node in nodes:
  23. if hasattr(node, "selected"):
  24. return node
  25. elif hasattr(node, "ancestor"):
  26. result = find_selected(node.children)
  27. if result:
  28. return result
  29. def set_language_changer(request, func):
  30. """
  31. Sets a language chooser function that accepts one parameter: language
  32. The function should return a url in the supplied language
  33. normally you would want to give it the get_absolute_url function with an optional language parameter
  34. example:
  35. def get_absolute_url(self, language=None):
  36. reverse('product_view', args=[self.get_slug(language=language)])
  37. Use this function in your nav extender views that have i18n slugs.
  38. """
  39. request._language_changer = func
  40. def language_changer_decorator(language_changer):
  41. """
  42. A decorator wrapper for set_language_changer.
  43. from menus.utils import language_changer_decorator
  44. @language_changer_decorator(function_get_language_changer_url)
  45. def my_view_function(request, somearg):
  46. pass
  47. """
  48. def _decorator(func):
  49. def _wrapped(request, *args, **kwargs):
  50. set_language_changer(request, language_changer)
  51. return func(request, *args, **kwargs)
  52. _wrapped.__name__ = func.__name__
  53. _wrapped.__doc__ = func.__doc__
  54. return _wrapped
  55. return _decorator
  56. class _SimpleLanguageChanger(object):
  57. def __init__(self, request):
  58. self.request = request
  59. self._app_path = None
  60. @property
  61. def app_path(self):
  62. if self._app_path is None:
  63. page_path = self.get_page_path(self.request.LANGUAGE_CODE)
  64. if page_path:
  65. self._app_path = self.request.path[len(page_path):]
  66. else:
  67. self._app_path = self.request.path
  68. return self._app_path
  69. def __call__(self, lang):
  70. return '%s%s' % (self.get_page_path(lang), self.app_path)
  71. def get_page_path(self, lang):
  72. if getattr(self.request, 'current_page', None):
  73. try:
  74. return self.request.current_page.get_absolute_url(language=lang, fallback=False)
  75. except Title.DoesNotExist:
  76. return self.request.current_page.get_absolute_url(language=lang, fallback=True)
  77. else:
  78. return ''
  79. def simple_language_changer(func):
  80. def _wrapped(request, *args, **kwargs):
  81. set_language_changer(request, _SimpleLanguageChanger(request))
  82. return func(request, *args, **kwargs)
  83. _wrapped.__name__ = func.__name__
  84. _wrapped.__doc__ = func.__doc__
  85. return _wrapped