vaefremov95 commented on code in PR #62321:
URL: https://github.com/apache/airflow/pull/62321#discussion_r2882851979
##########
providers/imap/src/airflow/providers/imap/hooks/imap.py:
##########
@@ -310,11 +318,24 @@ 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:
+ if overwrite_file:
+ method = "wb"
+ else:
+ method = "xb"
+ filename, extension = os.path.splitext(name)
+ counter = 1
+ while True:
+ file_path = self._correct_path(name, local_output_directory)
+ try:
+ with open(file_path, method) as file:
+ file.write(payload)
+ break
+ except FileExistsError:
+ name = f"{filename}_{counter}{extension}"
+ counter += 1
Review Comment:
@kunaljubce
Hi!
Thanks for the review!
The `wb` method never raises FileExistsError. It overwrites file. This error
only raises when open() method set to `xb`.
So, the basic logic here is:
if `overwrite_file=True` then we initialize `method='wb'` and loop runs
only once (after successfull attempt there is a `break`). No infinite loop here.
if `overwrite_file=False`, then we initialize `method='xb'`, split and
counter. Loop runs until free file name is found.
--
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]