annotate new/python/pythonServer.py @ 22:1f375b7d75fd tip

updated warning for breaks during test
author Giulio Moro <giuliomoro@yahoo.it>
date Fri, 13 May 2016 19:01:08 +0100
parents 853caf8cd74b
children
rev   line source
giuliomoro@15 1 #!/usr/bin/python
giuliomoro@15 2
giuliomoro@15 3 # Detect the Python version to switch code between 2.x and 3.x
giuliomoro@15 4 # http://stackoverflow.com/questions/9079036/detect-python-version-at-runtime
giuliomoro@15 5 import sys
giuliomoro@15 6
giuliomoro@15 7 from os import walk
giuliomoro@15 8 from os import path
giuliomoro@15 9 from os import listdir
giuliomoro@15 10 import inspect
giuliomoro@15 11 import os
giuliomoro@15 12 import pickle
giuliomoro@15 13 import datetime
giuliomoro@15 14
giuliomoro@15 15 if sys.version_info[0] == 2:
giuliomoro@15 16 # Version 2.x
giuliomoro@15 17 import BaseHTTPServer
giuliomoro@15 18 import urllib2
giuliomoro@15 19 import urlparse
giuliomoro@15 20 elif sys.version_info[0] == 3:
giuliomoro@15 21 # Version 3.x
giuliomoro@15 22 from http.server import BaseHTTPRequestHandler, HTTPServer
giuliomoro@15 23 import urllib as urllib2
giuliomoro@15 24
giuliomoro@15 25 # Go to right folder.
giuliomoro@15 26 scriptdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) # script directory
giuliomoro@15 27 os.chdir(scriptdir) # does this work?
giuliomoro@15 28
giuliomoro@15 29 PSEUDO_PATH = '../tests/'
giuliomoro@15 30 pseudo_files = []
giuliomoro@15 31 for filename in listdir(PSEUDO_PATH):
giuliomoro@15 32 print(filename)
giuliomoro@15 33 if filename.endswith('.xml'):
giuliomoro@15 34 pseudo_files.append(filename)
giuliomoro@15 35
giuliomoro@15 36 curSaveIndex = 0;
giuliomoro@15 37 curFileName = 'test-0.xml'
giuliomoro@15 38 while(path.isfile('../saves/'+curFileName)):
giuliomoro@15 39 curSaveIndex += 1;
giuliomoro@15 40 curFileName = 'test-'+str(curSaveIndex)+'.xml'
giuliomoro@15 41
giuliomoro@15 42 if len(pseudo_files) > 0:
giuliomoro@15 43 pseudo_index = curSaveIndex % len(pseudo_files)
giuliomoro@15 44 else:
giuliomoro@15 45 pseudo_index = 0
giuliomoro@15 46
giuliomoro@15 47 print('URL: http://localhost:8000/index.html')
giuliomoro@15 48
giuliomoro@15 49 def send404(s):
giuliomoro@15 50 s.send_response(404)
giuliomoro@15 51 s.send_header("Content-type", "text/html")
giuliomoro@15 52 s.end_headers()
giuliomoro@15 53
giuliomoro@15 54 def processFile(s):
giuliomoro@15 55 if sys.version_info[0] == 2:
giuliomoro@15 56 s.path = s.path.rsplit('?')
giuliomoro@15 57 s.path = s.path[0]
giuliomoro@15 58 s.path = s.path[1:len(s.path)]
giuliomoro@15 59 st = s.path.rsplit(',')
giuliomoro@15 60 lenSt = len(st)
giuliomoro@15 61 fmt = st[lenSt-1].rsplit('.')
giuliomoro@15 62 fpath = "../"+urllib2.unquote(s.path)
giuliomoro@15 63 size = path.getsize(fpath)
giuliomoro@15 64 fileDump = open(fpath)
giuliomoro@15 65 s.send_response(200)
giuliomoro@15 66
giuliomoro@15 67 if (fmt[1] == 'html'):
giuliomoro@15 68 s.send_header("Content-type", 'text/html')
giuliomoro@15 69 elif (fmt[1] == 'css'):
giuliomoro@15 70 s.send_header("Content-type", 'text/css')
giuliomoro@15 71 elif (fmt[1] == 'js'):
giuliomoro@15 72 s.send_header("Content-type", 'application/javascript')
giuliomoro@15 73 else:
giuliomoro@15 74 s.send_header("Content-type", 'application/octet-stream')
giuliomoro@15 75 s.send_header("Content-Length", size)
giuliomoro@15 76 s.end_headers()
giuliomoro@15 77 s.wfile.write(fileDump.read())
giuliomoro@15 78 fileDump.close()
giuliomoro@15 79 elif sys.version_info[0] == 3:
giuliomoro@15 80 s.path = s.path.rsplit('?')
giuliomoro@15 81 s.path = s.path[0]
giuliomoro@15 82 s.path = s.path[1:len(s.path)]
giuliomoro@15 83 st = s.path.rsplit(',')
giuliomoro@15 84 lenSt = len(st)
giuliomoro@15 85 fmt = st[lenSt-1].rsplit('.')
giuliomoro@15 86 fpath = "../"+urllib2.parse.unquote(s.path)
giuliomoro@15 87 s.send_response(200)
giuliomoro@15 88 if (fmt[1] == 'html'):
giuliomoro@15 89 s.send_header("Content-type", 'text/html')
giuliomoro@15 90 fileDump = open(fpath, encoding='utf-8')
giuliomoro@15 91 fileBytes = bytes(fileDump.read(), "utf-8")
giuliomoro@15 92 fileDump.close()
giuliomoro@15 93 elif (fmt[1] == 'css'):
giuliomoro@15 94 s.send_header("Content-type", 'text/css')
giuliomoro@15 95 fileDump = open(fpath, encoding='utf-8')
giuliomoro@15 96 fileBytes = bytes(fileDump.read(), "utf-8")
giuliomoro@15 97 fileDump.close()
giuliomoro@15 98 elif (fmt[1] == 'js'):
giuliomoro@15 99 s.send_header("Content-type", 'application/javascript')
giuliomoro@15 100 fileDump = open(fpath, encoding='utf-8')
giuliomoro@15 101 fileBytes = bytes(fileDump.read(), "utf-8")
giuliomoro@15 102 fileDump.close()
giuliomoro@15 103 else:
giuliomoro@15 104 s.send_header("Content-type", 'application/octet-stream')
giuliomoro@15 105 fileDump = open(fpath, 'rb')
giuliomoro@15 106 fileBytes = fileDump.read()
giuliomoro@15 107 fileDump.close()
giuliomoro@15 108 s.send_header("Content-Length", len(fileBytes))
giuliomoro@15 109 s.end_headers()
giuliomoro@15 110 s.wfile.write(fileBytes)
giuliomoro@15 111
giuliomoro@15 112 def keygen(s):
giuliomoro@15 113 reply = ""
giuliomoro@15 114 options = s.path.rsplit('?')
giuliomoro@15 115 options = options[1].rsplit('=')
giuliomoro@15 116 key = options[1]
giuliomoro@15 117 print("Registered key "+key)
giuliomoro@15 118 if os.path.isfile("saves/save-"+key+".xml"):
giuliomoro@15 119 reply = "<response><state>NO</state><key>"+key+"</key></response>"
giuliomoro@15 120 else:
giuliomoro@15 121 reply = "<response><state>OK</state><key>"+key+"</key></response>"
giuliomoro@15 122 s.send_response(200)
giuliomoro@15 123 s.send_header("Content-type", "application/xml")
giuliomoro@15 124 s.end_headers()
giuliomoro@15 125 s.wfile.write(reply)
giuliomoro@15 126 file = open("../saves/save-"+key+".xml",'w')
giuliomoro@15 127 file.write("<waetresult key="+key+"/>")
giuliomoro@15 128 file.close();
giuliomoro@15 129
giuliomoro@15 130 def saveFile(self):
giuliomoro@15 131 global curFileName
giuliomoro@15 132 global curSaveIndex
giuliomoro@15 133 options = self.path.rsplit('?')
giuliomoro@15 134 options = options[1].rsplit('=')
giuliomoro@15 135 key = options[1]
giuliomoro@15 136 varLen = int(self.headers['Content-Length'])
giuliomoro@15 137 postVars = self.rfile.read(varLen)
giuliomoro@15 138 print("Saving file key "+key)
giuliomoro@15 139 file = open('../saves/save-'+key+'.xml','w')
giuliomoro@15 140 file.write(postVars)
giuliomoro@15 141 file.close()
giuliomoro@15 142 try:
giuliomoro@15 143 wbytes = os.path.getsize('../saves/save-'+key+'.xml')
giuliomoro@15 144 except OSError:
giuliomoro@15 145 self.send_response(200)
giuliomoro@15 146 self.send_header("Content-type", "text/xml")
giuliomoro@15 147 self.end_headers()
giuliomoro@15 148 self.wfile.write('<response state="error"><message>Could not open file</message></response>')
giuliomoro@15 149 self.send_response(200)
giuliomoro@15 150 self.send_header("Content-type", "text/xml")
giuliomoro@15 151 self.end_headers()
giuliomoro@15 152 self.wfile.write('<response state="OK"><message>OK</message><file bytes="'+str(wbytes)+'">"saves/'+curFileName+'"</file></response>')
giuliomoro@15 153 curSaveIndex += 1
giuliomoro@15 154 curFileName = 'test-'+str(curSaveIndex)+'.xml'
giuliomoro@15 155
giuliomoro@15 156 def http_do_HEAD(s):
giuliomoro@15 157 s.send_response(200)
giuliomoro@15 158 s.send_header("Content-type", "text/html")
giuliomoro@15 159 s.end_headers()
giuliomoro@15 160
giuliomoro@15 161 def http_do_GET(request):
giuliomoro@15 162 if(request.client_address[0] == "127.0.0.1"):
giuliomoro@15 163 if (request.path == "/favicon.ico"):
giuliomoro@15 164 send404(request)
giuliomoro@15 165 elif (request.path.split('?',1)[0] == "/php/keygen.php"):
giuliomoro@15 166 keygen(request);
giuliomoro@15 167 else:
giuliomoro@15 168 request.path = request.path.split('?',1)[0]
giuliomoro@15 169 if (request.path == '/'):
giuliomoro@15 170 request.path = '/index.html'
giuliomoro@15 171 elif (request.path == '/pseudo.xml'):
giuliomoro@15 172 request.path = '/'+PSEUDO_PATH + pseudo_files[pseudo_index]
giuliomoro@15 173 print(request.path)
giuliomoro@15 174 pseudo_index += 1
giuliomoro@15 175 pseudo_index %= len(pseudo_files)
giuliomoro@15 176 processFile(request)
giuliomoro@15 177 else:
giuliomoro@15 178 send404(request)
giuliomoro@15 179
giuliomoro@15 180 def http_do_POST(request):
giuliomoro@15 181 if(request.client_address[0] == "127.0.0.1"):
giuliomoro@15 182 if (request.path.rsplit('?',1)[0] == "/save" or request.path.rsplit('?',1)[0] == "/php/save.php"):
giuliomoro@15 183 saveFile(request)
giuliomoro@15 184 else:
giuliomoro@15 185 send404(request)
giuliomoro@15 186
giuliomoro@15 187 if sys.version_info[0] == 2:
giuliomoro@15 188 class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
giuliomoro@15 189 def do_HEAD(s):
giuliomoro@15 190 http_do_HEAD(s)
giuliomoro@15 191 def do_GET(request):
giuliomoro@15 192 http_do_GET(request)
giuliomoro@15 193 def do_POST(request):
giuliomoro@15 194 http_do_POST(request)
giuliomoro@15 195 def run(server_class=BaseHTTPServer.HTTPServer,handler_class=MyHandler):
giuliomoro@15 196 server_address = ('', 8000)
giuliomoro@15 197 httpd = server_class(server_address, handler_class)
giuliomoro@15 198 httpd.serve_forever()
giuliomoro@15 199 run()
giuliomoro@15 200 elif sys.version_info[0] == 3:
giuliomoro@15 201 class MyHandler(BaseHTTPRequestHandler):
giuliomoro@15 202 def do_HEAD(s):
giuliomoro@15 203 send404(s)
giuliomoro@15 204 def do_GET(request):
giuliomoro@15 205 http_do_GET(request)
giuliomoro@15 206 def do_POST(request):
giuliomoro@15 207 http_do_POST(request)
giuliomoro@15 208 def run(server_class=HTTPServer,handler_class=MyHandler):
giuliomoro@15 209 server_address = ('', 8000)
giuliomoro@15 210 httpd = server_class(server_address, handler_class)
giuliomoro@15 211 httpd.serve_forever()
giuliomoro@15 212 run()