forked from esitarski/CrossMgr
-
Notifications
You must be signed in to change notification settings - Fork 0
/
MatchingCategory.py
76 lines (62 loc) · 1.97 KB
/
MatchingCategory.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import six
import operator
import Utils
import ReadSignOnSheet
import Model
def PrologMatchingCategory():
race = Model.race
if not race:
return None
for c in race.getCategories(startWaveOnly=False):
c.resetNums()
race.resetAllCaches()
race.setChanged()
def AddToMatchingCategory( bib, fields ):
race = Model.race
if not race:
return None
categories = race.categories
getFullName = Model.Category.getFullName
categoryTypes = ['EventCategory', 'CustomCategory'] + ['CustomCategory{}'.format(i) for i in range(1,10)]
for CategoryType in categoryTypes:
isCustom = 'Custom' in CategoryType
categoryName, gender = fields.get(CategoryType,None), fields.get('Gender',None)
if not categoryName:
continue
found = None
if gender:
found = categories.get(getFullName(categoryName,gender), None)
if found is None:
found = categories.get(getFullName(categoryName,'Men'), None) or categories.get(getFullName(categoryName,'Women'), None) or categories.get(getFullName(categoryName,'Open'), None)
if found is None:
found = Model.Category(
name=categoryName,
catStr=u'{}'.format(bib),
sequence=len(categories),
gender=gender,
catType=Model.Category.CatCustom if isCustom else Model.Category.CatWave
)
categories[found.fullname] = found
else:
found.intervals.append( (bib, bib) )
def EpilogMatchingCategory():
race = Model.race
if not race:
return None
EmptyInterval = (Model.Category.MaxBib, Model.Category.MaxBib)
for key, c in race.categories.items():
c.intervals.sort()
c.normalize()
race.adjustAllCategoryWaveNumbers()
empty_categories = set()
for key, c in race.categories.items():
if c.intervals[-1] == EmptyInterval:
c.intervals.pop()
if not c.intervals:
empty_categories.add( key )
for key in empty_categories:
del race.categories[key]
for sequence, c in enumerate(sorted(race.categories.values(), key=operator.methodcaller('key'))):
c.sequence = sequence
race.resetAllCaches()
race.setChanged()