+ return HttpResponse(content=data, mimetype=mimetype)
+
+
+class MenuItem(dict):
+ current_path = ''
+
+ def __init__(self, *args, **kwargs):
+ super(MenuItem, self).__init__(*args, **kwargs)
+ if kwargs.get('url') or kwargs.get('submenu'):
+ self.__set_is_active__()
+
+ def __setitem__(self, key, value):
+ super(MenuItem, self).__setitem__(key, value)
+ if key in ('url', 'submenu'):
+ self.__set_is_active__()
+
+ def __set_is_active__(self):
+ if self.get('is_active'):
+ return
+ if self.current_path == self.get('url'):
+ self.__setitem__('is_active', True)
+ else:
+ submenu = self.get('submenu', ())
+ current = (i for i in submenu if i.get('url') == self.current_path)
+ try:
+ current_node = current.next()
+ if not current_node.get('is_active'):
+ current_node.__setitem__('is_active', True)
+ self.__setitem__('is_active', True)
+ except StopIteration:
+ return
+
+ def __setattribute__(self, name, value):
+ super(MenuItem, self).__setattribute__(name, value)
+ if name == 'current_path':
+ self.__set_is_active__()