-
-
Save lswest/1e7fe8751e0d77f880db7d0a266e652f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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