#!/usr/bin/env python from __future__ import with_statement from contextlib import closing import json import os import sys import tarfile import urllib2 release_url = "http://downloads.openmedialibrary.com/release.json" release_url = "http://c.local/oml/release.json" def get_release(): with closing(urllib2.urlopen(release_url)) as u: data = json.load(u) return data def download(url, filename): dirname = os.path.dirname(filename) if dirname and not os.path.exists(dirname): os.makedirs(dirname) print url, filename with open(filename, 'w') as f: with closing(urllib2.urlopen(url)) as u: data = u.read(4096) while data: f.write(data) data = u.read(4096) def install_launchd(base): plist = os.path.expanduser('~/Library/LaunchAgents/com.openmedialibrary.loginscript.plist') with open(plist, 'w') as f: f.write(''' Label com.openmedialibrary.loginscript ProgramArguments %s/ctl start RunAtLoad ''' % base) os.system('launchctl load "%s"' % plist) os.system('launchctl start com.openmedialibrary.loginscript') if __name__ == '__main__': if len(sys.argv) == 1: target = os.path.join(os.curdir, 'openmedialibrary') elif len(sys.argv) != 2: print "usage: %s target" % sys.argv[0] sys.exit(1) else: target = sys.argv[1] target = os.path.normpath(os.path.join(os.path.abspath(target))) if not os.path.exists(target): os.makedirs(target) os.chdir(target) release = get_release() packages = ['contrib', 'openmedialibrary'] if sys.platform == 'darwin': packages.append('platform') for package in packages: package_tar = '%s.tar.bz2' % package download(release[package]['url'], package_tar) tar = tarfile.open(package_tar) tar.extractall() tar.close() os.unlink(package_tar) os.symlink('openmedialibrary/ctl', 'ctl') with open('release.json', 'w') as fd: json.dump(release, fd, indent=2) if sys.platform == 'darwin': cmd = 'Open OpenMediaLibrary.command' with open(cmd, 'w') as fd: fd.write('''#!/bin/sh cd `dirname "$0"` ./ctl start ./ctl open ''') os.chmod(cmd, 0755) install_launchd(target) elif sys.platform == 'linux2': #fixme, do only if on debian/ubuntu os.sysrem('sudo apt-get install python-imaging python-setproctitle python-simplejson')