move Company related models into their own apps

This commit is contained in:
Andreas Zweili 2020-01-07 21:31:44 +01:00
parent a27c890b6e
commit 20b163ec27
31 changed files with 90 additions and 82 deletions

View File

@ -1,3 +1,11 @@
from django.db import models
# Create your models here.
class Company(models.Model):
name = models.CharField(max_length=50)
class Meta:
abstract = True
def __str__(self):
return self.name

View File

@ -1,3 +1,13 @@
from django.contrib import admin
# Register your models here.
from guardian.admin import GuardedModelAdmin
from .models import Customer, Owner
class CustomerAdmin(GuardedModelAdmin):
pass
admin.site.register(Customer, CustomerAdmin)
admin.site.register(Owner)

View File

@ -1,3 +1,24 @@
from django.db import models
from core.models import Company
# Create your models here.
class Owner(Company):
pass
class Customer(Company):
name = models.CharField(max_length=50)
description = models.TextField(blank=True)
def __str__(self):
return self.name
def get_absolute_url(self):
from django.urls import reverse
return reverse('customer', args=[str(self.id)])
class DeviceManufacturer(Company):
class Meta:
verbose_name_plural = "Device Manufacturers"

View File

@ -1,5 +1,4 @@
from django.contrib import admin
from guardian.admin import GuardedModelAdmin
import nested_admin
from .models import (
@ -16,7 +15,6 @@ from .models import (
Cpu,
CpuArchitecture,
CpuManufacturer,
Customer,
Device,
DeviceCategory,
DeviceInNet,
@ -35,7 +33,6 @@ from .models import (
NotificationType,
NotificationFromBackup,
OperatingSystem,
Owner,
Raid,
RaidType,
Ram,
@ -53,10 +50,6 @@ from .models import (
)
class CustomerAdmin(GuardedModelAdmin):
pass
class CpuAdmin(admin.ModelAdmin):
def get_model_perms(self, request):
"""
@ -370,7 +363,6 @@ admin.site.register(ConnectedDevice)
admin.site.register(Cpu, CpuAdmin)
admin.site.register(CpuArchitecture, CpuArchitectureAdmin)
admin.site.register(CpuManufacturer, CpuManufacturerAdmin)
admin.site.register(Customer, CustomerAdmin)
admin.site.register(Device)
admin.site.register(DeviceCategory, DeviceCategoryAdmin)
admin.site.register(DeviceInNet)
@ -387,7 +379,6 @@ admin.site.register(Net)
admin.site.register(Notification, NotificationAdmin)
admin.site.register(NotificationType, NotificationTypeAdmin)
admin.site.register(OperatingSystem, OperatingSystemAdmin)
admin.site.register(Owner)
admin.site.register(RaidType, RaidTypeAdmin)
admin.site.register(Ram, RamModuleAdmin)
admin.site.register(RamType, RamTypeAdmin)

View File

@ -1,8 +1,10 @@
from django.http import HttpResponseForbidden
from django.shortcuts import get_object_or_404
from customer.models import Customer
from .models import Backup
from .models import Computer
from .models import Customer
from .models import Device
from .models import ConnectedDevice
from .models import Net
@ -13,7 +15,7 @@ def computer_view_permission(old_fuction):
def new_function(request, pk, *args, **kwargs):
computer = get_object_or_404(Computer, pk=pk)
user = request.user
if user.has_perm('inventory.view_customer', computer.customer):
if user.has_perm('customer.view_customer', computer.customer):
return old_fuction(request, pk)
else:
return HttpResponseForbidden(
@ -26,7 +28,7 @@ def device_view_permission(old_function):
def new_function(request, pk, *args, **kwargs):
device = get_object_or_404(Device, pk=pk)
user = request.user
if user.has_perm('inventory.view_customer', device.customer):
if user.has_perm('customer.view_customer', device.customer):
return old_function(request, pk)
else:
return HttpResponseForbidden(
@ -39,7 +41,7 @@ def connect_device_view_permission(old_function):
def new_function(request, pk, *args, **kwargs):
device = get_object_or_404(ConnectedDevice, pk=pk)
user = request.user
if user.has_perm('inventory.view_customer', device.customer):
if user.has_perm('customer.view_customer', device.customer):
return old_function(request, pk)
else:
return HttpResponseForbidden(
@ -52,7 +54,7 @@ def customer_view_permission(old_function):
def new_function(request, pk, *args, **kwargs):
customer = Customer.objects.get(pk=pk)
user = request.user
if user.has_perm('inventory.view_customer', customer):
if user.has_perm('customer.view_customer', customer):
return old_function(request, pk)
else:
return HttpResponseForbidden(
@ -65,7 +67,7 @@ def net_view_permission(old_fuction):
def new_function(request, pk, *args, **kwargs):
net = get_object_or_404(Net, pk=pk)
user = request.user
if user.has_perm('inventory.view_customer', net.customer):
if user.has_perm('customer.view_customer', net.customer):
return old_fuction(request, pk)
else:
return HttpResponseForbidden(
@ -78,7 +80,7 @@ def backup_view_permission(old_fuction):
def new_function(request, pk, *args, **kwargs):
backup = get_object_or_404(Backup, pk=pk)
user = request.user
if user.has_perm('inventory.view_customer', backup.computer.customer):
if user.has_perm('customer.view_customer', backup.computer.customer):
return old_fuction(request, pk)
else:
return HttpResponseForbidden(
@ -91,7 +93,7 @@ def user_view_permission(old_fuction):
def new_function(request, pk, *args, **kwargs):
inventory_user = get_object_or_404(User, pk=pk)
user = request.user
if user.has_perm('inventory.view_customer', inventory_user.customer):
if user.has_perm('customer.view_customer', inventory_user.customer):
return old_fuction(request, pk)
else:
return HttpResponseForbidden(

View File

@ -1,12 +1,12 @@
from .backup import Backup, BackupMethod, TargetDevice, NotificationFromBackup
from .calendar import DayOfMonth, Month, Weekday
from .category import Category
from .companies import Company, Customer, DeviceManufacturer, Owner
from .computer import (Computer, ComputerCpuRelation, ComputerDiskRelation,
ComputerRamRelation,
ComputerSoftwareRelation)
from .cpu import CpuArchitecture, CpuManufacturer, Cpu
from .devices import (DeviceCategory, Device, ConnectedDevice, DeviceInNet)
from .devices import (DeviceCategory, Device, ConnectedDevice, DeviceInNet,
DeviceManufacturer)
from .disk import DiskType, Disk
from .groups import Group, AdGroup, MailGroup
from .license import (License, ComputerLicense, UserLicense,

View File

@ -1,33 +0,0 @@
from django.db import models
class Company(models.Model):
name = models.CharField(max_length=50)
class Meta:
abstract = True
def __str__(self):
return self.name
class Owner(Company):
pass
class Customer(Company):
name = models.CharField(max_length=50)
description = models.TextField(blank=True)
def __str__(self):
return self.name
def get_absolute_url(self):
from django.urls import reverse
return reverse('customer', args=[str(self.id)])
class DeviceManufacturer(Company):
class Meta:
verbose_name_plural = "Device Manufacturers"

View File

@ -1,6 +1,6 @@
from django.db import models
from core.models import Company
from .category import Category
from .companies import Company
class CpuArchitecture(Category):

View File

@ -1,11 +1,18 @@
from django.db import models
from core.models import Company
from customer.models import Customer, Owner
from .category import Category
from .companies import Customer, Owner, DeviceManufacturer
from .location import Location
from .user import User
from .net import Net, IpStatus
class DeviceManufacturer(Company):
class Meta:
verbose_name_plural = "Device Manufacturers"
class DeviceCategory(Category):
class Meta:

View File

@ -1,5 +1,5 @@
from django.db import models
from .companies import Customer
from customer.models import Customer
class Group(models.Model):

View File

@ -1,7 +1,7 @@
from django.db import models
from django.core.exceptions import ValidationError
from .companies import Customer
from customer.models import Customer
from .computer import Computer
from .user import User
from .software import Software

View File

@ -1,5 +1,5 @@
from django.db import models
from .companies import Customer
from customer.models import Customer
class Location(models.Model):

View File

@ -1,6 +1,6 @@
from django.db import models
from customer.models import Customer
from .category import Category
from .companies import Customer
class IpStatus(Category):

View File

@ -1,5 +1,5 @@
from django.db import models
from .companies import Customer
from customer.models import Customer
from .groups import AdGroup, MailGroup

View File

@ -19,7 +19,7 @@ def create_admin_user():
User = get_user_model()
admin = User.objects.create_user("novartis-admin", "admin@novartis.com",
"password", is_staff=True)
customer = mixer.blend('inventory.Customer')
customer = mixer.blend('customer.Customer')
group = Group.objects.create(name="Novartis Admin")
admin.groups.add(group)
assign_perm('view_customer', admin, customer)

View File

@ -5,6 +5,6 @@ pytestmark = pytest.mark.django_db
def test_customer_reverse_url():
customer = mixer.blend('inventory.Customer')
customer = mixer.blend('customer.Customer')
assert (customer.get_absolute_url()
== "/customer/" + str(customer.id) + "/")

View File

@ -3,7 +3,7 @@ from mixer.backend.django import mixer
from django.test import Client
import helper
from inventory.models import Customer
from customer.models import Customer
pytestmark = pytest.mark.django_db

View File

@ -73,7 +73,7 @@ def test_computer_detail_view_cpu_relation(create_admin_user):
def test_computer_detail_view_no_permission(create_admin_user):
create_admin_user()
customer = mixer.blend('inventory.Customer')
customer = mixer.blend('customer.Customer')
computer = mixer.blend('inventory.Computer', customer=customer)
client = Client()
client.login(username="novartis-admin", password="password")

View File

@ -5,7 +5,7 @@ from django.test import Client
import helper
from inventory.models import Customer
from customer.models import Customer
pytestmark = pytest.mark.django_db

View File

@ -4,7 +4,7 @@ from mixer.backend.django import mixer
from django.test import Client
import helper
from inventory.models import Customer
from customer.models import Customer
pytestmark = pytest.mark.django_db

View File

@ -37,7 +37,7 @@ def test_customer_detail_view_no_permissions():
User.objects.create_user("novartis-admin", "admin@novartis.com",
"password", is_staff=True)
client = Client()
customer = mixer.blend('inventory.Customer')
customer = mixer.blend('customer.Customer')
client.login(username="novartis-admin", password="password")
response = client.get('/customer/' + str(customer.id) + '/')
assert response.status_code == 302 and 'login' in response.url

View File

@ -4,7 +4,7 @@ from django.test import Client
from mixer.backend.django import mixer
import helper
from inventory.models import Customer
from customer.models import Customer
pytestmark = pytest.mark.django_db

View File

@ -4,7 +4,7 @@ from django.test import Client
from mixer.backend.django import mixer
import helper
from inventory.models import Customer
from customer.models import Customer
pytestmark = pytest.mark.django_db

View File

@ -2,7 +2,6 @@ import pytest
from django.test import Client
from django.contrib.auth import get_user_model
from django.contrib.auth.models import Group
from guardian.shortcuts import assign_perm
from mixer.backend.django import mixer
@ -64,7 +63,7 @@ def test_customer_list_view(create_admin_user):
def test_customer_list_view_multiple_customers(create_admin_user):
fixture = create_admin_user()
customer1 = fixture['customer']
customer2 = mixer.blend('inventory.Customer')
customer2 = mixer.blend('customer.Customer')
assign_perm('view_customer', fixture['admin'], customer2)
client = Client()
client.login(username="novartis-admin", password="password")

View File

@ -5,7 +5,7 @@ from django.test import Client
import helper
from inventory.models import Customer
from customer.models import Customer
pytestmark = pytest.mark.django_db

View File

@ -4,7 +4,7 @@ from django.test import Client
from mixer.backend.django import mixer
import helper
from inventory.models import Customer
from customer.models import Customer
pytestmark = pytest.mark.django_db

View File

@ -16,7 +16,7 @@ def test_device_detail_view_not_logged_in():
def test_device_detail_view(create_admin_user):
fixture = create_admin_user()
mixer.blend('inventory.DeviceCategory')
mixer.blend('inventory.Owner')
mixer.blend('customer.Owner')
mixer.blend('inventory.Location')
device = mixer.blend('inventory.Device',
customer=fixture['customer'],
@ -47,7 +47,7 @@ def test_device_detail_view_not_found(create_admin_user):
def test_device_detail_view_no_permission(create_admin_user):
create_admin_user()
customer = mixer.blend('inventory.Customer')
customer = mixer.blend('customer.Customer')
device = mixer.blend('inventory.Device', customer=customer)
client = Client()
client.login(username="novartis-admin", password="password")

View File

@ -13,7 +13,7 @@ pytestmark = pytest.mark.django_db
def test_net_detail_view_no_permission(create_admin_user):
create_admin_user()
net = mixer.blend('inventory.Net')
customer = mixer.blend('inventory.Customer')
customer = mixer.blend('customer.Customer')
device = mixer.blend('inventory.Computer', customer=customer)
mixer.blend('inventory.DeviceInNet',
device=device,

View File

@ -91,7 +91,7 @@ def test_user_detail_view_computer(create_admin_user):
def test_user_detail_view_no_permission(create_admin_user):
create_admin_user()
customer = mixer.blend('inventory.Customer')
customer = mixer.blend('customer.Customer')
user = mixer.blend('inventory.User', customer=customer)
client = Client()
client.login(username="novartis-admin", password="password")

View File

@ -10,6 +10,8 @@ from django_tables2.views import SingleTableMixin
from guardian.mixins import PermissionRequiredMixin
from guardian.shortcuts import get_objects_for_user
from customer.models import Customer
from .decorators import backup_view_permission
from .decorators import computer_view_permission
from .decorators import customer_view_permission
@ -24,7 +26,6 @@ from .models import ComputerDiskRelation
from .models import ComputerLicense
from .models import ComputerRamRelation
from .models import ComputerSoftwareRelation
from .models import Customer
from .models import Device
from .models import DeviceInNet
from .models import DisksInRaid
@ -92,7 +93,7 @@ class CustomerDetailView(LoginRequiredMixin, PermissionRequiredMixin, DetailView
def customers_table_view(request):
table = CustomersTable(
get_objects_for_user(request.user,
'inventory.view_customer',
'customer.view_customer',
klass=Customer))
RequestConfig(request).configure(table)
return render(request, 'inventory/customer_list.html', {'customers': table})
@ -163,7 +164,7 @@ class ComputersFilterView(LoginRequiredMixin, SingleTableMixin, FilterView):
def get_queryset(self):
customers = get_objects_for_user(self.request.user,
'inventory.view_customer',
'customer.view_customer',
klass=Customer)
results = Computer.objects.filter(customer__in=customers)
return results

2
run.sh
View File

@ -4,6 +4,8 @@ if [ -f ./.second_run ]; then
python manage.py makemigrations
python manage.py migrate
else
python manage.py makemigrations core
python manage.py makemigrations customer
python manage.py makemigrations inventory
python manage.py makemigrations
python manage.py migrate