Create files with fake data. In many formats. With no efforts.
All of core dependencies of this package are MIT licensed. Most of optional dependencies of this package are MIT licensed, while a few are BSD-, Apache 2- or GPLv3 licensed. All licenses are mentioned below between the brackets.
- Core package requires Python 3.7, 3.8, 3.9, 3.10 or 3.11.
Faker
(MIT) is the only required dependency.Django
(BSD) integration withfactory_boy
(MIT) has been tested withDjango
2.2, 3.0, 3.1, 3.2, 4.0 and 4.1.DOCX
file support requirespython-docx
(MIT).EPUB
file support requiresxml2epub
(MIT) andjinja2
(BSD).ICO
,JPEG
,PNG
,SVG
andWEBP
files support requiresimgkit
(MIT).MP3
file support requiresgtts
(MIT) oredge-tts
(GPLv3).PDF
file support requirespdfkit
(MIT).PPTX
file support requirespython-pptx
(MIT).ODP
file support requiresodfpy
(Apache 2).ODS
file support requirestablib
(MIT) andodfpy
(Apache 2).ODT
file support requiresodfpy
(Apache 2).XLSX
file support requirestablib
(MIT) andopenpyxl
(MIT).PathyFileSystemStorage
storage support requirespathy
(Apache 2).AWSS3Storage
storage support requirespathy
(Apache 2) andboto3
(Apache 2).AzureCloudStorage
storage support requirespathy
(Apache 2) andazure-storage-blob
(MIT).GoogleCloudStorage
storage support requirespathy
(Apache 2) andgoogle-cloud-storage
(Apache 2).AugmentFileFromDirProvider
provider requiresnlpaug
(MIT),torch
(BSD),transformers
(Apache 2),numpy
(BSD),pandas
(BSD) andtika
(Apache 2).
- Documentation is available on Read the Docs.
- For bootstrapping check the Quick start.
- For various ready to use code examples see the Recipes.
WIth all dependencies
pip install faker-file[all]
Only core
pip install faker-file
With most common dependencies
Everything, except ML libraries which are required for data augmentation only
pip install faker-file[common]
With DOCX support
pip install faker-file[docx]
With EPUB support
pip install faker-file[epub]
With images support
pip install faker-file[images]
With MP3 support
pip install faker-file[mp3]
With XLSX support
pip install faker-file[xlsx]
With ODS support
pip install faker-file[ods]
With ODT support
pip install faker-file[odt]
With data augmentation support
pip install faker-file[data-augmentation]
pip install https://github.com/barseghyanartur/faker-file/archive/main.tar.gz
BIN
CSV
DOCX
EML
EPUB
ICO
JPEG
MP3
ODS
ODT
ODP
PDF
PNG
RTF
PPTX
SVG
TAR
TXT
WEBP
XLSX
ZIP
AugmentFileFromDirProvider
: Make an augmented copy of randomly picked file from given directory. The following types are supported :DOCX
,EML
,EPUB
,ODT
,PDF
,RTF
andTXT
.RandomFileFromDirProvider
: Pick a random file from given directory.
- Native file system storage
- AWS S3 storage
- Azure Cloud Storage
- Google Cloud Storage
One way
from faker import Faker
from faker_file.providers.txt_file import TxtFileProvider
FAKER = Faker()
file = TxtFileProvider(FAKER).txt_file()
Or another
from faker import Faker
from faker_file.providers.txt_file import TxtFileProvider
FAKER = Faker()
FAKER.add_provider(TxtFileProvider)
file = FAKER.txt_file()
from django.db import models
class Upload(models.Model):
# ...
file = models.FileField()
Note, that when using faker-file
with Django
and native file system
storages, you need to pass your MEDIA_ROOT
setting as root_path
value
to the chosen file storage as show below.
import factory
from django.conf import settings
from factory import Faker
from factory.django import DjangoModelFactory
from faker_file.providers.docx_file import DocxFileProvider
from faker_file.storages.filesystem import FileSystemStorage
from upload.models import Upload
FS_STORAGE = FileSystemStorage(
root_path=settings.MEDIA_ROOT,
rel_path="tmp"
)
factory.Faker.add_provider(DocxFileProvider)
class UploadFactory(DjangoModelFactory):
# ...
file = Faker("docx_file", storage=FS_STORAGE)
class Meta:
model = Upload
All file operations are delegated to a separate abstraction layer of storages.
The following storages are implemented:
FileSystemStorage
: Does not have additional requirements.PathyFileSystemStorage
: Requirespathy
.AzureCloudStorage
: Requirespathy
and Azure related dependencies.GoogleCloudStorage
: Requirespathy
and Google Cloud related dependencies.AWSS3Storage
: Requirespathy
and AWS S3 related dependencies.
Native file system storage. Does not have dependencies.
import tempfile
from faker import Faker
from faker_file.providers.txt_file import TxtFileProvider
from faker_file.storages.filesystem import FileSystemStorage
FS_STORAGE = FileSystemStorage(
root_path=tempfile.gettempdir(), # Use settings.MEDIA_ROOT for Django
rel_path="tmp",
)
FAKER = Faker()
file = TxtFileProvider(FAKER).txt_file(storage=FS_STORAGE)
FS_STORAGE.exists(file)
Native file system storage. Requires pathy
.
import tempfile
from pathy import use_fs
from faker import Faker
from faker_file.providers.txt_file import TxtFileProvider
from faker_file.storages.cloud import PathyFileSystemStorage
use_fs(tempfile.gettempdir())
PATHY_FS_STORAGE = PathyFileSystemStorage(
bucket_name="bucket_name",
root_path="tmp"
rel_path="sub-tmp",
)
FAKER = Faker()
file = TxtFileProvider(FAKER).txt_file(storage=PATHY_FS_STORAGE)
PATHY_FS_STORAGE.exists(file)
AWS S3 storage. Requires pathy
and boto3
.
from faker import Faker
from faker_file.providers.txt_file import TxtFileProvider
from faker_file.storages.aws_s3 import AWSS3Storage
S3_STORAGE = AWSS3Storage(
bucket_name="bucket_name",
root_path="tmp", # Optional
rel_path="sub-tmp", # Optional
# Credentials are optional too. If your AWS credentials are properly
# set in the ~/.aws/credentials, you don't need to send them
# explicitly.
credentials={
"key_id": "YOUR KEY ID",
"key_secret": "YOUR KEY SECRET"
},
)
FAKER = Faker()
file = TxtFileProvider(FAKER).txt_file(storage=S3_STORAGE)
S3_STORAGE.exists(file)
Simply type:
pytest -vrx
Or use tox:
tox
Or use tox to check specific env:
tox -e py310-django41
Keep the following hierarchy.
=====
title
=====
header
======
sub-header
----------
sub-sub-header
~~~~~~~~~~~~~~
sub-sub-sub-header
^^^^^^^^^^^^^^^^^^
sub-sub-sub-sub-header
++++++++++++++++++++++
sub-sub-sub-sub-sub-header
**************************
MIT
For security issues contact me at the e-mail given in the Author section.
For overall issues, go to GitHub.
Artur Barseghyan <artur.barseghyan@gmail.com>