{"id":14986593,"url":"https://github.com/lferran/freddy","last_synced_at":"2025-10-25T06:42:16.412Z","repository":{"id":49512729,"uuid":"253172069","full_name":"lferran/freddy","owner":"lferran","description":"Provides random fake data valid for a given schema","archived":false,"fork":false,"pushed_at":"2021-06-30T11:11:16.000Z","size":82,"stargazers_count":9,"open_issues_count":2,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-25T18:40:38.017Z","etag":null,"topics":["fast-api","fastapi","json","json-api","json-schema","open-api","pydantic","python","python3","random","rest-api","restapi","swagger"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lferran.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.rst","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-04-05T06:40:38.000Z","updated_at":"2025-01-29T13:42:41.000Z","dependencies_parsed_at":"2022-09-19T08:02:26.115Z","dependency_job_id":null,"html_url":"https://github.com/lferran/freddy","commit_stats":null,"previous_names":[],"tags_count":0,"template":true,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lferran%2Ffreddy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lferran%2Ffreddy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lferran%2Ffreddy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lferran%2Ffreddy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lferran","download_url":"https://codeload.github.com/lferran/freddy/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247828806,"owners_count":21002975,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["fast-api","fastapi","json","json-api","json-schema","open-api","pydantic","python","python3","random","rest-api","restapi","swagger"],"created_at":"2024-09-24T14:13:11.752Z","updated_at":"2025-10-25T06:42:16.310Z","avatar_url":"https://github.com/lferran.png","language":"Python","readme":"# freddy\n\nProvides randomized json data (samples) that complies with a given\nschema.\n\nWorks both for json schema and pydantic models.\n\n## Usage\n\n### pydantic\n```python\nimport datetime\nfrom pprint import pprint\nfrom typing import List, Optional\nfrom pydantic import BaseModel, Field\nimport freddy\n\n\nclass User(BaseModel):\n    id: int\n    name = 'John Doe'\n    signup_ts: Optional[datetime.datetime] = None\n    friends: List[int] = []\n    pattern_field: str = Field(..., regex=r\"^[-_a-zA-Z0-9]+$\")\n\n\nsample = freddy.sample(User)\npprint(sample)\n{'id': 452, 'signup_ts': '1903-03-12T20:20:00', 'friends': [675, 408], 'pattern_field': 'EUvKs7BIK-Ne', 'name': 'xfphlync'}\nUser.validate(sample)\nUser(id=452, signup_ts=datetime.datetime(1903, 3, 12, 20, 20), friends=[675, 408], pattern_field='EUvKs7BIK-Ne', name='xfphlync')\n```\n\n### jsonschema\n```python\nfrom pprint import pprint\nimport jsonschema\nimport freddy\n\nfamily_schema = {\n    \"type\": \"array\",\n    \"items\": {\n        \"properties\": {\n            \"member\": {\"$ref\": \"#/definitions/person\"},\n            \"role\": {\"$ref\": \"#/definitions/role\"},\n        },\n        \"type\": \"object\",\n    },\n    \"maxItems\": 5,\n    \"minItems\": 1,\n    \"definitions\": {\n        \"person\": {\n            \"properties\": {\n                \"age\": {\"type\": \"integer\"},\n                \"name\": {\"type\": \"string\"},\n                \"pets\": {\n                    \"items\": {\"$ref\": \"#/definitions/pet\"},\n                    \"maxItems\": 2,\n                    \"type\": \"array\",\n                },\n            },\n            \"type\": \"object\",\n        },\n        \"pet\": {\n            \"properties\": {\n                \"kind\": {\"enum\": [\"dog\", \"cat\"], \"type\": \"string\"},\n                \"name\": {\"type\": \"string\"},\n            },\n            \"type\": \"object\",\n        },\n        \"role\": {\n            \"enum\": [\n                \"father\",\n                \"mather\",\n                \"son\",\n                \"daughter\",\n                \"aunt\",\n                \"grandma\",\n                \"grandpa\",\n            ],\n            \"type\": \"string\",\n        },\n    }\n}\n\n# Get 10 random samples\nfor i in range(10):\n    sample_family = freddy.sample(family_schema)\n\n    # Validate against schema\n    jsonschema.validate(sample_family, family_schema)\n\npprint(sample_family)\n[\n    {\"member\": {\"age\": 77, \"name\": \"k\", \"pets\": []}, \"role\": \"grandma\"},\n    {\"member\": {\"age\": 64, \"name\": \"naifvxf\", \"pets\": []}, \"role\": \"grandpa\"},\n    {\n        \"member\": {\n            \"age\": 23,\n            \"name\": \"itruydotrj\",\n            \"pets\": [{\"kind\": \"cat\", \"name\": \"o\"}, {\"kind\": \"cat\", \"name\": \"uonmvfgd\"}],\n        },\n        \"role\": \"son\",\n    },\n]\n```\n\n## Install\n\n``` shell\npip install freddy\n```\n\n## Development\n\n``` shell\n# Clone the repo\ngit@github.com:lferran/freddy.git\ncd freddy\n\nmake develop\n\n# Run tests\nmake tests\n```\n\n## JSON Schema support\n\nConforms to JSON Schema Draft 7. The following features are supported:\n\n- [x] boolean type\n- [x] null type\n- [x] string type\n- [x] number type\n- [x] integer type\n- [x] array type\n- [x] object type\n- [x] definitions/references\n- [x] Boolean type\n- [x] consts\n- [x] `exclusiveMinimum` and `exclusiveMaximum` in integers and\n      numbers.\n- [x] number `multipleOf` keyword\n- [x] string `pattern` regex keyword\n\n- [ ] `required` keyword\n- [ ] `additionalProperties`\n- [ ] all string built-in formats\n- [ ] be able to provide custom basic type factories\n- [ ] multiple types: `{\"type\": [\"string\", \"array\"]}`\n- [ ] look into `allOf`: generate multiple objects + merge\n\nDoes not support:\n\n- ID referencing\n- `allOf` and `not` keywords\n- conditional keywords `if`, `then` and `else`\n- `patternProperties` on objects\n- property and schema `dependencies` on objects.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flferran%2Ffreddy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flferran%2Ffreddy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flferran%2Ffreddy/lists"}