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 (
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)

View File

@@ -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

View File

@@ -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)

View File

@@ -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