Skip to content

Commit e2502f8

Browse files
committed
Add more methods for saving and reading file data
1 parent 733607a commit e2502f8

File tree

3 files changed

+63
-6
lines changed

3 files changed

+63
-6
lines changed

help_docs/method_summary.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,10 @@ self.save_file_as(file_url, new_file_name, destination_folder=None)
434434

435435
self.save_data_as(data, file_name, destination_folder=None)
436436

437+
self.append_data_to_file(data, file_name, destination_folder=None)
438+
439+
self.get_file_data(file_name, folder=None)
440+
437441
self.get_downloads_folder()
438442

439443
self.get_browser_downloads_folder()

seleniumbase/fixtures/base_case.py

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6453,13 +6453,32 @@ def save_file_as(self, file_url, new_file_name, destination_folder=None):
64536453
)
64546454

64556455
def save_data_as(self, data, file_name, destination_folder=None):
6456-
"""Saves the data specified to a file of the name specified.
6456+
"""Saves the data specified to the file specified.
64576457
If no destination folder is specified, the default one is used.
6458-
(The default [Downloads Folder] = "./downloaded_files")"""
6458+
(The default folder = "./downloaded_files")
6459+
Use "." as the destination folder for the current directory."""
64596460
if not destination_folder:
64606461
destination_folder = constants.Files.DOWNLOADS_FOLDER
64616462
page_utils._save_data_as(data, destination_folder, file_name)
64626463

6464+
def append_data_to_file(self, data, file_name, destination_folder=None):
6465+
"""Appends the data specified to the file specified.
6466+
If no destination folder is specified, the default one is used.
6467+
(The default folder = "./downloaded_files")
6468+
Use "." as the folder for the current directory."""
6469+
if not destination_folder:
6470+
destination_folder = constants.Files.DOWNLOADS_FOLDER
6471+
page_utils._append_data_to_file(data, destination_folder, file_name)
6472+
6473+
def get_file_data(self, file_name, folder=None):
6474+
"""Gets the data from the file specified.
6475+
If no folder is specified, the default one is used.
6476+
(The default folder = "./downloaded_files")
6477+
Use "." as the folder for the current directory."""
6478+
if not folder:
6479+
folder = constants.Files.DOWNLOADS_FOLDER
6480+
return page_utils._get_file_data(folder, file_name)
6481+
64636482
def get_downloads_folder(self):
64646483
"""Returns the path of the SeleniumBase "downloaded_files/" folder.
64656484
Calling self.download_file(file_url) will put that file in here.

seleniumbase/fixtures/page_utils.py

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -253,11 +253,45 @@ def _download_file_to(file_url, destination_folder, new_file_name=None):
253253

254254

255255
def _save_data_as(data, destination_folder, file_name):
256-
out_file = codecs.open(
257-
destination_folder + "/" + file_name, "w+", encoding="utf-8"
256+
download_file_lock = fasteners.InterProcessLock(
257+
constants.MultiBrowser.DOWNLOAD_FILE_LOCK
258+
)
259+
with download_file_lock:
260+
out_file = codecs.open(
261+
os.path.join(destination_folder, file_name), "w+", encoding="utf-8"
262+
)
263+
out_file.writelines(data)
264+
out_file.close()
265+
266+
267+
def _append_data_to_file(data, destination_folder, file_name):
268+
download_file_lock = fasteners.InterProcessLock(
269+
constants.MultiBrowser.DOWNLOAD_FILE_LOCK
258270
)
259-
out_file.writelines(data)
260-
out_file.close()
271+
with download_file_lock:
272+
existing_data = ""
273+
if os.path.exists(os.path.join(destination_folder, file_name)):
274+
with open(os.path.join(destination_folder, file_name), "r") as f:
275+
existing_data = f.read()
276+
if not existing_data.split("\n")[-1] == "":
277+
existing_data += "\n"
278+
out_file = codecs.open(
279+
os.path.join(destination_folder, file_name), "w+", encoding="utf-8"
280+
)
281+
out_file.writelines("%s%s" % (existing_data, data))
282+
out_file.close()
283+
284+
285+
def _get_file_data(folder, file_name):
286+
download_file_lock = fasteners.InterProcessLock(
287+
constants.MultiBrowser.DOWNLOAD_FILE_LOCK
288+
)
289+
with download_file_lock:
290+
if not os.path.exists(os.path.join(folder, file_name)):
291+
raise Exception("File not found!")
292+
with open(os.path.join(folder, file_name), "r") as f:
293+
data = f.read()
294+
return data
261295

262296

263297
def make_css_match_first_element_only(selector):

0 commit comments

Comments
 (0)