Loading resources/models.py +23 −15 Original line number Diff line number Diff line Loading @@ -53,16 +53,6 @@ class Project(models.Model): description = models.TextField() class Role(models.Model): label = models.TextField(unique=True) class ProjectMembership(models.Model): project = models.ForeignKey(Project, on_delete=models.CASCADE) user = models.ForeignKey(User, on_delete=models.CASCADE) role = models.ForeignKey(Role, on_delete=models.CASCADE) def fetch_public_project() -> Project: project, created = Project.objects.get_or_create(label="public project") return project Loading @@ -73,7 +63,7 @@ class Tag(models.Model): ark = models.TextField(null=True, blank=True) label = models.TextField(null=True, blank=True) # pref label de SKOS owner = models.ForeignKey(User, on_delete=models.CASCADE) project = models.ForeignKey(Project, on_delete=models.CASCADE) project = models.ForeignKey(Project, on_delete=models.CASCADE, null=True) def __str__(self): return self.label or self.uid Loading Loading @@ -115,7 +105,7 @@ class FileType(models.Model): class MetadataSet(models.Model): title = models.CharField("titre", max_length=128) owner = models.ForeignKey(User, on_delete=models.CASCADE) project = models.ForeignKey(Project, on_delete=models.CASCADE) project = models.ForeignKey(Project, on_delete=models.CASCADE, null=True) def __str__(self): return "{}".format(self.title) Loading @@ -141,7 +131,7 @@ class Metadata(models.Model): set = models.ForeignKey(MetadataSet, on_delete=models.CASCADE) rank = models.IntegerField("ordre", default=0) owner = models.ForeignKey(User, on_delete=models.CASCADE) project = models.ForeignKey(Project, on_delete=models.CASCADE) project = models.ForeignKey(Project, on_delete=models.CASCADE, null=True) data_type = models.ForeignKey(MetadataType, null=True, on_delete=models.SET_NULL) expose = models.BooleanField(default=True) Loading Loading @@ -202,7 +192,7 @@ class File(Resource): # this duplicates "ptr_owner" from Resource class # (can't have unique constraints across tables unfortunately) owner = models.ForeignKey(User, on_delete=models.CASCADE) project = models.ForeignKey(Project, on_delete=models.CASCADE) project = models.ForeignKey(Project, on_delete=models.CASCADE, null=True) hash = models.CharField("hachage", max_length=64) file_type = models.ForeignKey(FileType, on_delete=models.RESTRICT) size = models.BigIntegerField("taille") Loading Loading @@ -345,7 +335,7 @@ class Collection(models.Model): resources = models.ManyToManyField(Resource, through="CollectionMembership") tags = models.ManyToManyField(Tag) owner = models.ForeignKey(User, on_delete=models.CASCADE) project = models.ForeignKey(Project, on_delete=models.CASCADE) project = models.ForeignKey(Project, on_delete=models.CASCADE, null=True) parent = models.ForeignKey("self", null=True, on_delete=models.CASCADE) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) Loading Loading @@ -572,6 +562,24 @@ class CollectionMembership(models.Model): unique_together = (("resource", "collection"),) class Permission(models.Model): label = models.TextField(unique=True) project = models.ForeignKey(Project, on_delete=models.CASCADE) class Meta: unique_together = (("label", "project"),) class Role(models.Model): label = models.TextField(unique=True) project = models.ForeignKey(Project, on_delete=models.CASCADE) permissions = models.ManyToManyField(Permission) users = models.ManyToManyField(User) class Meta: unique_together = (("label", "project"),) @receiver(post_save, sender=File) def dump_file_infos_to_fs(sender, instance: File, **kwargs): instance.dump_infos_to_fs() Loading
resources/models.py +23 −15 Original line number Diff line number Diff line Loading @@ -53,16 +53,6 @@ class Project(models.Model): description = models.TextField() class Role(models.Model): label = models.TextField(unique=True) class ProjectMembership(models.Model): project = models.ForeignKey(Project, on_delete=models.CASCADE) user = models.ForeignKey(User, on_delete=models.CASCADE) role = models.ForeignKey(Role, on_delete=models.CASCADE) def fetch_public_project() -> Project: project, created = Project.objects.get_or_create(label="public project") return project Loading @@ -73,7 +63,7 @@ class Tag(models.Model): ark = models.TextField(null=True, blank=True) label = models.TextField(null=True, blank=True) # pref label de SKOS owner = models.ForeignKey(User, on_delete=models.CASCADE) project = models.ForeignKey(Project, on_delete=models.CASCADE) project = models.ForeignKey(Project, on_delete=models.CASCADE, null=True) def __str__(self): return self.label or self.uid Loading Loading @@ -115,7 +105,7 @@ class FileType(models.Model): class MetadataSet(models.Model): title = models.CharField("titre", max_length=128) owner = models.ForeignKey(User, on_delete=models.CASCADE) project = models.ForeignKey(Project, on_delete=models.CASCADE) project = models.ForeignKey(Project, on_delete=models.CASCADE, null=True) def __str__(self): return "{}".format(self.title) Loading @@ -141,7 +131,7 @@ class Metadata(models.Model): set = models.ForeignKey(MetadataSet, on_delete=models.CASCADE) rank = models.IntegerField("ordre", default=0) owner = models.ForeignKey(User, on_delete=models.CASCADE) project = models.ForeignKey(Project, on_delete=models.CASCADE) project = models.ForeignKey(Project, on_delete=models.CASCADE, null=True) data_type = models.ForeignKey(MetadataType, null=True, on_delete=models.SET_NULL) expose = models.BooleanField(default=True) Loading Loading @@ -202,7 +192,7 @@ class File(Resource): # this duplicates "ptr_owner" from Resource class # (can't have unique constraints across tables unfortunately) owner = models.ForeignKey(User, on_delete=models.CASCADE) project = models.ForeignKey(Project, on_delete=models.CASCADE) project = models.ForeignKey(Project, on_delete=models.CASCADE, null=True) hash = models.CharField("hachage", max_length=64) file_type = models.ForeignKey(FileType, on_delete=models.RESTRICT) size = models.BigIntegerField("taille") Loading Loading @@ -345,7 +335,7 @@ class Collection(models.Model): resources = models.ManyToManyField(Resource, through="CollectionMembership") tags = models.ManyToManyField(Tag) owner = models.ForeignKey(User, on_delete=models.CASCADE) project = models.ForeignKey(Project, on_delete=models.CASCADE) project = models.ForeignKey(Project, on_delete=models.CASCADE, null=True) parent = models.ForeignKey("self", null=True, on_delete=models.CASCADE) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) Loading Loading @@ -572,6 +562,24 @@ class CollectionMembership(models.Model): unique_together = (("resource", "collection"),) class Permission(models.Model): label = models.TextField(unique=True) project = models.ForeignKey(Project, on_delete=models.CASCADE) class Meta: unique_together = (("label", "project"),) class Role(models.Model): label = models.TextField(unique=True) project = models.ForeignKey(Project, on_delete=models.CASCADE) permissions = models.ManyToManyField(Permission) users = models.ManyToManyField(User) class Meta: unique_together = (("label", "project"),) @receiver(post_save, sender=File) def dump_file_infos_to_fs(sender, instance: File, **kwargs): instance.dump_infos_to_fs()