From c8432c3c3b7229c276a1017b5867556b9aec9c30 Mon Sep 17 00:00:00 2001 From: Eric Phenix Date: Tue, 15 Jun 2021 21:51:52 -0600 Subject: [PATCH 1/3] Added command line functionality to UUID module. --- Lib/uuid.py | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/Lib/uuid.py b/Lib/uuid.py index 67da88560cfb12..7f24f3780b5052 100644 --- a/Lib/uuid.py +++ b/Lib/uuid.py @@ -727,3 +727,53 @@ def uuid5(namespace, name): NAMESPACE_URL = UUID('6ba7b811-9dad-11d1-80b4-00c04fd430c8') NAMESPACE_OID = UUID('6ba7b812-9dad-11d1-80b4-00c04fd430c8') NAMESPACE_X500 = UUID('6ba7b814-9dad-11d1-80b4-00c04fd430c8') + + +if __name__ == '__main__': + """ + Enables uuid to be called from the command line + + Example usage: + + python -m uuid + > 16fd2706-8baf-433b-82eb-8c7fada847da + + python -m uuid uuid5 NAMESPACE_DNS python.org + > 886313e1-3b8a-5372-9b90-0c9aee199e5d + + python -m uuid uuid5 {custom_uuid} mydomain.com + > e332bfe2-fed1-4e9c-ad45-db54e087b39e + """ + + allowed_cmds = ['uuid1', 'uuid3', 'uuid4', 'uuid5'] + if len(sys.argv) == 1: + # By default, print a random uuid. + print(uuid4()) + else: + cmd = sys.argv[1] + if cmd not in allowed_cmds: + raise Exception(f"Command not found: {cmd}. Allowed values are {allowed_cmds}") + if cmd == 'uuid1': + print(uuid1()) + if cmd in ['uuid3', 'uuid5']: + if len(sys.argv) != 4: + raise Exception(f"Incorrect number of arguments. Example usage: \n python -m uuid {cmd} NAMESPACE NAME") + else: + namespace = sys.argv[2] + name = sys.argv[3] + if namespace == "NAMESPACE_DNS": + namespace = NAMESPACE_DNS + elif namespace == "NAMESPACE_URL": + namespace = NAMESPACE_URL + elif namespace == "NAMESPACE_OID": + namespace = NAMESPACE_OID + elif namespace == "NAMESPACE_X500": + namespace = NAMESPACE_X500 + else: + namespace = UUID(namespace) + if cmd == "uuid3": + print(uuid3(namespace, name)) + else: + print(uuid5(namespace, name)) + if cmd == 'uuid4': + print(uuid4()) \ No newline at end of file From fe7fea1e56ff985b5a523898ebbd0e0c0075c1c3 Mon Sep 17 00:00:00 2001 From: Eric Phenix Date: Wed, 16 Jun 2021 23:58:09 -0600 Subject: [PATCH 2/3] Added whitespace and blurb entry. --- Lib/uuid.py | 4 ++-- .../next/Library/2021-06-16-23-57-45.bpo-44431.nA8C9m.rst | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2021-06-16-23-57-45.bpo-44431.nA8C9m.rst diff --git a/Lib/uuid.py b/Lib/uuid.py index 7f24f3780b5052..715ac171af667a 100644 --- a/Lib/uuid.py +++ b/Lib/uuid.py @@ -732,7 +732,7 @@ def uuid5(namespace, name): if __name__ == '__main__': """ Enables uuid to be called from the command line - + Example usage: python -m uuid @@ -776,4 +776,4 @@ def uuid5(namespace, name): else: print(uuid5(namespace, name)) if cmd == 'uuid4': - print(uuid4()) \ No newline at end of file + print(uuid4()) diff --git a/Misc/NEWS.d/next/Library/2021-06-16-23-57-45.bpo-44431.nA8C9m.rst b/Misc/NEWS.d/next/Library/2021-06-16-23-57-45.bpo-44431.nA8C9m.rst new file mode 100644 index 00000000000000..1fa48e08edfc8a --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-06-16-23-57-45.bpo-44431.nA8C9m.rst @@ -0,0 +1 @@ +UUID module now supports being called from command line. ex > python -m uuid From d00cf6bb757717416661a8b4c90d6dc6cdf02d0c Mon Sep 17 00:00:00 2001 From: Eric Phenix Date: Thu, 17 Jun 2021 01:13:23 -0600 Subject: [PATCH 3/3] implemented -h --help which prints module doc string. Added command-line usage to doc string. --- Lib/uuid.py | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/Lib/uuid.py b/Lib/uuid.py index 715ac171af667a..59733f3e2bf037 100644 --- a/Lib/uuid.py +++ b/Lib/uuid.py @@ -42,6 +42,20 @@ # make a UUID from a 16-byte string >>> uuid.UUID(bytes=x.bytes) UUID('00010203-0405-0607-0809-0a0b0c0d0e0f') + +Command-Line usage: + + python -m uuid [-h] | COMMAND [NAMESPACE] [NAME] + + # generate a random uuid + >>> python -m uuid + + # generate a uuid1 + >>> python -m uuid uuid1 + + # generate a uuid3 or uuid5 + >>> python -m uuid uuid5 NAMESPACE_DNS python.org + """ import os @@ -728,31 +742,21 @@ def uuid5(namespace, name): NAMESPACE_OID = UUID('6ba7b812-9dad-11d1-80b4-00c04fd430c8') NAMESPACE_X500 = UUID('6ba7b814-9dad-11d1-80b4-00c04fd430c8') - if __name__ == '__main__': """ Enables uuid to be called from the command line - - Example usage: - - python -m uuid - > 16fd2706-8baf-433b-82eb-8c7fada847da - - python -m uuid uuid5 NAMESPACE_DNS python.org - > 886313e1-3b8a-5372-9b90-0c9aee199e5d - - python -m uuid uuid5 {custom_uuid} mydomain.com - > e332bfe2-fed1-4e9c-ad45-db54e087b39e """ - allowed_cmds = ['uuid1', 'uuid3', 'uuid4', 'uuid5'] + allowed_cmds = ['-h','--help','uuid1', 'uuid3', 'uuid4', 'uuid5'] if len(sys.argv) == 1: # By default, print a random uuid. print(uuid4()) else: cmd = sys.argv[1] if cmd not in allowed_cmds: - raise Exception(f"Command not found: {cmd}. Allowed values are {allowed_cmds}") + raise Exception(f"Command not found: [{cmd}]. Run `python -m uuid -h` for more information.") + if cmd in ['-h', '--help']: + print(__doc__) if cmd == 'uuid1': print(uuid1()) if cmd in ['uuid3', 'uuid5']: