swimstroke 0.1.7__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
@@ -58,9 +58,9 @@ def load(fo):
58
58
  cur_entry = None
59
59
  cur_team = None
60
60
  _swimmer_code_to_ids = {}
61
- _swimmer_id_generator = 0
62
61
  _team_short_names = set()
63
62
  already_e2_submitted = False
63
+ default_course_code = None
64
64
  while ((record := fo.read(132))):
65
65
  line += 1
66
66
  try:
@@ -72,10 +72,15 @@ def load(fo):
72
72
  meetinfo['startdate'] = _mmddyyyy_date_to_iso_date(startdate_str)
73
73
  enddate_str = record[100:108].decode('latin').strip()
74
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
75
79
  elif rtype == b"C1":
76
80
  cur_team = {
77
81
  "short_name":record[2:7].decode('latin').strip(),
78
82
  "name":record[7:37].decode('latin').strip(),
83
+ "region":record[53:55].decode('latin').strip(), # the State in the USA
79
84
  }
80
85
  # don't add duplicates (some files have them...)
81
86
  if cur_team['short_name'] not in _team_short_names:
@@ -93,10 +98,9 @@ def load(fo):
93
98
  swimmer_id = record[69:81].decode('latin').strip()
94
99
  # swimmer ids are not mandatory! So we need to account for if they
95
100
  # are not used in a file
96
- if len(swimmer_id)==0:
97
- swimmer_id = f"swimstroke-id-{_swimmer_id_generator}"
98
- _swimmer_id_generator += 1
99
101
  birthday_str = record[88:96].decode('latin')
102
+ if len(swimmer_id)==0:
103
+ swimmer_id = f"swimstroke-id-{swimmer_code}-{birthday_str}"
100
104
  swimmer_age = record[97:99].decode('latin').strip()
101
105
  if swimmer_age == "":
102
106
  swimmer_age = None
@@ -155,15 +159,20 @@ def load(fo):
155
159
  seed_time = None
156
160
  seed_time_ms = None
157
161
 
162
+ event_age_from = int(record[22:25].decode('latin').strip())
163
+ event_age_to = int(record[25:28].decode('latin').strip())
164
+
158
165
  cur_entry = {
159
166
  "event_index":event_num_str,
160
167
  "event_gendercode":event_gendercode,
161
168
  "event_gender":HY3_EVENT_GENDER_CODES[event_gendercode] if event_gendercode in HY3_EVENT_GENDER_CODES else "Unknown",
162
- "event_course":None,
163
- "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,
164
171
  "event_typecode":None,
165
172
  "event_type":"Final", # is this the correct default?
166
173
  "event_date":None,
174
+ "event_age_from":event_age_from,
175
+ "event_age_to":event_age_to,
167
176
  "heat":None,
168
177
  "heat_number":None,
169
178
  "lane":None,
@@ -218,11 +227,15 @@ def load(fo):
218
227
  event_datestr = record[87:95].decode('latin').strip()
219
228
  cur_entry['event_date'] = _mmddyyyy_date_to_iso_date(event_datestr)
220
229
 
221
- cur_entry['event_coursecode'] = record[11:12].decode('latin').strip()
222
- if cur_entry['event_coursecode'] in HY3_EVENT_COURSE_CODES:
223
- cur_entry['event_course'] = HY3_EVENT_COURSE_CODES[cur_entry['event_coursecode']]
224
- else:
225
- 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
226
239
 
227
240
  # results
228
241
  cur_entry['result_time'] = record[4:11].decode('latin').strip()
@@ -273,6 +286,9 @@ def load(fo):
273
286
  seed_time_ms = None
274
287
  seed_time = None
275
288
 
289
+ event_age_from = int(record[22:25].decode('latin').strip())
290
+ event_age_to = int(record[25:28].decode('latin').strip())
291
+
276
292
  cur_entry = {
277
293
  "event_index":event_num_str,
278
294
  "heat":None,
@@ -280,10 +296,12 @@ def load(fo):
280
296
  "lane":None,
281
297
  "event_gendercode":event_gendercode,
282
298
  "event_gender":HY3_EVENT_GENDER_CODES[event_gendercode] if event_gendercode in HY3_EVENT_GENDER_CODES else "Unknown",
283
- "event_course":None,
284
- "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,
285
301
  "event_typecode":None,
286
302
  "event_type":"Final", # is this the correct default?
303
+ "event_age_from":event_age_from,
304
+ "event_age_to":event_age_to,
287
305
  "stroke":HY3_STROKE_CODES[strokecode],
288
306
  "strokeshort":HY3_STROKE_CODES_SHORT[strokecode],
289
307
  "distance":distance,
@@ -330,12 +348,16 @@ def load(fo):
330
348
 
331
349
  event_datestr = record[102:110].decode('latin').strip()
332
350
  cur_entry['event_date'] = _mmddyyyy_date_to_iso_date(event_datestr)
333
-
334
- cur_entry['event_coursecode'] = record[11:12].decode('latin').strip()
335
- if cur_entry['event_coursecode'] in HY3_EVENT_COURSE_CODES:
336
- cur_entry['event_course'] = HY3_EVENT_COURSE_CODES[cur_entry['event_coursecode']]
337
- else:
338
- 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
339
361
 
340
362
  # results
341
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.7
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=DZ0zsHEnm29SdggLs9jY6GEIDMipiqt6SEZFLcI3uHs,17169
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.7.dist-info/licenses/LICENSE,sha256=ua_EyrQ3shMEJAhfgGjSeK_mFf6AIT-QiFG2lQfsntY,1103
11
- swimstroke-0.1.7.dist-info/METADATA,sha256=Y5_ktlCffb8IT8rbqEGihsIE_a1Fud-I8qood6yrYO4,127
12
- swimstroke-0.1.7.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
13
- swimstroke-0.1.7.dist-info/top_level.txt,sha256=C15CTf7t6T4k83ycljKbwYVziBgz5vqOBEYdK8Y6FfY,11
14
- swimstroke-0.1.7.dist-info/RECORD,,