sites.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. class Site(object):
  2. """
  3. Misago user sites controller
  4. Allows for adding custom views to User CP, Users Lists and User Profile
  5. """
  6. def __init__(self, name):
  7. self._finalized = False
  8. self.name = name
  9. self._unsorted_list = []
  10. self._sorted_list = []
  11. def assert_site_is_finalized(self):
  12. if not self._finalized:
  13. self._finalized = True
  14. self.finalize_site()
  15. def finalize_site(self):
  16. iterations = 0
  17. while self._unsorted_list:
  18. iterations += 1
  19. if iterations > 512:
  20. message = ("%s site hierarchy is invalid or too complex "
  21. "to resolve. pages left: %s" % self._unsorted_list)
  22. raise ValueError(message)
  23. for index, page in enumerate(self._unsorted_list):
  24. pass
  25. def add_page(self, link, name, icon=None, after=None, before=None):
  26. if self._finalized:
  27. message = ("%s site was initialized already and no longer "
  28. "accepts new pages")
  29. raise RuntimeError(message % self.name)
  30. self._sorted_list.append({
  31. 'link': link,
  32. 'name': name,
  33. 'icon': icon,
  34. 'after': after,
  35. 'before': before,
  36. })
  37. usercp_actions = Site('usercp')
  38. users_list_tabs = Site('users list')
  39. user_profile_tabs = Site('user profile')