48 lines
1.4 KiB
Python
48 lines
1.4 KiB
Python
import re
|
|
|
|
class CompetitionClass:
|
|
def __init__(self, text: str):
|
|
self.name = text
|
|
|
|
def __repr__(self):
|
|
return self.name
|
|
|
|
class CombinedCompetitionClass:
|
|
def __init__(self, clsA: CompetitionClass, clsB: CompetitionClass):
|
|
self.clsA = clsA
|
|
self.clsB = clsB
|
|
|
|
def __repr__(self):
|
|
return f'{self.clsA}/{self.clsB}'
|
|
|
|
class CompetitionClassParser:
|
|
def __init__(self):
|
|
self.NEWC = CompetitionClass('Newc.')
|
|
self.BEG = CompetitionClass('Beg.')
|
|
self.ADV = CompetitionClass('Adv.')
|
|
|
|
self.mapNames = {
|
|
'Newc': self.NEWC,
|
|
'Newc.': self.NEWC,
|
|
'Newcomer': self.NEWC,
|
|
'Beg': self.BEG,
|
|
'Beg.': self.BEG,
|
|
'Beginner': self.BEG,
|
|
'Adv': self.ADV,
|
|
'Adv.': self.ADV,
|
|
'Advanced': self.ADV,
|
|
}
|
|
|
|
def parseClass(self, cls: str) -> CompetitionClass|CombinedCompetitionClass:
|
|
match = re.compile('^(\\w+\\.?)/(\\w+\\.?)$').match(cls)
|
|
if match is not None:
|
|
clsA = self.mapNames[match.group(1)]
|
|
clsB = self.mapNames[match.group(2)]
|
|
return CombinedCompetitionClass(clsA, clsB)
|
|
else:
|
|
return self.mapNames[cls]
|
|
|
|
def isPureClass(self, cls: str) -> bool:
|
|
parsedClass = self.parseClass(cls)
|
|
return isinstance(parsedClass, CompetitionClass)
|