The name used as part of generating the uuid. Only required for
:func:`uuid3` / :func:`uuid5` functions.
+.. option:: -C <num>
+ --count <num>
+
+ Generate *num* fresh UUIDs.
+
+ .. versionadded:: next
+
.. _uuid-example:
Command-Line Example
--------------------
-Here are some examples of typical usage of the :mod:`uuid` command line interface:
+Here are some examples of typical usage of the :mod:`uuid` command-line interface:
.. code-block:: shell
- # generate a random uuid - by default uuid4() is used
+ # generate a random UUID - by default uuid4() is used
$ python -m uuid
- # generate a uuid using uuid1()
+ # generate a UUID using uuid1()
$ python -m uuid -u uuid1
- # generate a uuid using uuid5
+ # generate a UUID using uuid5
$ python -m uuid -u uuid5 -n @url -N example.com
+ # generate 42 random UUIDs
+ $ python -m uuid -C 42
self.assertEqual(output, str(uuid_output))
self.assertEqual(uuid_output.version, 4)
+ @mock.patch.object(sys, "argv", ["", "-C", "3"])
+ def test_cli_uuid4_outputted_with_count(self):
+ stdout = io.StringIO()
+ with contextlib.redirect_stdout(stdout):
+ self.uuid.main()
+
+ output = stdout.getvalue().strip().splitlines()
+
+ # Check that 3 UUIDs in the format of uuid4 have been generated
+ self.assertEqual(len(output), 3)
+ for o in output:
+ uuid_output = self.uuid.UUID(o)
+ self.assertEqual(uuid_output.version, 4)
+
@mock.patch.object(sys, "argv",
["", "-u", "uuid3", "-n", "@dns", "-N", "python.org"])
def test_cli_uuid3_ouputted_with_valid_namespace_and_name(self):
import argparse
parser = argparse.ArgumentParser(
- description="Generates a uuid using the selected uuid function.")
- parser.add_argument("-u", "--uuid", choices=uuid_funcs.keys(), default="uuid4",
- help="The function to use to generate the uuid. "
- "By default uuid4 function is used.")
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter,
+ description="Generate a UUID using the selected UUID function.")
+ parser.add_argument("-u", "--uuid",
+ choices=uuid_funcs.keys(),
+ default="uuid4",
+ help="function to generate the UUID")
parser.add_argument("-n", "--namespace",
- help="The namespace is a UUID, or '@ns' where 'ns' is a "
- "well-known predefined UUID addressed by namespace name. "
- "Such as @dns, @url, @oid, and @x500. "
- "Only required for uuid3/uuid5 functions.")
+ choices=["any UUID", *namespaces.keys()],
+ help="uuid3/uuid5 only: "
+ "a UUID, or a well-known predefined UUID addressed "
+ "by namespace name")
parser.add_argument("-N", "--name",
- help="The name used as part of generating the uuid. "
- "Only required for uuid3/uuid5 functions.")
+ help="uuid3/uuid5 only: "
+ "name used as part of generating the UUID")
+ parser.add_argument("-C", "--count", metavar="NUM", type=int, default=1,
+ help="generate NUM fresh UUIDs")
args = parser.parse_args()
uuid_func = uuid_funcs[args.uuid]
"Run 'python -m uuid -h' for more information."
)
namespace = namespaces[namespace] if namespace in namespaces else UUID(namespace)
- print(uuid_func(namespace, name))
+ for _ in range(args.count):
+ print(uuid_func(namespace, name))
else:
- print(uuid_func())
+ for _ in range(args.count):
+ print(uuid_func())
# The following standard UUIDs are for use with uuid3() or uuid5().