utils: add gen_zsys_uuid

Add gen_zsys_uuid, to generate a uuid of the same form as used in the
ubiquity zsys-setup script.
This commit is contained in:
Dan Bungert 2023-08-16 15:30:40 -06:00
parent c7eea37546
commit c73fac697e
2 changed files with 34 additions and 1 deletions

View File

@ -16,7 +16,7 @@
# from unittest.mock import Mock # from unittest.mock import Mock
from subiquitycore.tests import SubiTestCase from subiquitycore.tests import SubiTestCase
from subiquitycore.utils import orig_environ from subiquitycore.utils import _zsys_uuid_charset, gen_zsys_uuid, orig_environ
class TestOrigEnviron(SubiTestCase): class TestOrigEnviron(SubiTestCase):
@ -68,3 +68,23 @@ class TestOrigEnviron(SubiTestCase):
"PATH": "/usr/bin:/bin", "PATH": "/usr/bin:/bin",
} }
self.assertEqual(expected, orig_environ(env)) self.assertEqual(expected, orig_environ(env))
class TestZsysUUID(SubiTestCase):
def test_charset(self):
charset = _zsys_uuid_charset()
for c in "0", "9", "a", "z":
self.assertIn(c, charset)
bads = [
chr(ord("0") - 1),
chr(ord("9") + 1),
chr(ord("a") - 1),
chr(ord("z") + 1),
]
for c in bads:
self.assertNotIn(c, charset)
def test_zsys_uuid(self):
for i in range(10):
uuid = gen_zsys_uuid()
self.assertEqual(6, len(uuid), uuid)

View File

@ -269,3 +269,16 @@ def matching_dicts(items: Sequence[Dict[Any, Any]], **criteria):
for item in items for item in items
if all(k in item and item[k] == v for k, v in criteria.items()) if all(k in item and item[k] == v for k, v in criteria.items())
] ]
def _zsys_uuid_charset() -> list:
charset = [chr(c) for c in range(ord("0"), ord("9") + 1)]
charset += [chr(c) for c in range(ord("a"), ord("z") + 1)]
# random.choice wants a list
return charset
def gen_zsys_uuid():
"""Create a 6 character identifier. Functionally equivalent to
`head -100 /dev/urandom | tr -dc 'a-z0-9' | head -c6`"""
return "".join([random.choice(_zsys_uuid_charset()) for i in range(6)])