cms.apphook_pool: 56 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/apphook_pool.py

Stats: 0 executed, 49 missed, 7 excluded, 14 ignored

  1. # -*- coding: utf-8 -*-
  2. from cms.exceptions import AppAlreadyRegistered
  3. from cms.utils.django_load import load, iterload_objects
  4. from django.conf import settings
  5. from django.core.exceptions import ImproperlyConfigured
  6. import warnings
  7. class ApphookPool(object):
  8. def __init__(self):
  9. self.apps = {}
  10. self.discovered = False
  11. self.block_register = False
  12. def discover_apps(self):
  13. if self.discovered:
  14. return
  15. #import all the modules
  16. if settings.CMS_APPHOOKS:
  17. self.block_register = True
  18. for cls in iterload_objects(settings.CMS_APPHOOKS):
  19. self.block_register = False
  20. self.register(cls)
  21. self.block_register = True
  22. self.block_register = False
  23. else:
  24. load('cms_app')
  25. self.discovered = True
  26. def clear(self):
  27. self.apps = {}
  28. self.discovered = False
  29. def register(self, app):
  30. if self.block_register:
  31. return
  32. from cms.app_base import CMSApp
  33. # validate the app
  34. if not issubclass(app, CMSApp):
  35. raise ImproperlyConfigured('CMS Apps must inherit '
  36. 'cms.app_base.CMSApp, %r does not' % app)
  37. if hasattr(app, 'menu') and not app.menus:
  38. warnings.warn("You define a 'menu' attribute on your CMS App %r, "
  39. "but the 'menus' attribute is empty, did you make a typo?")
  40. name = app.__name__
  41. if name in self.apps.keys():
  42. raise AppAlreadyRegistered, "[%s] an cms app with this name is already registered" % name
  43. self.apps[name] = app
  44. def get_apphooks(self):
  45. self.discover_apps()
  46. hooks = []
  47. for app_name in self.apps.keys():
  48. app = self.apps[app_name]
  49. hooks.append((app_name, app.name))
  50. # Unfortunately, we loose the ordering since we now have a list of tuples. Let's reorder by app_name:
  51. hooks = sorted(hooks, key=lambda hook: hook[1])
  52. return hooks
  53. def get_apphook(self, app_name):
  54. self.discover_apps()
  55. try:
  56. return self.apps[app_name]
  57. except KeyError:
  58. # deprecated: return apphooks registered in db with urlconf name instead of apphook class name
  59. for app in self.apps.values():
  60. if app_name in app.urls:
  61. return app
  62. raise ImproperlyConfigured('No registered apphook `%s` found.' % app_name)
  63. apphook_pool = ApphookPool()