aboutsummaryrefslogtreecommitdiffstats
path: root/rrs/admin.py
blob: 0831a9001d0bba15d8a824c194441766bdb17a23 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
# rrs-web - admin interface definitions
#
# Copyright (C) 2014 Intel Corporation
#
# Licensed under the MIT license, see COPYING.MIT for details

from django.utils.functional import curry

from django.contrib import admin
from django.contrib.admin import DateFieldListFilter
from django.forms.models import BaseInlineFormSet

from rrs.models import Release, Milestone, Maintainer, RecipeMaintainerHistory, \
        RecipeMaintainer, RecipeDistro, RecipeUpgrade, RecipeUpstream, \
        RecipeUpstreamHistory, MaintenancePlan, MaintenancePlanLayerBranch, \
        RecipeMaintenanceLink

class MaintenancePlanLayerBranchFormSet(BaseInlineFormSet):
    def __init__(self, *args, **kwargs):
        from layerindex.models import PythonEnvironment
        initialfields = {}
        py2env = PythonEnvironment.get_default_python2_environment()
        if py2env:
            initialfields['python2_environment'] = py2env.id
        py3env = PythonEnvironment.get_default_python3_environment()
        if py3env:
            initialfields['python3_environment'] = py3env.id
        if initialfields:
            kwargs['initial'] = [initialfields]
        super(MaintenancePlanLayerBranchFormSet, self).__init__(*args, **kwargs)

    @property
    def empty_form(self):
        from layerindex.models import PythonEnvironment
        form = super(MaintenancePlanLayerBranchFormSet, self).empty_form
        py2env = PythonEnvironment.get_default_python2_environment()
        if py2env:
            form.fields['python2_environment'].initial = py2env
        py3env = PythonEnvironment.get_default_python3_environment()
        if py3env:
            form.fields['python3_environment'].initial = py3env
        return form

class MaintenancePlanLayerBranchInline(admin.StackedInline):
    model = MaintenancePlanLayerBranch
    formset = MaintenancePlanLayerBranchFormSet
    readonly_fields = ['upgrade_date', 'upgrade_rev']
    min_num = 1
    extra = 0

class MaintenancePlanAdmin(admin.ModelAdmin):
    model = MaintenancePlan
    inlines = [
        MaintenancePlanLayerBranchInline,
    ]
    def save_model(self, request, obj, form, change):
        # For new maintenance plans, copy releases from the first plan
        if obj.pk is None:
            copyfrom_mp = MaintenancePlan.objects.all().first()
        else:
            copyfrom_mp = None
        super().save_model(request, obj, form, change)
        if copyfrom_mp:
            for release in copyfrom_mp.release_set.all():
                release.pk = None
                release.plan = obj
                release.save()
                milestone = Milestone(release=release)
                milestone.name='Default'
                milestone.start_date = release.start_date
                milestone.end_date = release.end_date
                milestone.save()

class ReleaseAdmin(admin.ModelAdmin):
    search_fields = ['name']
    list_filter = ['plan']
    model = Release

class MilestoneAdmin(admin.ModelAdmin):
    search_fields = ['name']
    list_filter = ['release__plan', 'release__name']
    model = Milestone

class MaintainerAdmin(admin.ModelAdmin):
    search_fields = ['name']
    model = Maintainer

class RecipeMaintainerHistoryAdmin(admin.ModelAdmin):
    search_fields = ['title', 'author__name', 'sha1']
    list_filter = ['layerbranch__layer', 'author__name', ('date', DateFieldListFilter)]
    model = RecipeMaintainerHistory

class RecipeMaintainerAdmin(admin.ModelAdmin):
    search_fields = ['recipe__pn']
    list_filter = ['recipe__layerbranch__layer__name', 'history', 'maintainer__name']
    model = RecipeMaintainer

class RecipeDistroAdmin(admin.ModelAdmin):
    search_fields = ['recipe__pn']
    list_filter = ['recipe__layerbranch__layer__name', 'distro']
    model = RecipeDistro

class RecipeUpgradeAdmin(admin.ModelAdmin):
    search_fields = ['recipe__pn']
    list_filter = ['recipe__layerbranch__layer__name',
            ('commit_date', DateFieldListFilter), 'maintainer__name']
    model = RecipeUpgrade

class RecipeUpstreamHistoryAdmin(admin.ModelAdmin):
    list_filter = [
            'layerbranch__layer',
            ('start_date', DateFieldListFilter),
            ('end_date', DateFieldListFilter)
    ]
    model = RecipeUpstreamHistory

class RecipeUpstreamAdmin(admin.ModelAdmin):
    search_fields = ['recipe__pn']
    list_filter = ['recipe__layerbranch__layer__name', 'status',
            'type', ('date', DateFieldListFilter), 'history']
    model = RecipeUpstream

class RecipeMaintenanceLinkAdmin(admin.ModelAdmin):
    model = RecipeMaintenanceLink

admin.site.register(MaintenancePlan, MaintenancePlanAdmin)
admin.site.register(Release, ReleaseAdmin)
admin.site.register(Milestone, MilestoneAdmin)
admin.site.register(Maintainer, MaintainerAdmin)
admin.site.register(RecipeMaintainerHistory, RecipeMaintainerHistoryAdmin)
admin.site.register(RecipeMaintainer, RecipeMaintainerAdmin)
admin.site.register(RecipeDistro, RecipeDistroAdmin)
admin.site.register(RecipeUpgrade, RecipeUpgradeAdmin)
admin.site.register(RecipeUpstreamHistory, RecipeUpstreamHistoryAdmin)
admin.site.register(RecipeUpstream, RecipeUpstreamAdmin)
admin.site.register(RecipeMaintenanceLink, RecipeMaintenanceLinkAdmin)