swimstroke 0.0.1__py3-none-any.whl → 0.0.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- swimstroke/helpers.py +72 -48
- swimstroke/hy3.py +28 -12
- {swimstroke-0.0.1.dist-info → swimstroke-0.0.3.dist-info}/METADATA +1 -1
- {swimstroke-0.0.1.dist-info → swimstroke-0.0.3.dist-info}/RECORD +7 -7
- {swimstroke-0.0.1.dist-info → swimstroke-0.0.3.dist-info}/LICENSE +0 -0
- {swimstroke-0.0.1.dist-info → swimstroke-0.0.3.dist-info}/WHEEL +0 -0
- {swimstroke-0.0.1.dist-info → swimstroke-0.0.3.dist-info}/top_level.txt +0 -0
swimstroke/helpers.py
CHANGED
|
@@ -70,56 +70,80 @@ def _event_key_from_entry(entry):
|
|
|
70
70
|
return event_prefix+"-"+event_str
|
|
71
71
|
|
|
72
72
|
def get_events(meetinfo):
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
73
|
+
if 'teams' in meetinfo:
|
|
74
|
+
teams_by_short_name = {}
|
|
75
|
+
events_by_key = {}
|
|
76
|
+
for team in meetinfo['teams']:
|
|
77
|
+
swimmers_by_code = {}
|
|
78
|
+
teams_by_short_name[team['short_name']] = team
|
|
79
|
+
for swimmer in team['swimmers']:
|
|
80
|
+
assert swimmer['swimmer_code'] not in swimmers_by_code
|
|
81
|
+
swimmers_by_code[swimmer['swimmer_code']] = swimmer
|
|
82
|
+
for entry in team['entries']:
|
|
83
|
+
event_key = _event_key_from_entry(entry)
|
|
84
|
+
if event_key not in events_by_key:
|
|
85
|
+
events_by_key[event_key] = {
|
|
86
|
+
"event":entry['event_str'],
|
|
87
|
+
"event_number":int(entry['event']),
|
|
88
|
+
"date":entry['event_date'],
|
|
89
|
+
"gender":entry['event_gender'],
|
|
90
|
+
"gendercode":entry['event_gendercode'],
|
|
91
|
+
"course":entry['event_course'],
|
|
92
|
+
"coursecode":entry['event_coursecode'],
|
|
93
|
+
"stroke":entry['stroke'],
|
|
94
|
+
"strokeshort":entry['strokeshort'],
|
|
95
|
+
"distance":entry['distance'],
|
|
96
|
+
"relay":entry['relay'],
|
|
97
|
+
"type":entry['event_type'],
|
|
98
|
+
"entries":[],
|
|
99
|
+
"num_heats":None
|
|
100
|
+
}
|
|
101
|
+
event = events_by_key[event_key]
|
|
102
|
+
name = "%s %d %s"%(event['gender'],event['distance'],event['strokeshort'])
|
|
103
|
+
if entry['relay']:
|
|
104
|
+
name += " Relay"
|
|
105
|
+
event['name'] = name
|
|
106
|
+
|
|
107
|
+
entry = entry.copy()
|
|
108
|
+
entry['swimmers'] = [swimmers_by_code[s] for s in entry['swimmer_codes']]
|
|
105
109
|
|
|
106
|
-
|
|
107
|
-
|
|
110
|
+
events_by_key[event_key]['entries'].append(entry)
|
|
111
|
+
if entry['heat'] is not None:
|
|
112
|
+
if events_by_key[event_key]['num_heats'] is None or \
|
|
113
|
+
events_by_key[event_key]['num_heats']<entry['heat_number']:
|
|
114
|
+
events_by_key[event_key]['num_heats'] = entry['heat_number']
|
|
108
115
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
116
|
+
return [events_by_key[event_key] for event_key in sorted([event_key for event_key in events_by_key.keys()])]
|
|
117
|
+
elif 'events' in meetinfo:
|
|
118
|
+
return meetinfo['events']
|
|
119
|
+
else:
|
|
120
|
+
raise ValueError("meetinfo doesn't have entries or events keys")
|
|
114
121
|
|
|
115
|
-
|
|
116
|
-
|
|
122
|
+
def populate_heats(event):
|
|
123
|
+
event['heats'] = []
|
|
124
|
+
heats_by_key = {}
|
|
125
|
+
for entry in event['entries']:
|
|
126
|
+
if entry['heat'] is not None:
|
|
127
|
+
if entry['heat_number'] not in heats_by_key:
|
|
128
|
+
heats_by_key[entry['heat_number']] = {
|
|
129
|
+
"heat":entry['heat'],
|
|
130
|
+
"heat_number":entry['heat_number'],
|
|
131
|
+
"entries":[]
|
|
132
|
+
}
|
|
133
|
+
heats_by_key[entry['heat_number']]['entries'].append(entry)
|
|
134
|
+
for heat_num in sorted([hnum for hnum in heats_by_key.keys()]):
|
|
135
|
+
heats_by_key[heat_num]['entries'].sort(key=lambda e:e['lane'])
|
|
136
|
+
event['heats'].append(heats_by_key[heat_num])
|
|
137
|
+
return event
|
|
117
138
|
|
|
118
139
|
def get_lanes(meetinfo):
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
for
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
140
|
+
if 'teams' in meetinfo:
|
|
141
|
+
lanes = []
|
|
142
|
+
for team in meetinfo['teams']:
|
|
143
|
+
for entry in team['entries']:
|
|
144
|
+
if entry['lane'] is not None and entry['lane'] not in lanes:
|
|
145
|
+
lanes.append(entry['lane'])
|
|
146
|
+
lanes.sort()
|
|
147
|
+
return lanes
|
|
148
|
+
else:
|
|
149
|
+
raise ValueError("meetinfo doesn't have entries")
|
swimstroke/hy3.py
CHANGED
|
@@ -109,11 +109,11 @@ def load(fo):
|
|
|
109
109
|
#print("couldn't convert event_num, leaving as string",event_num_str)
|
|
110
110
|
event_num = None
|
|
111
111
|
|
|
112
|
-
|
|
113
|
-
if
|
|
114
|
-
|
|
112
|
+
seed_coursecode = record[50:51].decode('latin').strip()
|
|
113
|
+
if seed_coursecode in HY3_EVENT_COURSE_CODES:
|
|
114
|
+
seed_course = HY3_EVENT_COURSE_CODES[seed_coursecode]
|
|
115
115
|
else:
|
|
116
|
-
|
|
116
|
+
seed_course = None
|
|
117
117
|
|
|
118
118
|
#print("event #",event_num)
|
|
119
119
|
# I'm not 100% sure this is the seed time field.
|
|
@@ -131,8 +131,8 @@ def load(fo):
|
|
|
131
131
|
"event_str":event_num_str,
|
|
132
132
|
"event_gendercode":event_gendercode,
|
|
133
133
|
"event_gender":HY3_EVENT_GENDER_CODES[event_gendercode] if event_gendercode in HY3_EVENT_GENDER_CODES else "Unknown",
|
|
134
|
-
"event_course":
|
|
135
|
-
"event_coursecode":
|
|
134
|
+
"event_course":None,
|
|
135
|
+
"event_coursecode":None,
|
|
136
136
|
"heat":None,
|
|
137
137
|
"heat_number":None,
|
|
138
138
|
"lane":None,
|
|
@@ -140,6 +140,8 @@ def load(fo):
|
|
|
140
140
|
"strokeshort":HY3_STROKE_CODES_SHORT[strokecode],
|
|
141
141
|
"distance":distance,
|
|
142
142
|
"seed_time":seed_time,
|
|
143
|
+
"seed_course":seed_course,
|
|
144
|
+
"seed_coursecode":seed_coursecode,
|
|
143
145
|
"seed_time_ms":seed_time_ms,
|
|
144
146
|
"seed_time_str":swimtimefmt(seed_time_ms),
|
|
145
147
|
"swimmer_codes":[cur_swimmer['swimmer_code']],
|
|
@@ -162,6 +164,12 @@ def load(fo):
|
|
|
162
164
|
cur_entry['event_datestr'] = record[87:95].decode('latin').strip()
|
|
163
165
|
cur_entry['event_date'] = _mmddyyyy_date_to_iso_date(cur_entry['event_datestr'])
|
|
164
166
|
|
|
167
|
+
cur_entry['event_coursecode'] = record[11:12].decode('latin').strip()
|
|
168
|
+
if cur_entry['event_coursecode'] in HY3_EVENT_COURSE_CODES:
|
|
169
|
+
cur_entry['event_course'] = HY3_EVENT_COURSE_CODES[cur_entry['event_coursecode']]
|
|
170
|
+
else:
|
|
171
|
+
print("no course?",record)
|
|
172
|
+
|
|
165
173
|
# results
|
|
166
174
|
cur_entry['result_time'] = record[5:11].decode('latin').strip()
|
|
167
175
|
if cur_entry['result_time'] == "" and cur_entry['result_time']!="0.00":
|
|
@@ -198,11 +206,11 @@ def load(fo):
|
|
|
198
206
|
#print("couldn't convert event_num, leaving as string",event_num_str)
|
|
199
207
|
event_num = None
|
|
200
208
|
|
|
201
|
-
|
|
202
|
-
if
|
|
203
|
-
|
|
209
|
+
seed_coursecode = record[50:51].decode('latin').strip()
|
|
210
|
+
if seed_coursecode in HY3_EVENT_COURSE_CODES:
|
|
211
|
+
seed_course = HY3_EVENT_COURSE_CODES[seed_coursecode]
|
|
204
212
|
else:
|
|
205
|
-
|
|
213
|
+
seed_course = None
|
|
206
214
|
|
|
207
215
|
# I'm not 100% sure this is the seed time field.
|
|
208
216
|
# there are other time fields and I don't have a
|
|
@@ -222,12 +230,14 @@ def load(fo):
|
|
|
222
230
|
"lane":None,
|
|
223
231
|
"event_gendercode":event_gendercode,
|
|
224
232
|
"event_gender":HY3_EVENT_GENDER_CODES[event_gendercode] if event_gendercode in HY3_EVENT_GENDER_CODES else "Unknown",
|
|
225
|
-
"event_course":
|
|
226
|
-
"event_coursecode":
|
|
233
|
+
"event_course":None,
|
|
234
|
+
"event_coursecode":None,
|
|
227
235
|
"stroke":HY3_STROKE_CODES[strokecode],
|
|
228
236
|
"strokeshort":HY3_STROKE_CODES_SHORT[strokecode],
|
|
229
237
|
"distance":distance,
|
|
230
238
|
"seed_time":seed_time,
|
|
239
|
+
"seed_course":seed_course,
|
|
240
|
+
"seed_coursecode":seed_coursecode,
|
|
231
241
|
"seed_time_ms":seed_time_ms,
|
|
232
242
|
"seed_time_str":swimtimefmt(seed_time_ms),
|
|
233
243
|
"relay":True,
|
|
@@ -253,6 +263,12 @@ def load(fo):
|
|
|
253
263
|
cur_entry['event_datestr'] = record[102:110].decode('latin').strip()
|
|
254
264
|
cur_entry['event_date'] = _mmddyyyy_date_to_iso_date(cur_entry['event_datestr'])
|
|
255
265
|
|
|
266
|
+
cur_entry['event_coursecode'] = record[11:12].decode('latin').strip()
|
|
267
|
+
if cur_entry['event_coursecode'] in HY3_EVENT_COURSE_CODES:
|
|
268
|
+
cur_entry['event_course'] = HY3_EVENT_COURSE_CODES[cur_entry['event_coursecode']]
|
|
269
|
+
else:
|
|
270
|
+
print("no course?",record)
|
|
271
|
+
|
|
256
272
|
# results
|
|
257
273
|
cur_entry['result_time'] = record[5:11].decode('latin').strip()
|
|
258
274
|
if cur_entry['result_time'] == "" and cur_entry['result_time']!="0.00":
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
swimstroke/__init__.py,sha256=HTxCVaw1TLgpHMH8guB3hHYQ80cX6_fSEoPT_hz2Y8w,23
|
|
2
2
|
swimstroke/__main__.py,sha256=XtPUjZM3ZTd_fEMmgZBqFlkp65eqXXcVWTXmQR9PF_A,657
|
|
3
3
|
swimstroke/ev3.py,sha256=P5IkzYCqAH3E5ZzhJMyFztxo0PE4_-wmwIyOsDkagws,3793
|
|
4
|
-
swimstroke/helpers.py,sha256=
|
|
5
|
-
swimstroke/hy3.py,sha256=
|
|
4
|
+
swimstroke/helpers.py,sha256=HgdD5bPzPZXHRWQANyha_n0oloZFPpjZ4pccd_4ICDE,5945
|
|
5
|
+
swimstroke/hy3.py,sha256=Exs_cjsISZqOGUBaowhOQrspL_lcGvcWbESQ6CI8ZZc,13053
|
|
6
6
|
swimstroke/scb.py,sha256=cC-rhzRvKpq60ux7MHm0ylj16qc21ZqhUBLQqxdJMQI,86
|
|
7
7
|
swimstroke/sd3.py,sha256=JMYeTOk66YJInRReB3KMFyB1JKnX69sCHdC2_Ey2ypg,47
|
|
8
8
|
swimstroke/util.py,sha256=s7cBEfHsdbYuID3bH2bAnw72zYHC2A4LroSf8iTH74o,586
|
|
9
9
|
swimstroke/yaml.py,sha256=JMYeTOk66YJInRReB3KMFyB1JKnX69sCHdC2_Ey2ypg,47
|
|
10
|
-
swimstroke-0.0.
|
|
11
|
-
swimstroke-0.0.
|
|
12
|
-
swimstroke-0.0.
|
|
13
|
-
swimstroke-0.0.
|
|
14
|
-
swimstroke-0.0.
|
|
10
|
+
swimstroke-0.0.3.dist-info/LICENSE,sha256=ua_EyrQ3shMEJAhfgGjSeK_mFf6AIT-QiFG2lQfsntY,1103
|
|
11
|
+
swimstroke-0.0.3.dist-info/METADATA,sha256=WgM6E9-UJM8e95NVtSxzEAA6LjkIwmA6-lYvbBXkHBk,77
|
|
12
|
+
swimstroke-0.0.3.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
|
|
13
|
+
swimstroke-0.0.3.dist-info/top_level.txt,sha256=C15CTf7t6T4k83ycljKbwYVziBgz5vqOBEYdK8Y6FfY,11
|
|
14
|
+
swimstroke-0.0.3.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|