# -*- coding: utf-8 -*-
"""
Association Class
"""
from ..abstract import HashableAbc, SerializableAbc
from ..principal import Principal, deserialize_principal
from ..resource import Resource, NonLfTagResource, LfTag, deserialize_resource
from ..permission import Permission
from ..constant import DELIMITER
from ..validator import validate_attr_type
[docs]class DataLakePermission(HashableAbc, SerializableAbc):
object_type = "DataLakePermission"
def __init__(
self,
principal: Principal,
resource: Resource,
permission: Permission,
):
self.principal = principal
self.resource = resource
self.permission = permission
self.validate()
def validate(self):
validate_attr_type(self, "principal", self.principal, Principal)
validate_attr_type(self, "resource", self.resource, Resource)
validate_attr_type(self, "permission", self.permission, Permission)
@property
def id(self):
return DELIMITER.join([
self.principal.id, self.resource.id, self.permission.id,
])
def serialize(self) -> dict:
return dict(
principal=self.principal.serialize(),
resource=self.resource.serialize(),
permission=self.permission.serialize(),
)
@classmethod
def deserialize(cls, data: dict) -> 'DataLakePermission':
return cls(
principal=deserialize_principal(data["principal"]),
resource=deserialize_resource(data["resource"]),
permission=Permission.deserialize(data["permission"]),
)
[docs]class LfTagAttachment(HashableAbc, SerializableAbc):
object_type = "LfTagAttachment"
def __init__(
self,
resource: NonLfTagResource,
tag: LfTag,
):
self.resource = resource
self.tag = tag
self.validate()
def validate(self):
validate_attr_type(self, "resource", self.resource, NonLfTagResource)
validate_attr_type(self, "tag", self.tag, LfTag)
@property
def id(self):
return DELIMITER.join([
self.resource.id, self.tag.id
])
def serialize(self) -> dict:
return dict(
resource=self.resource.serialize(),
tag=self.tag.serialize(),
)
@classmethod
def deserialize(cls, data: dict) -> 'LfTagAttachment':
return cls(
resource=deserialize_resource(data["resource"]),
tag=LfTag.deserialize(data["tag"]),
)