diff --git a/app/dao/api_key_dao.py b/app/dao/api_key_dao.py index ee64c0def..d44d16d00 100644 --- a/app/dao/api_key_dao.py +++ b/app/dao/api_key_dao.py @@ -7,12 +7,12 @@ from app.models import ApiKey from app.dao.dao_utils import ( transactional, - versioned + version_class ) @transactional -@versioned +@version_class(ApiKey) def save_model_api_key(api_key, update_dict={}): if update_dict: update_dict.pop('id', None) diff --git a/app/dao/dao_utils.py b/app/dao/dao_utils.py index d8f2791e9..e4753a1d1 100644 --- a/app/dao/dao_utils.py +++ b/app/dao/dao_utils.py @@ -18,13 +18,16 @@ def transactional(func): return commit_or_rollback -def versioned(func): - @wraps(func) - def record_version(*args, **kwargs): - from app import db - func(*args, **kwargs) - history_objects = [create_history(obj) for obj in - versioned_objects(itertools.chain(db.session.new, db.session.dirty))] - for h_obj in history_objects: - db.session.add(h_obj) - return record_version +def version_class(model_class): + def versioned(func): + @wraps(func) + def record_version(*args, **kwargs): + from app import db + func(*args, **kwargs) + history_objects = [create_history(obj) for obj in + versioned_objects(itertools.chain(db.session.new, db.session.dirty)) + if isinstance(obj, model_class)] + for h_obj in history_objects: + db.session.add(h_obj) + return record_version + return versioned diff --git a/app/dao/services_dao.py b/app/dao/services_dao.py index b7f922a6a..4f89b1b16 100644 --- a/app/dao/services_dao.py +++ b/app/dao/services_dao.py @@ -6,7 +6,7 @@ from sqlalchemy import asc from app.dao.dao_utils import ( transactional, - versioned + version_class ) @@ -27,7 +27,7 @@ def dao_fetch_service_by_id_and_user(service_id, user_id): @transactional -@versioned +@version_class(Service) def dao_create_service(service, user): from app.dao.permissions_dao import permission_dao service.users.append(user) @@ -37,7 +37,7 @@ def dao_create_service(service, user): @transactional -@versioned +@version_class(Service) def dao_update_service(service): db.session.add(service) diff --git a/tests/app/dao/test_api_key_dao.py b/tests/app/dao/test_api_key_dao.py index a78f1babf..df81370e2 100644 --- a/tests/app/dao/test_api_key_dao.py +++ b/tests/app/dao/test_api_key_dao.py @@ -111,3 +111,18 @@ def test_should_not_allow_duplicate_key_names_per_service(notify_api, fail("should throw IntegrityError") except: pass + + +def test_save_api_key_should_not_create_new_service_history(notify_api, notify_db, notify_db_session, sample_service): + + from app.models import Service + + assert Service.query.count() == 1 + assert Service.get_history_model().query.count() == 1 + + api_key = ApiKey(**{'service': sample_service, + 'name': sample_service.name, + 'created_by': sample_service.created_by}) + save_model_api_key(api_key) + + assert Service.get_history_model().query.count() == 1