Source code for intranet.apps.files.models

from django.contrib.auth.models import Group as DjangoGroup
from django.db import models
from django.db.models import Manager, Q

"""
    Sample TJ configuration:

        Host.objects.create(name="Computer Systems Lab",
                            code="csl",
                            address="remote.tjhsst.edu",
                            linux=True)

        afs = Host.objects.create(name="CSL AFS Root",
                                  code="afs",
                                  address="remote.tjhsst.edu",
                                  directory="/afs/csl/",
                                  linux=True,
                                  available_to_all=True)

        afs.groups_visible.add(Group.objects.get(name="admin_all"))

"""


[docs]class HostManager(Manager):
[docs] def visible_to_user(self, user): """Get a list of hosts available to a given user. Same logic as Announcements and Events. """ return Host.objects.filter(Q(groups_visible__in=user.groups.all()) | Q(groups_visible__isnull=True)).distinct()
[docs]class Host(models.Model): objects = HostManager() name = models.CharField(max_length=255) code = models.CharField(max_length=32) address = models.CharField(max_length=255) directory = models.CharField(max_length=255, blank=True) windows = models.BooleanField(default=False) linux = models.BooleanField(default=False) groups_visible = models.ManyToManyField(DjangoGroup, blank=True) available_to_all = models.BooleanField(default=False)
[docs] def visible_to(self, user): if self.groups_visible.count() == 0: return True return self in Host.objects.visible_to_user(user)
def __str__(self): return f"{self.name} ({self.code})" class Meta: ordering = ["-linux", "name"]