2017-02-28 1 views
0

Ich verwende die jira Python library zum Abrufen von Problemen von einem Jira-Server. Um die Serverlast und den Netzwerkverkehr zu reduzieren, möchte ich das Ergebnis search_issues() lokal in serialisierter Form speichern. Wenn die meisten Probleme lokal verfügbar wären, müsste ich nur diese Probleme abfragen, die kürzlich aktualisiert wurden.Wie wird ein Jira-Problemobjekt in Python serialisiert?

Leider stieß ich auf ein Problem, es scheint, ein Jira-Problem ist nicht pickbar. Ich bekomme immer folgende Fehlermeldung, wenn Dumps() für eine Ausgabe Aufruf:

_pickle.PicklingError: Can't pickle <class 'jira.resources.PropertyHolder'>: attribute lookup PropertyHolder on jira.resources failed 

ich anderen Python Serialisierung Ansätze auch (wie Marschall, Dill, json) versucht, aber die Serialisierung nicht für alle von ihnen (dies ist nicht zu überraschend, weil Dill und Json sich auf Pickle zu verlassen scheinen).

Eine Idee, wie Jira-Probleme in Python serialisiert werden können?

+0

Zu meinem Verständnis ist dies nicht so einfach wie man denken würde. Benötigen Sie alle Informationen, die das Problem enthält, um lokal verfügbar zu sein? –

+0

Ich brauche ziemlich viele Ausgabe-Infos. Ich habe die Anzahl der verwendeten Attribute kurz gezählt, mindestens zwei Dutzend Problemfelder werden verwendet. Manchmal brauche ich sogar das Änderungsprotokoll/Verlauf eines Problems. Ich habe bereits darüber nachgedacht, alle relevanten Informationen zu einem abgespeckten Problemobjekt zu extrahieren, aber das ist natürlich mehr Aufwand, als sich auf Standard-Python-Mechanismen zu verlassen ;-) –

+0

Nun, das Problem ist, dass jede 'jira.resources.Resource' (Kommentare, Anhänge, Versionen ...) müssen getrennt vom Server geholt und zum Beispiel in ein Wörterbuch konvertiert werden, und noch mehr, Ressourcen können andere 'Ressourcen' enthalten. Ich habe etwas ähnliches einmal gemacht, aber es hat ungefähr 400 Zeilen Code gebraucht, und Das war nur für das Klonen von Tickets von einem Jira zum anderen. Die lokal verfügbaren Informationen sind noch kniffliger. –

Antwort

0

Ich habe es funktioniert.

Changes needed to jira/resources.py 

    Replace: 
    top = type(str('PropertyHolder'), (object,), raw) 
    with 
    top = PropertyHolder(raw) 

    and add at the end 

    class PropertyHolder(object): 

     def __init__(self, raw): 
     __bases__ = raw 
Verwandte Themen