#!/usr/bin/env python
import os, sys, urllib, urllib2, urlparse

if not os.environ.has_key("SAGE_ROOT"):
     raise RuntimeError, "The environment variable SAGE_ROOT must be set"
SAGE_SPKG_INST=os.environ.get("SAGE_SPKG_INST",
        os.path.join(os.environ["SAGE_ROOT"],'spkg','installed'))


if not os.environ.has_key("SAGE_SERVER"):
     print "The environment variable SAGE_SERVER must be set"
     sys.exit(1)

PKG_SERVER = urlparse.urljoin(os.environ['SAGE_SERVER'],'packages')
print "Using SAGE Server %s"%PKG_SERVER

url_path = os.path.join('packages', sys.argv[1], 'list')
url = urlparse.urljoin(PKG_SERVER, urllib.pathname2url(url_path))

try:
     installed = set(os.listdir(SAGE_SPKG_INST))
except OSError:
     installed = set([])
     
try:
    pkg_list_file = urllib2.urlopen(url)
except (OSError, IOError), msg:
    print msg
    print "\n\n"
    print "*"*80
    print "\n\n"
    print "Error contacting %s. Try using an alternative server."%url
    print "For example, from the bash prompt try typing\n"
    print "   export SAGE_SERVER=http://sage.scipy.org/sage/\n"
    print "then try again."
    print "\n\n"
    print "*"*80
    print "\n\n"
    sys.exit(1)

do_have = []
dont_have = []
for pkg_name in pkg_list_file.readlines():
    pkg_name = pkg_name.rstrip()  # get rid of \n
    if pkg_name in installed:
        do_have.append(pkg_name)
    else:
        dont_have.append(pkg_name)
print " ***********************************"
print "    ***  %s Packages   ***"%sys.argv[1]
print " ***********************************\n"
print "INSTALLED:\n" + '\n'.join(do_have)
print "\nNOT INSTALLED:\n" + '\n'.join(dont_have)
print "\nType 'sage -i package_name' to download and install a package."

pkg_list_file.close()
