@@ -140,24 +140,44 @@ def listar_pastas(self, pasta_pai: Folder | str):
140
140
return folders
141
141
142
142
@handle_sharepoint_errors ()
143
- def criar_pasta (self , pasta_pai : Folder | str , nome_nova_pasta : str ):
144
- """Cria uma nova pasta se ela ainda não existir."""
143
+ def criar_pasta (self , pasta_pai : Folder | str , nome_pasta : str ):
144
+ """
145
+ Cria uma nova pasta no Sharepoint, suportando criação de subpastas com "/"
146
+
147
+ Args:
148
+ pasta_pai: Caminho ou objeto Folder onde a nova pasta será criada
149
+ nome_pasta: Nome da nova pasta a ser criada, pode incluir "/" para criar subpastas
150
+
151
+ Returns:
152
+ O objeto da pasta criada
153
+
154
+ Raises:
155
+ Exception: Se a pasta pai não for encontrada
156
+ """
145
157
if isinstance (pasta_pai , str ):
146
158
pasta = self .obter_pasta (pasta_pai )
147
159
if pasta is None :
148
- raise FileNotFoundError (f"A pasta pai ' { pasta_pai } ' não foi encontrada. " )
160
+ raise Exception (f"Pasta { pasta_pai } não encontrada" )
149
161
pasta_pai = pasta
150
162
151
- # Verifica se a pasta já existe para evitar erro
152
- pastas_existentes = self .listar_pastas (pasta_pai )
153
- for p in pastas_existentes :
154
- if p .name == nome_nova_pasta :
155
- print (f"Pasta '{ nome_nova_pasta } ' já existe." )
156
- return p
163
+ if "/" in nome_pasta :
164
+ path_parts = nome_pasta .split ("/" )
165
+ current_folder = pasta_pai
157
166
158
- print (f"Criando pasta '{ nome_nova_pasta } '..." )
159
- nova_pasta = pasta_pai .folders .add (nome_nova_pasta ).execute_query ()
160
- return nova_pasta
167
+ for part in path_parts :
168
+ if part :
169
+ current_folder = self .criar_pasta (current_folder , part )
170
+
171
+ return current_folder
172
+ else :
173
+ subpastas = self .listar_pastas (pasta_pai )
174
+ pasta = next ((subpasta for subpasta in subpastas if nome_pasta in str (subpasta .name )), None )
175
+ if pasta is not None :
176
+ return pasta
177
+ print ("Criando pasta {0}..." .format (nome_pasta ))
178
+ pasta = pasta_pai .folders .add (nome_pasta )
179
+ pasta .execute_query ()
180
+ return pasta
161
181
162
182
@handle_sharepoint_errors ()
163
183
def baixar_arquivo (self , arquivo_sp : File | str , caminho_download : str ):
@@ -207,7 +227,6 @@ def mover_arquivo(self, arquivo_origem: File, pasta_destino: Folder | str):
207
227
208
228
return novo_arquivo
209
229
210
-
211
230
@handle_sharepoint_errors ()
212
231
def copiar_arquivo (self , arquivo_origem : File , pasta_destino : Folder | str ):
213
232
"""Copia um arquivo para outra pasta."""
0 commit comments