Transaction management added for one example. All tests passing.

This commit is contained in:
Nicholas Staples
2016-03-23 16:30:47 +00:00
parent f76af9acb7
commit 3a59c75257
4 changed files with 22 additions and 15 deletions

View File

@@ -61,17 +61,19 @@ class PermissionDAO(DAOClass):
query = self.get_query(filter_by_dict={'user': user.id, 'service': service.id}) query = self.get_query(filter_by_dict={'user': user.id, 'service': service.id})
query.delete() query.delete()
def set_user_permission(self, user, permissions): def set_user_service_permission(self, user, service, permissions, _commit=False):
try: try:
query = self.get_query(filter_by_dict={'user': user.id}) query = self.get_query(filter_by_dict={'user': user.id, 'service': service.id})
query.delete() query.delete()
for p in permissions: for p in permissions:
self.create_instance(p, _commit=False) self.create_instance(p, _commit=False)
except Exception as e: except Exception as e:
db.session.rollback() if _commit:
db.session.rollback()
raise e raise e
else: else:
db.session.commit() if _commit:
db.session.commit()
permission_dao = PermissionDAO() permission_dao = PermissionDAO()

View File

@@ -26,7 +26,6 @@ def dao_create_service(service, user):
permission_dao.add_default_service_permissions_for_user(user, service) permission_dao.add_default_service_permissions_for_user(user, service)
db.session.add(service) db.session.add(service)
except Exception as e: except Exception as e:
# Proper clean up
db.session.rollback() db.session.rollback()
raise e raise e
else: else:
@@ -38,10 +37,17 @@ def dao_update_service(service):
db.session.commit() db.session.commit()
def dao_add_user_to_service(service, user): def dao_add_user_to_service(service, user, permissions=[]):
service.users.append(user) try:
db.session.add(service) from app.dao.permissions_dao import permission_dao
db.session.commit() service.users.append(user)
permission_dao.set_user_service_permission(user, service, permissions, _commit=False)
db.session.add(service)
except Exception as e:
db.session.rollback()
raise e
else:
db.session.commit()
def dao_remove_user_from_service(service, user): def dao_remove_user_from_service(service, user):
@@ -51,7 +57,6 @@ def dao_remove_user_from_service(service, user):
service.users.remove(user) service.users.remove(user)
db.session.add(service) db.session.add(service)
except Exception as e: except Exception as e:
# Proper clean up
db.session.rollback() db.session.rollback()
raise e raise e
else: else:

View File

@@ -152,9 +152,9 @@ def add_user_to_service(service_id, user_id):
return jsonify(result='error', return jsonify(result='error',
message='User id: {} already part of service id: {}'.format(user_id, service_id)), 400 message='User id: {} already part of service id: {}'.format(user_id, service_id)), 400
dao_add_user_to_service(service, user) permissions_json = request.get_json().get('permissions', [])
permissions = request.get_json()['permissions'] permissions = _process_permissions(user, service, permissions_json)
_process_permissions(user, service, permissions) dao_add_user_to_service(service, user, permissions)
data, errors = service_schema.dump(service) data, errors = service_schema.dump(service)
return jsonify(data=data), 201 return jsonify(data=data), 201
@@ -183,4 +183,4 @@ def _process_permissions(user, service, permission_groups):
for permission in permissions: for permission in permissions:
permission.user = user permission.user = user
permission.service = service permission.service = service
permission_dao.set_user_permission(user, permissions) return permissions

View File

@@ -196,7 +196,7 @@ def set_permissions(user_id, service_id):
for p in permissions: for p in permissions:
p.user = user p.user = user
p.service = service p.service = service
permission_dao.set_user_permission(user, permissions) permission_dao.set_user_service_permission(user, service, permissions, _commit=True)
return jsonify({}), 204 return jsonify({}), 204