Explorar el Código

[raz][s3] Fix encoding for special chars in directory name listing 1000+ keys (#3677)

- If a directory has 1000+ keys, then when listing the objects using the GET request, it also required a marker header to fetch more keys.
- This marker headers needs to be unquoted when sent to RAZ but left unchanged when sent to S3 to have proper access on the path from RAZ side.
Harsh Gupta hace 2 años
padre
commit
5f67c2c519
Se han modificado 1 ficheros con 5 adiciones y 4 borrados
  1. 5 4
      desktop/core/src/desktop/lib/raz/raz_client.py

+ 5 - 4
desktop/core/src/desktop/lib/raz/raz_client.py

@@ -256,11 +256,12 @@ class RazClient(object):
 
     # In GET operations with non-ascii chars, only the non-ascii part is URL encoded.
     # We need to unquote the path fully before making a signed request for RAZ.
-    if method == 'GET' and 'prefix' in url_params and '%' in url_params['prefix']:
-      if sys.version_info[0] < 3 and isinstance(url_params['prefix'], unicode):
-        url_params['prefix'] = url_params['prefix'].encode()
+    if method == 'GET':
+      if url_params.get('prefix') and '%' in url_params['prefix']:
+        url_params['prefix'] = lib_urlunquote(url_params['prefix'])
 
-      url_params['prefix'] = lib_urlunquote(url_params['prefix'])
+      if url_params.get('marker') and '%' in url_params['marker']:
+        url_params['marker'] = lib_urlunquote(url_params['marker'])
 
     allparams = [raz_signer.StringListStringMapProto(key=key, value=[val]) for key, val in url_params.items()]
     allparams.extend([raz_signer.StringListStringMapProto(key=key, value=[val]) for key, val in params.items()])