def _predicate(extension: Extension) -> bool: extension_parts = extension.name.split(':', maxsplit=4) if len(extension_parts) < 3: raise DataStoreError( f'Illegal data opener/writer extension name "{extension.name}"' ) extension_type = TypeSpecifier.parse(extension_parts[0]) type_ok = type_specifier is None or extension_type == TYPE_SPECIFIER_ANY or \ extension_type == TypeSpecifier.normalize(type_specifier) format_ok = format_id is None or extension_parts[ 1] == '*' or extension_parts[1] == format_id storage_ok = storage_id is None or extension_parts[ 2] == '*' or extension_parts[2] == storage_id return type_ok and format_ok and storage_ok
def test_parse_exception(self): with self.assertRaises(SyntaxError) as cm: TypeSpecifier.parse('An unparseable expression[') self.assertEqual( '"An unparseable expression[" cannot be parsed: No end brackets found', f'{cm.exception}')
def test_parse(self): self.assertEqual(TypeSpecifier('*'), TypeSpecifier.parse('*')) self.assertEqual(TypeSpecifier('dataset'), TypeSpecifier.parse('dataset')) self.assertEqual(TypeSpecifier('dataset', {'cube', 'multilevel'}), TypeSpecifier.parse('dataset[cube,multilevel]'))