5 changed files with 68 additions and 0 deletions
@ -0,0 +1,45 @@
@@ -0,0 +1,45 @@
|
||||
import sys |
||||
|
||||
from django.conf import settings |
||||
from django.core.management.base import BaseCommand, CommandError |
||||
|
||||
import requests |
||||
from packaging import version |
||||
|
||||
from benevalibre import __version__ |
||||
|
||||
|
||||
class Command(BaseCommand): |
||||
help = 'Check for available upgrade' |
||||
|
||||
def add_arguments(self, parser): |
||||
parser.add_argument( |
||||
'--warn', |
||||
action='store_true', |
||||
help='Exit error code when new release is available', |
||||
) |
||||
|
||||
def handle(self, *args, **options): |
||||
try: |
||||
r = requests.get(settings.UPSTREAM_RELEASES) |
||||
except Exception as e: |
||||
raise CommandError('Unable to fetch upstream versions:', e) |
||||
|
||||
current_version = version.parse(__version__) |
||||
upstream_versions = [version.parse(v['name']) for v in r.json()] |
||||
release_versions = [ |
||||
v for v in upstream_versions if not v.is_prerelease |
||||
] |
||||
|
||||
if any([v > current_version for v in release_versions]): |
||||
self.stdout.write( |
||||
self.style.WARNING( |
||||
'New version available: {}'.format(max(release_versions)) |
||||
) |
||||
) |
||||
if options['warn']: |
||||
sys.exit(1) |
||||
else: |
||||
self.stdout.write( |
||||
self.style.SUCCESS('Already to the last available version') |
||||
) |
Loading…
Reference in new issue