Skip to main content

Generate realistic, context-aware mock data automatically.

Project description

PyMocker

this library works, but is in an experimental phase. Feedback is encouraged PyMocker is a powerful and flexible Python library designed to generate realistic, context-aware mock data automatically. Built on top of polyfactory, PyMocker extends its capabilities with intelligent field matching.

Example:

class Person(BaseModel):
    FirstName:str= Field(max_length=8)
    EmailAddress:str= Field(max_length=20)
    CellPhoneNumber:str= Field(min_length=12,max_length=12)

# without mocker
class PersonFactory(ModelFactory[Person]):...
person = PersonFactory.build()
print(f"Polyfactory:")
pprint(person)

# with mocker
mocker=Mocker()
mocker.Config.confidence_threshold = .5
@mocker.mock()
class MockerPersonFactory(ModelFactory[Person]):...
mocker_person = MockerPersonFactory.build()
print("Polyfactory + Mocker:")
pprint(mocker_person)
Polyfactory:
Person(FirstName='48a40717', EmailAddress='1a5a1a37', CellPhoneNumber='6185d0d7c109')
Polyfactory + Mocker:
Person(FirstName='Ashley', EmailAddress='tbutler@example.net', CellPhoneNumber='429-860-3379')

Installation

PyPi package coming soon! In the meantime, install via git:

gh repo clone eschallack/PyMocker
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

Intelligent Field Matching

PyMocker's internal ranking and similarity algorithms use a number of techniques to match fields to methods, including cosine similarity. You can adjust the confidence threshold for this behavior:

...
mocker=Mocker()
Mocker.confidence_threshold = 0.75 #.5 by default. higher means the model must be more confident to match
@mocker.mock()
...

Adding and customizing Providers

By default, PyMocker will use a Faker instance as its sole method provider. Configure your faker instance and add custom classes by adding it directly to Mocker's provider_instances.

...
class SuperHeroProvider:
    @staticmethod
    def super_hero_name():
        return 'MockerMan'
class Hero(BaseModel):
    HeroName:str=Field(max_length=9)
    
custom_faker_mocker=Mocker()
custom_faker_mocker.Config.provider_instances = [SuperHeroProvider(), Faker(locale='en_us')]

@custom_faker_mocker.mock()
...
Hero(HeroName='MockerMan')

Intelligent Field Matching

PyMocker uses a number of matching rules to match methods to fields, including cosine similarity. Configure this behavior like so:

#Control the Confidence threshold of similarity matching, .5 by default
mocker.confidence_threshold = 0.75

Note: Cosine Similarity is not perfect, and at times, may produce undesired results. You can disable this behavior entirely by setting match_field_generation_on_cosine_similarity to False

mocker.match_field_generation_on_cosine_similarity = False
# a confidence threshold of 0 also disables the behavior
mocker.confidence_threshold = 0

When disabled, PyMocker still uses word segmentation to discover matches for you. If no method is found, PyMocker defaults to PolyFactory's behavior

Other configurable attributes:

  • max_retries (int): The number of times a method will attempt to generate a constraint-fulfilling value. Higher values can impact performance. Defaults to 300.
  • coerce_on_fail (bool): If True, attempts to coerce the value to match constraints if Faker generation fails. Defaults to True. When set to False, PyMocker will default to a PolyFactory generated value

Supported Model Types

PyMocker seamlessly integrates with all PolyFactory Factories, except for SQLAlchemy - there's currently an issue with pk/fk relationships, so your milage may vary

Contributing

I'm just one guy, so I'd love some help improving this library. This is very early stages, so any suggestions or changes are welcome.

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

pymocker-0.1.0.tar.gz (15.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pymocker-0.1.0-py3-none-any.whl (17.6 kB view details)

Uploaded Python 3

File details

Details for the file pymocker-0.1.0.tar.gz.

File metadata

  • Download URL: pymocker-0.1.0.tar.gz
  • Upload date:
  • Size: 15.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.4 CPython/3.13.2 Darwin/24.3.0

File hashes

Hashes for pymocker-0.1.0.tar.gz
Algorithm Hash digest
SHA256 a772e9865f22be24a0694a7ffb3530b050ef97b58de7419574988cbc72600ebd
MD5 6f5704e8205102dea50285a503cf42ec
BLAKE2b-256 291747fe9039b465f08678d3eb4fe489e5c5cc83dae7704a480a32ff24869b57

See more details on using hashes here.

File details

Details for the file pymocker-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: pymocker-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 17.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.4 CPython/3.13.2 Darwin/24.3.0

File hashes

Hashes for pymocker-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 654898ef056c3dc7f173076f2e7159d6e9cf68be1b40dbbdc7412e2e95f7382b
MD5 da1090892a93159d73c29fb8adb70b05
BLAKE2b-256 3d69df0e13b64c050fd2a38493b4f88f377074c7ea3801f53212d7b0241a0595

See more details on using hashes here.

Supported by

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