deps: Look up deps in pkg_resources

This commit is contained in:
Stein Magnus Jodal 2013-04-16 22:33:06 +02:00
parent 5de80228ea
commit 609b6ace85
2 changed files with 65 additions and 0 deletions

View File

@ -1,5 +1,6 @@
from __future__ import unicode_literals
import functools
import os
import platform
import sys
@ -8,6 +9,7 @@ import pygst
pygst.require('0.10')
import gst
import pkg_resources
import pykka
from . import formatting
@ -37,8 +39,17 @@ def format_dependency_list(adapters=None):
serial_info,
cherrypy_info,
ws4py_info,
functools.partial(pkg_info, 'Mopidy', True),
]
dist_names = set([
ep.dist.project_name for ep in
pkg_resources.iter_entry_points('mopidy.ext')
if ep.dist.project_name != 'Mopidy'])
for dist_name in dist_names:
adapters.append(
functools.partial(pkg_info, dist_name))
return '\n'.join([_format_dependency(a()) for a in adapters])
@ -83,6 +94,21 @@ def python_info():
}
def pkg_info(project_name=None, include_extras=False):
if project_name is None:
project_name = 'Mopidy'
distribution = pkg_resources.get_distribution(project_name)
extras = include_extras and distribution.extras or []
dependencies = [
pkg_info(d) for d in distribution.requires(extras)]
return {
'name': distribution.project_name,
'version': distribution.version,
'path': distribution.location,
'dependencies': dependencies,
}
def gstreamer_info():
other = []
other.append('Python wrapper: gst-python %s' % (

View File

@ -5,6 +5,8 @@ import platform
import pygst
pygst.require('0.10')
import gst
import mock
import pykka
try:
@ -156,3 +158,40 @@ class DepsTest(unittest.TestCase):
self.assertEquals('ws4py', result['name'])
self.assertEquals(ws4py.__version__, result['version'])
self.assertIn('ws4py', result['path'])
@mock.patch('pkg_resources.get_distribution')
def test_pkg_info(self, get_distribution_mock):
dist_mopidy = mock.Mock()
dist_mopidy.project_name = 'Mopidy'
dist_mopidy.version = '0.13'
dist_mopidy.location = '/tmp/example/mopidy'
dist_mopidy.requires.return_value = ['Pykka']
dist_pykka = mock.Mock()
dist_pykka.project_name = 'Pykka'
dist_pykka.version = '1.1'
dist_pykka.location = '/tmp/example/pykka'
dist_pykka.requires.return_value = ['setuptools']
dist_setuptools = mock.Mock()
dist_setuptools.project_name = 'setuptools'
dist_setuptools.version = '0.6'
dist_setuptools.location = '/tmp/example/setuptools'
dist_setuptools.requires.return_value = []
get_distribution_mock.side_effect = [
dist_mopidy, dist_pykka, dist_setuptools]
result = deps.pkg_info()
self.assertEquals('Mopidy', result['name'])
self.assertEquals('0.13', result['version'])
self.assertIn('mopidy', result['path'])
dep_info_pykka = result['dependencies'][0]
self.assertEquals('Pykka', dep_info_pykka['name'])
self.assertEquals('1.1', dep_info_pykka['version'])
dep_info_setuptools = dep_info_pykka['dependencies'][0]
self.assertEquals('setuptools', dep_info_setuptools['name'])
self.assertEquals('0.6', dep_info_setuptools['version'])