summaryrefslogtreecommitdiff
path: root/commcrawler/admin.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2019-07-30 20:19:11 +0200
committerÉtienne Loks <etienne@peacefrogs.net>2019-07-30 20:19:11 +0200
commit56a33989278a8fe2985f0d36d3c589136c1ec30d (patch)
treeb0cb3356e55b4547a4747e10411a8ca68852b977 /commcrawler/admin.py
downloadComm-on-net-56a33989278a8fe2985f0d36d3c589136c1ec30d.tar.bz2
Comm-on-net-56a33989278a8fe2985f0d36d3c589136c1ec30d.zip
First commit
Diffstat (limited to 'commcrawler/admin.py')
-rw-r--r--commcrawler/admin.py124
1 files changed, 124 insertions, 0 deletions
diff --git a/commcrawler/admin.py b/commcrawler/admin.py
new file mode 100644
index 0000000..f4df5e2
--- /dev/null
+++ b/commcrawler/admin.py
@@ -0,0 +1,124 @@
+from ajax_select import make_ajax_form
+from django.contrib import admin, messages
+from django.contrib.auth.admin import GroupAdmin, UserAdmin
+from django.contrib.auth.models import Group, User
+from django import forms
+from django.http import HttpResponseRedirect
+from django.shortcuts import render
+from django.utils.translation import ugettext_lazy as _
+
+from commonnet.admin_site import admin_site
+from commcrawler import models
+
+
+admin_site.register(User, UserAdmin)
+admin_site.register(Group, GroupAdmin)
+
+
+class AreaTypeAdmin(admin.ModelAdmin):
+ model = models.AreaType
+ list_display = ('name', )
+
+
+admin_site.register(models.AreaType, AreaTypeAdmin)
+
+
+class AreaAdmin(admin.ModelAdmin):
+ model = models.Area
+ list_display = ('name', 'area_type', 'reference', 'parent')
+ list_filter = ('area_type',)
+ search_fields = ['name', 'parent__name']
+
+
+admin_site.register(models.Area, AreaAdmin)
+
+
+class OrganizationTypeAdmin(admin.ModelAdmin):
+ model = models.OrganizationType
+ list_display = ('name', 'parent')
+ list_filter = ('parent',)
+
+
+admin_site.register(models.OrganizationType, OrganizationTypeAdmin)
+
+
+class OrganizationAdmin(admin.ModelAdmin):
+ model = models.Organization
+ list_display = ('name', 'organization_type', 'area')
+ list_filter = ('organization_type',)
+ search_fields = ['name']
+ form = make_ajax_form(model, {'area': 'area'})
+
+
+admin_site.register(models.Organization, OrganizationAdmin)
+
+
+class AddToCrawlForm(forms.Form):
+ crawl = forms.ChoiceField(label=_("Crawl"), choices=tuple())
+
+ def __init__(self, *args, **kwargs):
+ super(AddToCrawlForm, self).__init__(*args, **kwargs)
+ self.fields["crawl"].choices = [(None, "--")] + [
+ (c.pk, str(c))
+ for c in models.Crawl.objects.filter(status="C").all()
+ ]
+
+
+class TargetAdmin(admin.ModelAdmin):
+ list_display = ('name', 'url', 'organization')
+ model = models.Target
+ list_filter = ('organization__organization_type',)
+ form = make_ajax_form(model, {'organization': 'organization'})
+ actions = ['add_to_crawl']
+
+ def add_to_crawl(self, request, queryset):
+ if 'apply' in request.POST:
+ form = AddToCrawlForm(request.POST)
+ if form.is_valid():
+ crawl = None
+ try:
+ crawl = models.Crawl.objects.get(
+ pk=form.cleaned_data["crawl"],
+ status="C"
+ )
+ except models.Crawl.DoesNotExist:
+ pass
+ if crawl:
+ nb_added = 0
+ targets = [
+ c["id"] for c in crawl.targets.values("id")
+ ]
+ for target in queryset.all():
+ if target.pk not in targets:
+ crawl.targets.add(target)
+ nb_added += 1
+ messages.add_message(
+ request, messages.INFO,
+ str(_("{} new targets added to {}")).format(
+ nb_added, str(crawl)
+ )
+ )
+ return HttpResponseRedirect(request.get_full_path())
+ else:
+ form = AddToCrawlForm()
+ return render(
+ request, 'admin/add_to_crawl.html',
+ context={"form": form, "query_nb": queryset.count(),
+ "items": [v['pk'] for v in queryset.values('pk').all()]})
+
+ add_to_crawl.short_description = _("Add to crawl")
+
+
+admin_site.register(models.Target, TargetAdmin)
+
+
+class CrawlAdmin(admin.ModelAdmin):
+ model = models.Crawl
+ list_display = ("name", "status", "target_nb", "created", "started",
+ "ended")
+ list_filter = ("status",)
+ readonly_fields = ("status", "created", "started", "ended")
+ exclude = ("targets", )
+
+
+admin_site.register(models.Crawl, CrawlAdmin)