Skip to content

Commit

Permalink
Merge pull request #5255 from rtfd/agj/add-admin-build-version
Browse files Browse the repository at this point in the history
Add admin actions for building versions
  • Loading branch information
ericholscher authored Feb 12, 2019
2 parents 460a019 + d6a69c2 commit fab340d
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 11 deletions.
22 changes: 21 additions & 1 deletion readthedocs/builds/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@

"""Django admin interface for `~builds.models.Build` and related models."""

from django.contrib import admin
from django.contrib import admin, messages
from guardian.admin import GuardedModelAdmin

from readthedocs.builds.models import Build, BuildCommandResult, Version
from readthedocs.core.utils import trigger_build


class BuildCommandResultInline(admin.TabularInline):
Expand Down Expand Up @@ -54,7 +55,26 @@ class VersionAdmin(GuardedModelAdmin):
'built',
)
list_filter = ('type', 'privacy_level', 'active', 'built')
search_fields = ('slug', 'project__slug')
raw_id_fields = ('project',)
actions = ['build_version']

def build_version(self, request, queryset):
"""Trigger a build for the project version."""
total = 0
for version in queryset:
trigger_build(
project=version.project,
version=version,
)
total += 1
messages.add_message(
request,
messages.INFO,
'Triggered builds for {} version(s).'.format(total),
)

build_version.short_description = 'Build version'


admin.site.register(Build, BuildAdmin)
Expand Down
43 changes: 33 additions & 10 deletions readthedocs/projects/admin.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-

"""Django administration interface for `projects.models`"""
"""Django administration interface for `projects.models`."""

from django.contrib import admin, messages
from django.contrib.admin.actions import delete_selected
Expand All @@ -9,7 +9,7 @@

from readthedocs.builds.models import Version
from readthedocs.core.models import UserProfile
from readthedocs.core.utils import broadcast
from readthedocs.core.utils import broadcast, trigger_build
from readthedocs.notifications.views import SendNotificationView
from readthedocs.redirects.models import Redirect

Expand Down Expand Up @@ -47,7 +47,7 @@ def get_object_recipients(self, obj):

class ProjectRelationshipInline(admin.TabularInline):

"""Project inline relationship view for :py:class:`ProjectAdmin`"""
"""Project inline relationship view for :py:class:`ProjectAdmin`."""

model = ProjectRelationship
fk_name = 'parent'
Expand All @@ -56,14 +56,14 @@ class ProjectRelationshipInline(admin.TabularInline):

class VersionInline(admin.TabularInline):

"""Version inline relationship view for :py:class:`ProjectAdmin`"""
"""Version inline relationship view for :py:class:`ProjectAdmin`."""

model = Version


class RedirectInline(admin.TabularInline):

"""Redirect inline relationship view for :py:class:`ProjectAdmin`"""
"""Redirect inline relationship view for :py:class:`ProjectAdmin`."""

model = Redirect

Expand All @@ -77,7 +77,15 @@ class DomainInline(admin.TabularInline):
# class ImpressionInline(admin.TabularInline):
# from readthedocs.donate.models import ProjectImpressions
# model = ProjectImpressions
# readonly_fields = ('date', 'promo', 'offers', 'views', 'clicks', 'view_ratio', 'click_ratio')
# readonly_fields = (
# 'date',
# 'promo',
# 'offers',
# 'views',
# 'clicks',
# 'view_ratio',
# 'click_ratio',
# )
# extra = 0
# can_delete = False
# max_num = 15
Expand Down Expand Up @@ -137,7 +145,7 @@ class ProjectAdmin(GuardedModelAdmin):
]
readonly_fields = ('feature_flags',)
raw_id_fields = ('users', 'main_language_project')
actions = ['send_owner_email', 'ban_owner']
actions = ['send_owner_email', 'ban_owner', 'build_default_version']

def feature_flags(self, obj):
return ', '.join([str(f.get_feature_display()) for f in obj.features])
Expand All @@ -162,8 +170,9 @@ def ban_owner(self, request, queryset):
for project in queryset:
if project.users.count() == 1:
count = (
UserProfile.objects.filter(user__projects=project
).update(banned=True)
UserProfile.objects.filter(
user__projects=project,
).update(banned=True)
) # yapf: disabled
total += count
else:
Expand Down Expand Up @@ -199,6 +208,20 @@ def delete_selected_and_artifacts(self, request, queryset):
)
return delete_selected(self, request, queryset)

def build_default_version(self, request, queryset):
"""Trigger a build for the project version."""
total = 0
for project in queryset:
trigger_build(project=project)
total += 1
messages.add_message(
request,
messages.INFO,
'Triggered builds for {} project(s).'.format(total),
)

build_default_version.short_description = 'Build default version'

def get_actions(self, request):
actions = super().get_actions(request)
actions['delete_selected'] = (
Expand All @@ -211,7 +234,7 @@ def get_actions(self, request):

class ImportedFileAdmin(admin.ModelAdmin):

"""Admin view for :py:class:`ImportedFile`"""
"""Admin view for :py:class:`ImportedFile`."""

raw_id_fields = ('project', 'version')
list_display = ('path', 'name', 'version')
Expand Down

0 comments on commit fab340d

Please sign in to comment.