From 693c8970e4fbe5cfd6e6957050686eddb00c2212 Mon Sep 17 00:00:00 2001 From: Ronnie Dutta <61982285+MetRonnie@users.noreply.github.com> Date: Wed, 15 Jan 2025 16:15:35 +0000 Subject: [PATCH] Fix AttributeError: 'Authorization' object has no attribute 'log' (#660) --- changes.d/660.fix.md | 1 + cylc/uiserver/app.py | 2 +- cylc/uiserver/authorise.py | 6 +++--- cylc/uiserver/tests/test_authorise.py | 20 ++++++++++++++++++++ 4 files changed, 25 insertions(+), 4 deletions(-) create mode 100644 changes.d/660.fix.md diff --git a/changes.d/660.fix.md b/changes.d/660.fix.md new file mode 100644 index 00000000..c1bc13f9 --- /dev/null +++ b/changes.d/660.fix.md @@ -0,0 +1 @@ +Fixed crash when starting the UI Server if a user has invalid groups in their profile. diff --git a/cylc/uiserver/app.py b/cylc/uiserver/app.py index afe9aa3c..9914268a 100644 --- a/cylc/uiserver/app.py +++ b/cylc/uiserver/app.py @@ -592,7 +592,7 @@ def set_auth(self) -> Authorization: getpass.getuser(), user_auth, site_auth, - self.log, + log=self.log, ) def initialize_templates(self): diff --git a/cylc/uiserver/authorise.py b/cylc/uiserver/authorise.py index c45a1df5..9333c845 100644 --- a/cylc/uiserver/authorise.py +++ b/cylc/uiserver/authorise.py @@ -165,12 +165,12 @@ def __init__( log, ): self.owner_user_name: str = owner_user_name - self.owner_user_groups: List[str] = self._get_groups( - self.owner_user_name - ) self.log = log self.owner_auth_conf: dict = owner_auth_conf self.site_auth_config: dict = site_auth_conf + self.owner_user_groups: List[str] = self._get_groups( + self.owner_user_name + ) self.owner_dict = self.build_owner_site_auth_conf() # lru_cache this method - see flake8-bugbear B019 diff --git a/cylc/uiserver/tests/test_authorise.py b/cylc/uiserver/tests/test_authorise.py index bb1da22b..c751ffb7 100644 --- a/cylc/uiserver/tests/test_authorise.py +++ b/cylc/uiserver/tests/test_authorise.py @@ -13,6 +13,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . +import inspect import logging from types import SimpleNamespace from unittest.mock import Mock, patch @@ -476,3 +477,22 @@ def test_empty_list_in_config(): auth_obj = Authorization('me', {}, {'*': {'me': {'default': []}}}, LOG) with pytest.raises(Exception, match='Error in site config'): auth_obj.return_site_auth_defaults_for_access_user('me', ['x']) + + +def test_Authorization_logging(monkeypatch: pytest.MonkeyPatch): + """Test logging doesn't fall over spectacularly during __init__().""" + # Patch all methods to call self.log: + for name, method in inspect.getmembers( + Authorization, predicate=inspect.isfunction + ): + if ( + not name.startswith('__') and + inspect.signature(method).parameters.get('self') + ): + monkeypatch.setattr( + Authorization, + name, + lambda self, *a, **k: self.log.info('foo'), + ) + # Test: + Authorization('brian', {}, {}, log=Mock())