Skip to main content

dammy

GitHub top language Documentation Status Travis (.org) Codacy Badge Maintainability PyPI download month PyPI download week PyPI download day

Generate fake/dummy data for any purpose

Table of contents

Introduction

dammy is a powerful and simple tool to generate fake data. You can use it to mock classes, populate databases and and much more. You can check the full documentation here.

Features

  • Generate anything within the set of prebuilt objects (Person names, country names, car manufacturers and models, random dates...)
  • Compose more complex data easily (Full profiles, complete databases, )
  • The possibility to expand the previous set with little to no code
  • Completely intuitive, you will learn to use it in less than 10 minutes
  • Export the generated data to SQL

Example

If you wanted to generate 1000 random people, just define what a person looks like and dammy will handle the rest

from dammy import EntityGenerator
from dammy.functions import cast
from dammy.stdlib import RandomName, RandomString, RandomDateTime, RandomInteger, CountryName

class Person(EntityGenerator):
    first_name = RandomName().upper()
    password = RandomString(5)
    birthday = RandomDateTime(start=datetime(1980, 1, 1), end=datetime(2000, 12, 31), date_format='%d/%m/%Y')
    favorite_number = RandomInteger(0, 10)
    age = cast((datetime.now() - birthday).days / 365.25, int)
    country = CountryName()

# Generate 1000 random people
for i in range(0, 1000):
    print(Person())

Which will output:

{'identifier': 1, 'uid': '9XCha', 'first_name': 'ZAYN', 'blood': 'A+', 'birthday': '24/01/1982', 'favorite_number': 5, 'age': 38, 'country': 'Denmark'}
{'identifier': 2, 'uid': 'bbYbw', 'first_name': 'MALIHA', 'blood': 'AB+', 'birthday': '01/12/1981', 'favorite_number': 1, 'age': 38, 'country': 'Syrian Arab Republic'}
{'identifier': 3, 'uid': 'aGF49', 'first_name': 'ANGEL', 'blood': 'AB+', 'birthday': '18/08/1992', 'favorite_number': 1, 'age': 27, 'country': 'Macedonia, the Former Yugoslav Republic of'}
{'identifier': 4, 'uid': 'Lcr0J', 'first_name': 'REUBEN', 'blood': '0-', 'birthday': '07/11/1997', 'favorite_number': 4, 'age': 22, 'country': 'Dominican Republic'}
{'identifier': 5, 'uid': 'P7mD4', 'first_name': 'MAMADOU', 'blood': 'A+', 'birthday': '02/01/1987', 'favorite_number': 7, 'age': 33, 'country': 'Palau'}
{'identifier': 6, 'uid': 'ykdeL', 'first_name': 'BATSHEVA', 'blood': 'A+', 'birthday': '11/01/1983', 'favorite_number': 5, 'age': 37, 'country': 'Seychelles'}
{'identifier': 7, 'uid': 'h9HjQ', 'first_name': 'JIMENA', 'blood': 'A-', 'birthday': '23/10/1985', 'favorite_number': 0, 'age': 34, 'country': 'China'}
{'identifier': 8, 'uid': 'rjt92', 'first_name': 'YERIK', 'blood': 'AB+', 'birthday': '29/10/1991', 'favorite_number': 5, 'age': 28, 'country': 'Libya'}
{'identifier': 9, 'uid': 'vL0DE', 'first_name': 'YISRAEL', 'blood': 'AB+', 'birthday': '25/03/1989', 'favorite_number': 8, 'age': 30, 'country': 'Spain'}
{'identifier': 10, 'uid': 'CsrhX', 'first_name': 'JOSHUA', 'blood': 'AB+', 'birthday': '20/09/1999', 'favorite_number': 1, 'age': 20, 'country': 'Svalbard and Jan Mayen'}
...

It also supports relationships between tables, so you can generate data to populate databases

from dammy import EntityGenerator
from dammy.db import AutoIncrement, PrimaryKey, ForeignKey
from dammy.stdlib import RandomName, RandomString, RandomDateTime, RandomInteger, CountryName

# Define what a person looks like
class Person(EntityGenerator):
    id_pk = PrimaryKey(id=AutoIncrement())
    first_name = RandomName().upper()
    password = RandomString(5)
    birthday = RandomDateTime(start=datetime(1980, 1, 1), end=datetime(2000, 12, 31), date_format='%d/%m/%Y')
    favorite_number = RandomInteger(0, 10)
    age = cast((datetime.now() - birthday).days / 365.25, int)
    country = CountryName()

# Define what a car looks like
class Car(EntityGenerator):
    id_pk = PrimaryKey(id=AutoIncrement())
    manufacturer_name = CarBrand()
    model = CarModel(car_brand=manufacturer_name)
    owner = ForeignKey(Person, 'identifier')

And the data can be exported to SQL

from dammy import DatasetGenerator

# Generate a dataset with 20000 cars and 94234 people
dataset = DatasetGenerator((Car, 20000), (Person, 94234)).generate()
dataset.get_sql(save_to='cars_with_owners.sql')

Installation

To install the latest stable release of dammy using pip

pip install dammy

You can also install the latest development release by cloning the repository and installing it with pip

git clone https://github.com/ibonn/dammy.git dammy
cd dammy
pip install -e .

Release history

  • 1.1.0

    • Iterators added
  • 1.0.0

    • Semantic versioning used from now on
    • Documentation fixed
    • Minor code changes (duplicated code removed...)
  • 0.1.3

    • Code refactored
    • All binary operations made possible between BaseGenerator objects
    • BaseDammy renamed to BaseGenerator
    • EntityGenerator renamed to OperationResult
    • DammyEntity renamed to EntityGenerator
    • Everything inherits from BaseGenerator
    • Removed DatabaseConstraint
    • Added UNIQUE constraint support
    • Datasets can now be exported to JSON
    • Entities can now be exported to JSON and CSV
    • dammy.stdlib expanded with new built-in generators
  • 0.1.2

    • Documentation improved
    • DatasetGenerator moved from main to db
    • Minor bugs fixed
  • 0.1.1

    • Can get attributes of entities
    • Can call methods on entities
    • Ability to perform operations added
    • Code improved
    • Docstrings added
  • 0.0.3

    • Fixed import bug in stdlib
  • 0.0.1

    • First release

Metadata

Release files for dammy 1.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dammy 1.1.0
File Size Uploaded
dammy-1.1.0.tar.gz 17.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for dammy 1.1.0
File Interpreter ABI Platform
dammy-1.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 55.4 kB

Release files / dammy-1.1.0.tar.gz

Download URL dammy-1.1.0.tar.gz
Size 17.1 kB
Tags Source
SHA-256 checksum
How to use checksums
256261766d02031a21d82d2ced40b67f4be984b847e4fdedd0324d01fba83240
BLAKE2b-256 checksum
How to use checksums
17c4e1a31cb923dc540fe471a89716ea67fdb394a8e4a55346f486d894cd0ef9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.6.0.post20191030 requests-toolbelt/0.9.1 tqdm/4.37.0 CPython/3.7.5

Release files / dammy-1.1.0-py3-none-any.whl

Download URL dammy-1.1.0-py3-none-any.whl
Size 38.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
306be5e51f0dcb9ac5e519e8941493ce79254527ca2a93bc0bf52b43d1bb786e
BLAKE2b-256 checksum
How to use checksums
b642a1b7a0be2b1491615150780e186be2473f3deb5159815e84efd263060274
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.6.0.post20191030 requests-toolbelt/0.9.1 tqdm/4.37.0 CPython/3.7.5

Release history Release notifications | RSS feed

This release

1.1.0 This release

2 release files

1.0.0

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.0.3

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page