diff --git a/Open Media Library/AppDelegate.swift b/Open Media Library/AppDelegate.swift index 8e3b6c7..ba05849 100644 --- a/Open Media Library/AppDelegate.swift +++ b/Open Media Library/AppDelegate.swift @@ -41,7 +41,7 @@ class AppDelegate: NSObject, NSApplicationDelegate { let install_py = resourcePath?.stringByAppendingString("/install.py") let install_html = resourcePath?.stringByAppendingString("/install.html") let install = NSTask() - install.launchPath = "/usr/bin/python" + install.launchPath = "/usr/bin/python3" install.arguments = [install_py!] install.launch() open(install_html!) diff --git a/Open Media Library/Resources/install.py b/Open Media Library/Resources/install.py index 9fc4f0f..6d9d2d8 100755 --- a/Open Media Library/Resources/install.py +++ b/Open Media Library/Resources/install.py @@ -1,5 +1,5 @@ -#!/usr/bin/env python -from __future__ import division, with_statement, print_function +#!/usr/bin/env python3 + from contextlib import closing import json @@ -7,19 +7,23 @@ import os import sys import time import tarfile -import urllib2 -import SimpleHTTPServer -import SocketServer +import urllib.request +import urllib.error +import urllib.parse +import http.server +import socketserver from threading import Thread PORT = 9841 static_dir = os.path.normpath(os.path.abspath(os.path.dirname(__file__))) + def makedirs(dirname): if not os.path.exists(dirname): os.makedirs(dirname) + def get_platform(): name = sys.platform if name.startswith('darwin'): @@ -32,7 +36,8 @@ def get_platform(): name = 'linux32' return name -class Handler(SimpleHTTPServer.SimpleHTTPRequestHandler): + +class Handler(http.server.SimpleHTTPRequestHandler): def do_OPTIONS(self): self.send_response(200, 'OK') self.send_header('Allow', 'GET, POST, OPTIONS') @@ -49,7 +54,7 @@ class Handler(SimpleHTTPServer.SimpleHTTPRequestHandler): else: path = os.path.join(static_dir, 'index.html' if self.path == '/' else self.path[1:]) if os.path.exists(path): - with open(path) as fd: + with open(path, 'rb') as fd: content = fd.read() self.send_response(200, 'OK') content_type = { @@ -65,6 +70,8 @@ class Handler(SimpleHTTPServer.SimpleHTTPRequestHandler): self.send_header('Access-Control-Allow-Origin', '*') self.send_header('Content-Length', str(len(content))) self.end_headers() + if isinstance(content, str): + content = content.encode() self.wfile.write(content) @@ -118,8 +125,8 @@ class Install(Thread): dirname = os.path.dirname(filename) if dirname: makedirs(dirname) - with open(filename, 'w') as f: - with closing(urllib2.urlopen(url)) as u: + with open(filename, 'wb') as f: + with closing(urllib.request.urlopen(url)) as u: size = int(u.headers.get('content-length', 0)) self.status["size"] = size available = 0 @@ -131,7 +138,7 @@ class Install(Thread): data = u.read(4096) def get_release(self): - with closing(urllib2.urlopen(self.release_url)) as u: + with closing(urllib.request.urlopen(self.release_url)) as u: data = json.load(u) return data @@ -144,8 +151,8 @@ if __name__ == '__main__': sys.exit(1) else: target = sys.argv[1] - SocketServer.TCPServer.allow_reuse_address = True - httpd = SocketServer.TCPServer(("", PORT), Handler) + socketserver.TCPServer.allow_reuse_address = True + httpd = socketserver.TCPServer(("", PORT), Handler) install = Install(target, httpd) httpd.install = install httpd.serve_forever()