Skip to content

Update python-keycloak requirement from <=2.12.0,>=1.5.0 to >=1.5.0,<=3.7.0 #873

Update python-keycloak requirement from <=2.12.0,>=1.5.0 to >=1.5.0,<=3.7.0

Update python-keycloak requirement from <=2.12.0,>=1.5.0 to >=1.5.0,<=3.7.0 #873

GitHub Actions / Test Report ubuntu-latest:3.10 failed Feb 1, 2024 in 0s

81 tests run, 66 passed, 5 skipped, 10 failed.

Annotations

Check failure on line 52 in tests/auth/test_api.py

See this annotation in the file changed.

@github-actions github-actions / Test Report ubuntu-latest:3.10

test_api.test_get_users

AttributeError: 'NoneType' object has no attribute 'get'
Raw output
client = <ansys.hps.client.client.Client object at 0x7f5a33e7dae0>
keycloak_client = <keycloak.keycloak_admin.KeycloakAdmin object at 0x7f5a33ef94b0>

    def test_get_users(client, keycloak_client):
    
        api = AuthApi(client)
    
        # create a new non-admin user
        username = f"test_user_{uuid.uuid4()}"
        new_user = User(
            username=username,
            password="test_auth_client",
            email=f"{username}@test.com",
            first_name="Test",
            last_name="User",
        )
        new_user = create_user(keycloak_client, new_user)
        assert new_user.first_name == "Test"
>       users = api.get_users(max=10)

tests/auth/test_api.py:52: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/py310-coverage/lib/python3.10/site-packages/ansys/hps/client/auth/api/auth_api.py:96: in get_users
    return get_users(self.keycloak_admin_client, as_objects=as_objects, **query_params)
.tox/py310-coverage/lib/python3.10/site-packages/ansys/hps/client/auth/api/auth_api.py:199: in get_users
    users = admin_client.get_users(query=query_params)
.tox/py310-coverage/lib/python3.10/site-packages/keycloak/keycloak_admin.py:696: in get_users
    return self.__fetch_paginated(url, query)
.tox/py310-coverage/lib/python3.10/site-packages/keycloak/keycloak_admin.py:517: in __fetch_paginated
    return raise_error_from_response(self.connection.raw_get(url, **query), KeycloakGetError)
.tox/py310-coverage/lib/python3.10/site-packages/keycloak/openid_connection.py:367: in raw_get
    self._refresh_if_required()
.tox/py310-coverage/lib/python3.10/site-packages/keycloak/openid_connection.py:352: in _refresh_if_required
    self.refresh_token()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <keycloak.openid_connection.KeycloakOpenIDConnection object at 0x7f5a33d4ae90>

    def refresh_token(self):
        """Refresh the token.
    
        :raises KeycloakPostError: In case the refresh token request failed.
        """
        refresh_token = self.token.get("refresh_token", None) if self.token else None
        if refresh_token is None:
            self.get_token()
        else:
            try:
                self.token = self.keycloak_openid.refresh_token(refresh_token)
            except KeycloakPostError as e:
                list_errors = [
                    b"Refresh token expired",
                    b"Token is not active",
                    b"Session not active",
                ]
                if e.response_code == 400 and any(err in e.response_body for err in list_errors):
                    self.get_token()
                else:
                    raise
    
>       self.add_param_headers("Authorization", "Bearer " + self.token.get("access_token"))
E       AttributeError: 'NoneType' object has no attribute 'get'

.tox/py310-coverage/lib/python3.10/site-packages/keycloak/openid_connection.py:348: AttributeError

Check failure on line 41 in tests/jms/test_algorithms.py

See this annotation in the file changed.

@github-actions github-actions / Test Report ubuntu-latest:3.10

test_algorithms

ansys.hps.client.exceptions.APIError: 503 Server Error: Service Unavailable for: POST https://localhost:8443/rep/jms/api/v1/projects/?fields=all
Raw output
client = <ansys.hps.client.client.Client object at 0x7f5a33e7dae0>

    def test_algorithms(client):
    
        log.debug("=== Client ===")
        client = client
        jms_api = JmsApi(client)
        proj_name = f"rep_client_test_jms_AlgorithmsTest"
    
        proj = Project(name=proj_name, active=True)
>       proj = jms_api.create_project(proj, replace=True)

tests/jms/test_algorithms.py:41: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/py310-coverage/lib/python3.10/site-packages/ansys/hps/client/jms/api/jms_api.py:120: in create_project
    return create_project(self.client, self.url, project, replace, as_objects)
.tox/py310-coverage/lib/python3.10/site-packages/ansys/hps/client/jms/api/jms_api.py:334: in create_project
    r = client.session.post(f"{url}", data=json_data)
.tox/py310-coverage/lib/python3.10/site-packages/requests/sessions.py:637: in post
    return self.request("POST", url, data=data, json=json, **kwargs)
.tox/py310-coverage/lib/python3.10/site-packages/requests/sessions.py:589: in request
    resp = self.send(prep, **send_kwargs)
.tox/py310-coverage/lib/python3.10/site-packages/requests/sessions.py:710: in send
    r = dispatch_hook("response", hooks, r, **kwargs)
.tox/py310-coverage/lib/python3.10/site-packages/requests/hooks.py:30: in dispatch_hook
    _hook_data = hook(hook_data, **kwargs)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

response = <Response [503]>, args = ()
kwargs = {'cert': None, 'proxies': OrderedDict(), 'stream': False, 'timeout': None, ...}
r_content = {}, reason = 'Service Unavailable', description = None
error_msg = '503 Server Error: Service Unavailable for: POST https://localhost:8443/rep/jms/api/v1/projects/?fields=all'

    def raise_for_status(response, *args, **kwargs):
        """Automatically checks HTTP errors.
    
        This method mimics the requests.Response.raise_for_status() method.
        """
        if 400 <= response.status_code < 600:
    
            r_content = {}
            try:
                r_content = response.json()
            except ValueError:
                pass
    
            reason = r_content.get("title", None)  # jms api
            if not reason:
                reason = r_content.get("error", None)  # auth api
            if not reason:
                reason = response.reason
    
            description = r_content.get("description", None)  # jms api
            if not description:
                description = r_content.get("error_description", None)  # auth api
    
            if 400 <= response.status_code < 500:
                error_msg = "%s Client Error: %s for: %s %s" % (
                    response.status_code,
                    reason,
                    response.request.method,
                    response.url,
                )
                if description:
                    error_msg += f"\n{description}"
                raise ClientError(error_msg, reason=reason, description=description, response=response)
            elif 500 <= response.status_code < 600:
                error_msg = "%s Server Error: %s for: %s %s" % (
                    response.status_code,
                    reason,
                    response.request.method,
                    response.url,
                )
                if description:
                    error_msg += f"\n{description}"
>               raise APIError(error_msg, reason=reason, description=description, response=response)
E               ansys.hps.client.exceptions.APIError: 503 Server Error: Service Unavailable for: POST https://localhost:8443/rep/jms/api/v1/projects/?fields=all

.tox/py310-coverage/lib/python3.10/site-packages/ansys/hps/client/exceptions.py:105: APIError

Check failure on line 39 in tests/jms/test_files.py

See this annotation in the file changed.

@github-actions github-actions / Test Report ubuntu-latest:3.10

test_files

ansys.hps.client.exceptions.APIError: 503 Server Error: Service Unavailable for: POST https://localhost:8443/rep/jms/api/v1/projects/?fields=all
Raw output
client = <ansys.hps.client.client.Client object at 0x7f5a33e7dae0>

    def test_files(client):
    
        jms_api = JmsApi(client)
>       proj = jms_api.create_project(
            Project(name=f"rep_client_test_jms_FilesTest", active=False), replace=True
        )

tests/jms/test_files.py:39: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/py310-coverage/lib/python3.10/site-packages/ansys/hps/client/jms/api/jms_api.py:120: in create_project
    return create_project(self.client, self.url, project, replace, as_objects)
.tox/py310-coverage/lib/python3.10/site-packages/ansys/hps/client/jms/api/jms_api.py:334: in create_project
    r = client.session.post(f"{url}", data=json_data)
.tox/py310-coverage/lib/python3.10/site-packages/requests/sessions.py:637: in post
    return self.request("POST", url, data=data, json=json, **kwargs)
.tox/py310-coverage/lib/python3.10/site-packages/requests/sessions.py:589: in request
    resp = self.send(prep, **send_kwargs)
.tox/py310-coverage/lib/python3.10/site-packages/requests/sessions.py:710: in send
    r = dispatch_hook("response", hooks, r, **kwargs)
.tox/py310-coverage/lib/python3.10/site-packages/requests/hooks.py:30: in dispatch_hook
    _hook_data = hook(hook_data, **kwargs)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

response = <Response [503]>, args = ()
kwargs = {'cert': None, 'proxies': OrderedDict(), 'stream': False, 'timeout': None, ...}
r_content = {}, reason = 'Service Unavailable', description = None
error_msg = '503 Server Error: Service Unavailable for: POST https://localhost:8443/rep/jms/api/v1/projects/?fields=all'

    def raise_for_status(response, *args, **kwargs):
        """Automatically checks HTTP errors.
    
        This method mimics the requests.Response.raise_for_status() method.
        """
        if 400 <= response.status_code < 600:
    
            r_content = {}
            try:
                r_content = response.json()
            except ValueError:
                pass
    
            reason = r_content.get("title", None)  # jms api
            if not reason:
                reason = r_content.get("error", None)  # auth api
            if not reason:
                reason = response.reason
    
            description = r_content.get("description", None)  # jms api
            if not description:
                description = r_content.get("error_description", None)  # auth api
    
            if 400 <= response.status_code < 500:
                error_msg = "%s Client Error: %s for: %s %s" % (
                    response.status_code,
                    reason,
                    response.request.method,
                    response.url,
                )
                if description:
                    error_msg += f"\n{description}"
                raise ClientError(error_msg, reason=reason, description=description, response=response)
            elif 500 <= response.status_code < 600:
                error_msg = "%s Server Error: %s for: %s %s" % (
                    response.status_code,
                    reason,
                    response.request.method,
                    response.url,
                )
                if description:
                    error_msg += f"\n{description}"
>               raise APIError(error_msg, reason=reason, description=description, response=response)
E               ansys.hps.client.exceptions.APIError: 503 Server Error: Service Unavailable for: POST https://localhost:8443/rep/jms/api/v1/projects/?fields=all

.tox/py310-coverage/lib/python3.10/site-packages/ansys/hps/client/exceptions.py:105: APIError

Check failure on line 137 in tests/jms/test_files.py

See this annotation in the file changed.

@github-actions github-actions / Test Report ubuntu-latest:3.10

test_files.test_download_file_in_subdir

ansys.hps.client.exceptions.APIError: 503 Server Error: Service Unavailable for: POST https://localhost:8443/rep/jms/api/v1/projects/?fields=all
Raw output
client = <ansys.hps.client.client.Client object at 0x7f5a33e7dae0>

    def test_download_file_in_subdir(client):
    
        jms_api = JmsApi(client)
>       proj = jms_api.create_project(Project(name=f"rep_test_download_file_in_subdir", active=False))

tests/jms/test_files.py:137: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/py310-coverage/lib/python3.10/site-packages/ansys/hps/client/jms/api/jms_api.py:120: in create_project
    return create_project(self.client, self.url, project, replace, as_objects)
.tox/py310-coverage/lib/python3.10/site-packages/ansys/hps/client/jms/api/jms_api.py:334: in create_project
    r = client.session.post(f"{url}", data=json_data)
.tox/py310-coverage/lib/python3.10/site-packages/requests/sessions.py:637: in post
    return self.request("POST", url, data=data, json=json, **kwargs)
.tox/py310-coverage/lib/python3.10/site-packages/requests/sessions.py:589: in request
    resp = self.send(prep, **send_kwargs)
.tox/py310-coverage/lib/python3.10/site-packages/requests/sessions.py:710: in send
    r = dispatch_hook("response", hooks, r, **kwargs)
.tox/py310-coverage/lib/python3.10/site-packages/requests/hooks.py:30: in dispatch_hook
    _hook_data = hook(hook_data, **kwargs)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

response = <Response [503]>, args = ()
kwargs = {'cert': None, 'proxies': OrderedDict(), 'stream': False, 'timeout': None, ...}
r_content = {}, reason = 'Service Unavailable', description = None
error_msg = '503 Server Error: Service Unavailable for: POST https://localhost:8443/rep/jms/api/v1/projects/?fields=all'

    def raise_for_status(response, *args, **kwargs):
        """Automatically checks HTTP errors.
    
        This method mimics the requests.Response.raise_for_status() method.
        """
        if 400 <= response.status_code < 600:
    
            r_content = {}
            try:
                r_content = response.json()
            except ValueError:
                pass
    
            reason = r_content.get("title", None)  # jms api
            if not reason:
                reason = r_content.get("error", None)  # auth api
            if not reason:
                reason = response.reason
    
            description = r_content.get("description", None)  # jms api
            if not description:
                description = r_content.get("error_description", None)  # auth api
    
            if 400 <= response.status_code < 500:
                error_msg = "%s Client Error: %s for: %s %s" % (
                    response.status_code,
                    reason,
                    response.request.method,
                    response.url,
                )
                if description:
                    error_msg += f"\n{description}"
                raise ClientError(error_msg, reason=reason, description=description, response=response)
            elif 500 <= response.status_code < 600:
                error_msg = "%s Server Error: %s for: %s %s" % (
                    response.status_code,
                    reason,
                    response.request.method,
                    response.url,
                )
                if description:
                    error_msg += f"\n{description}"
>               raise APIError(error_msg, reason=reason, description=description, response=response)
E               ansys.hps.client.exceptions.APIError: 503 Server Error: Service Unavailable for: POST https://localhost:8443/rep/jms/api/v1/projects/?fields=all

.tox/py310-coverage/lib/python3.10/site-packages/ansys/hps/client/exceptions.py:105: APIError

Check failure on line 140 in tests/jms/test_fitness_definition.py

See this annotation in the file changed.

@github-actions github-actions / Test Report ubuntu-latest:3.10

test_fitness_definition.test_fitness_definition_integration

ansys.hps.client.exceptions.APIError: 503 Server Error: Service Unavailable for: POST https://localhost:8443/rep/jms/api/v1/projects/?fields=all
Raw output
client = <ansys.hps.client.client.Client object at 0x7f5a33e7dae0>

    def test_fitness_definition_integration(client):
    
        proj_name = f"test_jms_FitnessDefinitionTest"
    
        proj = Project(name=proj_name, active=True)
        jms_api = JmsApi(client)
>       proj = jms_api.create_project(proj, replace=True)

tests/jms/test_fitness_definition.py:140: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/py310-coverage/lib/python3.10/site-packages/ansys/hps/client/jms/api/jms_api.py:120: in create_project
    return create_project(self.client, self.url, project, replace, as_objects)
.tox/py310-coverage/lib/python3.10/site-packages/ansys/hps/client/jms/api/jms_api.py:334: in create_project
    r = client.session.post(f"{url}", data=json_data)
.tox/py310-coverage/lib/python3.10/site-packages/requests/sessions.py:637: in post
    return self.request("POST", url, data=data, json=json, **kwargs)
.tox/py310-coverage/lib/python3.10/site-packages/requests/sessions.py:589: in request
    resp = self.send(prep, **send_kwargs)
.tox/py310-coverage/lib/python3.10/site-packages/requests/sessions.py:710: in send
    r = dispatch_hook("response", hooks, r, **kwargs)
.tox/py310-coverage/lib/python3.10/site-packages/requests/hooks.py:30: in dispatch_hook
    _hook_data = hook(hook_data, **kwargs)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

response = <Response [503]>, args = ()
kwargs = {'cert': None, 'proxies': OrderedDict(), 'stream': False, 'timeout': None, ...}
r_content = {}, reason = 'Service Unavailable', description = None
error_msg = '503 Server Error: Service Unavailable for: POST https://localhost:8443/rep/jms/api/v1/projects/?fields=all'

    def raise_for_status(response, *args, **kwargs):
        """Automatically checks HTTP errors.
    
        This method mimics the requests.Response.raise_for_status() method.
        """
        if 400 <= response.status_code < 600:
    
            r_content = {}
            try:
                r_content = response.json()
            except ValueError:
                pass
    
            reason = r_content.get("title", None)  # jms api
            if not reason:
                reason = r_content.get("error", None)  # auth api
            if not reason:
                reason = response.reason
    
            description = r_content.get("description", None)  # jms api
            if not description:
                description = r_content.get("error_description", None)  # auth api
    
            if 400 <= response.status_code < 500:
                error_msg = "%s Client Error: %s for: %s %s" % (
                    response.status_code,
                    reason,
                    response.request.method,
                    response.url,
                )
                if description:
                    error_msg += f"\n{description}"
                raise ClientError(error_msg, reason=reason, description=description, response=response)
            elif 500 <= response.status_code < 600:
                error_msg = "%s Server Error: %s for: %s %s" % (
                    response.status_code,
                    reason,
                    response.request.method,
                    response.url,
                )
                if description:
                    error_msg += f"\n{description}"
>               raise APIError(error_msg, reason=reason, description=description, response=response)
E               ansys.hps.client.exceptions.APIError: 503 Server Error: Service Unavailable for: POST https://localhost:8443/rep/jms/api/v1/projects/?fields=all

.tox/py310-coverage/lib/python3.10/site-packages/ansys/hps/client/exceptions.py:105: APIError

Check failure on line 94 in tests/jms/test_job_definitions.py

See this annotation in the file changed.

@github-actions github-actions / Test Report ubuntu-latest:3.10

test_job_definitions.test_task_definition_fields

AttributeError: 'NoneType' object has no attribute 'get'
Raw output
client = <ansys.hps.client.client.Client object at 0x7f5a33e7dae0>

    def test_task_definition_fields(client):
    
        # verify that:
        # - store_output is defaulted to True when undefined,
        # - memory and disk_space are correctly stored in bytes
    
        jms_api = JmsApi(client)
        proj_name = f"test_store_output"
    
        project = Project(name=proj_name, active=False, priority=10)
        project = jms_api.create_project(project)
        project_api = ProjectApi(client, project.id)
        auth_api = AuthApi(client)
    
        task_def = TaskDefinition(
            name="Task.1",
            execution_command="%executable%",
            max_execution_time=10.0,
            execution_level=0,
            resource_requirements=ResourceRequirements(
                memory=256 * 1024 * 1024 * 1024,  # 256GB
                disk_space=2 * 1024 * 1024 * 1024 * 1024,  # 2TB
                hpc_resources=HpcResources(num_cores_per_node=2),
            ),
        )
        assert task_def.resource_requirements.hpc_resources.num_cores_per_node == 2
    
        task_def = project_api.create_task_definitions([task_def])[0]
        assert task_def.store_output == True
        assert task_def.resource_requirements.memory == 274877906944
        assert task_def.resource_requirements.disk_space == 2199023255552
        assert task_def.resource_requirements.hpc_resources.num_cores_per_node == 2
        assert task_def.modified_by is not missing
        assert task_def.created_by is not missing
>       assert auth_api.get_user(id=task_def.created_by).username == client.username

tests/jms/test_job_definitions.py:94: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/py310-coverage/lib/python3.10/site-packages/ansys/hps/client/auth/api/auth_api.py:100: in get_user
    return get_user(self.keycloak_admin_client, id)
.tox/py310-coverage/lib/python3.10/site-packages/ansys/hps/client/auth/api/auth_api.py:218: in get_user
    user = admin_client.get_user(user_id=id)
.tox/py310-coverage/lib/python3.10/site-packages/keycloak/keycloak_admin.py:925: in get_user
    data_raw = self.connection.raw_get(urls_patterns.URL_ADMIN_USER.format(**params_path))
.tox/py310-coverage/lib/python3.10/site-packages/keycloak/openid_connection.py:367: in raw_get
    self._refresh_if_required()
.tox/py310-coverage/lib/python3.10/site-packages/keycloak/openid_connection.py:352: in _refresh_if_required
    self.refresh_token()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <keycloak.openid_connection.KeycloakOpenIDConnection object at 0x7f5a33dc3340>

    def refresh_token(self):
        """Refresh the token.
    
        :raises KeycloakPostError: In case the refresh token request failed.
        """
        refresh_token = self.token.get("refresh_token", None) if self.token else None
        if refresh_token is None:
            self.get_token()
        else:
            try:
                self.token = self.keycloak_openid.refresh_token(refresh_token)
            except KeycloakPostError as e:
                list_errors = [
                    b"Refresh token expired",
                    b"Token is not active",
                    b"Session not active",
                ]
                if e.response_code == 400 and any(err in e.response_body for err in list_errors):
                    self.get_token()
                else:
                    raise
    
>       self.add_param_headers("Authorization", "Bearer " + self.token.get("access_token"))
E       AttributeError: 'NoneType' object has no attribute 'get'

.tox/py310-coverage/lib/python3.10/site-packages/keycloak/openid_connection.py:348: AttributeError

Check failure on line 190 in tests/jms/test_jobs.py

See this annotation in the file changed.

@github-actions github-actions / Test Report ubuntu-latest:3.10

test_jobs.test_job_integration

AttributeError: 'NoneType' object has no attribute 'get'
Raw output
client = <ansys.hps.client.client.Client object at 0x7f5a33e7dae0>

    def test_job_integration(client):
    
        proj_name = f"test_jobs_JobTest"
    
        proj = Project(name=proj_name, active=True)
        jms_api = JmsApi(client)
        proj = jms_api.create_project(proj, replace=True)
        project_api = ProjectApi(client, proj.id)
    
        job_def = JobDefinition(name="New Config", active=True)
        job_def = project_api.create_job_definitions([job_def])[0]
    
        assert job_def.modified_by is not missing
        assert job_def.created_by is not missing
    
        # test creating, update and delete with no jobs
        jobs = project_api.create_jobs([])
        assert len(jobs) == 0
        jobs = project_api.create_jobs([], as_objects=True)
        assert len(jobs) == 0
        jobs = project_api.update_jobs([])
        assert len(jobs) == 0
        jobs = project_api.update_jobs([], as_objects=True)
        assert len(jobs) == 0
        project_api.delete_jobs([])
    
        jobs = [
            Job(name=f"dp_{i}", eval_status="inactive", job_definition_id=job_def.id) for i in range(10)
        ]
        jobs = project_api.create_jobs(jobs)
        for job in jobs:
            # check that all fields are populated (i.e. request params include fields="all")
            assert job.creator == None
            assert job.note == None
            assert job.fitness == None
            assert job.executed_level is not None
            assert job.modified_by is not missing
            assert job.created_by is not missing
    
        jobs = project_api.get_jobs()
        auth_api = AuthApi(client)
        for job in jobs:
            # check that all fields are populated (i.e. request params include fields="all")
            assert job.creator == None
            assert job.note == None
            assert job.fitness == None
            assert job.executed_level is not None
            assert job.modified_by is not missing
            assert job.created_by is not missing
>           assert auth_api.get_user(id=job.created_by).username == client.username

tests/jms/test_jobs.py:190: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/py310-coverage/lib/python3.10/site-packages/ansys/hps/client/auth/api/auth_api.py:100: in get_user
    return get_user(self.keycloak_admin_client, id)
.tox/py310-coverage/lib/python3.10/site-packages/ansys/hps/client/auth/api/auth_api.py:218: in get_user
    user = admin_client.get_user(user_id=id)
.tox/py310-coverage/lib/python3.10/site-packages/keycloak/keycloak_admin.py:925: in get_user
    data_raw = self.connection.raw_get(urls_patterns.URL_ADMIN_USER.format(**params_path))
.tox/py310-coverage/lib/python3.10/site-packages/keycloak/openid_connection.py:367: in raw_get
    self._refresh_if_required()
.tox/py310-coverage/lib/python3.10/site-packages/keycloak/openid_connection.py:352: in _refresh_if_required
    self.refresh_token()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <keycloak.openid_connection.KeycloakOpenIDConnection object at 0x7f5a33c7acb0>

    def refresh_token(self):
        """Refresh the token.
    
        :raises KeycloakPostError: In case the refresh token request failed.
        """
        refresh_token = self.token.get("refresh_token", None) if self.token else None
        if refresh_token is None:
            self.get_token()
        else:
            try:
                self.token = self.keycloak_openid.refresh_token(refresh_token)
            except KeycloakPostError as e:
                list_errors = [
                    b"Refresh token expired",
                    b"Token is not active",
                    b"Session not active",
                ]
                if e.response_code == 400 and any(err in e.response_body for err in list_errors):
                    self.get_token()
                else:
                    raise
    
>       self.add_param_headers("Authorization", "Bearer " + self.token.get("access_token"))
E       AttributeError: 'NoneType' object has no attribute 'get'

.tox/py310-coverage/lib/python3.10/site-packages/keycloak/openid_connection.py:348: AttributeError

Check failure on line 92 in tests/jms/test_project_permissions.py

See this annotation in the file changed.

@github-actions github-actions / Test Report ubuntu-latest:3.10

test_project_permissions.test_modify_project_permissions

AttributeError: 'NoneType' object has no attribute 'get'
Raw output
client = <ansys.hps.client.client.Client object at 0x7f5a33e7dae0>
keycloak_client = <keycloak.keycloak_admin.KeycloakAdmin object at 0x7f5a33bca410>

    def test_modify_project_permissions(client, keycloak_client):
        user_credentials = {
            "user1": {"username": f"testuser-{uuid.uuid4().hex[:8]}", "password": "test"},
            "user2": {"username": f"testuser-{uuid.uuid4().hex[:8]}", "password": "test"},
        }
        proj_name = f"test_jms_get_permissions_test_{uuid.uuid4().hex[:8]}"
    
        auth_api = AuthApi(client)
>       existing_users = [u.username for u in auth_api.get_users()]

tests/jms/test_project_permissions.py:92: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/py310-coverage/lib/python3.10/site-packages/ansys/hps/client/auth/api/auth_api.py:96: in get_users
    return get_users(self.keycloak_admin_client, as_objects=as_objects, **query_params)
.tox/py310-coverage/lib/python3.10/site-packages/ansys/hps/client/auth/api/auth_api.py:199: in get_users
    users = admin_client.get_users(query=query_params)
.tox/py310-coverage/lib/python3.10/site-packages/keycloak/keycloak_admin.py:698: in get_users
    return self.__fetch_all(url, query)
.tox/py310-coverage/lib/python3.10/site-packages/keycloak/keycloak_admin.py:496: in __fetch_all
    self.connection.raw_get(url, **query), KeycloakGetError
.tox/py310-coverage/lib/python3.10/site-packages/keycloak/openid_connection.py:367: in raw_get
    self._refresh_if_required()
.tox/py310-coverage/lib/python3.10/site-packages/keycloak/openid_connection.py:352: in _refresh_if_required
    self.refresh_token()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <keycloak.openid_connection.KeycloakOpenIDConnection object at 0x7f5a33bcba60>

    def refresh_token(self):
        """Refresh the token.
    
        :raises KeycloakPostError: In case the refresh token request failed.
        """
        refresh_token = self.token.get("refresh_token", None) if self.token else None
        if refresh_token is None:
            self.get_token()
        else:
            try:
                self.token = self.keycloak_openid.refresh_token(refresh_token)
            except KeycloakPostError as e:
                list_errors = [
                    b"Refresh token expired",
                    b"Token is not active",
                    b"Session not active",
                ]
                if e.response_code == 400 and any(err in e.response_body for err in list_errors):
                    self.get_token()
                else:
                    raise
    
>       self.add_param_headers("Authorization", "Bearer " + self.token.get("access_token"))
E       AttributeError: 'NoneType' object has no attribute 'get'

.tox/py310-coverage/lib/python3.10/site-packages/keycloak/openid_connection.py:348: AttributeError

Check failure on line 1 in tests/jms/test_task_definition_templates.py

See this annotation in the file changed.

@github-actions github-actions / Test Report ubuntu-latest:3.10

test_task_definition_templates.test_template_permissions

failed on setup with "AttributeError: 'NoneType' object has no attribute 'get'"
Raw output
client = <ansys.hps.client.client.Client object at 0x7f5a33e7dae0>

    @pytest.fixture(scope="session")
    def is_admin(client: Client):
        api = AuthApi(client)
>       users = api.get_users(username=client.username)

tests/conftest.py:81: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/py310-coverage/lib/python3.10/site-packages/ansys/hps/client/auth/api/auth_api.py:96: in get_users
    return get_users(self.keycloak_admin_client, as_objects=as_objects, **query_params)
.tox/py310-coverage/lib/python3.10/site-packages/ansys/hps/client/auth/api/auth_api.py:199: in get_users
    users = admin_client.get_users(query=query_params)
.tox/py310-coverage/lib/python3.10/site-packages/keycloak/keycloak_admin.py:698: in get_users
    return self.__fetch_all(url, query)
.tox/py310-coverage/lib/python3.10/site-packages/keycloak/keycloak_admin.py:496: in __fetch_all
    self.connection.raw_get(url, **query), KeycloakGetError
.tox/py310-coverage/lib/python3.10/site-packages/keycloak/openid_connection.py:367: in raw_get
    self._refresh_if_required()
.tox/py310-coverage/lib/python3.10/site-packages/keycloak/openid_connection.py:352: in _refresh_if_required
    self.refresh_token()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <keycloak.openid_connection.KeycloakOpenIDConnection object at 0x7f5a33a46f50>

    def refresh_token(self):
        """Refresh the token.
    
        :raises KeycloakPostError: In case the refresh token request failed.
        """
        refresh_token = self.token.get("refresh_token", None) if self.token else None
        if refresh_token is None:
            self.get_token()
        else:
            try:
                self.token = self.keycloak_openid.refresh_token(refresh_token)
            except KeycloakPostError as e:
                list_errors = [
                    b"Refresh token expired",
                    b"Token is not active",
                    b"Session not active",
                ]
                if e.response_code == 400 and any(err in e.response_body for err in list_errors):
                    self.get_token()
                else:
                    raise
    
>       self.add_param_headers("Authorization", "Bearer " + self.token.get("access_token"))
E       AttributeError: 'NoneType' object has no attribute 'get'

.tox/py310-coverage/lib/python3.10/site-packages/keycloak/openid_connection.py:348: AttributeError

Check failure on line 366 in tests/jms/test_task_definition_templates.py

See this annotation in the file changed.

@github-actions github-actions / Test Report ubuntu-latest:3.10

test_task_definition_templates.test_template_delete

AttributeError: 'NoneType' object has no attribute 'get'
Raw output
client = <ansys.hps.client.client.Client object at 0x7f5a33e7dae0>
keycloak_client = <keycloak.keycloak_admin.KeycloakAdmin object at 0x7f5a33d350f0>

    def test_template_delete(client, keycloak_client):
    
        auth_api = AuthApi(client)
    
        # create 2 non-admin users
        jms_api = JmsApi(client)
        user1, client1 = create_new_user_client(client.url, keycloak_client)
>       assert not auth_api.user_is_admin(user1.id)

tests/jms/test_task_definition_templates.py:366: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/py310-coverage/lib/python3.10/site-packages/ansys/hps/client/auth/api/auth_api.py:122: in user_is_admin
    user_keys = [f"groups.{name}" for name in self.get_user_groups(id)] + [
.tox/py310-coverage/lib/python3.10/site-packages/ansys/hps/client/auth/api/auth_api.py:104: in get_user_groups
    return [g["name"] for g in self.keycloak_admin_client.get_user_groups(id)]
.tox/py310-coverage/lib/python3.10/site-packages/keycloak/keycloak_admin.py:955: in get_user_groups
    return self.__fetch_all(url, query)
.tox/py310-coverage/lib/python3.10/site-packages/keycloak/keycloak_admin.py:496: in __fetch_all
    self.connection.raw_get(url, **query), KeycloakGetError
.tox/py310-coverage/lib/python3.10/site-packages/keycloak/openid_connection.py:367: in raw_get
    self._refresh_if_required()
.tox/py310-coverage/lib/python3.10/site-packages/keycloak/openid_connection.py:352: in _refresh_if_required
    self.refresh_token()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <keycloak.openid_connection.KeycloakOpenIDConnection object at 0x7f5a3396e8c0>

    def refresh_token(self):
        """Refresh the token.
    
        :raises KeycloakPostError: In case the refresh token request failed.
        """
        refresh_token = self.token.get("refresh_token", None) if self.token else None
        if refresh_token is None:
            self.get_token()
        else:
            try:
                self.token = self.keycloak_openid.refresh_token(refresh_token)
            except KeycloakPostError as e:
                list_errors = [
                    b"Refresh token expired",
                    b"Token is not active",
                    b"Session not active",
                ]
                if e.response_code == 400 and any(err in e.response_body for err in list_errors):
                    self.get_token()
                else:
                    raise
    
>       self.add_param_headers("Authorization", "Bearer " + self.token.get("access_token"))
E       AttributeError: 'NoneType' object has no attribute 'get'

.tox/py310-coverage/lib/python3.10/site-packages/keycloak/openid_connection.py:348: AttributeError