In [42]:
from redmine import Redmine
import pandas
import matplotlib

FEATURE = 2

def parseDouble(s):
    try:
        return double(s)
    except:
        return 0.0

def create_row(issue):
    if i.assigned_to is None:
        name = "None"
    else:
        name = i.assigned_to.name

    try:
        fixed_version = str(issue.fixed_version)
    except:
        fixed_version = ""
        
    return {
        "id": issue.id, 
        "name": name,
        "subject": issue.subject,
        "MD (min)": parseDouble(issue.custom_fields["*MD (min)"]),
        "MD (max)": parseDouble(issue.custom_fields["*MD (max)"]),
        "fixed_version": fixed_version
    }

with open("/home/wolfgang/keys/redmine.key") as f:
    key = f.read().strip()

instance = Redmine("https://redmine.justsoftwareag.com", key = key)

In [2]:
issues = list(instance.projects["jc"].issues(tracker_id = FEATURE, status_id = "open"))

In [39]:
data = [create_row(i) for i in issues]
data = [i for i in data if i["fixed_version"] == "7.8.x"]
d = pandas.DataFrame(data=data, columns=["id", "name", "subject", "MD (min)", "MD (max)", "fixed_version"])
d.sort("name")


Out[39]:
id name subject MD (min) MD (max) fixed_version
1 8576 Christian Ewers Konzeption von Notifications 2.000 3.000 7.8.x
12 8431 Christian Ewers Mobile: Startseite 0.000 0.000 7.8.x
13 8430 Christian Ewers Mobile: Workstream 0.000 0.000 7.8.x
16 8411 Christian Ewers Analyse: Etracker neben Google-Analytics einbi... 1.250 1.750 7.8.x
29 8299 Christian Ewers Linkes Menue erstellen 2.000 3.000 7.8.x
8 8451 Hendrik Montag Lastestserver aufsetzen 2.000 3.000 7.8.x
9 8450 Hendrik Montag Lasttestclient aufsetzen 4.000 5.000 7.8.x
10 8442 Hendrik Montag Solr: RAM-Einstellungen sollen nicht bei jedem... 0.000 0.000 7.8.x
36 8159 Hendrik Montag TODO Erstellen einer Konfigurationsseite für d... 5.000 10.000 7.8.x
37 8158 Hendrik Montag TODO Erstellen eines DEMO vmware Image 1.000 2.000 7.8.x
39 8154 Hendrik Montag Aufbau eines zentralen Lizenzservers und Integ... 5.000 6.000 7.8.x
2 8574 Holger Dewes Konzeption von mehreren Anhängen im Microblog ... 1.500 2.000 7.8.x
34 8188 Holger Dewes Zwangsabo auf eigenes Profil 1.250 1.750 7.8.x
40 8029 Holger Dewes Generierung von Meldungen zu neuen Kontaktbezi... 0.250 0.500 7.8.x
43 7992 Holger Dewes Aktivitätsnachrichten zu Aktionen auf Profilen... 0.500 0.750 7.8.x
48 7868 Holger Dewes Erweiterung des Kontext von Microblog-Filtern ... 1.500 2.000 7.8.x
49 7867 Holger Dewes Interface zum Abonnieren von Profilen umsetzen 0.500 0.750 7.8.x
54 4815 Holger Dewes Aktivitätsnachrichten und E-Mail-Benachrichtig... 1.500 2.000 7.8.x
58 2624 Holger Dewes Profil abonnieren, Elemente auf Profilen liken 0.375 0.875 7.8.x
3 8573 Jan Burkhardt Anpassungen für ODIN-Migration bei der AOK 1.000 2.000 7.8.x
6 8549 Jan Burkhardt Oberfläche, um Lizenz-Keys zu erstellen. 1.500 2.000 7.8.x
30 8287 Jan Burkhardt HTML zu text bereinigen 1.000 1.500 7.8.x
31 8283 Jan Burkhardt Schriftart setzen und bestimmte CSS Klassen du... 2.000 2.500 7.8.x
32 8282 Jan Burkhardt Relative URLs in Absolute URLs umwandeln 0.500 0.750 7.8.x
33 8280 Jan Burkhardt Bilder aus dem Richtexteditor als Attachments ... 1.000 1.500 7.8.x
38 8157 Jan Burkhardt Funktion zum Prüfen auf gültigen Lizenzkey 4.250 5.750 7.8.x
41 8002 Jan Burkhardt E-Mail-Benachrichtigungen zu Einladungen und E... 0.000 0.000 7.8.x
56 4741 Jan Burkhardt E-Mail-Benachrichtigungen zu Empfehlungen von ... 1.000 1.250 7.8.x
27 8362 Johannes Feldmann Einladungen: Annehmen von Einladungen nur auf ... 0.250 0.500 7.8.x
42 8001 Johannes Feldmann Auswahl von Inhalten zum Verschicken in E-Mail... 2.500 3.500 7.8.x
47 7882 Johannes Feldmann Auswahl der Empfänger von Einladungen und Empf... 2.000 2.750 7.8.x
53 5000 Johannes Feldmann Popup zum Empfehlen einer Entität nach dem Ers... 2.750 3.750 7.8.x
55 4748 Johannes Feldmann Basis für das Empfehlen von Entitäten an ander... 3.000 3.750 7.8.x
5 8551 Max Jonas Werner Workstream Inhalte durch Polling nachladen 2.000 3.000 7.8.x
25 8384 Max Jonas Werner Workstream: Likes/Kommentare an Anhängen anzeigen 1.000 1.250 7.8.x
26 8376 Max Jonas Werner Suche: Zurück-Link zum Verlassen der Suche 2.000 2.500 7.8.x
44 7897 Max Jonas Werner Interface für die automatische Anzeige neuer M... 1.000 1.500 7.8.x
45 7895 Max Jonas Werner Basis für die automatische Anzeige neuer Micro... 0.000 0.000 7.8.x
46 7891 Max Jonas Werner Anpassung der Anzeige von "Gefällt mir" und "K... 1.000 1.500 7.8.x
11 8440 Peter Heinicke Mobile: Profile 0.000 0.000 7.8.x
20 8390 Peter Heinicke Inhaltsoverlay: Basis für Infos zu Inhalt 3.000 4.000 7.8.x
21 8388 Peter Heinicke TODO Inhaltsoverlay: Basis für Inthaltsoverlay... 1.000 1.250 7.8.x
22 8387 Peter Heinicke Inhaltsoverlay: Basis 2.250 3.000 7.8.x
57 4614 Peter Heinicke Mobile: Telefonnummer und Email-Adresse auf Pr... 0.000 0.000 7.8.x
7 8517 Ronald Stahl Erstellen eines eigenständigen Projektes JustDoc 4.000 5.000 7.8.x
50 7355 Ronald Stahl automatisches Erstellen einer Dokumentenansich... 4.000 5.000 7.8.x
51 7146 Ronald Stahl automatisches Erstellen eines PDF bei Upload e... 4.000 5.000 7.8.x
0 8579 Susanne Kaiser Error-Handling für REST API umsetzen 0.000 0.000 7.8.x
4 8572 Vinh Phu Phan Mobile: Suche 0.000 0.000 7.8.x
14 8420 Vinh Phu Phan Entitätskontext in der Übersetzung ermögliche... 0.000 0.000 7.8.x
15 8414 Vinh Phu Phan Mobile - Übersetzungen 0.000 0.000 7.8.x
28 8353 Vinh Phu Phan Setup: I18next für Übersetzung in Mobile 0.000 0.000 7.8.x
17 8395 Wolfgang Ginolas TODO Inhaltsoverlay: Infobereich von Videos 0.000 0.000 7.8.x
18 8393 Wolfgang Ginolas TODO Inhaltsoverlay: Infobereich von Dokumenten 0.000 0.000 7.8.x
19 8392 Wolfgang Ginolas TODO Inhaltsoverlay: Infobereich von Bildern 0.000 0.000 7.8.x
23 8386 Wolfgang Ginolas Workstream: Likes/Abos zu Anhängen nicht mehr ... 1.250 1.750 7.8.x
24 8385 Wolfgang Ginolas Workstream: Kommentare zu Anhängen nicht mehr ... 1.250 1.750 7.8.x
35 8163 Wolfgang Ginolas Entfernen der für jedermann offenen Source Cod... 0.500 1.000 7.8.x
52 5207 Wolfgang Ginolas Keine Keys in host.properties.xml oder Superop... 2.750 3.500 7.8.x

In [45]:
data = [create_row(i) for i in issues]
data = [i for i in data if i["fixed_version"] == "7.8.x"]
d = pandas.DataFrame(data=data, columns=["name", "MD (min)", "MD (max)"])
d.groupby("name").sum()


Out[45]:
MD (min) MD (max)
name
Christian Ewers 5.250 7.750
Hendrik Montag 17.000 26.000
Holger Dewes 7.375 10.625
Jan Burkhardt 12.250 17.250
Johannes Feldmann 10.500 14.250
Max Jonas Werner 7.000 9.750
Peter Heinicke 6.250 8.250
Ronald Stahl 12.000 15.000
Susanne Kaiser 0.000 0.000
Vinh Phu Phan 0.000 0.000
Wolfgang Ginolas 5.750 8.000

In [52]:
str(issues[0].fixed_version)


Out[52]:
'7.8.x'

In [28]:
i = instance.projects["jc"].issues[8292]
i.fixed_version


Out[28]:
<Redmine fixed_version #397 - 7.7.x>

In [41]:
list(instance.projects)


Out[41]:
[<Redmine project #8 "aok">,
 <Redmine project #7 "jb">,
 <Redmine project #2 "jc">,
 <Redmine project #12 "website">]

In [43]:
1+2


Out[43]:
3

In [ ]: