From 416bdca166987702e1e9781340518bac52fcf2cd Mon Sep 17 00:00:00 2001 From: Spencer McCreary Date: Wed, 6 May 2020 06:57:18 -0400 Subject: [PATCH] feat: add a __hash__ implementation to AccessEntry --- google/cloud/bigquery/dataset.py | 47 +++++++++++++++++++++++++------- 1 file changed, 37 insertions(+), 10 deletions(-) diff --git a/google/cloud/bigquery/dataset.py b/google/cloud/bigquery/dataset.py index 99c47026f..9aa3eeece 100644 --- a/google/cloud/bigquery/dataset.py +++ b/google/cloud/bigquery/dataset.py @@ -16,15 +16,16 @@ from __future__ import absolute_import -import six import copy import google.cloud._helpers +import six + from google.cloud.bigquery import _helpers +from google.cloud.bigquery.encryption_configuration import EncryptionConfiguration from google.cloud.bigquery.model import ModelReference from google.cloud.bigquery.routine import RoutineReference from google.cloud.bigquery.table import TableReference -from google.cloud.bigquery.encryption_configuration import EncryptionConfiguration def _get_table_reference(self, table_id): @@ -145,18 +146,29 @@ def __init__(self, role, entity_type, entity_id): "Role must be set for entity " "type %r" % (entity_type,) ) - self.role = role - self.entity_type = entity_type - self.entity_id = entity_id + self._role = role + self._entity_type = entity_type + self._entity_id = entity_id + + @property + def role(self): + """str: The role of the entry.""" + return self._role + + @property + def entity_type(self): + """str: The entity_type of the entry.""" + return self._entity_type + + @property + def entity_id(self): + """str: The entity_id of the entry.""" + return self._entity_id def __eq__(self, other): if not isinstance(other, AccessEntry): return NotImplemented - return ( - self.role == other.role - and self.entity_type == other.entity_type - and self.entity_id == other.entity_id - ) + return self._key() == other._key() def __ne__(self, other): return not self == other @@ -168,6 +180,21 @@ def __repr__(self): self.entity_id, ) + def _key(self): + """ A tuple key that uniquely describes this field. + Used to compute this instance's hashcode and evaluate equality. + Returns: + Tuple: The contents of this :class:`~google.cloud.bigquery.dataset.AccessEntry`. + """ + return ( + self._role, + self._entity_type, + self._entity_id + ) + + def __hash__(self): + return hash(self._key()) + def to_api_repr(self): """Construct the API resource representation of this access entry