mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-11-04 08:35:12 +00:00 
			
		
		
		
	[buildserver] Fix buildserver and make python2 compatible
This commit is contained in:
		@@ -1,17 +1,42 @@
 | 
				
			|||||||
#!/usr/bin/python3
 | 
					#!/usr/bin/python3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from http.server import HTTPServer, BaseHTTPRequestHandler
 | 
					 | 
				
			||||||
from socketserver import ThreadingMixIn
 | 
					 | 
				
			||||||
import argparse
 | 
					import argparse
 | 
				
			||||||
import ctypes
 | 
					import ctypes
 | 
				
			||||||
import functools
 | 
					import functools
 | 
				
			||||||
 | 
					import shutil
 | 
				
			||||||
 | 
					import subprocess
 | 
				
			||||||
import sys
 | 
					import sys
 | 
				
			||||||
 | 
					import tempfile
 | 
				
			||||||
import threading
 | 
					import threading
 | 
				
			||||||
import traceback
 | 
					import traceback
 | 
				
			||||||
import os.path
 | 
					import os.path
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sys.path.insert(0, os.path.dirname(os.path.dirname((os.path.abspath(__file__)))))
 | 
				
			||||||
 | 
					from youtube_dl.compat import (
 | 
				
			||||||
 | 
					    compat_http_server,
 | 
				
			||||||
 | 
					    compat_str,
 | 
				
			||||||
 | 
					    compat_urlparse,
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class BuildHTTPServer(ThreadingMixIn, HTTPServer):
 | 
					# These are not used outside of buildserver.py thus not in compat.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					try:
 | 
				
			||||||
 | 
					    import winreg as compat_winreg
 | 
				
			||||||
 | 
					except ImportError:  # Python 2
 | 
				
			||||||
 | 
					    import _winreg as compat_winreg
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					try:
 | 
				
			||||||
 | 
					    import socketserver as compat_socketserver
 | 
				
			||||||
 | 
					except ImportError:  # Python 2
 | 
				
			||||||
 | 
					    import SocketServer as compat_socketserver
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					try:
 | 
				
			||||||
 | 
					    compat_input = raw_input
 | 
				
			||||||
 | 
					except NameError:  # Python 3
 | 
				
			||||||
 | 
					    compat_input = input
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class BuildHTTPServer(compat_socketserver.ThreadingMixIn, compat_http_server.HTTPServer):
 | 
				
			||||||
    allow_reuse_address = True
 | 
					    allow_reuse_address = True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -216,7 +241,7 @@ def main(args=None):
 | 
				
			|||||||
    srv = BuildHTTPServer((host, port), BuildHTTPRequestHandler)
 | 
					    srv = BuildHTTPServer((host, port), BuildHTTPRequestHandler)
 | 
				
			||||||
    thr = threading.Thread(target=srv.serve_forever)
 | 
					    thr = threading.Thread(target=srv.serve_forever)
 | 
				
			||||||
    thr.start()
 | 
					    thr.start()
 | 
				
			||||||
    input('Press ENTER to shut down')
 | 
					    compat_input('Press ENTER to shut down')
 | 
				
			||||||
    srv.shutdown()
 | 
					    srv.shutdown()
 | 
				
			||||||
    thr.join()
 | 
					    thr.join()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -231,8 +256,6 @@ def rmtree(path):
 | 
				
			|||||||
            os.remove(fname)
 | 
					            os.remove(fname)
 | 
				
			||||||
    os.rmdir(path)
 | 
					    os.rmdir(path)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#==============================================================================
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
class BuildError(Exception):
 | 
					class BuildError(Exception):
 | 
				
			||||||
    def __init__(self, output, code=500):
 | 
					    def __init__(self, output, code=500):
 | 
				
			||||||
@@ -249,15 +272,16 @@ class HTTPError(BuildError):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
class PythonBuilder(object):
 | 
					class PythonBuilder(object):
 | 
				
			||||||
    def __init__(self, **kwargs):
 | 
					    def __init__(self, **kwargs):
 | 
				
			||||||
        pythonVersion = kwargs.pop('python', '2.7')
 | 
					        python_version = kwargs.pop('python', '3.4')
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
            key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, r'SOFTWARE\Python\PythonCore\%s\InstallPath' % pythonVersion)
 | 
					            key = compat_winreg.OpenKey(
 | 
				
			||||||
 | 
					                compat_winreg.HKEY_LOCAL_MACHINE, r'SOFTWARE\Python\PythonCore\%s\InstallPath' % python_version)
 | 
				
			||||||
            try:
 | 
					            try:
 | 
				
			||||||
                self.pythonPath, _ = _winreg.QueryValueEx(key, '')
 | 
					                self.pythonPath, _ = compat_winreg.QueryValueEx(key, '')
 | 
				
			||||||
            finally:
 | 
					            finally:
 | 
				
			||||||
                _winreg.CloseKey(key)
 | 
					                compat_winreg.CloseKey(key)
 | 
				
			||||||
        except Exception:
 | 
					        except Exception:
 | 
				
			||||||
            raise BuildError('No such Python version: %s' % pythonVersion)
 | 
					            raise BuildError('No such Python version: %s' % python_version)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        super(PythonBuilder, self).__init__(**kwargs)
 | 
					        super(PythonBuilder, self).__init__(**kwargs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -305,8 +329,10 @@ class YoutubeDLBuilder(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    def build(self):
 | 
					    def build(self):
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
            subprocess.check_output([os.path.join(self.pythonPath, 'python.exe'), 'setup.py', 'py2exe'],
 | 
					            proc = subprocess.Popen([os.path.join(self.pythonPath, 'python.exe'), 'setup.py', 'py2exe'], stdin=subprocess.PIPE, cwd=self.buildPath)
 | 
				
			||||||
                                    cwd=self.buildPath)
 | 
					            proc.wait()
 | 
				
			||||||
 | 
					            #subprocess.check_output([os.path.join(self.pythonPath, 'python.exe'), 'setup.py', 'py2exe'],
 | 
				
			||||||
 | 
					            #                        cwd=self.buildPath)
 | 
				
			||||||
        except subprocess.CalledProcessError as e:
 | 
					        except subprocess.CalledProcessError as e:
 | 
				
			||||||
            raise BuildError(e.output)
 | 
					            raise BuildError(e.output)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -369,12 +395,12 @@ class Builder(PythonBuilder, GITBuilder, YoutubeDLBuilder, DownloadBuilder, Clea
 | 
				
			|||||||
    pass
 | 
					    pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class BuildHTTPRequestHandler(BaseHTTPRequestHandler):
 | 
					class BuildHTTPRequestHandler(compat_http_server.BaseHTTPRequestHandler):
 | 
				
			||||||
    actionDict = {'build': Builder, 'download': Builder}  # They're the same, no more caching.
 | 
					    actionDict = {'build': Builder, 'download': Builder}  # They're the same, no more caching.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def do_GET(self):
 | 
					    def do_GET(self):
 | 
				
			||||||
        path = urlparse.urlparse(self.path)
 | 
					        path = compat_urlparse.urlparse(self.path)
 | 
				
			||||||
        paramDict = dict([(key, value[0]) for key, value in urlparse.parse_qs(path.query).items()])
 | 
					        paramDict = dict([(key, value[0]) for key, value in compat_urlparse.parse_qs(path.query).items()])
 | 
				
			||||||
        action, _, path = path.path.strip('/').partition('/')
 | 
					        action, _, path = path.path.strip('/').partition('/')
 | 
				
			||||||
        if path:
 | 
					        if path:
 | 
				
			||||||
            path = path.split('/')
 | 
					            path = path.split('/')
 | 
				
			||||||
@@ -388,7 +414,7 @@ class BuildHTTPRequestHandler(BaseHTTPRequestHandler):
 | 
				
			|||||||
                        builder.close()
 | 
					                        builder.close()
 | 
				
			||||||
                except BuildError as e:
 | 
					                except BuildError as e:
 | 
				
			||||||
                    self.send_response(e.code)
 | 
					                    self.send_response(e.code)
 | 
				
			||||||
                    msg = unicode(e).encode('UTF-8')
 | 
					                    msg = compat_str(e).encode('UTF-8')
 | 
				
			||||||
                    self.send_header('Content-Type', 'text/plain; charset=UTF-8')
 | 
					                    self.send_header('Content-Type', 'text/plain; charset=UTF-8')
 | 
				
			||||||
                    self.send_header('Content-Length', len(msg))
 | 
					                    self.send_header('Content-Length', len(msg))
 | 
				
			||||||
                    self.end_headers()
 | 
					                    self.end_headers()
 | 
				
			||||||
@@ -400,7 +426,5 @@ class BuildHTTPRequestHandler(BaseHTTPRequestHandler):
 | 
				
			|||||||
        else:
 | 
					        else:
 | 
				
			||||||
            self.send_response(500, 'Malformed URL')
 | 
					            self.send_response(500, 'Malformed URL')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#==============================================================================
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if __name__ == '__main__':
 | 
					if __name__ == '__main__':
 | 
				
			||||||
    main()
 | 
					    main()
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user