73 lines
2.5 KiB
Python
73 lines
2.5 KiB
Python
from urllib import request
|
|
from io import TextIOWrapper
|
|
from itertools import groupby
|
|
import re
|
|
import json
|
|
from meta_release import SourceMetaRelease, MetaRelease
|
|
|
|
|
|
RELEASE_WORD_MATCHER = r'(^\Origin\:\s|Label:\s|Suite:\s|Version:\s|Codename:\s|Date:\s|Architecture:\s|Components:\s|Description\:\s|MD5Sum:\s)'
|
|
|
|
class Release:
|
|
def __init__(self, distro_codename):
|
|
# example url:http://old-releases.ubuntu.com/ubuntu/dists/hoary/Release
|
|
# example distro_codename = 'hoary'
|
|
self.distro_codename = distro_codename
|
|
self.meta_release = self.changelog_release_file()
|
|
|
|
def changelog_release_file(self):
|
|
meta_release = SourceMetaRelease().meta_release_parse()
|
|
return meta_release
|
|
|
|
def distro_release_file_urls(self):
|
|
meta_release_objects = []
|
|
|
|
for d in self.meta_release:
|
|
meta_release_obj = MetaRelease(d)
|
|
dist_and_release_file_url = { meta_release_obj.dist, meta_release_obj.release_file }
|
|
print(type(dist_and_release_file_url))
|
|
meta_release_objects.append(dist_and_release_file_url)
|
|
|
|
return meta_release_objects
|
|
|
|
def release_file_parse(self, release_file_url):
|
|
""" Returns the meta_release_file parsed as a list of dicts """
|
|
with request.urlopen(f'{release_file_url}') as response:
|
|
index_counter = 0
|
|
lines = TextIOWrapper(response, encoding='utf-8')
|
|
stripped_lines = [
|
|
re.split(RELEASE_WORD_MATCHER, l.strip()) for l in
|
|
lines ]
|
|
print(stripped_lines)
|
|
grouped_lines = [list(group) for key, group in
|
|
groupby(stripped_lines, lambda x: x == []) if not key]
|
|
list_of_dicts = []
|
|
|
|
for group in grouped_lines:
|
|
d = {}
|
|
# list of each group
|
|
for arr in group:
|
|
arr_per_group = len(group)
|
|
k = arr[0].lower().replace(":", "").strip()
|
|
v = arr[1].strip()
|
|
|
|
# this builds up our dict by adding one k,v pair per key
|
|
d[f"{k}"] = v
|
|
|
|
list_of_dicts.append(d) if arr_per_group == len(d.keys()) else None
|
|
|
|
return list_of_dicts
|
|
|
|
if __name__ == '__main__':
|
|
# testing
|
|
|
|
r = Release('focal')
|
|
release_file_urls = r.distro_release_file_urls()
|
|
|
|
for meta_release in release_file_urls:
|
|
print(meta_release)
|
|
#keys = meta_release.keys()
|
|
#for distro in keys:
|
|
# url = meta_release[distro]
|
|
# print(url)
|
|
|