vaefremov95 commented on code in PR #62321:
URL: https://github.com/apache/airflow/pull/62321#discussion_r2854547626


##########
providers/imap/src/airflow/providers/imap/hooks/imap.py:
##########
@@ -310,11 +317,21 @@ def _correct_path(self, name: str, 
local_output_directory: str) -> str:
             else local_output_directory + "/" + name
         )
 
-    def _create_file(self, name: str, payload: Any, local_output_directory: 
str) -> None:
-        file_path = self._correct_path(name, local_output_directory)
-
-        with open(file_path, "wb") as file:
-            file.write(payload)
+    def _create_file(
+        self, name: str, payload: Any, local_output_directory: str, 
overwrite_file: bool
+    ) -> None:
+        filename, extensions = name.split(".", 1)
+        counter = 1
+        method = "wb" if overwrite_file else "xb"
+        while True:

Review Comment:
   Yes, that's the idea. If overwrite_file is True, loop runs only once, 
otherwise loop until free filename is found.
   
   This was the only solution I could come up with that doesn't duplicate the 
_with open_ block or creates other methods. So, I initialize lightweight 
counter and perform split for sake of elegance, clarity and readability. 
   
   If you are suggesting an alternative approach I'm fine with it. Please let 
me know whether I should keep old solution or implement the new one.
   ```
   if overwrite_file:
     with open(file_path, "wb") as file:
         file.write(payload)
     return
   
   filename, extension = name.rsplit(".", 1)
   counter = 1
   
   while True:
       try:
           with open(file_path, "xb") as file:
               file.write(payload)
           break
       except FileExistsError:
           new_name = f"{filename}_{counter}.{extension}"
           file_path = self._correct_path(new_name, local_output_directory)
           counter += 1
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to