Skip to content

Commit c1e2c33

Browse files
authored
Merge pull request #10 from vkurup/9-single-trackpoint-lap
Don't fail if final track has single trackpoint
2 parents f849492 + b378f33 commit c1e2c33

2 files changed

Lines changed: 31 additions & 1 deletion

File tree

tcxparser.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,10 @@ def completed_at(self):
4040

4141
@property
4242
def distance(self):
43-
return self.activity.Lap[-1].Track.Trackpoint[-2].DistanceMeters.pyval
43+
distance_values = self.root.findall('.//ns:DistanceMeters', namespaces={'ns': namespace})
44+
if distance_values:
45+
return distance_values[-1]
46+
return 0
4447

4548
@property
4649
def distance_units(self):

test_tcxparser.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1+
from StringIO import StringIO
12
import unittest
3+
24
from tcxparser import TCXParser
35

46

@@ -71,5 +73,30 @@ def test_ascent_is_correct(self):
7173
def test_descent_is_correct(self):
7274
self.assertAlmostEqual(self.tcx.descent, 166.307128903)
7375

76+
77+
class BugTest(unittest.TestCase):
78+
79+
def test_single_trackpoint_in_track_is_ok(self):
80+
"https://github.com/vkurup/python-tcxparser/issues/9"
81+
xml = """
82+
<TrainingCenterDatabase xmlns="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2">
83+
<Activities>
84+
<Activity>
85+
<Lap>
86+
<Track>
87+
<Trackpoint>
88+
<DistanceMeters>5</DistanceMeters>
89+
</Trackpoint>
90+
</Track>
91+
</Lap>
92+
</Activity>
93+
</Activities>
94+
</TrainingCenterDatabase>
95+
"""
96+
tcx_file = StringIO(xml)
97+
tcx = TCXParser(tcx_file)
98+
self.assertEqual(tcx.distance, 5)
99+
100+
74101
if __name__ == '__main__':
75102
unittest.main()

0 commit comments

Comments
 (0)