swimstroke 0.1.8__py3-none-any.whl → 0.1.9__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/ev3.py CHANGED
@@ -1,6 +1,6 @@
1
1
  from .hy3 import HY3_EVENT_TYPE_CODES, HY3_STROKE_CODES, HY3_STROKE_CODES_SHORT, HY3_EVENT_COURSE_CODES
2
2
  import datetime, csv, codecs
3
- from .util import swimtime_strtoms
3
+ from .util import swimtime_strtoms, try_int
4
4
 
5
5
  GENDER_CODES = {
6
6
  "M":"Men",
@@ -56,16 +56,25 @@ def load(fo):
56
56
  "distance":int(eventinfo_line[8]),
57
57
  "relay":eventinfo_line[4]=="R",
58
58
  "type":HY3_EVENT_TYPE_CODES[eventinfo_line[2]],
59
+ "age_from":None,
60
+ "age_to":None,
59
61
  "eligibility":[],
60
62
  "entries":[],
61
63
  "num_heats":None
62
64
  }
63
65
  meetinfo['events'].append(eventinfo)
64
-
66
+
67
+ age_from = try_int(eventinfo_line[6])
68
+ age_to = try_int(eventinfo_line[7])
69
+ if eventinfo['age_from'] is None or age_from<eventinfo['age_from']:
70
+ eventinfo['age_from'] = age_from
71
+ if eventinfo['age_to'] is None or age_to>eventinfo['age_to']:
72
+ eventinfo['age_to'] = age_to
73
+
65
74
  if eventinfo_line[16].strip():
66
75
  eventinfo['eligibility'].append({
67
- "age_from":int(eventinfo_line[6]),
68
- "age_to":int(eventinfo_line[7]),
76
+ "age_from":age_from,
77
+ "age_to":age_to,
69
78
  "time_ms":swimtime_strtoms(eventinfo_line[16].strip()),
70
79
  "course":"LCM",
71
80
  "gendercode":eventinfo_line[5],
@@ -73,8 +82,8 @@ def load(fo):
73
82
  })
74
83
  if eventinfo_line[18].strip():
75
84
  eventinfo['eligibility'].append({
76
- "age_from":int(eventinfo_line[6]),
77
- "age_to":int(eventinfo_line[7]),
85
+ "age_from":age_from,
86
+ "age_to":age_to,
78
87
  "time_ms":swimtime_strtoms(eventinfo_line[18].strip()),
79
88
  "course":"SCM",
80
89
  "gendercode":eventinfo_line[5],
@@ -82,8 +91,8 @@ def load(fo):
82
91
  })
83
92
  if not (eventinfo_line[16].strip() or eventinfo_line[18].strip()):
84
93
  eventinfo['eligibility'].append({
85
- "age_from":int(eventinfo_line[6]),
86
- "age_to":int(eventinfo_line[7]),
94
+ "age_from":age_from,
95
+ "age_to":age_to,
87
96
  "time_ms":None,
88
97
  "gendercode":eventinfo_line[5],
89
98
  "gender":GENDER_CODES[eventinfo_line[5]],
swimstroke/helpers.py CHANGED
@@ -104,11 +104,14 @@ def build_events_from_entries(meetinfo):
104
104
  "distance":entry['distance'],
105
105
  "relay":entry['relay'],
106
106
  "type":entry.get('event_type',None),
107
+ "age_from":entry['event_age_from'],
108
+ "age_to":entry['event_age_to'],
107
109
  "eligibility":None,
108
110
  "num_heats":None
109
111
  }
110
112
  event = events_by_key[event_key]
111
113
 
114
+ # TODO: include age in the name?
112
115
  name = "%s %d %s"%(event['gender'],event['distance'],event['strokeshort'])
113
116
  if entry['relay']:
114
117
  name += " Relay"
@@ -161,7 +164,8 @@ def get_lanes(meetinfo):
161
164
  if 'entries' in meetinfo:
162
165
  lanes = []
163
166
  for entry in meetinfo['entries']:
164
- if entry['lane'] is not None and entry['lane'] not in lanes:
167
+ # if heat is 0, then this isn't a valid lane entry
168
+ if entry['heat'] is not None and entry['heat']!="0" and entry['lane'] is not None and entry['lane'] not in lanes:
165
169
  lanes.append(entry['lane'])
166
170
  lanes.sort()
167
171
  return lanes
swimstroke/hy3.py CHANGED
@@ -60,6 +60,7 @@ def load(fo):
60
60
  _swimmer_code_to_ids = {}
61
61
  _team_short_names = set()
62
62
  already_e2_submitted = False
63
+ default_course_code = None
63
64
  while ((record := fo.read(132))):
64
65
  line += 1
65
66
  try:
@@ -71,10 +72,15 @@ def load(fo):
71
72
  meetinfo['startdate'] = _mmddyyyy_date_to_iso_date(startdate_str)
72
73
  enddate_str = record[100:108].decode('latin').strip()
73
74
  meetinfo['enddate'] = _mmddyyyy_date_to_iso_date(enddate_str)
75
+ elif rtype == b'B2':
76
+ default_course_code = record[98:99].decode('latin').strip()
77
+ if len(default_course_code)==0:
78
+ default_course_code = None
74
79
  elif rtype == b"C1":
75
80
  cur_team = {
76
81
  "short_name":record[2:7].decode('latin').strip(),
77
82
  "name":record[7:37].decode('latin').strip(),
83
+ "region":record[53:55].decode('latin').strip(), # the State in the USA
78
84
  }
79
85
  # don't add duplicates (some files have them...)
80
86
  if cur_team['short_name'] not in _team_short_names:
@@ -153,15 +159,20 @@ def load(fo):
153
159
  seed_time = None
154
160
  seed_time_ms = None
155
161
 
162
+ event_age_from = int(record[22:25].decode('latin').strip())
163
+ event_age_to = int(record[25:28].decode('latin').strip())
164
+
156
165
  cur_entry = {
157
166
  "event_index":event_num_str,
158
167
  "event_gendercode":event_gendercode,
159
168
  "event_gender":HY3_EVENT_GENDER_CODES[event_gendercode] if event_gendercode in HY3_EVENT_GENDER_CODES else "Unknown",
160
- "event_course":None,
161
- "event_coursecode":None,
169
+ "event_course":HY3_EVENT_COURSE_CODES[default_course_code] if default_course_code is not None and default_course_code in HY3_EVENT_COURSE_CODES else None,
170
+ "event_coursecode":default_course_code,
162
171
  "event_typecode":None,
163
172
  "event_type":"Final", # is this the correct default?
164
173
  "event_date":None,
174
+ "event_age_from":event_age_from,
175
+ "event_age_to":event_age_to,
165
176
  "heat":None,
166
177
  "heat_number":None,
167
178
  "lane":None,
@@ -216,11 +227,15 @@ def load(fo):
216
227
  event_datestr = record[87:95].decode('latin').strip()
217
228
  cur_entry['event_date'] = _mmddyyyy_date_to_iso_date(event_datestr)
218
229
 
219
- cur_entry['event_coursecode'] = record[11:12].decode('latin').strip()
220
- if cur_entry['event_coursecode'] in HY3_EVENT_COURSE_CODES:
221
- cur_entry['event_course'] = HY3_EVENT_COURSE_CODES[cur_entry['event_coursecode']]
222
- else:
223
- logger.warning("no course found? %s",repr(record))
230
+ # override the default with what the file says
231
+ event_coursecode = record[11:12].decode('latin').strip()
232
+ if len(event_coursecode):
233
+ cur_entry['event_coursecode'] = event_coursecode
234
+ if cur_entry['event_coursecode'] in HY3_EVENT_COURSE_CODES:
235
+ cur_entry['event_course'] = HY3_EVENT_COURSE_CODES[cur_entry['event_coursecode']]
236
+ else:
237
+ #logger.warning("no course found in record? %s",repr(record))
238
+ pass
224
239
 
225
240
  # results
226
241
  cur_entry['result_time'] = record[4:11].decode('latin').strip()
@@ -271,6 +286,9 @@ def load(fo):
271
286
  seed_time_ms = None
272
287
  seed_time = None
273
288
 
289
+ event_age_from = int(record[22:25].decode('latin').strip())
290
+ event_age_to = int(record[25:28].decode('latin').strip())
291
+
274
292
  cur_entry = {
275
293
  "event_index":event_num_str,
276
294
  "heat":None,
@@ -278,10 +296,12 @@ def load(fo):
278
296
  "lane":None,
279
297
  "event_gendercode":event_gendercode,
280
298
  "event_gender":HY3_EVENT_GENDER_CODES[event_gendercode] if event_gendercode in HY3_EVENT_GENDER_CODES else "Unknown",
281
- "event_course":None,
282
- "event_coursecode":None,
299
+ "event_course":HY3_EVENT_COURSE_CODES[default_course_code] if default_course_code is not None and default_course_code in HY3_EVENT_COURSE_CODES else None,
300
+ "event_coursecode":default_course_code,
283
301
  "event_typecode":None,
284
302
  "event_type":"Final", # is this the correct default?
303
+ "event_age_from":event_age_from,
304
+ "event_age_to":event_age_to,
285
305
  "stroke":HY3_STROKE_CODES[strokecode],
286
306
  "strokeshort":HY3_STROKE_CODES_SHORT[strokecode],
287
307
  "distance":distance,
@@ -328,12 +348,16 @@ def load(fo):
328
348
 
329
349
  event_datestr = record[102:110].decode('latin').strip()
330
350
  cur_entry['event_date'] = _mmddyyyy_date_to_iso_date(event_datestr)
331
-
332
- cur_entry['event_coursecode'] = record[11:12].decode('latin').strip()
333
- if cur_entry['event_coursecode'] in HY3_EVENT_COURSE_CODES:
334
- cur_entry['event_course'] = HY3_EVENT_COURSE_CODES[cur_entry['event_coursecode']]
335
- else:
336
- logger.warning("no course found in record? %s",repr(record))
351
+
352
+ # override the default with what the file says
353
+ event_coursecode = record[11:12].decode('latin').strip()
354
+ if len(event_coursecode):
355
+ cur_entry['event_coursecode'] = event_coursecode
356
+ if cur_entry['event_coursecode'] in HY3_EVENT_COURSE_CODES:
357
+ cur_entry['event_course'] = HY3_EVENT_COURSE_CODES[cur_entry['event_coursecode']]
358
+ else:
359
+ #logger.warning("no course found in record? %s",repr(record))
360
+ pass
337
361
 
338
362
  # results
339
363
  cur_entry['result_time'] = record[5:11].decode('latin').strip()
swimstroke/scb.py CHANGED
@@ -71,6 +71,8 @@ def load(fileobjs):
71
71
  "event_course":None,
72
72
  "event_coursecode":None,
73
73
  "event_type":"Final",
74
+ "event_age_from":None,
75
+ "event_age_to":None,
74
76
  "heat":str(heat),
75
77
  "heat_number":heat,
76
78
  "lane":lane,
swimstroke/util.py CHANGED
@@ -1,3 +1,9 @@
1
+ def try_int(numstr):
2
+ try:
3
+ return int(numstr)
4
+ except ValueError:
5
+ return None
6
+
1
7
  def swimtimefmt(time_ms):
2
8
  if time_ms is None:
3
9
  return ""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: swimstroke
3
- Version: 0.1.8
3
+ Version: 0.1.9
4
4
  License-File: LICENSE
5
5
  Requires-Dist: PyYAML>=6.0.1
6
6
  Dynamic: license-file
@@ -0,0 +1,14 @@
1
+ swimstroke/__init__.py,sha256=HyRSzghNy1qExTdycvl7MsVvwQ7vi3FtqUQbobhepRo,78
2
+ swimstroke/__main__.py,sha256=d0ln2BGuqyjDIB2OOmZEA4lOjPAjHARuzuo1_WomNZU,1212
3
+ swimstroke/ev3.py,sha256=ex3E85naoabIJZ3WbwLnhBYuFsexc-WNjd_KEJshKsg,3885
4
+ swimstroke/helpers.py,sha256=mlEvjs65_a5o9RjHd5l67gM9q-gxXCoC8oITgNYiSn0,6883
5
+ swimstroke/hy3.py,sha256=n-f3zklK_93srPx3EQ97j9ULeekPgrBL43M2_GW2gac,18668
6
+ swimstroke/scb.py,sha256=UEpcPo4ECufoY-rYZrHI7YCQfyEK4X6cgC91ZoEp2DA,4391
7
+ swimstroke/sd3.py,sha256=JMYeTOk66YJInRReB3KMFyB1JKnX69sCHdC2_Ey2ypg,47
8
+ swimstroke/util.py,sha256=AOABVaHL6TMgnlZXeIHHEtVbB_wA7DXACeKVI0IG3vA,1345
9
+ swimstroke/yaml.py,sha256=4qPS58tBF5u2VOn59o-Z2q5xzfpBOw_APZ2ybMrrxKw,6855
10
+ swimstroke-0.1.9.dist-info/licenses/LICENSE,sha256=ua_EyrQ3shMEJAhfgGjSeK_mFf6AIT-QiFG2lQfsntY,1103
11
+ swimstroke-0.1.9.dist-info/METADATA,sha256=TA5ynCa8yPqx90xSdiFRLjOtQZtQIuvVhIXLXrP9znQ,127
12
+ swimstroke-0.1.9.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
13
+ swimstroke-0.1.9.dist-info/top_level.txt,sha256=C15CTf7t6T4k83ycljKbwYVziBgz5vqOBEYdK8Y6FfY,11
14
+ swimstroke-0.1.9.dist-info/RECORD,,
@@ -1,14 +0,0 @@
1
- swimstroke/__init__.py,sha256=HyRSzghNy1qExTdycvl7MsVvwQ7vi3FtqUQbobhepRo,78
2
- swimstroke/__main__.py,sha256=d0ln2BGuqyjDIB2OOmZEA4lOjPAjHARuzuo1_WomNZU,1212
3
- swimstroke/ev3.py,sha256=Ma1TsRQAop7wQNoeRBdKBZuQyuRpq08OYzdS7dr_llI,3579
4
- swimstroke/helpers.py,sha256=0yCYNSnnr_DBHU3ROTFHiEkb2q-OXO6iRe-dFE0G7iI,6598
5
- swimstroke/hy3.py,sha256=hP4QNl9IkR_z9GZzziyQHFAMyp6Edu9EzBOf7EiKP9k,17098
6
- swimstroke/scb.py,sha256=ow-T4Ou6jC7PQdphARncM7T0hIzj20prD-C9JVBU6Y8,4307
7
- swimstroke/sd3.py,sha256=JMYeTOk66YJInRReB3KMFyB1JKnX69sCHdC2_Ey2ypg,47
8
- swimstroke/util.py,sha256=5Xfvfngv9T47U_7gddiPw80pHtTAlhomW40JUGDS2iI,1244
9
- swimstroke/yaml.py,sha256=4qPS58tBF5u2VOn59o-Z2q5xzfpBOw_APZ2ybMrrxKw,6855
10
- swimstroke-0.1.8.dist-info/licenses/LICENSE,sha256=ua_EyrQ3shMEJAhfgGjSeK_mFf6AIT-QiFG2lQfsntY,1103
11
- swimstroke-0.1.8.dist-info/METADATA,sha256=u8U9amO0i-vtojLXiuVir0E7_Cx4_hXlrApTEpoDjTo,127
12
- swimstroke-0.1.8.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
13
- swimstroke-0.1.8.dist-info/top_level.txt,sha256=C15CTf7t6T4k83ycljKbwYVziBgz5vqOBEYdK8Y6FfY,11
14
- swimstroke-0.1.8.dist-info/RECORD,,