Source code for rosdistro.aptdistro
try:
from urllib2 import urlopen
except ImportError:
from urllib.request import urlopen
[docs]class AptDistro:
def __init__(self, ubuntudistro, arch, shadow=True):
if shadow:
url = 'http://packages.ros.org/ros-shadow-fixed/ubuntu/dists/{0}/main/binary-{1}/Packages'
url = urlopen(url.format(ubuntudistro, arch))
else:
url = 'http://packages.ros.org/ros/ubuntu/dists/{0}/main/binary-{1}/Packages'
url = urlopen(url.format(ubuntudistro, arch))
self.dep = {}
package = None
for l in url.read().split('\n'):
if l.startswith('Package: '):
package = l[len('Package: '):]
if l.startswith('Depends: '):
if not package:
raise RuntimeError("Found 'Depends: ' but not 'Package: ' while parsing the apt repository index file")
self.dep[package] = [d.split(' ')[0] for d in (l[len('Depends: '):].split(', '))]
package = None
[docs] def has_package(self, package):
return package in self.dep
[docs] def depends1(self, package):
return self.depends(package, one=True)
[docs] def depends(self, package, res=None, one=False):
if res is None:
res = []
if package in self.dep:
for d in self.dep[package]:
if d not in res:
res.append(d)
if not one:
self.depends(d, res, one)
return res
[docs] def depends_on1(self, package):
return self.depends_on(package, one=True)
[docs] def depends_on(self, package, res=None, one=False):
if res is None:
res = []
for p, dep in self.dep.iteritems():
if package in dep:
if p not in res:
res.append(p)
if not one:
self.depends_on(p, res, one)
return res