changeset 2222:4d1aa94202e3

Merged pythonServer-3 into unified pythonServer. Removed pythonServer-legacy. Updated pythonServer to work in scripts subdir.
author Nicholas Jillings <nicholas.jillings@mail.bcu.ac.uk>
date Thu, 14 Apr 2016 13:19:17 +0100
parents 6dbee0a43792
children 6c98ec540504 760719986df3
files scripts/pythonServer-3.py scripts/pythonServer-legacy.py scripts/pythonServer.py
diffstat 3 files changed, 120 insertions(+), 204 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/pythonServer-3.py	Thu Apr 14 12:26:53 2016 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,128 +0,0 @@
-from http.server import BaseHTTPRequestHandler, HTTPServer
-from os import walk
-from os import path
-from os import listdir
-import inspect
-import os
-import urllib as urllib2
-import pickle
-import datetime
-
-# Go to right folder. 
-scriptdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) # script directory
-os.chdir(scriptdir) # does this work?
-
-PSEUDO_PATH = 'example_eval/'
-pseudo_files = []
-for filename in listdir(PSEUDO_PATH):
-    if filename.endswith('.xml'):
-        pseudo_files.append(filename)
-
-curSaveIndex = 0;
-curFileName = 'test-0.xml'
-while(path.isfile('saves/'+curFileName)):
-	curSaveIndex += 1;
-	curFileName = 'test-'+str(curSaveIndex)+'.xml'
-
-pseudo_index = curSaveIndex % len(pseudo_files)
-
-print('URL: http://localhost:8000/index.html')
-
-def send404(s):
-	s.send_response(404)
-	s.send_header("Content-type", "text/html")
-	s.end_headers()
-	
-def processFile(s):
-	s.path = s.path.rsplit('?')
-	s.path = s.path[0]
-	s.path = s.path[1:len(s.path)]
-	st = s.path.rsplit(',')
-	lenSt = len(st)
-	fmt = st[lenSt-1].rsplit('.')
-	s.send_response(200)
-	if (fmt[1] == 'html'):
-		s.send_header("Content-type", 'text/html')
-		fileDump = open(urllib2.parse.unquote(s.path), encoding='utf-8')
-		fileBytes = bytes(fileDump.read(), "utf-8")
-		fileDump.close()
-	elif (fmt[1] == 'css'):
-		s.send_header("Content-type", 'text/css')
-		fileDump = open(urllib2.parse.unquote(s.path), encoding='utf-8')
-		fileBytes = bytes(fileDump.read(), "utf-8")
-		fileDump.close()
-	elif (fmt[1] == 'js'):
-		s.send_header("Content-type", 'application/javascript')
-		fileDump = open(urllib2.parse.unquote(s.path), encoding='utf-8')
-		fileBytes = bytes(fileDump.read(), "utf-8")
-		fileDump.close()
-	else:
-		s.send_header("Content-type", 'application/octet-stream')
-		fileDump = open(urllib2.parse.unquote(s.path), 'rb')
-		fileBytes = fileDump.read()
-		fileDump.close()
-	s.send_header("Content-Length", len(fileBytes))
-	s.end_headers()
-	s.wfile.write(fileBytes)
-	
-def saveFile(self):
-	global curFileName
-	global curSaveIndex
-	varLen = int(self.headers['Content-Length'])
-	postVars = self.rfile.read(varLen)
-	print(curFileName)
-	file = open('saves/'+curFileName,'w')
-	file.write(postVars.decode("utf-8"))
-	file.close()
-	try:
-		wbytes = os.path.getsize('saves/'+curFileName)
-	except OSError:
-		self.send_response(200)
-		self.send_header("Content-type", "text/xml")
-		self.end_headers()
-		self.wfile.write('<response state="error"><message>Could not open file</message></response>')
-	self.send_response(200)
-	self.send_header("Content-type", "text/xml")
-	self.end_headers()
-	self.wfile.write(bytes('<response state="OK"><message>OK</message><file bytes="'+str(wbytes)+'">"saves/'+curFileName+'"</file></response>','utf-8'))
-	curSaveIndex += 1
-	curFileName = 'test-'+str(curSaveIndex)+'.xml'
-
-class MyHandler(BaseHTTPRequestHandler):
-	def do_HEAD(s):
-		s.send_response(200)
-		s.send_header("Content-type", "text/html")
-		s.end_headers()
-	def do_GET(request):
-		global pseudo_index
-		global pseudo_files
-		global PSEUDO_PATH
-		if(request.client_address[0] == "127.0.0.1"):
-			if (request.path == "/favicon.ico"):
-				send404(request)
-			else:
-				if (request.path == '/'):
-					request.path = '/index.html'
-				elif (request.path == '/pseudo.xml'):
-					request.path = '/'+PSEUDO_PATH + pseudo_files[pseudo_index]
-					print(request.path)
-					pseudo_index += 1
-					pseudo_index %= len(pseudo_files)
-				processFile(request)
-		else:
-			send404(request)
-
-	def do_POST(request):
-		if(request.client_address[0] == "127.0.0.1"):
-			if (request.path == "/save" or request.path == "/save.php"):
-				saveFile(request)
-		else:
-			send404(request)
-
-def run(server_class=HTTPServer,
-        handler_class=MyHandler):
-    server_address = ('', 8000)
-    httpd = server_class(server_address, handler_class)
-    httpd.serve_forever()
-
-run()
--- a/scripts/pythonServer-legacy.py	Thu Apr 14 12:26:53 2016 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-import SimpleHTTPServer
-import SocketServer
-
-PORT = 8080
-
-Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
-
-httpd = SocketServer.TCPServer(("", PORT), Handler)
-
-print "serving at port", PORT
-httpd.serve_forever()
--- a/scripts/pythonServer.py	Thu Apr 14 12:26:53 2016 +0100
+++ b/scripts/pythonServer.py	Thu Apr 14 13:19:17 2016 +0100
@@ -1,21 +1,32 @@
 #!/usr/bin/python
 
-import BaseHTTPServer
+# Detect the Python version to switch code between 2.x and 3.x
+# http://stackoverflow.com/questions/9079036/detect-python-version-at-runtime
+import sys
+
 from os import walk
 from os import path
 from os import listdir
 import inspect
 import os
-import urllib2
-import urlparse
 import pickle
 import datetime
 
+if sys.version_info[0] == 2:
+    # Version 2.x
+    import BaseHTTPServer
+    import urllib2
+    import urlparse
+elif sys.version_info[0] == 3:
+    # Version 3.x
+    from http.server import BaseHTTPRequestHandler, HTTPServer
+    import urllib as urllib2
+
 # Go to right folder. 
 scriptdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) # script directory
 os.chdir(scriptdir) # does this work?
 
-PSEUDO_PATH = 'example_eval/'
+PSEUDO_PATH = '../example_eval/'
 pseudo_files = []
 for filename in listdir(PSEUDO_PATH):
     if filename.endswith('.xml'):
@@ -23,42 +34,79 @@
 
 curSaveIndex = 0;
 curFileName = 'test-0.xml'
-while(path.isfile('saves/'+curFileName)):
-	curSaveIndex += 1;
-	curFileName = 'test-'+str(curSaveIndex)+'.xml'
+while(path.isfile('../saves/'+curFileName)):
+    curSaveIndex += 1;
+    curFileName = 'test-'+str(curSaveIndex)+'.xml'
 
 pseudo_index = curSaveIndex % len(pseudo_files)
 
-print 'URL: http://localhost:8000/index.html'
+if sys.version_info[0] == 2:
+    print 'URL: http://localhost:8000/index.html'
+elif sys.version_info[0] == 3:
+    print('URL: http://localhost:8000/index.html')
 
 def send404(s):
-	s.send_response(404)
-	s.send_header("Content-type", "text/html")
-	s.end_headers()
+    s.send_response(404)
+    s.send_header("Content-type", "text/html")
+    s.end_headers()
 	
 def processFile(s):
-	s.path = s.path.rsplit('?')
-	s.path = s.path[0]
-	s.path = s.path[1:len(s.path)]
-	st = s.path.rsplit(',')
-	lenSt = len(st)
-	fmt = st[lenSt-1].rsplit('.')
-	size = path.getsize(urllib2.unquote(s.path))
-	fileDump = open(urllib2.unquote(s.path))
-	s.send_response(200)
-	
-	if (fmt[1] == 'html'):
-		s.send_header("Content-type", 'text/html')
-	elif (fmt[1] == 'css'):
-		s.send_header("Content-type", 'text/css')
-	elif (fmt[1] == 'js'):
-		s.send_header("Content-type", 'application/javascript')
-	else:
-		s.send_header("Content-type", 'application/octet-stream')
-	s.send_header("Content-Length", size)
-	s.end_headers()
-	s.wfile.write(fileDump.read())
-	fileDump.close()
+    if sys.version_info[0] == 2:
+        s.path = s.path.rsplit('?')
+        s.path = s.path[0]
+        s.path = s.path[1:len(s.path)]
+        st = s.path.rsplit(',')
+        lenSt = len(st)
+        fmt = st[lenSt-1].rsplit('.')
+        fpath = "../"+urllib2.unquote(s.path)
+        size = path.getsize(fpath)
+        fileDump = open(fpath)
+        s.send_response(200)
+
+        if (fmt[1] == 'html'):
+            s.send_header("Content-type", 'text/html')
+        elif (fmt[1] == 'css'):
+            s.send_header("Content-type", 'text/css')
+        elif (fmt[1] == 'js'):
+            s.send_header("Content-type", 'application/javascript')
+        else:
+            s.send_header("Content-type", 'application/octet-stream')
+        s.send_header("Content-Length", size)
+        s.end_headers()
+        s.wfile.write(fileDump.read())
+        fileDump.close()
+    elif sys.version_info[0] == 3:
+        s.path = s.path.rsplit('?')
+        s.path = s.path[0]
+        s.path = s.path[1:len(s.path)]
+        st = s.path.rsplit(',')
+        lenSt = len(st)
+        fmt = st[lenSt-1].rsplit('.')
+        fpath = "../"+urllib2.unquote(s.path)
+        s.send_response(200)
+        if (fmt[1] == 'html'):
+            s.send_header("Content-type", 'text/html')
+            fileDump = open(fpath, encoding='utf-8')
+            fileBytes = bytes(fileDump.read(), "utf-8")
+            fileDump.close()
+        elif (fmt[1] == 'css'):
+            s.send_header("Content-type", 'text/css')
+            fileDump = open(fpath, encoding='utf-8')
+            fileBytes = bytes(fileDump.read(), "utf-8")
+            fileDump.close()
+        elif (fmt[1] == 'js'):
+            s.send_header("Content-type", 'application/javascript')
+            fileDump = open(fpath, encoding='utf-8')
+            fileBytes = bytes(fileDump.read(), "utf-8")
+            fileDump.close()
+        else:
+            s.send_header("Content-type", 'application/octet-stream')
+            fileDump = open(fpath, 'rb')
+            fileBytes = fileDump.read()
+            fileDump.close()
+        s.send_header("Content-Length", len(fileBytes))
+        s.end_headers()
+        s.wfile.write(fileBytes)
 
 def keygen(s):
 	reply = ""
@@ -74,36 +122,39 @@
 	s.send_header("Content-type", "application/xml")
 	s.end_headers()
 	s.wfile.write(reply)
-	file = open("saves/save-"+key+".xml",'w')
+	file = open("../saves/save-"+key+".xml",'w')
 	file.write("<waetresult key="+key+"/>")
 	file.close();
 
 def saveFile(self):
-	global curFileName
-	global curSaveIndex
-	options = self.path.rsplit('?')
-        options = options[1].rsplit('=')
-        key = options[1]
-        print key
-	varLen = int(self.headers['Content-Length'])
-	postVars = self.rfile.read(varLen)
-	print "Saving file key "+key
-	file = open('saves/save-'+key+'.xml','w')
-	file.write(postVars)
-	file.close()
-	try:
-		wbytes = os.path.getsize('saves/save-'+key+'.xml')
-	except OSError:
-		self.send_response(200)
-		self.send_header("Content-type", "text/xml")
-		self.end_headers()
-		self.wfile.write('<response state="error"><message>Could not open file</message></response>')
-	self.send_response(200)
-	self.send_header("Content-type", "text/xml")
-	self.end_headers()
-	self.wfile.write('<response state="OK"><message>OK</message><file bytes="'+str(wbytes)+'">"saves/'+curFileName+'"</file></response>')
-	curSaveIndex += 1
-	curFileName = 'test-'+str(curSaveIndex)+'.xml'
+    global curFileName
+    global curSaveIndex
+    options = self.path.rsplit('?')
+    options = options[1].rsplit('=')
+    key = options[1]
+    print key
+    varLen = int(self.headers['Content-Length'])
+    postVars = self.rfile.read(varLen)
+    if sys.version_info[0] == 2:
+        print "Saving file key "+key
+    elif sys.version_info[0] == 3:
+        print("Saving file key "+key)
+    file = open('../saves/save-'+key+'.xml','w')
+    file.write(postVars)
+    file.close()
+    try:
+        wbytes = os.path.getsize('../saves/save-'+key+'.xml')
+    except OSError:
+        self.send_response(200)
+        self.send_header("Content-type", "text/xml")
+        self.end_headers()
+        self.wfile.write('<response state="error"><message>Could not open file</message></response>')
+    self.send_response(200)
+    self.send_header("Content-type", "text/xml")
+    self.end_headers()
+    self.wfile.write('<response state="OK"><message>OK</message><file bytes="'+str(wbytes)+'">"saves/'+curFileName+'"</file></response>')
+    curSaveIndex += 1
+    curFileName = 'test-'+str(curSaveIndex)+'.xml'
 
 class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
 	def do_HEAD(s):
@@ -137,11 +188,15 @@
 				saveFile(request)
 		else:
 			send404(request)
-
-def run(server_class=BaseHTTPServer.HTTPServer,
-        handler_class=MyHandler):
-    server_address = ('', 8000)
-    httpd = server_class(server_address, handler_class)
-    httpd.serve_forever()
+if sys.version_info[0] == 2:
+    def run(server_class=BaseHTTPServer.HTTPServer,handler_class=MyHandler):
+        server_address = ('', 8000)
+        httpd = server_class(server_address, handler_class)
+        httpd.serve_forever()
+elif sys.version_info[0] == 3:
+    def run(server_class=HTTPServer,handler_class=MyHandler):
+        server_address = ('', 8000)
+        httpd = server_class(server_address, handler_class)
+        httpd.serve_forever()
 
 run()