| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,8 +1,8 @@ | ||
| r"""UUID objects (universally unique identifiers) according to RFC 4122. | ||
| r"""UUID objects (universally unique identifiers) according to RFC 4122/9562. | ||
|
|
||
| This module provides immutable UUID objects (class UUID) and the functions | ||
| uuid1(), uuid3(), uuid4(), uuid5() for generating version 1, 3, 4, and 5 | ||
| UUIDs as specified in RFC 4122. | ||
| uuid1(), uuid3(), uuid4(), uuid5(), and uuid8() for generating version 1, 3, | ||
| 4, 5, and 8 UUIDs as specified in RFC 4122/9562. | ||
|
|
||
| If all you want is a unique ID, you should probably call uuid1() or uuid4(). | ||
| Note that uuid1() may compromise privacy since it creates a UUID containing | ||
| Expand Down Expand Up | @@ -124,12 +124,12 @@ class UUID: | |
|
|
||
| int the UUID as a 128-bit integer | ||
|
|
||
| urn the UUID as a URN as specified in RFC 4122 | ||
| urn the UUID as a URN as specified in RFC 4122/9562 | ||
|
|
||
| variant the UUID variant (one of the constants RESERVED_NCS, | ||
| RFC_4122, RESERVED_MICROSOFT, or RESERVED_FUTURE) | ||
|
|
||
| version the UUID version number (1 through 5, meaningful only | ||
| version the UUID version number (1 through 8, meaningful only | ||
| when the variant is RFC_4122) | ||
|
|
||
| is_safe An enum indicating whether the UUID has been generated in | ||
| Expand Down Expand Up | @@ -214,9 +214,9 @@ def __init__(self, hex=None, bytes=None, bytes_le=None, fields=None, | |
| if not 0 <= int < 1<<128: | ||
| raise ValueError('int is out of range (need a 128-bit value)') | ||
| if version is not None: | ||
| if not 1 <= version <= 5: | ||
| if not 1 <= version <= 8: | ||
| raise ValueError('illegal version number') | ||
| # Set the variant to RFC 4122. | ||
| # Set the variant to RFC 4122/9562. | ||
| int &= ~(0xc000 << 48) | ||
| int |= 0x8000 << 48 | ||
| # Set the version number. | ||
| Expand Down Expand Up | @@ -355,7 +355,7 @@ def variant(self): | |
|
|
||
| @property | ||
| def version(self): | ||
| # The version bits are only meaningful for RFC 4122 UUIDs. | ||
| # The version bits are only meaningful for RFC 4122/9562 UUIDs. | ||
| if self.variant == RFC_4122: | ||
| return int((self.int >> 76) & 0xf) | ||
|
|
||
| Expand Down Expand Up | @@ -719,14 +719,37 @@ def uuid5(namespace, name): | |
| hash = sha1(namespace.bytes + name).digest() | ||
| return UUID(bytes=hash[:16], version=5) | ||
|
|
||
| def uuid8(a=None, b=None, c=None): | ||
| """Generate a UUID from three custom blocks. | ||
|
|
||
| * 'a' is the first 48-bit chunk of the UUID (octets 0-5); | ||
| * 'b' is the mid 12-bit chunk (octets 6-7); | ||
| * 'c' is the last 62-bit chunk (octets 8-15). | ||
|
|
||
| When a value is not specified, a pseudo-random value is generated. | ||
| """ | ||
| if a is None: | ||
|
Comment thread
picnixz marked this conversation as resolved.
|
||
| import random | ||
| a = random.getrandbits(48) | ||
| if b is None: | ||
| import random | ||
| b = random.getrandbits(12) | ||
| if c is None: | ||
| import random | ||
| c = random.getrandbits(62) | ||
|
Comment thread
Copy link
Copy Markdown
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low QualityDoes it make sense / is it possible to reject values outside the expected value range? For example, reject negative numbers? Maybe something like: orig_a = a
a &= 0xffff_ffff_ffff
if a != orig_a: raise ValueError("...")
I don't know. Would it be consistent with other uuid functions?
Sorry, something went wrong.
All reactions
Copy link
Copy Markdown
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low QualityUUIDv1 does not reject them so I wouldn't worry too much about it. v3 and v5 are not based on integral inputs.
Sorry, something went wrong.
All reactions
Copy link
Copy Markdown
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low QualityI'm fine with having the same behavior than uuid1() in this case, since it's documented.
Sorry, something went wrong.
All reactions
|
||
| int_uuid_8 = (a & 0xffff_ffff_ffff) << 80 | ||
| int_uuid_8 |= (b & 0xfff) << 64 | ||
| int_uuid_8 |= c & 0x3fff_ffff_ffff_ffff | ||
| return UUID(int=int_uuid_8, version=8) | ||
|
|
||
| def main(): | ||
| """Run the uuid command line interface.""" | ||
| uuid_funcs = { | ||
| "uuid1": uuid1, | ||
| "uuid3": uuid3, | ||
| "uuid4": uuid4, | ||
| "uuid5": uuid5 | ||
| "uuid5": uuid5, | ||
| "uuid8": uuid8, | ||
| } | ||
| uuid_namespace_funcs = ("uuid3", "uuid5") | ||
| namespaces = { | ||
| Expand Down | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,2 @@ | ||
| Add :func:`uuid.uuid8` for generating UUIDv8 objects as specified in | ||
| :rfc:`9562`. Patch by Bénédikt Tran |
| Back | FazBrowse Home | New Git URL |
Uh oh!
There was an error while loading. Please reload this page.