GenerateRandomJSON
Generate a list of random dictionaries, using Faker Python library. For more information, please visit https://faker.readthedocs.io
python · Community Common Scripts
Source
import demistomock as demisto # noqa: F401 from CommonServerPython import * # noqa: F401 from faker import Faker from datetime import datetime, date from decimal import Decimal import random categories = { "IT": ["domain_name", "email", "ipv4", "ipv6", "url", "user_name"], "Company": ["company", "company_suffix", "job", "catch_phrase"], "Address": ["address", "city", "state", "country", "postalcode", "street_address"], "Person": ["name", "first_name", "last_name", "email", "phone_number"], "Finance": ["credit_card_number", "credit_card_provider", "iban", "bban"], "DateTime": ["date", "time", "year", "month", "date_of_birth"], "Profile": ["simple_profile"], "Color": ["color_name", "hex_color", "rgb_color", "safe_color_name"], "Job": ["job", "company", "company_suffix", "catch_phrase"], "Other": [], } excluded_providers = ["get_providers", "binary", "zip", "tar", "json_bytes", "get_words_list"] def serialize_value(value): if isinstance(value, datetime | date): return value.isoformat() elif isinstance(value, Decimal): return float(value) elif isinstance(value, tuple | list): return [serialize_value(v) for v in value] elif isinstance(value, dict): return {k: serialize_value(v) for k, v in value.items()} return value def getAllValidProviders(faker): random_providers = [provider for provider in dir(faker) if not provider.startswith("_")] valid_providers_list: list = [] for provider in random_providers: try: getattr(faker, provider)() if provider in excluded_providers: continue valid_providers_list.append(provider) except Exception: continue return valid_providers_list def generate_fake_data(category: str, providers: List[str], num_entries: int, randomSize: int): global categories fake = Faker() fake_data_list = [] providers_list = categories.get(category, []) if not isinstance(providers_list, list): raise TypeError(f"Expected a list for category '{category}', but got {type(providers_list).__name__}") all_valid_providers = getAllValidProviders(fake) if not isinstance(all_valid_providers, list): raise TypeError(f"Expected a list from getAllValidProviders, but got {type(all_valid_providers).__name__}") if category == "Random": providers = random.sample(all_valid_providers, k=min(randomSize, len(all_valid_providers))) elif category != "Other": if category not in list(categories.keys()): raise ValueError(f"Category '{category}' is not available. Choose from {list(categories.keys())}.") else: providers = random.sample(providers_list, k=min(10, len(providers_list))) else: # Check that all providers entered are valid missing_providers = [provider for provider in providers if provider not in all_valid_providers] if missing_providers: raise ValueError(f"Providers {missing_providers} are not valid faker providers.") for _ in range(num_entries): fake_data = {} for provider in providers: if hasattr(fake, provider): fake_data[provider] = serialize_value(getattr(fake, provider)()) else: raise ValueError(f"Provider '{provider}' is not available in Faker.") fake_data_list.append(fake_data) return fake_data_list def main(): try: args = demisto.args() num_entries = int(args.get("list_size", 1)) providers = argToList(args.get("faker_providers")) category = args.get("category", "Random") random_size = int(args.get("dict_size", 10)) if category == "Other" and not providers: raise ValueError("When category is 'Other', a list of faker providers must be provided.") fake_data_list = generate_fake_data(category, providers, num_entries, random_size) return_results( CommandResults( readable_output=tableToMarkdown( f"Random JSON of category `{category}`", fake_data_list, headers=list(fake_data_list[0].keys()) ), outputs_prefix=f"RandomJSON.{category}", outputs=fake_data_list, raw_response=fake_data_list, ) ) except Exception as ex: return_error(f"Failed to generate a Random JSON object.\nError: {ex}") if __name__ in ("__main__", "__builtin__", "builtins"): main()
README
Generate a list of random dictionaries, using Faker Python library. For more information, please visit https://faker.readthedocs.io
Script Data
| Name | Description |
|---|---|
| Script Type | python3 |
Inputs
| Argument Name | Description |
|---|---|
| list_size | Size of the list of dictionaries to generate. |
| faker_providers | Comma separated list of Faker provider(s) to generate data from (Only relevant if category input is set to Other). For the list of providers, please visit https://faker.readthedocs.io/en/master/providers.html |
| category | Faker providers grouped into categories (e.g. IT, Finance, Person, etc) for the creation of the dictionary. If Random is selected, faker providers are chosen at random from the entire set of providers. |
| dict_size | Number of key-value pairs contained on each dictionary if Random is selected as category, otherwise this number is chosen from a pre-defined list. |
Outputs
There are no outputs for this script.