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

DemocracyClub / aggregator-api / 93f28176-d12b-44aa-8582-a03ba3be77a2

05 Dec 2023 03:31PM UTC coverage: 77.419% (-0.8%) from 78.236%
93f28176-d12b-44aa-8582-a03ba3be77a2

push

circleci

web-flow
Merge pull request #441 from DemocracyClub/self-serve-api-keys

Self-serve API keys

315 of 422 new or added lines in 17 files covered. (74.64%)

1 existing line in 1 file now uncovered.

864 of 1116 relevant lines covered (77.42%)

0.77 hits per line

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

81.25
/frontend/apps/api_users/admin.py
1
from django.contrib import admin
1✔
2
from django.template.response import TemplateResponse
1✔
3
from django.urls import path
1✔
4

5
from api_users.dynamodb_helpers import DynamoDBClient
1✔
6
from api_users.models import APIKey, CustomUser
1✔
7

8

9
class ApiKeyInline(admin.TabularInline):
1✔
10
    model = APIKey
1✔
11
    extra = 0
1✔
12
    can_delete = True
1✔
13
    fields = (
1✔
14
        "name",
15
        "usage_reason",
16
        "rate_limit_warn",
17
        "is_active",
18
        "truncated_key",
19
    )
20

21
    @admin.display(description="Truncated key")
1✔
22
    def truncated_key(self, obj):
1✔
NEW
23
        return obj.truncated_key
×
24

25
    def has_add_permission(self, request, obj=None):
1✔
NEW
26
        return False
×
27

28
    def has_change_permission(self, request, obj=None):
1✔
NEW
29
        return True
×
30

31
    def has_delete_permission(self, request, obj=None):
1✔
NEW
32
        return False
×
33

34
    readonly_fields = ("name", "key", "usage_reason", "truncated_key")
1✔
35

36

37
class ApiUserAdmin(admin.ModelAdmin):
1✔
38
    search_fields = ("email",)
1✔
39

40
    fields = ("name", "email", "api_plan")
1✔
41

42
    inlines = [ApiKeyInline]
1✔
43

44
    def get_urls(self):
1✔
45
        urls = super().get_urls()
1✔
46
        my_urls = [
1✔
47
            path(
48
                "sync_api_keys/",
49
                self.admin_site.admin_view(self.sync_api_keys),
50
                name="sync_api_keys",
51
            )
52
        ]
53
        return my_urls + urls
1✔
54

55
    def sync_api_keys(self, request):
1✔
NEW
56
        DynamoDBClient().sync_api_keys()
×
57

NEW
58
        return TemplateResponse(request, "admin/sync_confirmation.html")
×
59

60

61
admin.site.register(CustomUser, ApiUserAdmin)
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