diff --git a/CHANGELOG.md b/CHANGELOG.md index 65cbeeff..9700ca71 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,18 @@ [1]: https://pypi.org/project/google-api-core/#history +### [1.26.3](https://www.github.com/googleapis/python-api-core/compare/v1.26.2...v1.26.3) (2021-03-25) + + +### Bug Fixes + +* skip empty policy bindings in `len()` and `iter()` ([#159](https://www.github.com/googleapis/python-api-core/issues/159)) ([9eaa786](https://www.github.com/googleapis/python-api-core/commit/9eaa7868164a7e98792de24d2be97f79fba22322)) + + +### Documentation + +* update python contributing guide ([#147](https://www.github.com/googleapis/python-api-core/issues/147)) ([1d76b57](https://www.github.com/googleapis/python-api-core/commit/1d76b57d1f218f7885f85dc7c052bad1ad3857ac)) + ### [1.26.2](https://www.github.com/googleapis/python-api-core/compare/v1.26.1...v1.26.2) (2021-03-23) diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index 643fbdbb..11161502 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -70,9 +70,14 @@ We use `nox `__ to instrument our tests. - To test your changes, run unit tests with ``nox``:: $ nox -s unit-2.7 - $ nox -s unit-3.7 + $ nox -s unit-3.8 $ ... +- Args to pytest can be passed through the nox command separated by a `--`. For + example, to run a single test:: + + $ nox -s unit-3.8 -- -k + .. note:: The unit tests and system tests are described in the @@ -93,8 +98,12 @@ On Debian/Ubuntu:: ************ Coding Style ************ +- We use the automatic code formatter ``black``. You can run it using + the nox session ``blacken``. This will eliminate many lint errors. Run via:: + + $ nox -s blacken -- PEP8 compliance, with exceptions defined in the linter configuration. +- PEP8 compliance is required, with exceptions defined in the linter configuration. If you have ``nox`` installed, you can test that you have not introduced any non-compliant code via:: @@ -133,13 +142,18 @@ Running System Tests - To run system tests, you can execute:: - $ nox -s system-3.7 + # Run all system tests + $ nox -s system-3.8 $ nox -s system-2.7 + # Run a single system test + $ nox -s system-3.8 -- -k + + .. note:: System tests are only configured to run under Python 2.7 and - Python 3.7. For expediency, we do not run them in older versions + Python 3.8. For expediency, we do not run them in older versions of Python 3. This alone will not run the tests. You'll need to change some local diff --git a/google/api_core/iam.py b/google/api_core/iam.py index d83cbf35..c498c685 100644 --- a/google/api_core/iam.py +++ b/google/api_core/iam.py @@ -125,18 +125,22 @@ def __init__(self, etag=None, version=None): def __iter__(self): self.__check_version__() - return (binding["role"] for binding in self._bindings) + # Exclude bindings with no members + return (binding["role"] for binding in self._bindings if binding["members"]) def __len__(self): self.__check_version__() - return len(self._bindings) + # Exclude bindings with no members + return len(list(self.__iter__())) def __getitem__(self, key): self.__check_version__() for b in self._bindings: if b["role"] == key: return b["members"] - # binding does not yet exist, create one + # If the binding does not yet exist, create one + # NOTE: This will create bindings with no members + # which are ignored by __iter__ and __len__ new_binding = {"role": key, "members": set()} self._bindings.append(new_binding) return new_binding["members"] diff --git a/google/api_core/version.py b/google/api_core/version.py index 3c06c88d..829945c4 100644 --- a/google/api_core/version.py +++ b/google/api_core/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "1.26.2" +__version__ = "1.26.3" diff --git a/synth.metadata b/synth.metadata index fec849e7..cf254e75 100644 --- a/synth.metadata +++ b/synth.metadata @@ -4,14 +4,14 @@ "git": { "name": ".", "remote": "https://github.com/googleapis/python-api-core.git", - "sha": "94c76e0873e5b2f42331d5b1ad286c1e63b61395" + "sha": "7273090a011c8b840d2e90e29dda3fc8f0eed792" } }, { "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "33366574ffb9e11737b3547eb6f020ecae0536e8" + "sha": "4679e7e415221f03ff2a71e3ffad75b9ec41d87e" } } ], diff --git a/tests/unit/test_iam.py b/tests/unit/test_iam.py index f9771f0f..0da9b231 100644 --- a/tests/unit/test_iam.py +++ b/tests/unit/test_iam.py @@ -32,11 +32,11 @@ def test_ctor_defaults(self): policy = self._make_one() assert policy.etag is None assert policy.version is None - assert len(policy) == 0 - assert dict(policy) == {} assert policy.owners == empty assert policy.editors == empty assert policy.viewers == empty + assert len(policy) == 0 + assert dict(policy) == {} def test_ctor_explicit(self): VERSION = 1 @@ -45,11 +45,11 @@ def test_ctor_explicit(self): policy = self._make_one(ETAG, VERSION) assert policy.etag == ETAG assert policy.version == VERSION - assert len(policy) == 0 - assert dict(policy) == {} assert policy.owners == empty assert policy.editors == empty assert policy.viewers == empty + assert len(policy) == 0 + assert dict(policy) == {} def test___getitem___miss(self): policy = self._make_one() @@ -301,10 +301,10 @@ def test_from_api_repr_only_etag(self): policy = klass.from_api_repr(RESOURCE) assert policy.etag == "ACAB" assert policy.version is None - assert dict(policy) == {} assert policy.owners == empty assert policy.editors == empty assert policy.viewers == empty + assert dict(policy) == {} def test_from_api_repr_complete(self): from google.api_core.iam import OWNER_ROLE, EDITOR_ROLE, VIEWER_ROLE