From 4f3dc5422cb646a45c98b8e31ca3146e4ba82f0e Mon Sep 17 00:00:00 2001 From: kevgliss Date: Thu, 7 Jul 2016 13:03:10 -0700 Subject: [PATCH] Allowing the role-user associated to be updated. (#396) * Allowing the role-user associated to be updated. * Fixing tests * Fixing tests, for real. --- lemur/authorities/schemas.py | 1 + lemur/database.py | 7 +------ lemur/roles/models.py | 2 +- lemur/roles/service.py | 5 +++-- lemur/tests/test_roles.py | 4 ++-- 5 files changed, 8 insertions(+), 11 deletions(-) diff --git a/lemur/authorities/schemas.py b/lemur/authorities/schemas.py index 2a816dd4..2ba3d085 100644 --- a/lemur/authorities/schemas.py +++ b/lemur/authorities/schemas.py @@ -102,6 +102,7 @@ class AuthorityOutputSchema(LemurOutputSchema): class AuthorityNestedOutputSchema(LemurOutputSchema): + __envelope__ = False id = fields.Integer() description = fields.String() name = fields.String() diff --git a/lemur/database.py b/lemur/database.py index 28c667fd..4929aa9e 100644 --- a/lemur/database.py +++ b/lemur/database.py @@ -12,8 +12,6 @@ from sqlalchemy import exc from sqlalchemy.sql import and_, or_ from sqlalchemy.orm import make_transient -from sqlalchemy.orm.exc import NoResultFound - from lemur.extensions import db from lemur.exceptions import AttrNotFound, DuplicateError @@ -125,10 +123,7 @@ def get(model, value, field="id"): :return: """ query = session_query(model) - try: - return query.filter(getattr(model, field) == value).one() - except NoResultFound as e: - return + return query.filter(getattr(model, field) == value).scalar() def get_all(model, value, field="id"): diff --git a/lemur/roles/models.py b/lemur/roles/models.py index 5aaf3611..adf7b70a 100644 --- a/lemur/roles/models.py +++ b/lemur/roles/models.py @@ -27,5 +27,5 @@ class Role(db.Model): authority_id = Column(Integer, ForeignKey('authorities.id')) authorities = relationship("Authority", secondary=roles_authorities, passive_deletes=True, backref="role", cascade='all,delete') user_id = Column(Integer, ForeignKey('users.id')) - users = relationship("User", secondary=roles_users, viewonly=True, backref="role") + users = relationship("User", secondary=roles_users, passive_deletes=True, backref="role") certificates = relationship("Certificate", secondary=roles_certificates, backref="role") diff --git a/lemur/roles/service.py b/lemur/roles/service.py index 2fac2bdb..aa748dc4 100644 --- a/lemur/roles/service.py +++ b/lemur/roles/service.py @@ -27,8 +27,7 @@ def update(role_id, name, description, users): role = get(role_id) role.name = name role.description = description - if users: - role.users = users + role.users = users database.update(role) return role @@ -45,8 +44,10 @@ def create(name, password=None, description=None, username=None, users=None): :return: """ role = Role(name=name, description=description, username=username, password=password) + if users: role.users = users + return database.create(role) diff --git a/lemur/tests/test_roles.py b/lemur/tests/test_roles.py index 22ddfa6d..58b355e1 100644 --- a/lemur/tests/test_roles.py +++ b/lemur/tests/test_roles.py @@ -70,8 +70,8 @@ def test_role_put(client, token, status): (VALID_ADMIN_HEADER_TOKEN, 200), ('', 401) ]) -def test_role_delete(client, token, status): - assert client.delete(api.url_for(Roles, role_id=1), headers=token).status_code == status +def test_role_delete(client, token, status, role): + assert client.delete(api.url_for(Roles, role_id=role.id), headers=token).status_code == status @pytest.mark.parametrize("token,status", [