diff --git a/pillarsdk/utils.py b/pillarsdk/utils.py index fcfcbe5..3c60c6a 100644 --- a/pillarsdk/utils.py +++ b/pillarsdk/utils.py @@ -161,3 +161,19 @@ def sanitize_filename(file_name): safe_name = ''.join(c for c in file_name if ord(c) > 31 and c not in badchars) return safe_name.strip(' .') + + +def is_valid_id(some_id, _valid_id_chars=frozenset(b'0123456789abcdef')): + """Returns True iff the ID has a valid form.""" + + if isinstance(some_id, text_type): + try: + some_id = some_id.encode('ascii') + except UnicodeEncodeError: + return False + + if len(some_id) != 24: + return False + + return all(char in _valid_id_chars + for char in some_id) diff --git a/tests/test_utils.py b/tests/test_utils.py index a09cabd..eda695b 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -77,3 +77,17 @@ class PillarUtilsTests(unittest.TestCase): self.assertEqual('abc......def', utils.sanitize_filename('././abc../..///..def')) self.assertEqual('Pad Thai is ผัดไทย', utils.sanitize_filename('Pad Thai is ผัดไทย')) self.assertEqual(u'Pad Thai is ผัดไทย', utils.sanitize_filename(u'Pad Thai is ผัดไทย')) + + def test_is_valid_id(self): + self.assertTrue(utils.is_valid_id(24 * 'a')) + self.assertTrue(utils.is_valid_id('55f35f7e2beb3300960bb074')) + self.assertTrue(utils.is_valid_id(u'55f35f7e2beb3300960bb074')) + + self.assertFalse(utils.is_valid_id(u'555f35f7e2beb3300960bb074')) + self.assertFalse(utils.is_valid_id(u'%2355f35f7e2beb3300960bb074')) + self.assertFalse(utils.is_valid_id(u'#55f35f7e2beb3300960bb074')) + self.assertFalse(utils.is_valid_id(u'a55f-35f7-e2be-b330-0960-bb07')) + self.assertFalse(utils.is_valid_id(u'a55f-35f7-e2be-b330-0960-bb07'[:24])) + + self.assertFalse(utils.is_valid_id(u'55f…')) + self.assertFalse(utils.is_valid_id(u'ประเทศไทย'))