swimstroke 0.1.5__py3-none-any.whl → 0.1.7__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 CHANGED
@@ -52,8 +52,10 @@ def _event_key_from_event(event):
52
52
  event_prefix="A"
53
53
  elif event['type']=='Prelim':
54
54
  event_prefix="B"
55
- elif event['type']=="Final":
55
+ elif event['type']=='Semi':
56
56
  event_prefix="C"
57
+ elif event['type']=="Final":
58
+ event_prefix="D"
57
59
 
58
60
  # pad some 0s on the event_str to make a lexicographic sort possible
59
61
  event_str = event['index']
@@ -68,8 +70,10 @@ def _event_key_from_entry(entry):
68
70
  event_prefix="A"
69
71
  elif entry['event_type']=='Prelim':
70
72
  event_prefix="B"
71
- elif entry['event_type']=="Final":
73
+ elif entry['event_type']=="Semi":
72
74
  event_prefix="C"
75
+ elif entry['event_type']=="Final":
76
+ event_prefix="D"
73
77
 
74
78
  # pad some 0s on the event_str to make a lexicographic sort possible
75
79
  event_str = entry['event_index']
swimstroke/hy3.py CHANGED
@@ -35,6 +35,7 @@ HY3_EVENT_COURSE_CODES = {
35
35
  }
36
36
  HY3_EVENT_TYPE_CODES = {
37
37
  "P":"Prelim",
38
+ "S":"Semi",
38
39
  "F":"Final",
39
40
  }
40
41
 
@@ -57,7 +58,9 @@ def load(fo):
57
58
  cur_entry = None
58
59
  cur_team = None
59
60
  _swimmer_code_to_ids = {}
61
+ _swimmer_id_generator = 0
60
62
  _team_short_names = set()
63
+ already_e2_submitted = False
61
64
  while ((record := fo.read(132))):
62
65
  line += 1
63
66
  try:
@@ -88,6 +91,11 @@ def load(fo):
88
91
  swimmer_code = record[4:4+SWIMMER_CODE_LENGTH].decode('latin').lower() # don't strip, padding is part of the key
89
92
  swimmer_gendercode = record[2:3].decode('latin')
90
93
  swimmer_id = record[69:81].decode('latin').strip()
94
+ # swimmer ids are not mandatory! So we need to account for if they
95
+ # 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
91
99
  birthday_str = record[88:96].decode('latin')
92
100
  swimmer_age = record[97:99].decode('latin').strip()
93
101
  if swimmer_age == "":
@@ -114,6 +122,8 @@ def load(fo):
114
122
  _swimmer_code_to_ids[swimmer_code] = swimmer_id
115
123
 
116
124
  elif rtype == b'E1': # individual entry record
125
+ already_e2_submitted = False
126
+
117
127
  strokecode = record[21:22].decode('latin')
118
128
  #print("stroke",HY3_STROKE_CODES[strokecode])
119
129
  distance = int(record[15:21].decode('latin'))
@@ -151,6 +161,7 @@ def load(fo):
151
161
  "event_gender":HY3_EVENT_GENDER_CODES[event_gendercode] if event_gendercode in HY3_EVENT_GENDER_CODES else "Unknown",
152
162
  "event_course":None,
153
163
  "event_coursecode":None,
164
+ "event_typecode":None,
154
165
  "event_type":"Final", # is this the correct default?
155
166
  "event_date":None,
156
167
  "heat":None,
@@ -165,6 +176,8 @@ def load(fo):
165
176
  "seed_time_ms":seed_time_ms,
166
177
  "seed_time_str":swimtimefmt(seed_time_ms),
167
178
  "swimmer_ids":[cur_swimmer['swimmer_id']],
179
+ "result_time_ms":None,
180
+ "result_time_str":None,
168
181
  "relay":False,
169
182
  "dq":False,
170
183
  "points":None,
@@ -182,8 +195,17 @@ def load(fo):
182
195
  entries.append(cur_entry)
183
196
 
184
197
  elif rtype == b'E2': # continuation of an entry
198
+ # there can be multiple E2 lines per E1 which are multiple entries in each event (usually for prelim,semis,finals)
199
+ # we should probably make the seed time for semis be the prelim result time. and the result time for finals be the
200
+ # semis result time. TODO!
201
+
202
+ if already_e2_submitted: # we need to duplicate the entry and add it to the list
203
+ cur_entry = cur_entry.copy()
204
+ entries.append(cur_entry)
205
+ already_e2_submitted = True
185
206
 
186
207
  event_type = record[2:3].decode('latin').strip()
208
+ cur_entry['event_typecode'] = event_type
187
209
  if event_type in HY3_EVENT_TYPE_CODES:
188
210
  cur_entry['event_type'] = HY3_EVENT_TYPE_CODES[event_type]
189
211
  else:
@@ -260,6 +282,8 @@ def load(fo):
260
282
  "event_gender":HY3_EVENT_GENDER_CODES[event_gendercode] if event_gendercode in HY3_EVENT_GENDER_CODES else "Unknown",
261
283
  "event_course":None,
262
284
  "event_coursecode":None,
285
+ "event_typecode":None,
286
+ "event_type":"Final", # is this the correct default?
263
287
  "stroke":HY3_STROKE_CODES[strokecode],
264
288
  "strokeshort":HY3_STROKE_CODES_SHORT[strokecode],
265
289
  "distance":distance,
@@ -268,6 +292,8 @@ def load(fo):
268
292
  "seed_coursecode":seed_coursecode,
269
293
  "seed_time_ms":seed_time_ms,
270
294
  "seed_time_str":swimtimefmt(seed_time_ms),
295
+ "result_time_ms":None,
296
+ "result_time_str":None,
271
297
  "relay":True,
272
298
  "teamname":relayname,
273
299
  "swimmer_codes":[],
@@ -287,7 +313,9 @@ def load(fo):
287
313
  entries.append(cur_entry)
288
314
 
289
315
  elif rtype == b'F2':
316
+ # TODO: update this in case relays have prelims, semis, final (as per E2 records above)
290
317
  event_type = record[2:3].decode('latin').strip()
318
+ cur_entry['event_typecode'] = event_type
291
319
  if event_type in HY3_EVENT_TYPE_CODES:
292
320
  cur_entry['event_type'] = HY3_EVENT_TYPE_CODES[event_type]
293
321
  else:
@@ -0,0 +1,6 @@
1
+ Metadata-Version: 2.4
2
+ Name: swimstroke
3
+ Version: 0.1.7
4
+ License-File: LICENSE
5
+ Requires-Dist: PyYAML>=6.0.1
6
+ Dynamic: license-file
@@ -1,14 +1,14 @@
1
1
  swimstroke/__init__.py,sha256=HyRSzghNy1qExTdycvl7MsVvwQ7vi3FtqUQbobhepRo,78
2
2
  swimstroke/__main__.py,sha256=d0ln2BGuqyjDIB2OOmZEA4lOjPAjHARuzuo1_WomNZU,1212
3
3
  swimstroke/ev3.py,sha256=Ma1TsRQAop7wQNoeRBdKBZuQyuRpq08OYzdS7dr_llI,3579
4
- swimstroke/helpers.py,sha256=v74U9SnSVhrvYdJLZO0kqZcPJHruKo8eiJaZRtXh0uc,6478
5
- swimstroke/hy3.py,sha256=_nQfsv94TEGrQWQN1IeusWo13AfhJih0xZyQuYgWI2Y,15667
4
+ swimstroke/helpers.py,sha256=0yCYNSnnr_DBHU3ROTFHiEkb2q-OXO6iRe-dFE0G7iI,6598
5
+ swimstroke/hy3.py,sha256=DZ0zsHEnm29SdggLs9jY6GEIDMipiqt6SEZFLcI3uHs,17169
6
6
  swimstroke/scb.py,sha256=ow-T4Ou6jC7PQdphARncM7T0hIzj20prD-C9JVBU6Y8,4307
7
7
  swimstroke/sd3.py,sha256=JMYeTOk66YJInRReB3KMFyB1JKnX69sCHdC2_Ey2ypg,47
8
8
  swimstroke/util.py,sha256=5Xfvfngv9T47U_7gddiPw80pHtTAlhomW40JUGDS2iI,1244
9
9
  swimstroke/yaml.py,sha256=4qPS58tBF5u2VOn59o-Z2q5xzfpBOw_APZ2ybMrrxKw,6855
10
- swimstroke-0.1.5.dist-info/LICENSE,sha256=ua_EyrQ3shMEJAhfgGjSeK_mFf6AIT-QiFG2lQfsntY,1103
11
- swimstroke-0.1.5.dist-info/METADATA,sha256=RQEpoOMg2wk4z4r22Fhst3314HLCSDSqpn8kQvOgR6k,107
12
- swimstroke-0.1.5.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
13
- swimstroke-0.1.5.dist-info/top_level.txt,sha256=C15CTf7t6T4k83ycljKbwYVziBgz5vqOBEYdK8Y6FfY,11
14
- swimstroke-0.1.5.dist-info/RECORD,,
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,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.1.0)
2
+ Generator: setuptools (80.10.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,6 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: swimstroke
3
- Version: 0.1.5
4
- License-File: LICENSE
5
- Requires-Dist: PyYAML >=6.0.1
6
-