code: def menu(menu_config=None, **kwargs):
      
      request = kwargs.pop("request", None)
      user = kwargs.pop("user", None)
      url_full_name = ":".join(
          [request.resolver_match.namespace, request.resolver_match.url_name]
      )
  
      if not menu_config:
          menu_config = settings.ARCTIC_MENU
  
      menu_dict = OrderedDict()
      for menu_entry in menu_config:
          if type(menu_entry) in (list, tuple):
  
              # check permission based on named_url
              path = None
              if menu_entry[1]:
                  if not view_from_url(menu_entry[1]).has_permission(user):
                      continue
  
                  path = reverse(menu_entry[1])
              # icons and collapse are optional
              icon = None
              if (len(menu_entry) >= 3) and (
                  not type(menu_entry[2]) in (list, tuple)
              ):
                  icon = menu_entry[2]
              active_weight = len(path) if path else 0
              menu_dict[menu_entry[0]] = {
                  "url": menu_entry[1],
                  "icon": icon,
                  "submenu": None,
                  "active": is_active(menu_entry, url_full_name),
                  "active_weight": active_weight,
              }
  
              # check if the last item in a menu entry is a submenu
              submenu = _get_submenu(menu_entry)
              if submenu:
                  menu_dict[menu_entry[0]]["submenu"] = menu(
                      submenu, user=user, request=request
                  )
      return menu_clean(menu_dict)
docs: Tranforms a menu definition into a dictionary which is a frendlier format
      to parse in a template.