diff --git a/trollsift/parser.py b/trollsift/parser.py index 7981c9c..3f33f9a 100644 --- a/trollsift/parser.py +++ b/trollsift/parser.py @@ -89,6 +89,39 @@ def is_one2one(self): return is_one2one(self.fmt) +def extract_parsedef(fmt): + """Retrieve parse definiotons from the format string *fmt*.""" + return _extract_parsedef(fmt) + + +def _extract_parsedef(fmt): + '''Retrieve parse definition from the format string *fmt*. + ''' + import warnings + warnings.warn("'_extract_parsedef()' is deprecated, use 'extract_parsedef'" + " instead", DeprecationWarning) + + parsedef = [] + convdef = {} + + for part1 in fmt.split('}'): + part2 = part1.split('{', 1) + if part2[0] is not '': + parsedef.append(part2[0]) + if len(part2) > 1 and part2[1] is not '': + if ':' in part2[1]: + part2 = part2[1].split(':', 1) + parsedef.append({part2[0]: part2[1]}) + convdef[part2[0]] = part2[1] + else: + reg = re.search('(\{' + part2[1] + '\})', fmt) + if reg: + parsedef.append({part2[1]: None}) + else: + parsedef.append(part2[1]) + return parsedef, convdef + + class StringFormatter(string.Formatter): """Custom string formatter class for basic strings. diff --git a/trollsift/tests/unittests/test_parser.py b/trollsift/tests/unittests/test_parser.py index 47c1c25..6961f83 100644 --- a/trollsift/tests/unittests/test_parser.py +++ b/trollsift/tests/unittests/test_parser.py @@ -4,6 +4,7 @@ from trollsift.parser import get_convert_dict, regex_formatter from trollsift.parser import _convert from trollsift.parser import parse, globify, validate, is_one2one +from trollsift.parser import _extract_parsedef class TestParser(unittest.TestCase): @@ -16,6 +17,17 @@ def setUp(self): self.string3 = "/somedir/otherdir/hrpt_noaa16_20140210_1004_69022" self.string4 = "/somedir/otherdir/hrpt_noaa16_20140210_1004_69022" + def test_extract_parsedef(self): + # Run + result, dummy = _extract_parsedef(self.fmt) + # Assert + self.assertEqual(result, + ['/somedir/', {'directory': None}, + '/hrpt_', {'platform': '4s'}, + {'platnum': '2s'}, + '_', {'time': '%Y%m%d_%H%M'}, + '_', {'orbit': '05d'}, '.l1b']) + def test_get_convert_dict(self): # Run result = get_convert_dict(self.fmt)