source: titan/mediathek/localhoster/lib/python2.7/ctypes/macholib/framework.py @ 40658

Last change on this file since 40658 was 40658, checked in by obi, 7 years ago

update python stuff

File size: 2.1 KB
Line 
1"""
2Generic framework path manipulation
3"""
4
5import re
6
7__all__ = ['framework_info']
8
9STRICT_FRAMEWORK_RE = re.compile(r"""(?x)
10(?P<location>^.*)(?:^|/)
11(?P<name>
12    (?P<shortname>\w+).framework/
13    (?:Versions/(?P<version>[^/]+)/)?
14    (?P=shortname)
15    (?:_(?P<suffix>[^_]+))?
16)$
17""")
18
19def framework_info(filename):
20    """
21    A framework name can take one of the following four forms:
22        Location/Name.framework/Versions/SomeVersion/Name_Suffix
23        Location/Name.framework/Versions/SomeVersion/Name
24        Location/Name.framework/Name_Suffix
25        Location/Name.framework/Name
26
27    returns None if not found, or a mapping equivalent to:
28        dict(
29            location='Location',
30            name='Name.framework/Versions/SomeVersion/Name_Suffix',
31            shortname='Name',
32            version='SomeVersion',
33            suffix='Suffix',
34        )
35
36    Note that SomeVersion and Suffix are optional and may be None
37    if not present
38    """
39    is_framework = STRICT_FRAMEWORK_RE.match(filename)
40    if not is_framework:
41        return None
42    return is_framework.groupdict()
43
44def test_framework_info():
45    def d(location=None, name=None, shortname=None, version=None, suffix=None):
46        return dict(
47            location=location,
48            name=name,
49            shortname=shortname,
50            version=version,
51            suffix=suffix
52        )
53    assert framework_info('completely/invalid') is None
54    assert framework_info('completely/invalid/_debug') is None
55    assert framework_info('P/F.framework') is None
56    assert framework_info('P/F.framework/_debug') is None
57    assert framework_info('P/F.framework/F') == d('P', 'F.framework/F', 'F')
58    assert framework_info('P/F.framework/F_debug') == d('P', 'F.framework/F_debug', 'F', suffix='debug')
59    assert framework_info('P/F.framework/Versions') is None
60    assert framework_info('P/F.framework/Versions/A') is None
61    assert framework_info('P/F.framework/Versions/A/F') == d('P', 'F.framework/Versions/A/F', 'F', 'A')
62    assert framework_info('P/F.framework/Versions/A/F_debug') == d('P', 'F.framework/Versions/A/F_debug', 'F', 'A', 'debug')
63
64if __name__ == '__main__':
65    test_framework_info()
Note: See TracBrowser for help on using the repository browser.