2005-10-09 15:58:06 +02:00
|
|
|
import string,re
|
2005-09-11 19:11:09 +02:00
|
|
|
|
2005-09-20 09:05:05 +02:00
|
|
|
DEBUG = 1
|
|
|
|
|
2005-09-06 19:52:46 +02:00
|
|
|
def header():
|
|
|
|
"""return html header"""
|
|
|
|
data = """
|
2005-09-23 16:37:07 +02:00
|
|
|
<html>
|
2005-09-20 09:05:05 +02:00
|
|
|
<head>
|
|
|
|
<title>WebGo</title>
|
|
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
|
|
<meta http-equiv="pragma" content="no-cache" />
|
|
|
|
<meta http-equiv="cache-control" content="no-cache" />
|
|
|
|
<meta http-equiv="expires" content="0" />
|
|
|
|
<link rel="stylesheet" media="screen" href="default.css" type="text/css" />
|
|
|
|
</head>
|
|
|
|
<h1> WebGo </h1>
|
2005-09-23 16:37:07 +02:00
|
|
|
<body>
|
2005-09-06 19:52:46 +02:00
|
|
|
"""
|
|
|
|
return data
|
|
|
|
|
2005-09-20 09:05:05 +02:00
|
|
|
def debug(req,form, optstr = ""):
|
|
|
|
"""
|
|
|
|
print various debug infos, e.g. form content.
|
|
|
|
gets request, util.FieldStorage form, optional extra string.
|
|
|
|
returns nothing, writes with request.write.
|
|
|
|
"""
|
|
|
|
if DEBUG:
|
|
|
|
if optstr == "":
|
2005-09-23 16:37:07 +02:00
|
|
|
req.write("Debug: "+str(form.keys())+"<br>\n")
|
2005-09-20 09:05:05 +02:00
|
|
|
else:
|
2005-09-23 16:37:07 +02:00
|
|
|
req.write("Debug: "+optstr+"<br>\n")
|
2005-09-20 09:05:05 +02:00
|
|
|
|
2005-09-06 19:52:46 +02:00
|
|
|
def footer():
|
|
|
|
"""return html footer"""
|
|
|
|
data = """
|
|
|
|
</body></html>
|
|
|
|
"""
|
|
|
|
return data
|
|
|
|
|
|
|
|
# create a unique session id
|
|
|
|
def generate_session_id():
|
|
|
|
import md5, time, base64, random, string
|
|
|
|
m = md5.new()
|
|
|
|
m.update(str(time.time()))
|
|
|
|
m.update(str(random.random()))
|
2005-09-12 15:51:18 +02:00
|
|
|
s = string.replace(base64.encodestring(m.digest())[:-3], '/', '$')
|
|
|
|
return s
|
2005-09-06 19:52:46 +02:00
|
|
|
|
2005-09-12 15:51:18 +02:00
|
|
|
def generate_game_name():
|
|
|
|
from whrandom import choice
|
|
|
|
chars = string.letters
|
|
|
|
name = ''
|
|
|
|
for i in range(16):
|
|
|
|
name = name + choice(chars)
|
|
|
|
return name.lower()
|
|
|
|
|
2005-09-06 19:52:46 +02:00
|
|
|
|
|
|
|
def check_for_int(data):
|
|
|
|
"""
|
|
|
|
gets a string. if string is an integer: return integer.
|
|
|
|
else return given string.
|
|
|
|
"""
|
|
|
|
#check if value is int
|
|
|
|
num = [n for n in data if n.isdigit()]
|
|
|
|
tmp = "".join(num)
|
|
|
|
if tmp == data:
|
|
|
|
ret = int(data)
|
|
|
|
else:
|
|
|
|
ret = data
|
2005-09-06 21:05:10 +02:00
|
|
|
return ret
|
|
|
|
|
|
|
|
def string_to_tuple(str):
|
|
|
|
"""
|
|
|
|
gets a string. If the string contains '(',')' and ',', then return
|
|
|
|
a tuple processed from the string. If the partial string is empty, then
|
|
|
|
-1 will be returned for that value.
|
|
|
|
"""
|
|
|
|
if (str[0] =='(') and (str[-1] ==')') and (string.find(str,',')):
|
|
|
|
splitlist = string.split(str[1:-1],",")
|
|
|
|
returnlist = []
|
|
|
|
for item in splitlist:
|
|
|
|
try:
|
|
|
|
returnlist.append(int(item))
|
|
|
|
except: #empty string
|
|
|
|
returnlist.append(-1)
|
2005-09-23 16:37:07 +02:00
|
|
|
return tuple(returnlist)
|
|
|
|
|
|
|
|
def dict_coords_to_gnugo_coords(coords,size):
|
|
|
|
"""
|
|
|
|
gets a (x,y) coordinate tuple and boardsize.
|
|
|
|
returns a string in gnugo syntax. examples:
|
|
|
|
gets (1,1), returns "A7".
|
|
|
|
gets (6,2), returns "B2".
|
|
|
|
"""
|
|
|
|
letterlist = [" "]
|
|
|
|
letterlist.extend(list(string.letters[26:]))
|
|
|
|
letterlist.remove("I")
|
|
|
|
letter = letterlist[coords[1]]
|
|
|
|
digit = size+1-coords[0]
|
|
|
|
return letter+str(digit)
|
|
|
|
|
2005-10-09 15:58:06 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2005-09-23 16:37:07 +02:00
|
|
|
def test():
|
|
|
|
print dict_coords_to_gnugo_coords((6,5),7)
|
2005-10-09 15:58:06 +02:00
|
|
|
|
2005-10-09 19:27:17 +02:00
|
|
|
|
2005-09-23 16:37:07 +02:00
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
test()
|
|
|
|
|
|
|
|
|