| #!/usr/bin/env python |
| |
| # This Source Code Form is subject to the terms of the Mozilla Public |
| # License, v. 2.0. If a copy of the MPL was not distributed with this file, |
| # You can obtain one at http://mozilla.org/MPL/2.0/. |
| |
| """ |
| utility functions for mozrunner |
| """ |
| |
| __all__ = ['findInPath', 'get_metadata_from_egg'] |
| |
| import mozinfo |
| import os |
| import sys |
| |
| |
| ### python package method metadata by introspection |
| try: |
| import pkg_resources |
| def get_metadata_from_egg(module): |
| ret = {} |
| try: |
| dist = pkg_resources.get_distribution(module) |
| except pkg_resources.DistributionNotFound: |
| return {} |
| if dist.has_metadata("PKG-INFO"): |
| key = None |
| for line in dist.get_metadata("PKG-INFO").splitlines(): |
| # see http://www.python.org/dev/peps/pep-0314/ |
| if key == 'Description': |
| # descriptions can be long |
| if not line or line[0].isspace(): |
| value += '\n' + line |
| continue |
| else: |
| key = key.strip() |
| value = value.strip() |
| ret[key] = value |
| |
| key, value = line.split(':', 1) |
| key = key.strip() |
| value = value.strip() |
| ret[key] = value |
| if dist.has_metadata("requires.txt"): |
| ret["Dependencies"] = "\n" + dist.get_metadata("requires.txt") |
| return ret |
| except ImportError: |
| # package resources not avaialable |
| def get_metadata_from_egg(module): |
| return {} |
| |
| |
| def findInPath(fileName, path=os.environ['PATH']): |
| """python equivalent of which; should really be in the stdlib""" |
| dirs = path.split(os.pathsep) |
| for dir in dirs: |
| if os.path.isfile(os.path.join(dir, fileName)): |
| return os.path.join(dir, fileName) |
| if mozinfo.isWin: |
| if os.path.isfile(os.path.join(dir, fileName + ".exe")): |
| return os.path.join(dir, fileName + ".exe") |
| |
| if __name__ == '__main__': |
| for i in sys.argv[1:]: |
| print findInPath(i) |