Skip to content

Basic example fails with attribute error #5

@bvanelli

Description

@bvanelli

Here is the basic example:

def test_authentication(iam_server):
    # create a random user on the IAM server
    user = iam_server.random_user()
    print(user)

I get:

test_iam.py:2 (test_authentication)
iam_server = <pytest_iam.Server object at 0x157bebac0>

    def test_authentication(iam_server):
        # create a random user on the IAM server
>       user = iam_server.random_user()

test_iam.py:5: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
../site-packages/pytest_iam/__init__.py:95: in random_user
    user.update(**kwargs)
../site-packages/canaille/core/models.py:317: in __getattribute__
    return super().__getattribute__(name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <User id=663bcce0-a788-42c1-93d2-7c2210adf740>, name = 'update'

    def __getattribute__(self, name):
        if name != "attributes" and name in self.attributes:
            return self.deserialize(name, self._cache.get(name, self._state.get(name)))
    
>       return super().__getattribute__(name)
E       AttributeError: 'User' object has no attribute 'update'

../site-packages/canaille/backends/memory/models.py:63: AttributeError

This is because the random user uses a call to user.update(**kwargs) to update fields before saving, and this is apparently not supported anymore.

An alternative here that works is using the setattribute instead:

    def random_user(self, **kwargs) -> User:
        """Generate a :class:`~canaille.core.models.User` with random values.

        Any parameter will be used instead of a random value.
        """
        with self.app.app_context():
            user = fake_users()[0]
            for k, v in kwargs.items():
                setattr(user, k, v)
            self.backend.save(user)

        return user

Modified test for testing:

def test_authentication(iam_server):
    # create a random user on the IAM server
    user = iam_server.random_user(employee_number="10")
    assert user.employee_number == "10"
    print(user)

I'm willing to provide a patch after maintainer feedback.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions