def test_revert_removed_child(): res1 = orm.DBResource(id='test1', name='test1', base_path='x') res1.save() res1.add_input('a', 'str', '9') res2 = orm.DBResource(id='test2', name='test2', base_path='x') res2.save() res2.add_input('a', 'str', 0) res1 = resource.load('test1') res2 = resource.load('test2') signals.connect(res1, res2) staged_log = change.stage_changes() assert len(staged_log) == 2 for item in staged_log: operations.move_to_commited(item.log_action) res2.remove() staged_log = change.stage_changes() assert len(staged_log) == 1 logitem = next(staged_log.collection()) operations.move_to_commited(logitem.log_action) with mock.patch.object(resource, 'read_meta') as mread: mread.return_value = {'input': {'a': {'schema': 'str!'}}} change.revert(logitem.uid) res2 = resource.load('test2') assert res2.args == {'a': '9'}
def test_discard_all_pending_changes_resources_created(): res1 = DBResource.from_dict('test1', {'name': 'test1', 'base_path': 'x', 'state': RESOURCE_STATE.created.name, 'meta_inputs': {'a': {'value': None, 'schema': 'str'}}}) res1.inputs['a'] = '9' res1.save_lazy() res2 = DBResource.from_dict('test2', {'name': 'test2', 'base_path': 'x', 'state': RESOURCE_STATE.created.name, 'meta_inputs': {'a': {'value': None, 'schema': 'str'}}}) res2.inputs['a'] = '0' res2.save_lazy() ModelMeta.save_all_lazy() staged_log = change.stage_changes() assert len(staged_log) == 2 change.discard_all() staged_log = change.stage_changes() assert len(staged_log) == 0 assert resource.load_all() == []
def test_discard_removed(): res1 = DBResource.from_dict( "test1", { "name": "test1", "base_path": "x", "state": RESOURCE_STATE.created.name, "meta_inputs": {"a": {"value": None, "schema": "str"}}, }, ) res1.inputs["a"] = "9" res1.save_lazy() ModelMeta.save_all_lazy() staged_log = change.stage_changes() for item in staged_log: operations.move_to_commited(item.log_action) res1 = resource.load("test1") res1.remove() assert len(change.stage_changes()) == 1 assert res1.to_be_removed() change.discard_all() assert len(change.stage_changes()) == 0 assert not resource.load("test1").to_be_removed()
def test_revert_removed_child(): res1 = orm.DBResource(id='test1', name='test1', base_path='x') # NOQA res1.save() res1.add_input('a', 'str', '9') res2 = orm.DBResource(id='test2', name='test2', base_path='x') # NOQA res2.save() res2.add_input('a', 'str', 0) res1 = resource.load('test1') res2 = resource.load('test2') signals.connect(res1, res2) staged_log = change.stage_changes() assert len(staged_log) == 2 for item in staged_log: operations.move_to_commited(item.log_action) res2.remove() staged_log = change.stage_changes() assert len(staged_log) == 1 logitem = next(staged_log.collection()) operations.move_to_commited(logitem.log_action) with mock.patch.object(resource, 'read_meta') as mread: mread.return_value = {'input': {'a': {'schema': 'str!'}}} change.revert(logitem.uid) res2 = resource.load('test2') assert res2.args == {'a': '9'}
def test_discard_connection(): res1 = DBResource.from_dict('test1', {'name': 'test1', 'base_path': 'x', 'state': RESOURCE_STATE.created.name, 'meta_inputs': {'a': {'value': None, 'schema': 'str'}}}) res1.inputs['a'] = '9' res1.save_lazy() res2 = DBResource.from_dict('test2', {'name': 'test2', 'base_path': 'x', 'state': RESOURCE_STATE.created.name, 'meta_inputs': {'a': {'value': None, 'schema': 'str'}}}) res2.inputs['a'] = '0' res2.save_lazy() ModelMeta.save_all_lazy() staged_log = change.stage_changes() for item in staged_log: operations.move_to_commited(item.log_action) res1 = resource.load('test1') res2 = resource.load('test2') res1.connect(res2, {'a': 'a'}) staged_log = change.stage_changes() assert len(staged_log) == 1 assert res2.args == {'a': '9'} change.discard_all() assert res2.args == {'a': '0'} assert len(change.stage_changes()) == 0
def test_revert_create(): res = DBResource.from_dict('test1', {'name': 'test1', 'base_path': 'x', 'state': RESOURCE_STATE.created.name, 'meta_inputs': {'a': {'value': None, 'schema': 'str'}}}) res.inputs['a'] = '9' res.save_lazy() ModelMeta.save_all_lazy() staged_log = change.stage_changes() assert len(staged_log) == 1 logitem = staged_log[0] operations.move_to_commited(logitem.log_action) assert logitem.diff == [['add', '', [['a', '9']]]] commited = CommitedResource.get('test1') assert commited.inputs == {'a': '9'} change.revert(logitem.uid) staged_log = change.stage_changes() assert len(staged_log) == 1 for item in staged_log: operations.move_to_commited(item.log_action) assert resource.load_all() == []
def test_discard_all_pending_changes_resources_created(): res1 = DBResource.from_dict( "test1", { "name": "test1", "base_path": "x", "state": RESOURCE_STATE.created.name, "meta_inputs": {"a": {"value": None, "schema": "str"}}, }, ) res1.inputs["a"] = "9" res1.save_lazy() res2 = DBResource.from_dict( "test2", { "name": "test2", "base_path": "x", "state": RESOURCE_STATE.created.name, "meta_inputs": {"a": {"value": None, "schema": "str"}}, }, ) res2.inputs["a"] = "0" res2.save_lazy() ModelMeta.save_all_lazy() staged_log = change.stage_changes() assert len(staged_log) == 2 change.discard_all() staged_log = change.stage_changes() assert len(staged_log) == 0 assert resource.load_all() == []
def test_revert_create(): res = DBResource.from_dict( "test1", { "name": "test1", "base_path": "x", "state": RESOURCE_STATE.created.name, "meta_inputs": {"a": {"value": None, "schema": "str"}}, }, ) res.inputs["a"] = "9" res.save_lazy() ModelMeta.save_all_lazy() staged_log = change.stage_changes() assert len(staged_log) == 1 logitem = staged_log[0] operations.move_to_commited(logitem.log_action) assert logitem.diff == [["add", "", [["a", "9"]]]] commited = CommitedResource.get("test1") assert commited.inputs == {"a": "9"} change.revert(logitem.uid) staged_log = change.stage_changes() assert len(staged_log) == 1 for item in staged_log: operations.move_to_commited(item.log_action) assert resource.load_all() == []
def test_revert_removed_child(): res1 = orm.DBResource(id="test1", name="test1", base_path="x") # NOQA res1.save() res1.add_input("a", "str", "9") res2 = orm.DBResource(id="test2", name="test2", base_path="x") # NOQA res2.save() res2.add_input("a", "str", 0) res1 = resource.load("test1") res2 = resource.load("test2") signals.connect(res1, res2) staged_log = change.stage_changes() assert len(staged_log) == 2 for item in staged_log: operations.move_to_commited(item.log_action) res2.remove() staged_log = change.stage_changes() assert len(staged_log) == 1 logitem = next(staged_log.collection()) operations.move_to_commited(logitem.log_action) with mock.patch.object(resource, "read_meta") as mread: mread.return_value = {"input": {"a": {"schema": "str!"}}} change.revert(logitem.uid) res2 = resource.load("test2") assert res2.args == {"a": "9"}
def test_discard_update(): res1 = orm.DBResource(id='test1', name='test1', base_path='x') res1.save() res1.add_input('a', 'str', '9') staged_log = change.stage_changes() for item in staged_log: operations.move_to_commited(item.log_action) res1 = resource.load('test1') res1.update({'a': '11'}) assert len(change.stage_changes()) == 1 assert res1.args == {'a': '11'} change.discard_all() assert res1.args == {'a': '9'}
def test_discard_all_pending_changes_resources_created(): res1 = orm.DBResource(id='test1', name='test1', base_path='x') res1.save() res1.add_input('a', 'str', '9') res2 = orm.DBResource(id='test2', name='test2', base_path='x') res2.save() res2.add_input('a', 'str', 0) staged_log = change.stage_changes() assert len(staged_log) == 2 change.discard_all() staged_log = change.stage_changes() assert len(staged_log) == 0 assert orm.DBResource.load_all() == []
def test_discard_removed(): res1 = orm.DBResource(id='test1', name='test1', base_path='x') res1.save() res1.add_input('a', 'str', '9') staged_log = change.stage_changes() for item in staged_log: operations.move_to_commited(item.log_action) res1 = resource.load('test1') res1.remove() assert len(change.stage_changes()) == 1 assert res1.to_be_removed() change.discard_all() assert len(change.stage_changes()) == 0 assert not resource.load('test1').to_be_removed()
def stage(d): log = list(change.stage_changes().reverse()) for item in log: click.echo(item) if d: for line in item.details: click.echo(' '*4+line) if not log: click.echo('No changes')
def stage(d): log = change.stage_changes() log.reverse() for item in log: click.echo(data.compact(item)) if d: for line in data.details(item.diff): click.echo(' ' * 4 + line) if not log: click.echo('No changes')
def test_discard_removed(): res1 = DBResource.from_dict('test1', {'name': 'test1', 'base_path': 'x', 'state': RESOURCE_STATE.created.name, 'meta_inputs': {'a': {'value': None, 'schema': 'str'}}}) res1.inputs['a'] = '9' res1.save_lazy() ModelMeta.save_all_lazy() staged_log = change.stage_changes() for item in staged_log: operations.move_to_commited(item.log_action) res1 = resource.load('test1') res1.remove() assert len(change.stage_changes()) == 1 assert res1.to_be_removed() change.discard_all() assert len(change.stage_changes()) == 0 assert not resource.load('test1').to_be_removed()
def test_revert_update_connected(): res1 = orm.DBResource(id='test1', name='test1', base_path='x') res1.save() res1.add_input('a', 'str', '9') res2 = orm.DBResource(id='test2', name='test2', base_path='x') res2.save() res2.add_input('a', 'str', 0) res3 = orm.DBResource(id='test3', name='test3', base_path='x') res3.save() res3.add_input('a', 'str', 0) res1 = resource.load('test1') res2 = resource.load('test2') res3 = resource.load('test3') signals.connect(res1, res2) signals.connect(res2, res3) staged_log = change.stage_changes() assert len(staged_log) == 3 for item in staged_log: operations.move_to_commited(item.log_action) assert len(staged_log) == 0 signals.disconnect(res1, res2) staged_log = change.stage_changes() assert len(staged_log) == 2 to_revert = [] for item in staged_log: operations.move_to_commited(item.log_action) to_revert.append(item.uid) change.revert_uids(sorted(to_revert, reverse=True)) staged_log = change.stage_changes() assert len(staged_log) == 2 for item in staged_log: assert item.diff == [['change', 'a', [0, '9']]]
def test_discard_connection(): res1 = orm.DBResource(id='test1', name='test1', base_path='x') res1.save() res1.add_input('a', 'str', '9') res2 = orm.DBResource(id='test2', name='test2', base_path='x') res2.save() res2.add_input('a', 'str', '0') staged_log = change.stage_changes() for item in staged_log: operations.move_to_commited(item.log_action) res1 = resource.load('test1') res2 = resource.load('test2') signals.connect(res1, res2) staged_log = change.stage_changes() assert len(staged_log) == 1 assert res2.args == {'a': '9'} change.discard_all() assert res2.args == {'a': '0'} assert len(change.stage_changes()) == 0
def test_revert_create(): res = orm.DBResource(id='test1', name='test1', base_path='x') res.save() res.add_input('a', 'str', '9') staged_log = change.stage_changes() assert len(staged_log) == 1 logitem = next(staged_log.collection()) operations.move_to_commited(logitem.log_action) assert logitem.diff == [['add', '', [['a', '9']]]] commited = orm.DBCommitedState.load('test1') assert commited.inputs == {'a': '9'} change.revert(logitem.uid) staged_log = change.stage_changes() assert len(staged_log) == 1 for item in staged_log: operations.move_to_commited(item.log_action) assert orm.DBResource.load_all() == []
def test_concurrent_sequences_with_no_handler(scale, scheduler_client): total_resources = scale * 3 timeout = scale * 2 assert len(change.stage_changes()) == total_resources plan = change.send_to_orchestration() scheduler_client.next({}, plan.graph['uid']) def wait_function(timeout): try: for summary in wait_finish(plan.graph['uid'], timeout): assert summary[states.ERROR.name] == 0 time.sleep(0.5) except ExecutionTimeout: pass return summary waiter = gevent.spawn(wait_function, timeout) waiter.join(timeout=timeout) assert waiter.get(block=True)[states.SUCCESS.name] == total_resources assert len(data.CL()) == total_resources clear_cache() assert len(change.stage_changes()) == 0
def test_discard_connection(): res1 = DBResource.from_dict( "test1", { "name": "test1", "base_path": "x", "state": RESOURCE_STATE.created.name, "meta_inputs": {"a": {"value": None, "schema": "str"}}, }, ) res1.inputs["a"] = "9" res1.save_lazy() res2 = DBResource.from_dict( "test2", { "name": "test2", "base_path": "x", "state": RESOURCE_STATE.created.name, "meta_inputs": {"a": {"value": None, "schema": "str"}}, }, ) res2.inputs["a"] = "0" res2.save_lazy() ModelMeta.save_all_lazy() staged_log = change.stage_changes() for item in staged_log: operations.move_to_commited(item.log_action) res1 = resource.load("test1") res2 = resource.load("test2") res1.connect(res2, {"a": "a"}) staged_log = change.stage_changes() assert len(staged_log) == 1 assert res2.args == {"a": "9"} change.discard_all() assert res2.args == {"a": "0"} assert len(change.stage_changes()) == 0
def test_revert_removal(): res = DBResource.from_dict('test1', {'name': 'test1', 'base_path': 'x', 'state': RESOURCE_STATE.created.name, 'meta_inputs': {'a': {'value': None, 'schema': 'str'}}}) res.inputs['a'] = '9' res.save_lazy() commited = CommitedResource.from_dict('test1', {'inputs': {'a': '9'}, 'state': 'operational'}) commited.save_lazy() resource_obj = resource.load(res.name) resource_obj.remove() ModelMeta.save_all_lazy() changes = change.stage_changes() assert len(changes) == 1 assert changes[0].diff == [['remove', '', [['a', '9']]]] operations.move_to_commited(changes[0].log_action) clear_cache() assert DBResource._c.obj_cache == {} # assert DBResource.bucket.get('test1').siblings == [] with mock.patch.object(repository.Repository, 'read_meta') as mread: mread.return_value = { 'input': {'a': {'schema': 'str!'}}, 'id': 'mocked' } with mock.patch.object(repository.Repository, 'get_path') as mpath: mpath.return_value = 'x' change.revert(changes[0].uid) ModelMeta.save_all_lazy() # assert len(DBResource.bucket.get('test1').siblings) == 1 resource_obj = resource.load('test1') assert resource_obj.args == { 'a': '9', 'location_id': '', 'transports_id': '' }
def test_revert_removal(): res = DBResource.from_dict('test1', {'name': 'test1', 'base_path': 'x', 'state': RESOURCE_STATE.created.name, 'meta_inputs': {'a': {'value': None, 'schema': 'str'}}}) res.inputs['a'] = '9' res.save_lazy() commited = CommitedResource.from_dict('test1', {'inputs': {'a': '9'}, 'state': 'operational'}) commited.save_lazy() resource_obj = resource.load(res.name) resource_obj.remove() ModelMeta.save_all_lazy() changes = change.stage_changes() assert len(changes) == 1 assert changes[0].diff == [['remove', '', [['a', '9']]]] operations.move_to_commited(changes[0].log_action) ModelMeta.session_start() assert DBResource._c.obj_cache == {} assert DBResource.bucket.get('test1').siblings == [] with mock.patch.object(resource, 'read_meta') as mread: mread.return_value = { 'input': {'a': {'schema': 'str!'}}, 'id': 'mocked' } change.revert(changes[0].uid) ModelMeta.save_all_lazy() assert len(DBResource.bucket.get('test1').siblings) == 1 resource_obj = resource.load('test1') assert resource_obj.args == { 'a': '9', 'location_id': '', 'transports_id': '' }
def test_revert_removal(): res = DBResource.from_dict( "test1", { "name": "test1", "base_path": "x", "state": RESOURCE_STATE.created.name, "meta_inputs": {"a": {"value": None, "schema": "str"}}, }, ) res.inputs["a"] = "9" res.save_lazy() commited = CommitedResource.from_dict("test1", {"inputs": {"a": "9"}, "state": "operational"}) commited.save_lazy() resource_obj = resource.load(res.name) resource_obj.remove() ModelMeta.save_all_lazy() changes = change.stage_changes() assert len(changes) == 1 assert changes[0].diff == [["remove", "", [["a", "9"]]]] operations.move_to_commited(changes[0].log_action) ModelMeta.session_start() assert DBResource._c.obj_cache == {} assert DBResource.bucket.get("test1").siblings == [] with mock.patch.object(resource, "read_meta") as mread: mread.return_value = {"input": {"a": {"schema": "str!"}}, "id": "mocked"} change.revert(changes[0].uid) ModelMeta.save_all_lazy() assert len(DBResource.bucket.get("test1").siblings) == 1 resource_obj = resource.load("test1") assert resource_obj.args == {"a": "9", "location_id": "", "transports_id": ""}
def test_revert_update_connected(): res1 = DBResource.from_dict( "test1", { "name": "test1", "base_path": "x", "state": RESOURCE_STATE.created.name, "meta_inputs": {"a": {"value": None, "schema": "str"}}, }, ) res1.inputs["a"] = "9" res1.save_lazy() res2 = DBResource.from_dict( "test2", { "name": "test2", "base_path": "x", "state": RESOURCE_STATE.created.name, "meta_inputs": {"a": {"value": None, "schema": "str"}}, }, ) res2.inputs["a"] = "" res2.save_lazy() res3 = DBResource.from_dict( "test3", { "name": "test3", "base_path": "x", "state": RESOURCE_STATE.created.name, "meta_inputs": {"a": {"value": None, "schema": "str"}}, }, ) res3.inputs["a"] = "" res3.save_lazy() res1 = resource.load("test1") res2 = resource.load("test2") res3 = resource.load("test3") res1.connect(res2) res2.connect(res3) ModelMeta.save_all_lazy() staged_log = change.stage_changes() assert len(staged_log) == 3 for item in staged_log: assert item.action == "run" operations.move_to_commited(item.log_action) assert len(change.stage_changes()) == 0 res1.disconnect(res2) staged_log = change.stage_changes() assert len(staged_log) == 2 to_revert = [] for item in staged_log: assert item.action == "update" operations.move_to_commited(item.log_action) to_revert.append(item.uid) change.revert_uids(sorted(to_revert, reverse=True)) ModelMeta.save_all_lazy() staged_log = change.stage_changes() assert len(staged_log) == 2 for item in staged_log: assert item.diff == [["change", "a", ["", "9"]]]
def test_revert_update_connected(): res1 = DBResource.from_dict('test1', {'name': 'test1', 'base_path': 'x', 'state': RESOURCE_STATE.created.name, 'meta_inputs': {'a': {'value': None, 'schema': 'str'}}}) res1.inputs['a'] = '9' res1.save_lazy() res2 = DBResource.from_dict('test2', {'name': 'test2', 'base_path': 'x', 'state': RESOURCE_STATE.created.name, 'meta_inputs': {'a': {'value': None, 'schema': 'str'}}}) res2.inputs['a'] = '' res2.save_lazy() res3 = DBResource.from_dict('test3', {'name': 'test3', 'base_path': 'x', 'state': RESOURCE_STATE.created.name, 'meta_inputs': {'a': {'value': None, 'schema': 'str'}}}) res3.inputs['a'] = '' res3.save_lazy() res1 = resource.load('test1') res2 = resource.load('test2') res3 = resource.load('test3') res1.connect(res2) res2.connect(res3) ModelMeta.save_all_lazy() staged_log = change.stage_changes() assert len(staged_log) == 3 for item in staged_log: assert item.action == 'run' operations.move_to_commited(item.log_action) assert len(change.stage_changes()) == 0 res1.disconnect(res2) staged_log = change.stage_changes() assert len(staged_log) == 2 to_revert = [] for item in staged_log: assert item.action == 'update' operations.move_to_commited(item.log_action) to_revert.append(item.uid) change.revert_uids(sorted(to_revert, reverse=True)) ModelMeta.save_all_lazy() staged_log = change.stage_changes() assert len(staged_log) == 2 for item in staged_log: assert item.diff == [['change', 'a', ['', '9']]]