1
0
mirror of https://github.com/QSCTech/zjunet.git synced 2026-01-22 19:54:48 +08:00

Add legacy standalone python support in changelog.py

This commit is contained in:
Wu Yufei 2020-11-13 00:48:01 +08:00
parent fc48eff092
commit fce9e2a69d
No known key found for this signature in database
GPG Key ID: 226E1C0EDF292D66

View File

@ -1,18 +1,43 @@
#!/usr/bin/env python3 #!/usr/bin/env python
from __future__ import print_function
import os import os
import sys import sys
import json import json
import urllib3
import base64 import base64
import datetime import datetime
def get_time(s): reload(sys)
if 'fromisoformat' in dir(datetime.datetime): sys.setdefaultencoding('utf8')
return datetime.datetime.fromisoformat(s.replace('Z', '+00:00'))
else: try:
return __import__('dateutil.parser').parser.parse(s) import urllib3
http = urllib3.PoolManager()
def makereq(url, headers):
return http.request('GET', url, headers=headers)
except ImportError:
import urllib2 as request
class MyResponse:
def __init__(self, status, data):
self.status = status
self.data = data
def makereq(url, headers):
f = request.urlopen(request.Request(url, headers=headers))
return MyResponse(f.getcode(), f.read().decode('utf-8'))
if 'fromisoformat' in dir(datetime.datetime):
def get_time(s):
return datetime.datetime.fromisoformat(s.replace('Z', '+00:00'))
else:
try:
from dateutil.parser import parser
def get_time(s):
return parser().parse(s)
except ImportError:
def get_time(s):
return datetime.datetime.strptime(s, "%Y-%m-%dT%H:%M:%SZ")
http = urllib3.PoolManager()
GITHUB_AUTH = None GITHUB_AUTH = None
tok = os.getenv('GITHUB_TOKEN') tok = os.getenv('GITHUB_TOKEN')
@ -30,7 +55,7 @@ def get(url):
} }
if GITHUB_AUTH is not None: if GITHUB_AUTH is not None:
headers['Authorization'] = GITHUB_AUTH headers['Authorization'] = GITHUB_AUTH
r = http.request('GET', url, headers=headers) r = makereq(url, headers=headers)
assert r.status // 100 == 2, 'HTTP Status {} != 2xx while requesting {}'.format(r.status, url) assert r.status // 100 == 2, 'HTTP Status {} != 2xx while requesting {}'.format(r.status, url)
if r.status != 200: if r.status != 200:
print('WARNING: HTTP {} while requesting {}'.format(r.status, url)) print('WARNING: HTTP {} while requesting {}'.format(r.status, url))
@ -43,18 +68,18 @@ author_cache = {}
def get_author(name): def get_author(name):
if name in author_cache: if name in author_cache:
return author_cache[name] return author_cache[name]
print('Reading data for {}'.format(name), end=' : ', flush=True, file=sys.stderr) print('Reading data for {}'.format(name), end=' : ', file=sys.stderr)
data = api_get('users/{}'.format(name)) data = api_get('users/{}'.format(name))
data = { data = {
'name': data['name'], 'name': data['name'],
'email': data['email'], 'email': data['email'],
} }
author_cache[name] = data author_cache[name] = data
print('{} <{}>'.format(data['name'], data['email']), flush=True, file=sys.stderr) print('{} <{}>'.format(data['name'], data['email']), file=sys.stderr)
return data return data
def get_changelog(owner, name): def get_changelog(owner, name):
print('Reading releases of {1} in {0}'.format(owner, name), flush=True, file=sys.stderr) print('Reading releases of {1} in {0}'.format(owner, name), file=sys.stderr)
releases = api_get('repos/{}/{}/releases'.format(owner, name)) releases = api_get('repos/{}/{}/releases'.format(owner, name))
releases = filter(lambda v: not v['draft'] and not v['prerelease'], releases) releases = filter(lambda v: not v['draft'] and not v['prerelease'], releases)
@ -89,13 +114,13 @@ class ChangeLog:
rel += item['changes'] + '\n' rel += item['changes'] + '\n'
return rel return rel
available_formats = dir(ChangeLog) available_formats = list(filter(lambda v: v[0] != '_', dir(ChangeLog)))
if len(sys.argv) != 2: if len(sys.argv) != 2:
print('Usage: {} <format>\nAvailable formats: {}'.format(sys.argv[0], ','.join(ChangeLog))) print('Usage: {} <format>\nAvailable formats: {}'.format(sys.argv[0], ','.join(available_formats)))
else: else:
changelog = get_changelog('QSCTech', 'zjunet') changelog = get_changelog('QSCTech', 'zjunet')
if hasattr(changelog, sys.argv[1]): if hasattr(changelog, sys.argv[1]):
print(getattr(changelog, sys.argv[1])()) print(getattr(changelog, sys.argv[1])())
else: else:
print('Invalid format {}\nAvailable formats: {}'.format()) print('Invalid format {}\nAvailable formats: {}'.format(','.join(available_formats)))