Mer härj om pyTrainer

Det finns ett plugin till pyTrainer som gör att man kan publicera resultatet av sina ansträningar (nåja, en del iaf) i sin blogg. Dock var det lite si å så med vissa detaljer så det funkade inte alls. Efter lite fulhackande i Python verkar det dock funka nu (se föregående inlägg). Kanske detta är den motivation som krävs för att jag ska börja använda min Forerunner mer frekvent?

Tillägg lördagen den 20:e september
För den som försöker få ordning på wordpress-tillägget till pyTrainer kanske det kan vara värdefullt med några tips. För den som är totalt ointresserad av just pyTrainer kanske förklaringen nedan kan tjänstgöra som beskrivning i hur det kan fungera när man handskas med strulande mjukvara.

Jag kör pyTrainer 1.5.0.0.1 och efter att jag aktiverat och konfigurerat “Pytrainer wordpress extension” blev mina försök fruktlösa. Det första jag gör i såna lägen är förstås att se vad som skrivs ut i terminalen. Kanske kan eventuella felmeddelanden ge en hint om vad som går snett?

Detta är vad som spottades ut:

File "gpx.py", line 39, in __init__
File "gpx.py", line 75, in _getValues
File "/usr/lib/python2.5/xml/dom/minidom.py", line 1915, in parse
return expatbuilder.parse(file)
File "/usr/lib/python2.5/xml/dom/expatbuilder.py", line 924, in parse
result = builder.parseFile(fp)
File "/usr/lib/python2.5/xml/dom/expatbuilder.py", line 207, in parseFile
parser.Parse(buffer, 0)
xml.parsers.expat.ExpatError: unbound prefix: line 14, column 12

Detta sa mig inte mer än att vi verkar ha problem med en XML-struktur som ska parsas (tolkas). Som synes finns information om vilka klasser, metoder och radnummer som är problematiska och efter lite rotande i gpx.py i (/usr/lib/python2.5/site-packages/pytrainer/lib/) var det tydligt att xml-filen producerades av gpsbabel, sparades som /tmp/gpx.txt och försöktes tolkas av minidom.

Efter att ha spanat i xml-filen (som inte togs bort utan låg kvar i tmp-katalogen) gick det även att förstå vad minidom hade problem med. På rad 14, som det stod i stacktracen ovan, refereras till ett prefix “gpxdata” som är okänt för minidom.

Det borde gå att ändra den mall som gpsbabel använder som utformat men efter att ha rotat lite la jag ner den möjligeten och bestämde mig för en pragmatisk lösning, att helt enkelt justera filen, och lägga till namnrymden gpxdata, innan vi matar minidom med den.

Metoden _getValues, runt rad 74 i gpx.py börjar numera enligt nedan (observera radnumren längst till vänster och att de för Python så viktiga “indragen” har förvanskats ):


74 def _getValues(self):
75 if not os.path.isfile(self.filename):
76 return None
77
78 # Test if file already contains gpxdata attribute
79 found = False
80 for line in fileinput.FileInput(self.filename,inplace=1):
81 if "xmlns:gpxdata" in line:
82 found = True
83 print line.rstrip('n');
84
85 # If file don't has gpxdata attribute: add namespace
86 if not found:
87 for line in fileinput.FileInput(self.filename,inplace=1):
88 if "xmlns:xsi" in line:
89 line=line.replace('xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"','xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:gpxdata="http://www.cluetrust.com/XML/GPXDATA/1/0"')
90 print line.rstrip('n');
91
92 dom = xml.dom.minidom.parse(self.filename)
93 content = dom.toxml()

Den som är van att läsa kod (och Python-kod i synnerhet) ser att vi ersätter innehållet på en viss rad i filen identifierad av “self.filename” (dvs medlemsvariabeln filename på aktuellt objekt).

Sådärja, då var minidom nöjd och kunde hacka i sig innehållet. Nästa steg var att wordpress inte accepterade att filer av filtypen gpx och kml laddades upp. Detta löstes genom att installera ett plugin i wordpress som gör att man kan lägga till fler filtyper.

Sista steget var att ersätta de spanska termerna som användes i mallen som skapade blogginläggen samt ändra så att inläggen publicerades direkt istället för att läggas upp som utkast. Jag ändrade även så att medelpuls visas istället för kalorier. Detta kan hårdkodas i /usr/share/pytrainer/extensions/wordpress/main.py

Tyvärr är webbplatsen för pyTrainer nere vilket gör det lite problematiskt att se om följande defekter är välkända och eventuellt till och med redan fixade i en nyare version. Faran med den här typen av fulhack är förstås att ändringarna löper stor risk att bli överskrivna när en ny version installeras (vilket iofs inte kommer att ske automatiskt eftersom pyTrainer inte finns i några av de repositories jag använder).

This entry was posted in datorer, elektronik, motion, webbprojekt, webbservern and tagged , . Bookmark the permalink.

10 Responses to Mer härj om pyTrainer

  1. Styrmand says:

    Hej
    Jeg har de samme problemer som du beskriver her. Har du fundet en løsning?

  2. Jonas says:

    Det jag beskriver ovan är lösningen på problemet. Nyligen släpptes pyTrainer 1.6.0.6 som jag inte har hunnit testa.

  3. Styrmand says:

    Jeg må beklage – jeg har åbenbart svært ved at forstå det skrevne svenske sprog.
    Jeg har forsøgt at følge beskrivelsen så godt jeg kunne, men jeg får stadig den lille advarselsboks med /tmp/gpx.txt

    Den udgave af gpx.py du linker til herover, er det den rettede udgave?

    Under alle omstændigheder, skal du have tak.

  4. jonas says:

    Ja utrikiska är inte det lättaste alla gånger 🙂

    Jepp, den gpx.py jag länkar till innehåller min patch.

    Jag avser även testa pyTrainer 1.6.0.6 inom den närmaste framtiden för att se om min fix fortfarande behövs.

    Det pågår även ett arbete inom pyTrainer-utvecklingsteamet att gå över till garmintools istället för gpsbabel och då kommer troligen detta problem att försvinna (eller se annorlunda ut). Se: http://sourceforge.net/tracker/index.php?func=detail&aid=2090737&group_id=213157&atid=1024595

  5. Styrmand says:

    Jeg har forsøgt mig med 1.6.0.6 – dog uden held. Men den findes også kun som manuel pakke og den slags installationer, er ikke min styrke. 🙂

    Jeg håber du skriver lidt om det, når du har prøvet den af?

  6. jonas says:

    Jo, jag kan skriva ett inlägg sen när jag har testat den.

  7. Pingback: Jonas funderingar » Blog Archive » Framgångsrecept för pyTrainer och Forerunner 305 i Ubuntu

  8. Styrmand says:

    I have localized my problems with pytrainer/WP. My WP was a Danish translation, and that seemed to cause the trouble.
    When i setup an English testblog with WP, everything suddenly worked as it should.

    Later i tried to copy the xmlrpc.php from the English version to the Danish version of WP – unfortunately with no success. Its somewhere deeper in the WP system the problem resists

    Right now i want to experiment a bit more – and if necessary i wil change my blog tio the pure English version.

  9. Styrmand says:

    Argh – it was even more simple!

    After several tries, i foud an option in WP (Settings – Writing) called XML-RPC – this one just had to be checked, then all worked perfectly well – also in the Danish version:

  10. jonas says:

    Nice to hear about your success Styrmand!

Leave a Reply

Your email address will not be published. Required fields are marked *