      If the raise_exception parameter is given the PermissionDenied exception
      is raised.
      """
      def check_perms(user):
          if isinstance(perm, six.string_types):
              perms = (perm, )
          else:
              perms = perm
          # First check if the user has the permission (even anon users)
          if user.has_perms(perms):
 
</s> remove         if isinstance(self.permission_required, six.string_types):
 </s> add         if isinstance(self.permission_required, str): </s> remove     if isinstance(data_source, six.string_types):
 </s> add     if isinstance(data_source, str): </s> remove                             if hasattr(field_value, '__iter__') and not isinstance(field_value, six.text_type):
 </s> add                             if hasattr(field_value, '__iter__') and not isinstance(field_value, str): </s> remove             # Class names must be ASCII in Python 2.x, so we forcibly coerce it
            # here to break early if there's a problem.
            to = str(to)
 </s> add  </s> remove             if isinstance(self.force_bytes, six.string_types):
 </s> add             if isinstance(self.force_bytes, str):
        if isinstance(perm, str):
      If the raise_exception parameter is given the PermissionDenied exception
      is raised.
      """
      def check_perms(user):
        if isinstance(perm, str):
              perms = (perm, )
          else:
              perms = perm
          # First check if the user has the permission (even anon users)
          if user.has_perms(perms):
keep keep keep keep replace keep keep keep keep keep
 Refs #23919 -- Removed six.<various>_types usage

Thanks Tim Graham and Simon Charette for the reviews. 
django/contrib/auth/decorators.py