Source code for LOGS.Entities.Project

from typing import TYPE_CHECKING, List, Optional, Union

from LOGS.Auxiliary.Decorators import Endpoint
from LOGS.Entities.ProjectPersonPermission import ProjectPersonPermission
from LOGS.Entity.EntityWithIntId import IEntityWithIntId
from LOGS.Interfaces.IEntryRecord import IEntryRecord
from LOGS.Interfaces.ILockableEntity import ILockableEntity
from LOGS.Interfaces.IModificationRecord import IModificationRecord
from LOGS.Interfaces.INamedEntity import INamedEntity
from LOGS.Interfaces.IOwnedEntity import IOwnedEntity
from LOGS.Interfaces.IPermissionedEntity import IGenericPermissionEntity
from LOGS.Interfaces.ITypedEntity import ITypedEntity
from LOGS.Interfaces.IUniqueEntity import IUniqueEntity
from LOGS.LOGSConnection import LOGSConnection

if TYPE_CHECKING:
    from LOGS.Entities.Person import Person
    from LOGS.Entities.PersonMinimal import PersonMinimal


[docs] @Endpoint("projects") class Project( IEntityWithIntId, IUniqueEntity, INamedEntity, ITypedEntity, IOwnedEntity, IEntryRecord, IModificationRecord, ILockableEntity, IGenericPermissionEntity, ): _projectPersonPermissions: Optional[List[ProjectPersonPermission]] = None def __init__( self, ref=None, id: Optional[int] = None, connection: Optional[LOGSConnection] = None, name: Optional[str] = None, ): """Represents a connected LOGS entity type""" self._name = name super().__init__(ref=ref, id=id, connection=connection)
[docs] def personPermission(self, personIdOrPerson: Union[int, "PersonMinimal", "Person"]): if isinstance(personIdOrPerson, int): personIdOrPerson = PersonMinimal(id=personIdOrPerson) if self._projectPersonPermissions and personIdOrPerson: for p in self._projectPersonPermissions: if p.person and p.person.id == personIdOrPerson.id: return p return None
[docs] def removePersonPermission( self, personIdOrPerson: Union[int, "PersonMinimal", "Person"] ): if self._projectPersonPermissions is None: return [] if isinstance(personIdOrPerson, int): personIdOrPerson = PersonMinimal(id=personIdOrPerson) removed = [] projectPersonPermissions = [] for p in self._projectPersonPermissions: if p.person and p.person.id == personIdOrPerson.id: removed.append(p) else: projectPersonPermissions.append(p) self._projectPersonPermissions = projectPersonPermissions return removed
[docs] def addPersonPermission( self, person: Optional[Union["PersonMinimal", "Person"]] = None, administer: Optional[bool] = None, edit: Optional[bool] = None, add: Optional[bool] = None, addCurrentUserAsAdministrator: bool = False, ): from LOGS.Entities.PersonMinimal import PersonMinimal if not self._projectPersonPermissions: self._projectPersonPermissions = [] personPermissions: List[ProjectPersonPermission] = [] if addCurrentUserAsAdministrator: p = self._fetchCurrentUserMinimal() permission = self.personPermission(p) addPermission = False if not permission: addPermission = True permission = ProjectPersonPermission(connection=self._getConnection()) permission.person = p permission.administer = True if addPermission: self._projectPersonPermissions.append(permission) personPermissions.append(permission) if person: p = self.checkAndConvert( person, PersonMinimal, self.addPersonPermission.__name__ + "(person)", ) permission = self.personPermission(p) addPermission = False if not permission: addPermission = True permission = ProjectPersonPermission(connection=self._getConnection()) permission.person = p permission.administer = administer permission.edit = edit permission.add = add if addPermission: self._projectPersonPermissions.append(permission) personPermissions.append(permission) if not personPermissions: raise ValueError("No person permissions were added.") return personPermissions
@property def projectPersonPermissions(self) -> Optional[List[ProjectPersonPermission]]: return self._projectPersonPermissions @projectPersonPermissions.setter def projectPersonPermissions(self, value): self._projectPersonPermissions = self.checkListAndConvertNullable( value, ProjectPersonPermission, "projectPersonPermissions" )