implement cmislib browser binding queries

git-svn-id: https://svn.apache.org/repos/asf/chemistry/cmislib/trunk@1595244 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/cmislib/browser/binding.py b/src/cmislib/browser/binding.py
index 44461a7..8d85b93 100644
--- a/src/cmislib/browser/binding.py
+++ b/src/cmislib/browser/binding.py
@@ -1096,7 +1096,7 @@
         """
 
         # build the CMIS query XML that we're going to POST
-        queryUrl = self.getRepositoryUrl() + "?cmisaction=query&q=" + statement
+        queryUrl = self.getRepositoryUrl() + "?cmisaction=query&q=" + quote(statement)
 
         # do the POST
         result = self._cmisClient.binding.post(queryUrl.encode('utf-8'),
@@ -1107,7 +1107,7 @@
                                                **kwargs)
 
         # return the result set
-        return BrowserResultSet(self._cmisClient, self, result)
+        return BrowserResultSet(self._cmisClient, self, result, serializer=ResultsSerializer())
 
 
     def getContentChanges(self, **kwargs):
@@ -2995,6 +2995,18 @@
     return content_type, body
 
 
+class ResultsSerializer(object):
+    def fromJSON(self, client, repo, jsonObj):
+        entries = []
+        for obj in jsonObj['results']:
+            cmisObject = getSpecializedObject(BrowserCmisObject(client,
+                                                                repo,
+                                                                data=obj))
+            entries.append(cmisObject)
+
+        return entries
+
+
 class ChildrenSerializer(object):
     def fromJSON(self, client, repo, jsonObj):
         entries = []
diff --git a/src/cmislib/util.py b/src/cmislib/util.py
index afcac47..d1bbc59 100644
--- a/src/cmislib/util.py
+++ b/src/cmislib/util.py
@@ -101,7 +101,12 @@
             return 0
     elif typeName == 'decimal':
         if value:
-            return float(value)
+            # search result relevance is returning as an arrary of decimals
+            # in the browser binding for some reason
+            if isinstance(value, list):
+                return float(value[0])
+            else:
+                return float(value)
         else:
             return 0.0
     elif typeName == 'datetime':