Skip to content
Snippets Groups Projects
autoupdate.py 1.43 KiB
Newer Older
gling's avatar
gling committed
import os
import click
import importlib_metadata
from . import colors as c
import urllib.request
import re
import subprocess
import sys
import pkg_resources

PACKAGE_NAME='chipforge'
INDEX_URL='https://git.ece.iastate.edu/api/v4/projects/6561/packages/pypi/simple/'


def autoupdate():
  try:
    my_version = importlib_metadata.version(PACKAGE_NAME)
    (my_major, my_minor, my_patch) = my_version.split('.')

    with urllib.request.urlopen(INDEX_URL + PACKAGE_NAME) as file:
      index = file.read().decode('utf-8')

    versions = re.findall(r'href="[^#]+-(\d+\.\d+\.\d+)-py3-none-any.whl', index)
    for version in versions:
      (major, minor, patch) = version.split('.')
      needs_update = False
      if my_major < major:
        needs_update = True
        break
      if my_major == major:
        if my_minor < minor:
          needs_update = True
          break
        if my_minor == minor:
          if my_patch < patch:
            needs_update = True
            break

    if needs_update:
      click.echo(c.info('New version found, updating...'))
      click.echo(c.info('Running ' + ' '.join([sys.executable, '-m', 'pip', 'install', 'chipforge', '-U', '--user', '--index-url', INDEX_URL])))
      subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'chipforge', '-U', '--user', '--index-url', INDEX_URL], shell=False)
      os.execvp(sys.argv[0], sys.argv)
      
  except importlib_metadata.PackageNotFoundError: pass

autoupdate()