Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix AttributeError: 'Authorization' object has no attribute 'log' #660

Merged
merged 2 commits into from
Jan 15, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changes.d/660.fix.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fixed crash when starting the UI Server if a user has invalid groups in their profile.
2 changes: 1 addition & 1 deletion cylc/uiserver/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -590,7 +590,7 @@ def set_auth(self) -> Authorization:
getpass.getuser(),
user_auth,
site_auth,
self.log,
log=self.log,
)

def initialize_templates(self):
Expand Down
6 changes: 3 additions & 3 deletions cylc/uiserver/authorise.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
)
Comment on lines -168 to +173
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't know how to reproduce it, but the cause should be fairly self-evident from looking at self._get_groups():

good_groups, bad_groups = get_groups(user)
if bad_groups:
self.log.warning(
f'{user} has the following invalid groups in their profile '
f'{bad_groups} - these groups will be ignored.'
)

Can't use self.log before it's been defined

self.owner_dict = self.build_owner_site_auth_conf()

# lru_cache this method - see flake8-bugbear B019
Expand Down
20 changes: 20 additions & 0 deletions cylc/uiserver/tests/test_authorise.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.

import inspect
import logging
from types import SimpleNamespace
from unittest.mock import Mock, patch
Expand Down Expand Up @@ -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())
Loading