trying to add a release class now
This commit is contained in:
parent
d4a1ad9578
commit
5f00b4e581
3 changed files with 96 additions and 32 deletions
|
@ -62,3 +62,11 @@ Description-md5: 8f4d76592086bd210b07fd8b6370be43
|
|||
# below command can be used to check the output number of results
|
||||
wc -l source_packages_remote_ubuntu_2004.default
|
||||
13991 source_packages_remote_ubuntu_2004.default
|
||||
|
||||
#### IPython examples using library:
|
||||
```
|
||||
# setup base launchpad client
|
||||
from ubuntu_launchpad_distro_archive_lookup import UbuntuDistroLaunchpad as udl
|
||||
|
||||
launchpad = udl().launchpad
|
||||
```
|
||||
|
|
|
@ -40,26 +40,28 @@ class SourceMetaRelease:
|
|||
return list_of_dicts
|
||||
|
||||
|
||||
class MetaRelease:
|
||||
class MetaRelease(object):
|
||||
"""
|
||||
MetaRelease(): an object for holding onto the contents of a
|
||||
meta_release entry
|
||||
"""
|
||||
def __init__(self, dist=None, name=None, version=None, date=None,
|
||||
def __init__(self, meta_dict, dist=None, name=None, version=None, date=None,
|
||||
supported=None, description=None, release_file=None,
|
||||
release_notes=None, release_notes_html=None,
|
||||
upgrade_tool=None, upgrade_tool_signature=None):
|
||||
|
||||
self.dist = dist
|
||||
self.name = name
|
||||
self.version = version
|
||||
self.supported = supported
|
||||
self.description = description
|
||||
self.release_file = release_file
|
||||
self.release_notes = release_notes
|
||||
self.release_notes_html = release_notes_html
|
||||
self.upgrade_tool = upgrade_tool
|
||||
self.upgrade_tool_signature = upgrade_tool_signature
|
||||
# swtich back to get
|
||||
self.dist = meta_dict.get('dist', None)
|
||||
self.name = meta_dict.get('name', None)
|
||||
self.version = meta_dict.get('version', None)
|
||||
self.supported = meta_dict.get('supported', None)
|
||||
self.description = meta_dict.get('description', None)
|
||||
self.release_file = meta_dict.get('release-file', None)
|
||||
self.release_notes = meta_dict.get('releasenotes', None)
|
||||
self.release_notes_html = meta_dict.get('releasenoteshtml', None)
|
||||
self.upgrade_tool = meta_dict.get('upgradetool', None)
|
||||
self.upgrade_tool_signature = meta_dict.get('upgradetoolsignature', None)
|
||||
|
||||
|
||||
def to_json(self):
|
||||
return json.dumps(self, default=lambda o: o.__dict__,
|
||||
|
@ -70,26 +72,7 @@ class MetaReleaseJsons:
|
|||
self.meta_release = meta_release
|
||||
|
||||
def build(self):
|
||||
jsons = []
|
||||
for d in self.meta_release:
|
||||
keys = d.keys()
|
||||
|
||||
meta_release_obj = MetaRelease(
|
||||
dist = d.get('dist', None),
|
||||
name = d.get('name', None),
|
||||
version = d.get('version', None),
|
||||
supported = d.get('supported', None),
|
||||
description = d.get('description', None),
|
||||
release_file = d.get('release-file', None),
|
||||
release_notes = d.get('releasenotes', None),
|
||||
release_notes_html = d.get('releasenoteshtml', None),
|
||||
upgrade_tool = d.get('upgradetool', None),
|
||||
upgrade_tool_signature = d.get('upgradetoolsignature', None)
|
||||
)
|
||||
|
||||
jsons.append(meta_release_obj.to_json())
|
||||
|
||||
return jsons
|
||||
return [ MetaRelease(meta_dict).to_json() for meta_dict in self.meta_release ]
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
73
tools/ubuntu_package_puller/release.py
Normal file
73
tools/ubuntu_package_puller/release.py
Normal file
|
@ -0,0 +1,73 @@
|
|||
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)
|
||||
|
Loading…
Add table
Reference in a new issue