Loading resources/models.py +40 −10 Original line number Diff line number Diff line Loading @@ -49,9 +49,17 @@ class APIKey(models.Model): class Project(models.Model): label = models.TextField(unique=True) """ Project is used for sharing collections and resources between users. """ label = models.TextField() description = models.TextField() def __str__(self): return self.label def fetch_public_project() -> Project: project, created = Project.objects.get_or_create(label="public project") Loading Loading @@ -253,8 +261,11 @@ class File(Resource): for prop in self.metadataresourcevalue_set.all().order_by("metadata__title"): data["metas"].append({str(prop.metadata): prop.value}) metas_file_path = "{}.{}.json".format(self.local_path(), self.id) try: with open(metas_file_path, "w") as f: json.dump(data, f, indent=2) except FileNotFoundError: pass def ocr_output(self) -> Union[None, str]: """ Loading Loading @@ -563,26 +574,45 @@ class CollectionMembership(models.Model): class Permission(models.Model): label = models.TextField() project = models.ForeignKey(Project, on_delete=models.CASCADE) """ Format labels like so: [object type].[action] Examples: - collection.delete - resource.add - meta.modify - resource.move and so on... """ class Meta: unique_together = (("label", "project"),) label = models.TextField(unique=True) def __str__(self): return self.label class Role(models.Model): label = models.TextField() project = models.ForeignKey(Project, on_delete=models.CASCADE) permissions = models.ManyToManyField(Permission) users = models.ManyToManyField(User) def __str__(self): return self.label class Meta: unique_together = (("label", "project"),) class CollectionAccess(models.Model): class ProjectAccess(models.Model): project = models.ForeignKey(Project, on_delete=models.CASCADE) collection = models.ForeignKey(Collection, on_delete=models.CASCADE) user = models.ForeignKey(User, on_delete=models.CASCADE) role = models.ForeignKey(Role, on_delete=models.CASCADE) def __str__(self): return "{}: {} ({})".format(self.project, self.user, self.role) class Meta: unique_together = (("project", "user", "role"),) @receiver(post_save, sender=File) Loading Loading
resources/models.py +40 −10 Original line number Diff line number Diff line Loading @@ -49,9 +49,17 @@ class APIKey(models.Model): class Project(models.Model): label = models.TextField(unique=True) """ Project is used for sharing collections and resources between users. """ label = models.TextField() description = models.TextField() def __str__(self): return self.label def fetch_public_project() -> Project: project, created = Project.objects.get_or_create(label="public project") Loading Loading @@ -253,8 +261,11 @@ class File(Resource): for prop in self.metadataresourcevalue_set.all().order_by("metadata__title"): data["metas"].append({str(prop.metadata): prop.value}) metas_file_path = "{}.{}.json".format(self.local_path(), self.id) try: with open(metas_file_path, "w") as f: json.dump(data, f, indent=2) except FileNotFoundError: pass def ocr_output(self) -> Union[None, str]: """ Loading Loading @@ -563,26 +574,45 @@ class CollectionMembership(models.Model): class Permission(models.Model): label = models.TextField() project = models.ForeignKey(Project, on_delete=models.CASCADE) """ Format labels like so: [object type].[action] Examples: - collection.delete - resource.add - meta.modify - resource.move and so on... """ class Meta: unique_together = (("label", "project"),) label = models.TextField(unique=True) def __str__(self): return self.label class Role(models.Model): label = models.TextField() project = models.ForeignKey(Project, on_delete=models.CASCADE) permissions = models.ManyToManyField(Permission) users = models.ManyToManyField(User) def __str__(self): return self.label class Meta: unique_together = (("label", "project"),) class CollectionAccess(models.Model): class ProjectAccess(models.Model): project = models.ForeignKey(Project, on_delete=models.CASCADE) collection = models.ForeignKey(Collection, on_delete=models.CASCADE) user = models.ForeignKey(User, on_delete=models.CASCADE) role = models.ForeignKey(Role, on_delete=models.CASCADE) def __str__(self): return "{}: {} ({})".format(self.project, self.user, self.role) class Meta: unique_together = (("project", "user", "role"),) @receiver(post_save, sender=File) Loading