summaryrefslogtreecommitdiff
path: root/venv/lib/python3.11/site-packages/faker/cli.py
diff options
context:
space:
mode:
Diffstat (limited to 'venv/lib/python3.11/site-packages/faker/cli.py')
-rw-r--r--venv/lib/python3.11/site-packages/faker/cli.py295
1 files changed, 0 insertions, 295 deletions
diff --git a/venv/lib/python3.11/site-packages/faker/cli.py b/venv/lib/python3.11/site-packages/faker/cli.py
deleted file mode 100644
index 05db32d..0000000
--- a/venv/lib/python3.11/site-packages/faker/cli.py
+++ /dev/null
@@ -1,295 +0,0 @@
-import argparse
-import itertools
-import logging
-import os
-import random
-import sys
-import textwrap
-
-from io import TextIOWrapper
-from pathlib import Path
-from typing import Dict, List, Optional, TextIO, TypeVar, Union
-
-from . import VERSION, Faker, documentor, exceptions
-from .config import AVAILABLE_LOCALES, DEFAULT_LOCALE, META_PROVIDERS_MODULES
-from .documentor import Documentor
-from .providers import BaseProvider
-
-__author__ = "joke2k"
-
-T = TypeVar("T")
-
-
-def print_provider(
- doc: Documentor,
- provider: BaseProvider,
- formatters: Dict[str, T],
- excludes: Optional[List[str]] = None,
- output: Optional[TextIO] = None,
-) -> None:
- if output is None:
- output = sys.stdout
- if excludes is None:
- excludes = []
-
- print(file=output)
- print(f"### {doc.get_provider_name(provider)}", file=output)
- print(file=output)
-
- margin = max(30, doc.max_name_len + 2)
- for signature, example in formatters.items():
- if signature in excludes:
- continue
- signature_lines = textwrap.wrap(signature, width=margin, subsequent_indent=" ")
- try:
- lines = textwrap.wrap(
- str(example).expandtabs(),
- width=150 - margin,
- initial_indent="# ",
- subsequent_indent=" ",
- )
- except UnicodeDecodeError:
- # The example is actually made of bytes.
- # We could coerce to bytes, but that would fail anyway when we wiil
- # try to `print` the line.
- lines = ["<bytes>"]
- except UnicodeEncodeError:
- raise Exception(f"error on {signature!r} with value {example!r}")
- for left, right in itertools.zip_longest(signature_lines, lines, fillvalue=""):
- print(f"\t{left:<{margin}} {right}", file=output)
-
-
-def print_doc(
- provider_or_field: Optional[str] = None,
- args: Optional[List[T]] = None,
- lang: str = DEFAULT_LOCALE,
- output: Optional[Union[TextIO, TextIOWrapper]] = None,
- seed: Optional[float] = None,
- includes: Optional[List[str]] = None,
-) -> None:
- if args is None:
- args = []
- if output is None:
- output = sys.stdout
- fake = Faker(locale=lang, includes=includes)
- fake.seed_instance(seed)
-
- from faker.providers import BaseProvider
-
- base_provider_formatters = list(dir(BaseProvider))
-
- if provider_or_field:
- if "." in provider_or_field:
- parts = provider_or_field.split(".")
- locale = parts[-2] if parts[-2] in AVAILABLE_LOCALES else lang
- fake = Faker(locale, providers=[provider_or_field], includes=includes)
- fake.seed_instance(seed)
- doc = documentor.Documentor(fake)
- doc.already_generated = base_provider_formatters
- print_provider(
- doc,
- fake.get_providers()[0],
- doc.get_provider_formatters(fake.get_providers()[0]),
- output=output,
- )
- else:
- try:
- print(fake.format(provider_or_field, *args), end="", file=output)
- except AttributeError:
- raise ValueError(f'No faker found for "{provider_or_field}({args})"')
-
- else:
- doc = documentor.Documentor(fake)
- unsupported: List[str] = []
-
- while True:
- try:
- formatters = doc.get_formatters(with_args=True, with_defaults=True, excludes=unsupported)
- except exceptions.UnsupportedFeature as e:
- unsupported.append(e.name)
- else:
- break
-
- for provider, fakers in formatters:
- print_provider(doc, provider, fakers, output=output)
-
-
-class Command:
- def __init__(self, argv: Optional[str] = None) -> None:
- self.argv = argv or sys.argv[:]
- self.prog_name = Path(self.argv[0]).name
-
- def execute(self) -> None:
- """
- Given the command-line arguments, this creates a parser appropriate
- to that command, and runs it.
- """
-
- # retrieve default language from system environment
- default_locale = os.environ.get("LANG", "en_US").split(".")[0]
- if default_locale not in AVAILABLE_LOCALES:
- default_locale = DEFAULT_LOCALE
-
- epilog = f"""supported locales:
-
- {', '.join(sorted(AVAILABLE_LOCALES))}
-
- Faker can take a locale as an optional argument, to return localized data. If
- no locale argument is specified, the factory falls back to the user's OS
- locale as long as it is supported by at least one of the providers.
- - for this user, the default locale is {default_locale}.
-
- If the optional argument locale and/or user's default locale is not available
- for the specified provider, the factory falls back to faker's default locale,
- which is {DEFAULT_LOCALE}.
-
-examples:
-
- $ faker address
- 968 Bahringer Garden Apt. 722
- Kristinaland, NJ 09890
-
- $ faker -l de_DE address
- Samira-Niemeier-Allee 56
- 94812 Biedenkopf
-
- $ faker profile ssn,birthdate
- {{'ssn': u'628-10-1085', 'birthdate': '2008-03-29'}}
-
- $ faker -r=3 -s=";" name
- Willam Kertzmann;
- Josiah Maggio;
- Gayla Schmitt;
-
-"""
-
- formatter_class = argparse.RawDescriptionHelpFormatter
- parser = argparse.ArgumentParser(
- prog=self.prog_name,
- description=f"{self.prog_name} version {VERSION}",
- epilog=epilog,
- formatter_class=formatter_class,
- )
-
- parser.add_argument("--version", action="version", version=f"%(prog)s {VERSION}")
-
- parser.add_argument(
- "-v",
- "--verbose",
- action="store_true",
- help="show INFO logging events instead "
- "of CRITICAL, which is the default. These logging "
- "events provide insight into localization of "
- "specific providers.",
- )
-
- parser.add_argument(
- "-o",
- metavar="output",
- type=argparse.FileType("w"),
- default=sys.stdout,
- help="redirect output to a file",
- )
-
- parser.add_argument(
- "-l",
- "--lang",
- choices=AVAILABLE_LOCALES,
- default=default_locale,
- metavar="LOCALE",
- help="specify the language for a localized " "provider (e.g. de_DE)",
- )
- parser.add_argument(
- "-r",
- "--repeat",
- default=1,
- type=int,
- help="generate the specified number of outputs",
- )
- parser.add_argument(
- "-s",
- "--sep",
- default="\n",
- help="use the specified separator after each " "output",
- )
-
- parser.add_argument(
- "--seed",
- metavar="SEED",
- type=int,
- help="specify a seed for the random generator so "
- "that results are repeatable. Also compatible "
- "with 'repeat' option",
- )
-
- parser.add_argument(
- "-i",
- "--include",
- default=META_PROVIDERS_MODULES,
- nargs="*",
- help="list of additional custom providers to "
- "user, given as the import path of the module "
- "containing your Provider class (not the provider "
- "class itself)",
- )
-
- parser.add_argument(
- "fake",
- action="store",
- nargs="?",
- help="name of the fake to generate output for " "(e.g. profile)",
- )
-
- parser.add_argument(
- "fake_args",
- metavar="fake argument",
- action="store",
- nargs="*",
- help="optional arguments to pass to the fake "
- "(e.g. the profile fake takes an optional "
- "list of comma separated field names as the "
- "first argument)",
- )
-
- arguments = parser.parse_args(self.argv[1:])
-
- if arguments.verbose:
- logging.basicConfig(level=logging.DEBUG)
- else:
- logging.basicConfig(level=logging.CRITICAL)
-
- random.seed(arguments.seed)
- seeds = [random.random() for _ in range(arguments.repeat)]
-
- for i in range(arguments.repeat):
- print_doc(
- arguments.fake,
- arguments.fake_args,
- lang=arguments.lang,
- output=arguments.o,
- seed=seeds[i],
- includes=arguments.include,
- )
- print(arguments.sep, file=arguments.o)
-
- if not arguments.fake:
- # repeat not supported for all docs
- break
-
-
-def execute_from_command_line(argv: Optional[str] = None) -> None:
- """A simple method that runs a Command."""
- if sys.stdout.encoding is None:
- print(
- "please set python env PYTHONIOENCODING=UTF-8, example: "
- "export PYTHONIOENCODING=UTF-8, when writing to stdout",
- file=sys.stderr,
- )
- exit(1)
-
- command = Command(argv)
- command.execute()
-
-
-if __name__ == "__main__":
- execute_from_command_line()