Problem mit capisuite

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
max4py
User
Beiträge: 2
Registriert: Montag 10. Januar 2011, 13:46

Die in Python programmierte capisuite-Fax-Software (vgl. http://www.capisuite.org/) gibt auf meinem Debian-Server eine Fehlermeldung aus, die offensichtlich damit zu tun hat, dass sich in Python 2.4/2.5 etwas mit dem Format des Datums geändert hat. Der Fehler bewirkt (wenn ich das richtig sehe), dass das Fax erst gar nicht verschickt wird, weil die Startzeit des Prozesses in der Vergangenheit liegt und sodann auch kein neuer Versuch unternommen wird, das Fax erneut zu versenden.

Hier die Fehlermeldung in /var/log/capisuite.error:
Mon Jan 10 10:17:16 2011 Pythonscript /usr/lib/capisuite/idle.py,idle,0x822c2e0: A python error occured. See traceback below.
Mon Jan 10 10:17:16 2011 Pythonscript 0x822c2e0: Python traceback: Traceback (most recent call last):
Mon Jan 10 10:17:16 2011 Pythonscript 0x822c2e0: Traceback: File "/usr/lib/capisuite/idle.py", line 88, in idle
Mon Jan 10 10:17:16 2011 Pythonscript 0x822c2e0: Traceback: starttime=(time.strptime(control.get("GLOBAL","starttime")))[0:8]+(-1,)
Mon Jan 10 10:17:16 2011 Pythonscript 0x822c2e0: Traceback: File "/usr/lib/python2.5/_strptime.py", line 330, in strptime
Mon Jan 10 10:17:16 2011 Pythonscript 0x822c2e0: Traceback: (data_string, format))
Mon Jan 10 10:17:16 2011 Pythonscript 0x822c2e0: Traceback: ValueError: time data did not match format: data=Mon Jan 10 10:06:12 2011 fmt=%a %b %d %H:%M:%S %Y
Ich habe in der betreffenden Datei in /usr/lib/python2.5/_strptime.py folgende Zeilen gefunden:

Code: Alles auswählen

# IndexError only occurs when the format string is "%"
            except IndexError:
                raise ValueError("stray %% in format '%s'" % format)
Un in /usr/lib/capisuite/idle.py Folgendes:

Code: Alles auswählen

                        # set DST value to -1 (unknown), as strptime sets it wrong for some reason
                        starttime=	(time.strptime(control.get("GLOBAL","starttime")))[0:8]+(-1,)
                        starttime=time.mktime(starttime)
                           if (starttime>time.time()):
                                fcntl.lockf(lockfile,fcntl.LOCK_UN)
                                lockfile.close()
                                os.unlink(sendq+job[:-3]+"lock")
                                continue

Hierzu habe ich im Internet vom Gernot Hillier, der die capisuite programmiert hat, folgenden Hinweis gefunden:
I just found the problem: Python has some bug (at least I think it's a bug)
which causes misinterpretation of daylight saving time conversion. This leads
to a delay of an hour before a fax is sent when you use the default scripts
of CapiSuite...

As I don't want to release a new version of CapiSuite every day, I just tell
you how to fix this here:

Please replace (about line 74) in idle.py

starttime=time.mktime(time.strptime(control.get("GLOBAL","starttime")))

with:

# set DST value to -1 (unknown), as strptime sets it wrong for some reason
starttime=(time.strptime(control.get("GLOBAL","starttime")))[0:8]+(-1,)
starttime=time.mktime(starttime)

If you have done this, please tell me if it works for you! Thx!

All versions released so far (0.4-0.4.1a) are affected by this problem. The
next release will certainly include this fix but it won't be released in the
next couple of days...

- --
Ciao,

Gernot
(Quelle: http://osdir.com/ml/linux.isdn.capisuit ... 00011.html)

Leider habe ich keine Kontaktadresse, so dass ich ich Gernot (den Programmierer von capisuite) direkt fragen könnte, was aktuell anliegen könnte. Aber es sieht doch ganz danach aus als ob dieser „workaround“ nun nicht mehr funktioniert, weil bei Python etwas geändert wurde, so dass er nicht mehr oder anders notwendig ist.

Ich habe probeweise die oben angegebene Originalzeile wiederhergestellt, aber das hat lediglich bewirkt, dass keine Fehlermeldung mehr kommt, aber das Fax wurde auch nach über einer Stunde noch nicht verschickt.

Kann mir jemand einen Hinweis geben oder jemanden nennen, der mir vielleicht helfen könnte?

LG max4py
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Kannst du mal vor der Zeile mit

Code: Alles auswählen

(time.strptime(control.get("GLOBAL","starttime")))[0:8]+(-1,)
folgendes hinzufügen:

Code: Alles auswählen

print repr(control.get("GLOBAL", "starttime"))
Ich vermute mal dass da irgendwelche unsichtbaren (d.h. nicht-druckbaren) Zeichen in dem String drin sind, denn "Mon Jan 10 10:06:12 2011" entspricht eigentlich genau dem von ``time.strptime`` erwarteten Muster.
max4py
User
Beiträge: 2
Registriert: Montag 10. Januar 2011, 13:46

@dauerbaustelle:
Ich vermute mal dass da irgendwelche unsichtbaren (d.h. nicht-druckbaren) Zeichen in dem String drin sind, denn "Mon Jan 10 10:06:12 2011" entspricht eigentlich genau dem von ``time.strptime`` erwarteten Muster.
Das scheint mir in die richtige Richtung zu weisen. Ich habe nämlich gerade mal die original idle.py der capisuite getestet - und die funktionierte einwandfrei. Ich verwende eine erweiterte Version, was bedeutet, dass das Problem, wie Du vermutet hast, gar nicht am Datum-Format liegt, sondern an weiteren Zeichen im String. Der Sache muss ich mal nachgehen.

Vielen Dank für Deinen Hinweis!

LG max4py
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Äh also wenn der Unterschied zwischen den beiden Versionen nur das ist, was du da modifiziert hast (was dir empfohlen wurde), dann hat das ganz sicher nichts damit zu tun. Der Fehler tritt ja bereits auf, bevor das Verhalten der modifzierten Version in Kraft treten könnte.
Antworten