Ver código fonte

Squashed 'google_api/' changes from 744edfe..3e21126

3e21126 fix: Add Shared Drive parameters to move_folder method to resolve 404 errors in Shared Drives

git-subtree-dir: google_api
git-subtree-split: 3e2112652e2924854e54690466837d5738451d26
root 5 meses atrás
pai
commit
8e98e5197c
1 arquivos alterados com 41 adições e 19 exclusões
  1. 41 19
      models/google_drive_service.py

+ 41 - 19
models/google_drive_service.py

@@ -364,9 +364,11 @@ class GoogleDriveService(models.AbstractModel):
             
             for level in range(max_levels):
                 try:
-                    response = self._do_request(f'/drive/v3/files/{current_id}', {
-                        'fields': 'id,name,parents'
-                    })
+                    # Use Shared Drive parameters to handle both regular and shared drive folders
+                    params = self._build_shared_drive_params()
+                    params['fields'] = 'id,name,parents'
+                    
+                    response = self._do_request(f'/drive/v3/files/{current_id}', params)
                     
                     folder_info = {
                         'id': response.get('id'),
@@ -382,8 +384,16 @@ class GoogleDriveService(models.AbstractModel):
                     
                     current_id = parent_ids[0]
                     
+                except UserError as e:
+                    # Handle 404 errors gracefully - folder might not exist or be accessible
+                    if '404' in str(e):
+                        _logger.warning(f"Folder {current_id} not found or not accessible at level {level}")
+                        break
+                    else:
+                        _logger.error(f"Error navigating folder hierarchy at level {level}: {str(e)}")
+                        break
                 except Exception as e:
-                    _logger.error(f"Error navigating folder hierarchy at level {level}: {str(e)}")
+                    _logger.error(f"Unexpected error navigating folder hierarchy at level {level}: {str(e)}")
                     break
             
             return hierarchy
@@ -417,8 +427,16 @@ class GoogleDriveService(models.AbstractModel):
             
             return matching_folders
             
+        except UserError as e:
+            # Handle access errors gracefully
+            if '404' in str(e) or '403' in str(e):
+                _logger.warning(f"Cannot access parent folder {parent_id}: {str(e)}")
+                return []
+            else:
+                _logger.error(f"Error finding folders by name: {str(e)}")
+                return []
         except Exception as e:
-            _logger.error(f"Error finding folders by name: {str(e)}")
+            _logger.error(f"Unexpected error finding folders by name: {str(e)}")
             return []
 
     def get_folder_info(self, folder_id):
@@ -428,9 +446,11 @@ class GoogleDriveService(models.AbstractModel):
             if not validation.get('valid'):
                 return None
             
-            response = self._do_request(f'/drive/v3/files/{folder_id}', {
-                'fields': 'id,name,parents,createdTime,modifiedTime,mimeType'
-            })
+            # Use Shared Drive parameters to handle both regular and shared drive folders
+            params = self._build_shared_drive_params()
+            params['fields'] = 'id,name,parents,createdTime,modifiedTime,mimeType'
+            
+            response = self._do_request(f'/drive/v3/files/{folder_id}', params)
             
             return response
             
@@ -469,12 +489,14 @@ class GoogleDriveService(models.AbstractModel):
             }
 
     def move_folder(self, folder_id, new_parent_id):
-        """Move a folder to a new parent"""
+        """Move a folder to a new parent with Shared Drive support"""
         try:
-            # Get current folder info
-            response = self._do_request(f'/drive/v3/files/{folder_id}', {
-                'fields': 'parents'
-            })
+            # Build Shared Drive parameters
+            params = self._build_shared_drive_params()
+            params['fields'] = 'parents'
+            
+            # Get current folder info with Shared Drive support
+            response = self._do_request(f'/drive/v3/files/{folder_id}', params)
             
             current_parents = response.get('parents', [])
             
@@ -484,18 +506,18 @@ class GoogleDriveService(models.AbstractModel):
                     'error': 'Folder has no current parent'
                 }
             
-            # Use PATCH to update the parents
-            update_data = {
+            # Use PATCH to update the parents with Shared Drive support
+            update_params = self._build_shared_drive_params()
+            update_params.update({
                 'addParents': new_parent_id,
                 'removeParents': current_parents[0]
-            }
+            })
             
             # Update the file with new parent
             update_response = self._do_request(
                 f'/drive/v3/files/{folder_id}',
-                update_data,
-                method='PATCH',
-                json_data=update_data
+                update_params,
+                method='PATCH'
             )
             
             return {