Skip to content

Instantly share code, notes, and snippets.

@lswest

lswest/_tests.py Secret

Created March 8, 2019 09:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lswest/1e7fe8751e0d77f880db7d0a266e652f to your computer and use it in GitHub Desktop.
Save lswest/1e7fe8751e0d77f880db7d0a266e652f to your computer and use it in GitHub Desktop.
import unittest
from sgf import SGF
class SGFItemTests(unittest.TestCase):
sgfPath = "fox-example.sgf"
sgfPath2 = "ogs-example.sgf"
sgfPath3 = "pandanet-v1.sgf"
sgfPath4 = "pandanet-v2.sgf"
def test_load_singleLine_sgf(self):
testItem = SGF(self.sgfPath)
self.assertEqual(testItem.getTitle(), "2019-03-03 - Black (Black's Rank) VS White (White's Rank) - B+20.50")
self.assertEqual(testItem.getPlayers()['white']['name'], 'white')
self.assertEqual(testItem.getPlayers()['white']['rank'], '16级')
self.assertEqual(testItem.getPlayers()['black']['name'], 'black')
self.assertEqual(testItem.getPlayers()['black']['rank'], '16级')
def test_load_multiLine_sgf(self):
testItem = SGF(self.sgfPath2)
self.assertEqual(testItem.getTitle(), "2018-03-31 - black (25k) VS white (10k) - W+144.5")
self.assertEqual(testItem.getPlayers()['white']['name'], 'white')
self.assertEqual(testItem.getPlayers()['white']['rank'], '10k')
self.assertEqual(testItem.getPlayers()['black']['name'], 'black')
self.assertEqual(testItem.getPlayers()['black']['rank'], '25k')
def test_load_pandanet_sgf(self):
testItem = SGF(self.sgfPath3)
testItem2 = SGF(self.sgfPath4)
self.assertEqual(testItem.getTitle(), "2018-10-29 - Black (BC ) VS White (9k ) - W+66.5")
self.assertEqual(testItem.getPlayers()['white']['name'], 'White')
self.assertEqual(testItem.getPlayers()['white']['rank'], '9k ')
self.assertEqual(testItem.getPlayers()['black']['name'], 'Black')
self.assertEqual(testItem.getPlayers()['black']['rank'], 'BC ')
self.assertEqual(testItem2.getTitle(), "2018-10-30 - Black (BC ) VS White (17k ) - W+14.5")
self.assertEqual(testItem2.getPlayers()['white']['name'], 'White')
self.assertEqual(testItem2.getPlayers()['white']['rank'], '17k ')
self.assertEqual(testItem2.getPlayers()['black']['name'], 'Black')
self.assertEqual(testItem2.getPlayers()['black']['rank'], 'BC ')
if __name__ == '__main__':
unittest.main()
#!/usr/bin/python
import sys
from sgf import SGF
if len(sys.argv) > 1:
args = sys.argv[1:]
for arg in args:
game = SGF(arg)
print(game.getTitle())
else:
print("No arguments passed")
import re
class SGF:
def __init__(self, path):
info = self.readSGF(path)
self.info = info
def readSGF(self, path):
info = {}
infoLine = ""
count = 0
tempCount = 0
with open(path) as f:
for x in f:
if x == "CoPyright[\n":
tempCount = 6
if 'CP[\n' in x:
tempCount = 5
if tempCount > 0:
tempCount -= 1
continue
if self.checkMultiline(x):
infoLine += x.rstrip("\n")
count += 1
if count > 12:
break
else:
if x != "(\n" and x != "(;\n":
infoLine += x
break
date = self.findDate(infoLine)
if date:
info['date'] = date
blackPlayer = self.createBlack(infoLine)
if 'rank' in blackPlayer:
info['black'] = blackPlayer
whitePlayer = self.createWhite(infoLine)
if 'rank' in whitePlayer:
info['white'] = whitePlayer
result = self.findResult(infoLine)
if result != "":
info['result'] = result
return info
def checkMultiline(self, string):
multiline = re.search('[a-zA-Z]+\[.+?\]\n', string)
if multiline:
return True
else:
return False
def createWhite(self, string):
name = re.search('PW\[(.+?)\]', string)
rank = re.search('WR\[(.+?)\]', string)
white = {}
if name:
white['name'] = name.group(1)
if rank:
white['rank'] = rank.group(1)
return white
def createBlack(self, string):
name = re.search('PB\[(.+?)\]', string)
rank = re.search('BR\[(.+?)\]', string)
black = {}
if name:
black['name'] = name.group(1)
if rank:
black['rank'] = rank.group(1)
return black
def findResult(self, string):
result = re.search('RE\[(.+?)\]', string)
if result:
return result.group(1)
else:
return ""
def findDate(self, string):
date = re.search('DT\[(.+?)\]', string)
if date:
return date.group(1)
else:
return ""
def getPlayers(self):
players = {'white': self.info['white'], 'black': self.info['black']}
return players
def getTitle(self):
info = self.info
if 'date' in info:
title = info['date'] + " - " + info['black']['name'] + " (" + info['black']['rank'] + ") VS " + info['white']['name'] + " (" + info['white']['rank'] + ") - " + info['result']
else:
title = info['black']['name'] + " (" + info['black']['rank'] + ") VS " + info['white']['name'] + " (" + info['white']['rank'] + ") - " + info['result']
return title
#!/bin/bash
startDir=$(pwd)
cd /home/lswest/Repositories/python-projects/sgf-overview/
for var in "$@"
do
./main.py "$startDir/$var"
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment