You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@chemistry.apache.org by "Jeff Potts (JIRA)" <ji...@apache.org> on 2017/08/31 14:51:01 UTC

[jira] [Closed] (CMIS-995) UnicodeEncodeError when calling urlencode method with a dict that contains accented characters

     [ https://issues.apache.org/jira/browse/CMIS-995?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Jeff Potts closed CMIS-995.
---------------------------

> UnicodeEncodeError when calling urlencode method with a dict that contains accented characters
> ----------------------------------------------------------------------------------------------
>
>                 Key: CMIS-995
>                 URL: https://issues.apache.org/jira/browse/CMIS-995
>             Project: Chemistry
>          Issue Type: Bug
>          Components: python-cmislib
>         Environment: Linux, python 2.7x, Alfresco 5.0.x, cmislib dev
>            Reporter: Laurent Mignon
>            Assignee: Jeff Potts
>             Fix For: cmislib 0.6.0
>
>
> {code}
> diff --git a/src/cmislib/browser/binding.py b/src/cmislib/browser/binding.py
> index 800223c..0371cba 100644
> --- a/src/cmislib/browser/binding.py
> +++ b/src/cmislib/browser/binding.py
> @@ -364,7 +364,7 @@ class BrowserCmisObject(object):
>  
>          # invoke the URL
>          result = self._cmisClient.binding.post(updateUrl.encode('utf-8'),
> -                                               urlencode(props),
> +                                               safe_urlencode(props),
>                                                 'application/x-www-form-urlencoded',
>                                                 self._cmisClient.username,
>                                                 self._cmisClient.password)
> @@ -393,7 +393,7 @@ class BrowserCmisObject(object):
>  
>          # invoke the URL
>          self._cmisClient.binding.post(moveUrl.encode('utf-8'),
> -                                      urlencode(props),
> +                                      safe_urlencode(props),
>                                        'application/x-www-form-urlencoded',
>                                        self._cmisClient.username,
>                                        self._cmisClient.password)
> @@ -421,7 +421,7 @@ class BrowserCmisObject(object):
>  
>          # invoke the URL
>          self._cmisClient.binding.post(delUrl.encode('utf-8'),
> -                                      urlencode(props),
> +                                      safe_urlencode(props),
>                                        'application/x-www-form-urlencoded',
>                                        self._cmisClient.username,
>                                        self._cmisClient.password,
> @@ -1655,7 +1655,7 @@ class BrowserDocument(BrowserCmisObject):
>  
>          # invoke the URL
>          result = self._cmisClient.binding.post(coUrl.encode('utf-8'),
> -                                               urlencode(props),
> +                                               safe_urlencode(props),
>                                                 'application/x-www-form-urlencoded',
>                                                 self._cmisClient.username,
>                                                 self._cmisClient.password)
> @@ -1682,7 +1682,7 @@ class BrowserDocument(BrowserCmisObject):
>  
>          # invoke the URL
>          self._cmisClient.binding.post(coUrl.encode('utf-8'),
> -                                      urlencode(props),
> +                                      safe_urlencode(props),
>                                        'application/x-www-form-urlencoded',
>                                        self._cmisClient.username,
>                                        self._cmisClient.password)
> @@ -1933,7 +1933,7 @@ class BrowserDocument(BrowserCmisObject):
>  
>          # invoke the URL
>          self._cmisClient.binding.post(delUrl.encode('utf-8'),
> -                                      urlencode(props),
> +                                      safe_urlencode(props),
>                                        'application/x-www-form-urlencoded',
>                                        self._cmisClient.username,
>                                        self._cmisClient.password)
> @@ -2051,7 +2051,7 @@ class BrowserFolder(BrowserCmisObject):
>  
>          # invoke the URL
>          result = self._cmisClient.binding.post(createFolderUrl.encode('utf-8'),
> -                                               urlencode(props),
> +                                               safe_urlencode(props),
>                                                 'application/x-www-form-urlencoded',
>                                                 self._cmisClient.username,
>                                                 self._cmisClient.password,
> @@ -2269,7 +2269,7 @@ class BrowserFolder(BrowserCmisObject):
>  
>          # invoke the URL
>          self._cmisClient.binding.post(delUrl.encode('utf-8'),
> -                                      urlencode(props),
> +                                      safe_urlencode(props),
>                                        'application/x-www-form-urlencoded',
>                                        self._cmisClient.username,
>                                        self._cmisClient.password,
> @@ -2309,7 +2309,7 @@ class BrowserFolder(BrowserCmisObject):
>  
>          # invoke the URL
>          result = self._cmisClient.binding.post(addUrl.encode('utf-8'),
> -                                               urlencode(props),
> +                                               safe_urlencode(props),
>                                                 'application/x-www-form-urlencoded',
>                                                 self._cmisClient.username,
>                                                 self._cmisClient.password,
> @@ -2332,7 +2332,7 @@ class BrowserFolder(BrowserCmisObject):
>  
>          # invoke the URL
>          result = self._cmisClient.binding.post(remUrl.encode('utf-8'),
> -                                               urlencode(props),
> +                                               safe_urlencode(props),
>                                                 'application/x-www-form-urlencoded',
>                                                 self._cmisClient.username,
>                                                 self._cmisClient.password)
> @@ -3101,6 +3101,23 @@ def encode_multipart_formdata(fields, contentFile, contentType):
>      return content_type, body
>  
>  
> +def safe_urlencode(in_dict):
> +    """ Safe encoding of values taking care of unicode values
> +    urllib.urlencode doesn't like unicode values
> +    """
> +    def encoded_dict(in_dict):
> +        out_dict = {}
> +        for k, v in in_dict.iteritems():
> +            if isinstance(v, unicode):
> +                v = v.encode('utf8')
> +            elif isinstance(v, str):
> +                # Must be encoded in UTF-8
> +                v.decode('utf8')
> +            out_dict[k] = v
> +        return out_dict
> +    return urlencode(encoded_dict(in_dict))
> +
> +
>  class ResultsSerializer(object):
>  
> {code}
> https://github.com/lmignon/python-cmislib/commit/159f0202d7dd012230b31a42ef13ef0d03b46f96?diff=unified



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)