Loading resources/models.py +24 −6 Original line number Diff line number Diff line Loading @@ -49,12 +49,12 @@ class APIKey(models.Model): class Project(models.Model): label = models.TextField() label = models.TextField(unique=True) description = models.TextField() class Role(models.Model): label = models.TextField label = models.TextField(unique=True) class ProjectMembership(models.Model): Loading @@ -63,11 +63,17 @@ class ProjectMembership(models.Model): 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 class Tag(models.Model): uid = models.TextField() 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) def __str__(self): return self.label or self.uid Loading @@ -75,7 +81,10 @@ class Tag(models.Model): class Meta: verbose_name = "étiquette" verbose_name_plural = "étiquettes" unique_together = (("uid", "owner"),) unique_together = ( ("uid", "owner"), ("uid", "project"), ) class FileExtension(models.Model): Loading Loading @@ -106,6 +115,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) def __str__(self): return "{}".format(self.title) Loading @@ -113,7 +123,10 @@ class MetadataSet(models.Model): class Meta: verbose_name = "Groupe de meta-données" verbose_name_plural = "Groupes de meta-données" unique_together = (("title", "owner"),) unique_together = ( ("title", "owner"), ("title", "project"), ) class MetadataType(models.Model): Loading @@ -128,6 +141,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) data_type = models.ForeignKey(MetadataType, null=True, on_delete=models.SET_NULL) expose = models.BooleanField(default=True) Loading @@ -137,7 +151,7 @@ class Metadata(models.Model): class Meta: verbose_name = "meta-donnée" verbose_name_plural = "meta-données" unique_together = (("title", "set", "owner"),) unique_together = (("title", "set", "owner"), ("title", "set", "project")) class ResourceClass(models.Model): Loading Loading @@ -169,6 +183,7 @@ class Resource(models.Model): # "ptr" stands for "pointer" since the Resource class should # not be used directly. ptr_owner = models.ForeignKey(User, on_delete=models.CASCADE, null=True) ptr_project = models.ForeignKey(Project, on_delete=models.CASCADE, null=True) def __str__(self): return "{}".format(self.title) Loading @@ -187,6 +202,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) hash = models.CharField("hachage", max_length=64) file_type = models.ForeignKey(FileType, on_delete=models.RESTRICT) size = models.BigIntegerField("taille") Loading @@ -201,7 +217,7 @@ class File(Resource): class Meta: verbose_name = "fichier" verbose_name_plural = "fichiers" unique_together = (("owner", "hash"),) unique_together = (("owner", "hash"), ("project", "hash")) def iiif_infos_url(self) -> str: if self.should_have_iiif(): Loading Loading @@ -320,6 +336,7 @@ class File(Resource): def save(self, *args, **kwargs): self.ptr_owner = self.owner self.ptr_project = self.project super(File, self).save(*args, **kwargs) Loading @@ -328,6 +345,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) 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
resources/models.py +24 −6 Original line number Diff line number Diff line Loading @@ -49,12 +49,12 @@ class APIKey(models.Model): class Project(models.Model): label = models.TextField() label = models.TextField(unique=True) description = models.TextField() class Role(models.Model): label = models.TextField label = models.TextField(unique=True) class ProjectMembership(models.Model): Loading @@ -63,11 +63,17 @@ class ProjectMembership(models.Model): 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 class Tag(models.Model): uid = models.TextField() 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) def __str__(self): return self.label or self.uid Loading @@ -75,7 +81,10 @@ class Tag(models.Model): class Meta: verbose_name = "étiquette" verbose_name_plural = "étiquettes" unique_together = (("uid", "owner"),) unique_together = ( ("uid", "owner"), ("uid", "project"), ) class FileExtension(models.Model): Loading Loading @@ -106,6 +115,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) def __str__(self): return "{}".format(self.title) Loading @@ -113,7 +123,10 @@ class MetadataSet(models.Model): class Meta: verbose_name = "Groupe de meta-données" verbose_name_plural = "Groupes de meta-données" unique_together = (("title", "owner"),) unique_together = ( ("title", "owner"), ("title", "project"), ) class MetadataType(models.Model): Loading @@ -128,6 +141,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) data_type = models.ForeignKey(MetadataType, null=True, on_delete=models.SET_NULL) expose = models.BooleanField(default=True) Loading @@ -137,7 +151,7 @@ class Metadata(models.Model): class Meta: verbose_name = "meta-donnée" verbose_name_plural = "meta-données" unique_together = (("title", "set", "owner"),) unique_together = (("title", "set", "owner"), ("title", "set", "project")) class ResourceClass(models.Model): Loading Loading @@ -169,6 +183,7 @@ class Resource(models.Model): # "ptr" stands for "pointer" since the Resource class should # not be used directly. ptr_owner = models.ForeignKey(User, on_delete=models.CASCADE, null=True) ptr_project = models.ForeignKey(Project, on_delete=models.CASCADE, null=True) def __str__(self): return "{}".format(self.title) Loading @@ -187,6 +202,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) hash = models.CharField("hachage", max_length=64) file_type = models.ForeignKey(FileType, on_delete=models.RESTRICT) size = models.BigIntegerField("taille") Loading @@ -201,7 +217,7 @@ class File(Resource): class Meta: verbose_name = "fichier" verbose_name_plural = "fichiers" unique_together = (("owner", "hash"),) unique_together = (("owner", "hash"), ("project", "hash")) def iiif_infos_url(self) -> str: if self.should_have_iiif(): Loading Loading @@ -320,6 +336,7 @@ class File(Resource): def save(self, *args, **kwargs): self.ptr_owner = self.owner self.ptr_project = self.project super(File, self).save(*args, **kwargs) Loading @@ -328,6 +345,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) 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