2022-08-17 01:52:44 -05:00
|
|
|
from launchpadlib.launchpad import Launchpad
|
|
|
|
from collections import defaultdict
|
|
|
|
|
|
|
|
class PackageVersionHistory:
|
2022-08-18 23:27:51 -05:00
|
|
|
"""
|
|
|
|
Use launchpadlib api to query for the package history tree
|
|
|
|
of a target source_package_name + distro_series
|
|
|
|
"""
|
2022-08-17 01:52:44 -05:00
|
|
|
def __init__(self, name, distro_series):
|
|
|
|
self.name = name
|
|
|
|
self.distro_series = distro_series
|
|
|
|
self.launchpad = self.login()
|
|
|
|
|
|
|
|
def login(self):
|
2022-08-18 23:27:51 -05:00
|
|
|
return Launchpad.login_anonymously('package_version_history_lookup', 'production')
|
2022-08-17 01:52:44 -05:00
|
|
|
|
|
|
|
def set_ubuntu(self):
|
|
|
|
return self.launchpad.distributions['ubuntu']
|
|
|
|
|
|
|
|
def set_distro_series(self):
|
|
|
|
ubuntu = self.set_ubuntu()
|
|
|
|
return ubuntu.getSeries(name_or_version=self.distro_series)
|
|
|
|
|
|
|
|
def set_archive(self):
|
|
|
|
ubuntu = self.set_ubuntu()
|
|
|
|
return ubuntu.main_archive
|
|
|
|
|
|
|
|
def get_published_sources(self):
|
|
|
|
archive = self.set_archive()
|
|
|
|
series = self.set_distro_series()
|
|
|
|
return archive.getPublishedSources(source_name=self.name, distro_series=series)
|
|
|
|
|
|
|
|
def package_name_and_version_history(self):
|
|
|
|
sources = self.get_published_sources()
|
|
|
|
results = []
|
|
|
|
for source in sources:
|
|
|
|
name = source.source_package_name
|
|
|
|
version = source.source_package_version
|
|
|
|
results.append((name, version))
|
|
|
|
|
|
|
|
d = defaultdict(list)
|
|
|
|
for k, v in results:
|
|
|
|
d[k].append(v)
|
|
|
|
|
|
|
|
return sorted(d.items())
|