Creating archives
Creating archives for testing could be a challenging job. The goal of this library is to help you out with basic tasks. You can easily generate ZIP and TAR archives with 100 of files inside (supported by this package) or even generate EML files (which are also considered archives, since they do hold attachments).
If you don’t like the quality of the generated files and want to have more control over the content of the files, check the faker-file package, which offers similar functionality but can produce complex documents with almost no limitation of the content.
Supported image formats
Currently, 3 formats are supported:
ZIP
TAR
EML
ZIP
Creating a simple ZIP archive as bytes is as simple as follows:
from fake import FAKER
FAKER.zip()
The generated ZIP archive will consist of a single TXT
with little text.
All customisation options are passed through the options
optional argument,
which is a (nested) dictionary with the following keys:
count
(int
):create_inner_file_func
(callable
):create_inner_file_args
(dict[str, Any]
):directory
(str
):
To customise the number of files in the archive, use the count
key of
the options
argument:
from fake import FAKER
FAKER.zip(options={"count": 5})
This will create a ZIP
archive with 5 TXT
files.
To customise the type of files in the archive, use
the create_inner_file_func
key of the options
argument:
from fake import FAKER, create_inner_docx_file
FAKER.zip(
options={
"create_inner_file_func": create_inner_docx_file,
}
)
This will create a ZIP
archive with a single DOCX
file.
All arguments of the create_inner_file_func
are passed in
the create_inner_file_args
argument:
from fake import FAKER, create_inner_docx_file
FAKER.zip(
options={
"create_inner_file_func": create_inner_docx_file,
"create_inner_file_args": {
"texts": ["There", "are", "no", "limits"],
}
}
)
This will create a ZIP
archive with single DOCX
file of 4 pages, where
each of the given words (“There”, “are”, “no”, “limits”) would occupy a single
page.
There’s no depth in terms of nesting:
from fake import (
FAKER,
create_inner_zip_file,
create_inner_docx_file,
)
FAKER.zip(
options={
"count": 3,
"create_inner_file_func": create_inner_zip_file,
"create_inner_file_args": {
"options": {
"count": 5,
"create_inner_file_func": create_inner_docx_file,
"create_inner_file_args": {
"nb_pages": 100,
}
}
}
}
)
This will create a nested ZIP
archive with 3 ZIP
archives in it,
each having 5 DOCX
files of 100 pages each.
If you need consistent structure of mixed file types, see this:
from fake import (
FAKER,
create_inner_docx_file,
create_inner_txt_file,
list_create_inner_file,
)
FAKER.zip(
options={
"create_inner_file_func": list_create_inner_file,
"create_inner_file_args": {
"func_list": [
(
create_inner_docx_file,
{"basename": "doc"},
),
(
create_inner_txt_file,
{"basename": "doc_metadata"},
),
(
create_inner_txt_file,
{"basename": "doc_isbn"},
),
],
},
}
)
This will create a ZIP
archive with 1 DOCX
file
named doc.docx and 2 TXT
files named doc_metadata.txt
and doc_isbn.txt.
If you need a file on a disk, instead of bytes, use FAKER.zip_file
instead.
from fake import FAKER
FAKER.zip_file()
All customisation options of zip
are also applicable to zip_file
.
from fake import (
FAKER,
create_inner_docx_file,
create_inner_txt_file,
list_create_inner_file,
)
FAKER.zip(
options={
"create_inner_file_func": list_create_inner_file,
"create_inner_file_args": {
"func_list": [
(
create_inner_docx_file,
{"basename": "doc"},
),
(
create_inner_txt_file,
{"basename": "doc_metadata"},
),
(
create_inner_txt_file,
{"basename": "doc_isbn"},
),
],
},
}
)
TAR
Works very similar to ZIP. Use FAKER.tar
and FAKER.tar_file
instead
of FAKER.zip
and FAKER.zip_file
.
EML
Works very similar to ZIP. Use FAKER.eml
and FAKER.eml_file
instead
of FAKER.zip
and FAKER.zip_file
.
options
: (Optional) options. Similar toZIP
options.content
: (Optional) content of the email file.subject
: (Optional) subject of the email file.
Creating a simple EML archive as bytes is as simple as follows:
from fake import FAKER
FAKER.eml()
This will create a EML
archive with 1 DOCX
file
named doc.docx and 2 TXT
files named doc_metadata.txt
and doc_isbn.txt.
from fake import (
FAKER,
create_inner_docx_file,
create_inner_txt_file,
list_create_inner_file,
)
FAKER.eml(
options={
"create_inner_file_func": list_create_inner_file,
"create_inner_file_args": {
"func_list": [
(
create_inner_docx_file,
{"basename": "doc"},
),
(
create_inner_txt_file,
{"basename": "doc_metadata"},
),
(
create_inner_txt_file,
{"basename": "doc_isbn"},
),
],
},
}
)
Using text templates:
from fake import FAKER, StringTemplate
template = """
{date(start_date='-7d')}
{name}
{sentence(nb_words=2, suffix='')} {pyint(min_value=1, max_value=99)}
{randomise_string(value='#### ??', digits='123456789')} {city}
Dear friend,
{text(nb_chars=1000, allow_overflow=True)}
Sincerely yours,
{name}
{email}
{domain_name}
"""
# EML file
eml_file = FAKER.eml_file(content=StringTemplate(template))