PageRenderTime 44ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/lib-python/2.7/ctypes/macholib/framework.py

https://bitbucket.org/bwesterb/pypy
Python | 68 lines | 59 code | 3 blank | 6 comment | 0 complexity | ca48e38e802aa6db8b4b03002b6f3173 MD5 | raw file
  1. ######################################################################
  2. # This file should be kept compatible with Python 2.3, see PEP 291. #
  3. ######################################################################
  4. """
  5. Generic framework path manipulation
  6. """
  7. import re
  8. __all__ = ['framework_info']
  9. STRICT_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. def framework_info(filename):
  19. """
  20. A framework name can take one of the following four forms:
  21. Location/Name.framework/Versions/SomeVersion/Name_Suffix
  22. Location/Name.framework/Versions/SomeVersion/Name
  23. Location/Name.framework/Name_Suffix
  24. Location/Name.framework/Name
  25. returns None if not found, or a mapping equivalent to:
  26. dict(
  27. location='Location',
  28. name='Name.framework/Versions/SomeVersion/Name_Suffix',
  29. shortname='Name',
  30. version='SomeVersion',
  31. suffix='Suffix',
  32. )
  33. Note that SomeVersion and Suffix are optional and may be None
  34. if not present
  35. """
  36. is_framework = STRICT_FRAMEWORK_RE.match(filename)
  37. if not is_framework:
  38. return None
  39. return is_framework.groupdict()
  40. def test_framework_info():
  41. def d(location=None, name=None, shortname=None, version=None, suffix=None):
  42. return dict(
  43. location=location,
  44. name=name,
  45. shortname=shortname,
  46. version=version,
  47. suffix=suffix
  48. )
  49. assert framework_info('completely/invalid') is None
  50. assert framework_info('completely/invalid/_debug') is None
  51. assert framework_info('P/F.framework') is None
  52. assert framework_info('P/F.framework/_debug') is None
  53. assert framework_info('P/F.framework/F') == d('P', 'F.framework/F', 'F')
  54. assert framework_info('P/F.framework/F_debug') == d('P', 'F.framework/F_debug', 'F', suffix='debug')
  55. assert framework_info('P/F.framework/Versions') is None
  56. assert framework_info('P/F.framework/Versions/A') is None
  57. assert framework_info('P/F.framework/Versions/A/F') == d('P', 'F.framework/Versions/A/F', 'F', 'A')
  58. assert framework_info('P/F.framework/Versions/A/F_debug') == d('P', 'F.framework/Versions/A/F_debug', 'F', 'A', 'debug')
  59. if __name__ == '__main__':
  60. test_framework_info()