Skip to content

Commit

Permalink
Integrate django-import-export
Browse files Browse the repository at this point in the history
  • Loading branch information
Andrew-Dickinson committed Jul 3, 2024
1 parent c5482c6 commit 65f18c6
Show file tree
Hide file tree
Showing 9 changed files with 49 additions and 9 deletions.
1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ dependencies = [
# FIXME: Go back to PyPI when https://github.com/jazzband/django-dbbackup/pull/515 or https://github.com/jazzband/django-dbbackup/pull/511 is merged
"django-dbbackup@git+https://github.com/willnilges/django-dbbackup.git@62048411ff5beac4beac1578f686824214f1f33a",
"django-storages==1.14.*",
"django-import-export==4.0.*",
"boto3==1.34.*",
"six==1.16.0",
]
Expand Down
3 changes: 2 additions & 1 deletion src/meshapi/admin/building.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from django.contrib.admin import ModelAdmin
from django.db.models import QuerySet
from django.http import HttpRequest
from import_export.admin import ExportActionMixin, ImportExportModelAdmin

from meshapi.admin.inlines import InstallInline
from meshapi.models import Building
Expand Down Expand Up @@ -49,7 +50,7 @@ class Meta:


@admin.register(Building)
class BuildingAdmin(admin.ModelAdmin):
class BuildingAdmin(ImportExportModelAdmin, ExportActionMixin):
form = BuildingAdminForm
list_display = ["__str__", "street_address", "primary_node"]
search_fields = [
Expand Down
3 changes: 2 additions & 1 deletion src/meshapi/admin/device.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from django.contrib import admin
from django.db.models import QuerySet
from django.http import HttpRequest
from import_export.admin import ExportActionMixin, ImportExportModelAdmin

from meshapi.admin.admin import device_fieldsets
from meshapi.admin.inlines import DeviceLinkInline
Expand All @@ -19,7 +20,7 @@ class Meta:


@admin.register(Device)
class DeviceAdmin(admin.ModelAdmin):
class DeviceAdmin(ImportExportModelAdmin, ExportActionMixin):
form = DeviceAdminForm
search_fields = ["name__icontains", "model__icontains", "ssid__icontains", "notes__icontains"]
list_display = [
Expand Down
19 changes: 17 additions & 2 deletions src/meshapi/admin/install.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,27 @@
from typing import Tuple
from typing import Any, Tuple

import tablib
from django import forms
from django.contrib import admin
from django.db.models import QuerySet
from django.http import HttpRequest
from import_export import resources
from import_export.admin import ExportActionMixin, ImportExportModelAdmin

from meshapi.models import Install


class InstallImportExportResource(resources.ModelResource):
def before_import(self, dataset: tablib.Dataset, **kwargs: Any) -> None:
if "install_number" not in dataset.headers:
dataset.headers.append("install_number")
super().before_import(dataset, **kwargs)

class Meta:
model = Install
import_id_fields = ("install_number",)


class InstallAdminForm(forms.ModelForm):
class Meta:
model = Install
Expand All @@ -18,8 +32,9 @@ class Meta:


@admin.register(Install)
class InstallAdmin(admin.ModelAdmin):
class InstallAdmin(ImportExportModelAdmin, ExportActionMixin):
form = InstallAdminForm
resource_classes = [InstallImportExportResource]
list_filter = [
("node", admin.EmptyFieldListFilter),
"status",
Expand Down
3 changes: 2 additions & 1 deletion src/meshapi/admin/link.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from django import forms
from django.contrib import admin
from import_export.admin import ExportActionMixin, ImportExportModelAdmin

from meshapi.models import Link

Expand All @@ -14,7 +15,7 @@ class Meta:


@admin.register(Link)
class LinkAdmin(admin.ModelAdmin):
class LinkAdmin(ImportExportModelAdmin, ExportActionMixin):
form = LinkAdminForm
search_fields = [
"from_device__node__name__icontains",
Expand Down
3 changes: 2 additions & 1 deletion src/meshapi/admin/member.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from django import forms
from django.contrib import admin
from import_export.admin import ExportActionMixin, ImportExportModelAdmin

from meshapi.admin.inlines import InstallInline
from meshapi.models import Member
Expand All @@ -18,7 +19,7 @@ class Meta:


@admin.register(Member)
class MemberAdmin(admin.ModelAdmin):
class MemberAdmin(ImportExportModelAdmin, ExportActionMixin):
form = MemberAdminForm
search_fields = [
# Search by name
Expand Down
19 changes: 17 additions & 2 deletions src/meshapi/admin/node.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
from typing import Optional
from typing import Any, Optional

import tablib
from django import forms
from django.contrib import admin
from import_export import resources
from import_export.admin import ExportActionMixin, ImportExportModelAdmin

from meshapi.admin.inlines import (
BuildingMembershipInline,
Expand All @@ -19,15 +22,27 @@
admin.site.index_title = "Welcome to MeshDB Admin Portal"


class NodeImportExportResource(resources.ModelResource):
def before_import(self, dataset: tablib.Dataset, **kwargs: Any) -> None:
if "network_number" not in dataset.headers:
dataset.headers.append("network_number")
super().before_import(dataset, **kwargs)

class Meta:
model = Node
import_id_fields = ("network_number",)


class NodeAdminForm(forms.ModelForm):
class Meta:
model = Node
fields = "__all__"


@admin.register(Node)
class NodeAdmin(admin.ModelAdmin):
class NodeAdmin(ImportExportModelAdmin, ExportActionMixin):
form = NodeAdminForm
resource_classes = [NodeImportExportResource]
search_fields = [
"network_number__iexact",
"name__icontains",
Expand Down
3 changes: 2 additions & 1 deletion src/meshapi/admin/sector.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from django import forms
from django.contrib import admin
from import_export.admin import ExportActionMixin, ImportExportModelAdmin

from meshapi.admin.admin import device_fieldsets
from meshapi.admin.inlines import DeviceLinkInline
Expand All @@ -13,7 +14,7 @@ class Meta:


@admin.register(Sector)
class SectorAdmin(admin.ModelAdmin):
class SectorAdmin(ImportExportModelAdmin, ExportActionMixin):
form = SectorAdminForm
search_fields = ["name__icontains", "model__icontains", "ssid__icontains", "notes__icontains"]
list_display = [
Expand Down
4 changes: 4 additions & 0 deletions src/meshdb/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@
"django_filters",
"django_jsonform",
"dbbackup",
"import_export",
]

MIDDLEWARE = [
Expand Down Expand Up @@ -299,3 +300,6 @@
"docExpansion": "none",
},
}

IMPORT_EXPORT_IMPORT_PERMISSION_CODE = "add"
IMPORT_EXPORT_EXPORT_PERMISSION_CODE = "view"

0 comments on commit 65f18c6

Please sign in to comment.