PyScore

001: # -*- python -*-
002: #### eventstat.py #### python package PyScore.standing module eventstat ####
003: 
004: # PyScore
005: # a race scoring programme
006: # written by Matt Draisey
007: # 2004 April 6
008: 
009: reloadables=[]
010: 
011: #### eventstat.py #### python package PyScore.standing module eventstat ####
012: 
013: import re
014: from relational import base
015: from standing import confbase,enumstat
016: 
017: ######## ######## ######## standing enumerations ######## ######## ########
018: 
019: #### #### Class Divisions #### ####
020: 
021: DivisionName=enumstat.DivisionEnum
022: DIVISIONNAMES=confbase.ConfList([
023:     DivisionName.PHRFA,
024:     DivisionName.PHRFB,
025:     DivisionName.PHRFC,
026:     DivisionName.JOGA,
027:     DivisionName.JOGB,
028:     DivisionName.SHARK,
029:     DivisionName.UNKNOWN,
030: ])
031: PHRFNAMES=confbase.ConfList([
032:     DivisionName.PHRFA,
033:     DivisionName.PHRFB,
034:     DivisionName.PHRFC,
035: ])
036: JOGNAMES=confbase.ConfList([
037:     DivisionName.JOGA,
038:     DivisionName.JOGB,
039: ])
040: ONEDESIGNNAMES=confbase.ConfList([
041:     DivisionName.SHARK,
042: ])
043: 
044: #### #### Event Singletons #### ####
045: 
046: class ChampionshipName(confbase.ConfValueEntry):
047:     entuple=("Championship",)
048: ChampionshipName.YEAR=ChampionshipName()
049: ChampionshipName.YEAR.exclusions=dict([(n,n//5) for n in range(0,19)])
050: 
051: class CasualName(confbase.ConfValueEntry):
052:     entuple=("Casual",)
053: CasualName.YEAR=CasualName()
054: CasualName.YEAR.exclusions=dict([(n,n//5) for n in range(0,19)])
055: 
056: #### #### Series and Races #### ####
057: 
058: class SeriesEnum(base.Enumeration):
059:     enum=base.Enum(
060:         "Spring Series","Summer Series","Fall Series","Casual",
061:         refilter=[
062:             (0,re.compile(r"Spring Series",re.I)),
063:             (1,re.compile(r"Summer Series",re.I)),
064:             (2,re.compile(r"Fall Series",re.I)),
065:             (3,re.compile(r"Casual")),
066:         ],
067:     )
068:     enum.create_dict()
069: SeriesEnum.SPRING=SeriesEnum("Spring Series")
070: SeriesEnum.SUMMER=SeriesEnum("Summer Series")
071: SeriesEnum.FALL=SeriesEnum("Fall Series")
072: SeriesEnum.CASUAL=SeriesEnum("Casual")
073: 
074: SeriesName=SeriesEnum
075: SeriesName.SPRING.seriesnumber=1
076: SeriesName.SPRING.abbrev="S1"
077: SeriesName.SUMMER.seriesnumber=2
078: SeriesName.SUMMER.abbrev="S2"
079: SeriesName.FALL.seriesnumber=3
080: SeriesName.FALL.abbrev="S3"
081: SERIESNAMES=confbase.ConfList([
082:     SeriesName.SPRING,
083:     SeriesName.SUMMER,
084:     SeriesName.FALL,
085: ])
086: for seriesname in SERIESNAMES:
087:     seriesname.championship=ChampionshipName.YEAR
088:     seriesname.exclusions=dict([(n,n//5) for n in range(0,7)])
089: 
090: class RaceName(confbase.ConfValueEntry):
091:     """
092:     Nice names that reveal organizational structure.
093:     """
094: 
095:     def __init__(self,casualname,seriesname,racenumber=1,friendlyname=None):
096: 
097:         assert isinstance(casualname,CasualName)
098:         self.casualname=casualname
099: 
100:         assert isinstance(seriesname,SeriesName)
101:         self.seriesname=seriesname
102: 
103:         assert isinstance(racenumber,int)
104:         self.racenumber=racenumber
105: 
106:         if friendlyname<>None:
107:             assert isinstance(friendlyname,str)
108:             self.friendlyname=friendlyname
109:         else:
110:             self.friendlyname=str(self.seriesname)+": Race %i"%self.racenumber
111: 
112:         abbrev="R"+str(self.racenumber)
113:         try:
114:             self.abbrev=self.seriesname.abbrev+abbrev
115:         except AttributeError:
116:             self.abbrev=abbrev
117:         
118:         #self.scheduleddate=None
119:         #self.scheduledsignal=None
120: 
121:         self.entuple=(self.friendlyname,)
122:         self.canonical_value((self.seriesname,self.racenumber,))
123:         
124:         self.racenamelist=confbase.ConfList()
125: 
126: RACENAMES=confbase.ConfList([
127:     RaceName(CasualName.YEAR,s,n)
128:     for s in SERIESNAMES for n in [1,2,3,4,5,6]
129: ])
130: 
131: RACEDICT=dict([(racename.abbrev,racename) for racename in RACENAMES])
132: 
133: def get_racename(s,r):
134:     assert isinstance(s,int) and 1<=s<=3
135:     assert isinstance(r,int) and 1<=r<=6
136:     return RACENAMES[(s-1)*6+(r-1)]
137: 
138: RACENAMER=confbase.ConfList([
139:     confbase.ConfList([
140:         RaceName(CasualName.YEAR,s,n) for n in [1,2,3,4,5,6]
141:     ]) for s in SERIESNAMES
142: ])
143: 
144: #### eventstat.py #### python package PyScore.standing module eventstat ####