• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

gcivil-nyu-org / team4-wed-fall25 / 65

11 Nov 2025 04:07PM UTC coverage: 75.054% (+18.5%) from 56.582%
65

push

travis-pro

web-flow
Merge pull request #78 from gcivil-nyu-org/develop

Syncing main with develop

608 of 823 new or added lines in 15 files covered. (73.88%)

37 existing lines in 3 files now uncovered.

1047 of 1395 relevant lines covered (75.05%)

0.75 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

77.19
/note2webapp/admin.py
1
# note2webapp/admin.py
2
from django.contrib import admin
1✔
3
from django.contrib.auth.models import User
1✔
4
from django.contrib.auth.admin import UserAdmin
1✔
5
from django.urls import path
1✔
6

7
from .models import Profile, ModelUpload, ModelVersion
1✔
8
from .utils import delete_model_media_tree, delete_version_files_and_dir
1✔
9
from . import views
1✔
10

11

12
# ---------------------------
13
# Custom Admin Site with Stats
14
# ---------------------------
15
class CustomAdminSite(admin.AdminSite):
1✔
16
    site_header = "Note2Web Administration"
1✔
17
    site_title = "Note2Web Admin"
1✔
18
    index_title = "Welcome to Note2Web Administration"
1✔
19

20
    def get_urls(self):
1✔
21
        urls = super().get_urls()
1✔
22
        custom_urls = [
1✔
23
            path("stats/", self.admin_view(views.admin_stats), name="admin_stats"),
24
        ]
25
        return custom_urls + urls
1✔
26

27
    def index(self, request, extra_context=None):
1✔
NEW
28
        extra_context = extra_context or {}
×
NEW
29
        extra_context["show_stats_button"] = True
×
NEW
30
        return super().index(request, extra_context)
×
31

32

33
# Create custom admin site instance
34
admin_site = CustomAdminSite(name="admin")
1✔
35

36

37
# ---------------------------
38
# User + Profile inline
39
# ---------------------------
40
class ProfileInline(admin.StackedInline):
1✔
41
    model = Profile
1✔
42
    can_delete = False
1✔
43
    verbose_name_plural = "Profile"
1✔
44
    extra = 0
1✔
45

46

47
class CustomUserAdmin(UserAdmin):
1✔
48
    inlines = (ProfileInline,)
1✔
49

50

51
# Register User with custom admin site
52
admin_site.register(User, CustomUserAdmin)
1✔
53

54

55
# ---------------------------
56
# ModelUpload admin
57
# admin delete => also delete media tree
58
# ---------------------------
59
@admin.register(ModelUpload, site=admin_site)
1✔
60
class ModelUploadAdmin(admin.ModelAdmin):
1✔
61
    list_display = ("id", "name", "user", "created_at")
1✔
62
    list_filter = ("created_at",)
1✔
63
    search_fields = ("name", "user__username")
1✔
64

65
    def delete_model(self, request, obj):
1✔
66
        # delete media/<model> folder too
NEW
67
        delete_model_media_tree(obj)
×
NEW
68
        super().delete_model(request, obj)
×
69

70
    def delete_queryset(self, request, queryset):
1✔
71
        # bulk delete cleanup
NEW
72
        for obj in queryset:
×
NEW
73
            delete_model_media_tree(obj)
×
NEW
74
        super().delete_queryset(request, queryset)
×
75

76

77
# ---------------------------
78
# ModelVersion admin
79
# admin delete => also delete version files
80
# ---------------------------
81
@admin.register(ModelVersion, site=admin_site)
1✔
82
class ModelVersionAdmin(admin.ModelAdmin):
1✔
83
    list_display = (
1✔
84
        "id",
85
        "upload",
86
        "tag",
87
        "status",
88
        "is_active",
89
        "is_deleted",
90
        "category",
91
        "created_at",
92
    )
93
    list_filter = ("status", "is_active", "is_deleted", "category", "created_at")
1✔
94
    search_fields = ("tag", "upload__name")
1✔
95

96
    def delete_model(self, request, obj):
1✔
NEW
97
        delete_version_files_and_dir(obj)
×
NEW
98
        super().delete_model(request, obj)
×
99

100
    def delete_queryset(self, request, queryset):
1✔
NEW
101
        for obj in queryset:
×
NEW
102
            delete_version_files_and_dir(obj)
×
NEW
103
        super().delete_queryset(request, queryset)
×
104

105

106
# ---------------------------
107
# Profile admin
108
# ---------------------------
109
@admin.register(Profile, site=admin_site)
1✔
110
class ProfileAdmin(admin.ModelAdmin):
1✔
111
    list_display = ("user", "role")
1✔
112
    list_filter = ("role",)
1✔
113
    search_fields = ("user__username",)
1✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc