Creating files

Creation of specific file formats is extensively covered in dedicated sections:

This section covers basic concepts of file generation within fake.py.

Basics

It’s possible to generate either in-memory byte content or actual files on the file system.

  • When generating bytes, the returned value is BytesValue.

  • When generating files on the file system, the returned value is StringValue.

Both BytesValue and StringValue behave like bytes and str respectively, but have a data (dict) property, which contains useful meta-data about the specific kind of file.

For generated files, it will always have the following:

  • storage: Storage class that was used to generate the file.

  • filename: Absolute file path. It’s important to know that string representation of the file contains a relative file path.


See the example below for a graphic PDF generation:

from fake import FAKER

pdf_file = FAKER.pdf_file()

print(pdf_file)  # Relative path
# tmp/tmpnvwoa2ap.pdf

print(pdf_file.data["filename"])  # Absolute path
# /tmp/tmp/tmpnvwoa2ap.pdf

print(pdf_file.data)  # Meta-data
# {'storage': <fake.FileSystemStorage at 0x7f72221fd750>,
#  'filename': '/tmp/tmp/tmpragc8wyr.pdf',
#  'content': None}

See the example below for a text PDF generation:

from fake import FAKER

pdf_file = FAKER.text_pdf_file()

print(pdf_file)
# tmp/tmpragc8wyr.pdf

print(pdf_file.data["filename"])
# /tmp/tmp/tmpragc8wyr.pdf

print(pdf_file.data)
# {'storage': <fake.FileSystemStorage at 0x7f7222157750>,
#  'filename': '/tmp/tmp/tmpragc8wyr.pdf',
#  'content': 'If dutch beats although complex.'}

Note, that text PDF does contain full text of the entire document in the content key.


Clean up files

FileSystemStorage is the default storage and by default files are stored inside a tmp directory within the system’s temporary directory, which is commonly cleaned up after system restart. However, there’s a mechanism of cleaning up files after the tests run. At any time, to clean up all files created by that moment, call clean_up method of the FileRegistry class instance, as shown below:

from fake import FAKER, FILE_REGISTRY  # Import the file registry

# Create a file
txt_file = FAKER.txt_file()  # type: ``StringValue``
filename = str(txt_file)  # Relative path to the file
storage = txt_file.data["storage"]  # Storage instance

# File should exist
assert storage.exists(filename)

# Trigger the clean-up
FILE_REGISTRY.clean_up()

# File no longer exists
assert storage.exists(filename) is False

Typically you would call the clean_up method in the tearDown.


To remove a single file, use the remove method of FileRegistry instance. In the example below, the file is removed by providing the StringValue instance:

from fake import FAKER, FILE_REGISTRY

# Create a file
txt_file = FAKER.txt_file()  # type: StringValue
filename = str(txt_file)  # Relative path to the file
storage = txt_file.data["storage"]  # Storage instance

# File should exist
assert storage.exists(filename)

# Remove the file by providing the ``StringValue`` instance
FILE_REGISTRY.remove(txt_file)

# File no longer exists
assert storage.exists(filename) is False

You can also remove by path. In the exampl below, the file is removed by providing the str instance:

from fake import FAKER, FILE_REGISTRY

# Create a file
txt_file = FAKER.txt_file()  # type: StringValue
filename = str(txt_file)  # Relative path to the file
storage = txt_file.data["storage"]  # Storage instance

# File should exist
assert storage.exists(filename)

# Remove the file by providing the ``filename``
FILE_REGISTRY.remove(filename)

# File no longer exist
assert storage.exists(filename) is False

If you only have a path to the file as str instance, you can find the correspondent StringValue instance by searching, using the search method: