Skip to main content

Generate fake data using joke2k's faker and your own schema

Project description

Generate fake data using joke2k’s faker and your own schema.

Installation

pip install faker-schema

Usage

Getting started

from faker_schema.faker_schema import FakerSchema

schema = {'employee_id': 'uuid4', 'employee_name': 'name', 'employee address': 'address','email_address': 'email'}
faker = FakerSchema()
data = faker.generate_fake(schema)
print(data)
# {'employee_id': '956f0cf3-a954-5bff-0aaf-ee0e1b7e1e1b', 'employee_name': 'Adam Wells', 'employee address': '189 Kyle Springs Suite 110\nNorth Robin, OR 73512', 'email_address': 'jmcgee@gmail.com'}

Available Schema Types

This library is dependent on faker for availabble schema types. Faker provides a wide variety of data types via providers. For a list of available providers, checkout Providers and Community Providers

Once you know what types you want to generate your fake data, you can start defining your own schema

Defining your schema

The expected schema is a dictionary, where the keys are field names and the values are the types of the fields. The schema dictionay can have nested dictionaries and lists too.

Loading schemas

faker-schema currently provides two ways of loading your schema:

  • JSON file

  • JSON string

import json

from faker_schema.faker_schema import FakerSchema
from faker_schema.schema_loader import load_json_from_file, load_json_from_string

schema = load_json_from_file('path_to_json_file')
faker = FakerSchema()
data = faker.generate_fake(schema)

# OR

json_string = '{"employee_id"": "uuid4", "employee_name": "name"", "employee address": "address", "email_address": "email"}'

schema = load_json_from_string(json_string)
faker = FakerSchema()
data = faker.generate_fake(schema)

You can define your own way of loading a schema, convert it to a Python dictionary and pass it to the FakerSchema instance. The aim was to de-couple schema loading/generation from fake data generation. If you want to contribute more schema loading techniques, please open a GitHub issue or send a pull request.

Using different locales

The Faker library provides a list of different locales. You can choose your required locale from that list and provid it to the FakerSchema instance

from faker_schema.faker_schema import FakerSchema

schema = {'employee_id': 'uuid4', 'employee_name': 'name', 'employee address': 'address','email_address': 'email'}
faker = FakerSchema(locale='it_IT')
data = faker.generate_fake(schema)
print(data)
# {'employee_id': '47f8bb04-fc05-25c9-73cc-e8a22f29ee4e', 'employee_name': 'Caio Negri', 'employee address': 'Stretto Davis 34\nDamico lido, 54802 Vibo Valentia (TR)', 'email_address': 'nunzia19@libero.it'}

More Schema Examples

Nested Dictionary

from faker_schema.faker_schema import FakerSchema

schema = {'EmployeeInfo': {'ID': 'uuid4', 'Name': 'name', 'Contact': {'Email': 'email', 'Phone Number': 'phone_number'}, 'Location': {'Country Code': 'country_code', 'City': 'city', 'Country': 'country', 'Postal Code': 'postalcode', 'Address': 'street_address'}}}
faker = FakerSchema()
data = faker.generate_fake(schema)
# {'EmployeeInfo': {'ID': '0751f889-0d83-d05f-4eeb-16f575c6b4a3', 'Name': 'Stacey Williams', 'Contact': {'Email': 'jpatterson@yahoo.com', 'Phone Number': '1-077-859-6393'}, 'Location': {'Country Code': 'IE', 'City': 'Dyermouth', 'Country': 'United States Minor Outlying Islands', 'Postal Code': '84239', 'Address': '94806 Joseph Plaza Apt. 783'}}}

Nested List

from faker_schema.faker_schema import FakerSchema

schema = {'Employer': 'name', 'EmployeList': [{'Name': 'name'}, {'Name': 'name'}, {'Name': 'name'}]}
faker = FakerSchema()
data = faker.generate_fake(schema)
# {'Employer': 'Faith Knapp', 'EmployeList': [{'Name': 'Douglas Bailey'}, {'Name': 'Karen Rivera'}, {'Name': 'Linda Vance MD'}]}

Generating a certain number of fake data from given schema

from faker_schema.faker_schema import FakerSchema

schema = {'employee_id': 'uuid4', 'employee_name': 'name', 'employee address': 'address','email_address': 'email'}
faker = FakerSchema()
data = faker.generate_fake(schema, iterations=4)
print(data)
# [{'employee_id': 'e07a7964-9636-bca6-2a58-4a69ac126dc5', 'employee_name': 'Charlene Blankenship', 'employee address': '0431 Edward Mountains Suite 697\nPort Douglas, TX 96239-7277', 'email_address': 'ashley86@yahoo.com'}, {'employee_id': '42b02262-3e0c-cf40-8257-4a0af122dddb', 'employee_name': 'Cheryl Stevens', 'employee address': '48066 Eric Lake\nPhillipshire, MO 57224', 'email_address': 'lisa05@nash.info'}, {'employee_id': '41efbcc4-bb32-9260-b2b3-8fac29782e01', 'employee_name': 'Dennis Campbell', 'employee address': '52418 Diana Mills Suite 590\nEast Mackenzie, HI 16222', 'email_address': 'jennifer39@gmail.com'}, {'employee_id': '80bf12ff-2f3a-6db6-f3a6-14cb50076a46', 'employee_name': 'Jimmy Avery', 'employee address': '6867 Eddie Forest Apt. 735\nBranditon, IL 32717', 'email_address': 'ashley64@griffin.com'}]

BYOP (Bring Your Own Provider)

If you are using a community provider or you created your own provider, you can use those with faker-schema as well. I will use the provider, faker_web as an example.

After installing faker_web,

from faker import Faker
from faker_schema import FakerSchema
from faker_web import WebProvider

fake = Faker()
fake.add_provider(WebProvider)

faker = FakerSchema(faker=fake)
headers_schema = {'Content-Type': 'content_type', 'Server': 'server_token'}
fake_headers = faker.generate_fake(headers_schema)
print(fake_headers)
# {'Content-Type': 'application/json', 'Server': 'Apache/2.0.51 (Ubuntu)'}

Development

Running tests

  • Using make

make test
  • Using nose

    nosetests
  • Using nose with coverage

    nosetests --with-coverage --cover-package=faker_schema --cover-erase -v --cover-html

Running flake8

  • Using make

    make flake8
  • Using flake8

    flake8 --max-line-length 99 faker_schema/ tests/

Author

Usman Ehtesham Gul (ueg1990) - uehtesham90@gmail.com

Contribute

If you want to add any new features, or improve existing one or if you find bugs, please open a GitHub issue or feel free to send a pull request. If you have any questions or need help/mentoring with contributions, feel free to contact me via email

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

faker-schema-0.1.3.tar.gz (5.9 kB view details)

Uploaded Source

File details

Details for the file faker-schema-0.1.3.tar.gz.

File metadata

File hashes

Hashes for faker-schema-0.1.3.tar.gz
Algorithm Hash digest
SHA256 12dc050dd5b04d99c1c4086f9c5b4adce112cec4f595a321b52b0346ff07cc23
MD5 c81461843f05bd03835632b0c4d474e4
BLAKE2b-256 66f57627e75745408b9091d7155e78e6664be39a316fca82902c1e7a6022ad63

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page