Merge pull request #257 from alphagov/version-history-tweak

Only record history for specified class
This commit is contained in:
Rebecca Law
2016-04-22 10:08:21 +01:00
4 changed files with 33 additions and 15 deletions

View File

@@ -7,12 +7,12 @@ from app.models import ApiKey
from app.dao.dao_utils import ( from app.dao.dao_utils import (
transactional, transactional,
versioned version_class
) )
@transactional @transactional
@versioned @version_class(ApiKey)
def save_model_api_key(api_key, update_dict={}): def save_model_api_key(api_key, update_dict={}):
if update_dict: if update_dict:
update_dict.pop('id', None) update_dict.pop('id', None)

View File

@@ -18,13 +18,16 @@ def transactional(func):
return commit_or_rollback return commit_or_rollback
def versioned(func): def version_class(model_class):
@wraps(func) def versioned(func):
def record_version(*args, **kwargs): @wraps(func)
from app import db def record_version(*args, **kwargs):
func(*args, **kwargs) from app import db
history_objects = [create_history(obj) for obj in func(*args, **kwargs)
versioned_objects(itertools.chain(db.session.new, db.session.dirty))] history_objects = [create_history(obj) for obj in
for h_obj in history_objects: versioned_objects(itertools.chain(db.session.new, db.session.dirty))
db.session.add(h_obj) if isinstance(obj, model_class)]
return record_version for h_obj in history_objects:
db.session.add(h_obj)
return record_version
return versioned

View File

@@ -6,7 +6,7 @@ from sqlalchemy import asc
from app.dao.dao_utils import ( from app.dao.dao_utils import (
transactional, transactional,
versioned version_class
) )
@@ -27,7 +27,7 @@ def dao_fetch_service_by_id_and_user(service_id, user_id):
@transactional @transactional
@versioned @version_class(Service)
def dao_create_service(service, user): def dao_create_service(service, user):
from app.dao.permissions_dao import permission_dao from app.dao.permissions_dao import permission_dao
service.users.append(user) service.users.append(user)
@@ -37,7 +37,7 @@ def dao_create_service(service, user):
@transactional @transactional
@versioned @version_class(Service)
def dao_update_service(service): def dao_update_service(service):
db.session.add(service) db.session.add(service)

View File

@@ -111,3 +111,18 @@ def test_should_not_allow_duplicate_key_names_per_service(notify_api,
fail("should throw IntegrityError") fail("should throw IntegrityError")
except: except:
pass 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