Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
from building_blocks.admin import SluggedKaosModelAdmin, ArchivableMixinAdmin, KaosModelAdmin
from building_blocks.consts.field_names import *
from dj_kaos_utils.admin.utils import render_admin_link, render_anchor
from django.contrib import admin

from .models import *


class FormFieldInline(
    admin.StackedInline
):
    slug_source = 'name'
    model = FormField
    extra = 0
    ordering = ('order',)
    prepopulated_fields = {'slug': ('name',)}
    fields = (
        'order',
        (NAME, SLUG,),
        TYPE,
        ('choices', 'choices_endpoint')
    )


@admin.register(Form)
class FormAdmin(
    SluggedKaosModelAdmin
):
    inlines = (FormFieldInline,)


@admin.register(ClipperEndpoint)
class ClipperEndpointAdmin(
    ArchivableMixinAdmin,
    SluggedKaosModelAdmin
):
    list_display = (NAME, SLUG, *ArchivableMixinAdmin.list_display)
    readonly_fields = (
        *SluggedKaosModelAdmin.readonly_fields,
        *ArchivableMixinAdmin.readonly_fields,
    )
    autocomplete_fields = ('form',)
    fieldsets = (
        (None, {'fields': (NAME, 'webclips_endpoint', 'form')}),
        *SluggedKaosModelAdmin.fieldsets[1:],
    )


@admin.register(WebClip)
class WebClipAdmin(
    KaosModelAdmin
):
    list_display = ('__str__', 'page_url_display', 'created')
    readonly_fields = (
        *KaosModelAdmin.readonly_fields,
        'processed_item_display',
        'page_url_display',
    )
    fieldsets = (
        (None, {'fields': (
            'page_title',
            'page_url',
            'html_content',
        )}),
        ("Notes and Form", {'fields': ('clipper_notes', 'form_data'), 'classes': ('collapse', 'collapsed')}),
        ("Processing", {'fields': ('processed_item_display',)}),
        *KaosModelAdmin.fieldsets[1:],
    )

    @admin.display(description="processed item")
    def processed_item_display(self, obj: WebClip):
        if obj and obj.processed_item:
            return render_admin_link(obj.processed_item)

    @admin.display(description="page url")
    def page_url_display(self, obj: WebClip):
        if obj:
            return render_anchor(obj.page_url)