def test_activity_used_execute_methods(): """test activity creation and used and execute methods""" a = Activity(name='Fuzz', description='hipster beard dataset') a.used({ 'id': 'syn101', 'versionNumber': 42, 'concreteType': 'org.sagebionetworks.repo.model.FileEntity' }) a.executed('syn102', targetVersion=1) usedEntities = a['used'] len(usedEntities) == 2 assert a['name'] == 'Fuzz' assert a['description'] == 'hipster beard dataset' ## ??? are activities supposed to come back in order? Let's not count on it used_syn101 = _find_used( a, lambda res: res['reference']['targetId'] == 'syn101') assert used_syn101['reference']['targetVersionNumber'] == 42 assert used_syn101['wasExecuted'] == False used_syn102 = _find_used( a, lambda res: res['reference']['targetId'] == 'syn102') assert used_syn102['reference']['targetVersionNumber'] == 1 assert used_syn102['wasExecuted'] == True
def test_activity_used_url(): """test activity creation with UsedURLs""" u1 = 'http://xkcd.com' u2 = {'name': 'The Onion', 'url': 'http://theonion.com'} u3 = { 'name': 'Seriously advanced code', 'url': 'https://github.com/cbare/Pydoku/blob/ef88069f70823808f3462410e941326ae7ffbbe0/solver.py', 'wasExecuted': True } u4 = { 'name': 'Heavy duty algorithm', 'url': 'https://github.com/cbare/Pydoku/blob/master/solver.py' } a = Activity(name='Foobarbat', description='Apply foo to a bar and a bat', used=[u1, u2, u3], executed=[u3, u4]) a.executed(url='http://cran.r-project.org/web/packages/glmnet/index.html', name='glm.net') a.used(url='http://earthquake.usgs.gov/earthquakes/feed/geojson/2.5/day', name='earthquakes') u = _find_used(a, lambda res: 'url' in res and res['url'] == u1) assert u is not None assert u['url'] == u1 assert u['wasExecuted'] == False u = _find_used(a, lambda res: 'name' in res and res['name'] == 'The Onion') assert u is not None assert u['url'] == 'http://theonion.com' assert u['wasExecuted'] == False u = _find_used( a, lambda res: 'name' in res and res['name'] == 'Seriously advanced code') assert u is not None assert u['url'] == u3['url'] assert u['wasExecuted'] == u3['wasExecuted'] u = _find_used( a, lambda res: 'name' in res and res['name'] == 'Heavy duty algorithm') assert u is not None assert u['url'] == u4['url'] assert u['wasExecuted'] == True u = _find_used(a, lambda res: 'name' in res and res['name'] == 'glm.net') assert u is not None assert u[ 'url'] == 'http://cran.r-project.org/web/packages/glmnet/index.html' assert u['wasExecuted'] == True u = _find_used(a, lambda res: 'name' in res and res['name'] == 'earthquakes') assert u is not None assert u[ 'url'] == 'http://earthquake.usgs.gov/earthquakes/feed/geojson/2.5/day' assert u['wasExecuted'] == False
def test_private_getStringList(): act = Activity() url_string = \ 'https://github.com/Sage-Bionetworks/ampAdScripts/blob/master/Broad-Rush/migrateROSMAPGenotypesFeb2015.R' act.used([{'wasExecuted': True, 'concreteType': 'org.sagebionetworks.repo.model.provenance.UsedURL', 'url': url_string} ]) assert_equals([url_string], act._getStringList())
def test_private_getStringList(): act = Activity() url_string = \ 'https://github.com/Sage-Bionetworks/ampAdScripts/blob/master/Broad-Rush/migrateROSMAPGenotypesFeb2015.R' act.used([{ 'wasExecuted': True, 'concreteType': 'org.sagebionetworks.repo.model.provenance.UsedURL', 'url': url_string }]) assert_equals([url_string], act._getStringList())
def test_provenance(): # Create a Data Entity fname = utils.make_bogus_data_file() schedule_for_cleanup(fname) data_entity = syn.createEntity(Data(parent=project['id'])) data_entity = syn.uploadFile(data_entity, fname) # Create a Code Entity fd, path = tempfile.mkstemp(suffix=".py") os.write( fd, """ ## Chris's fabulous random data generator ############################################################ import random random.seed(12345) data = [random.gauss(mu=0.0, sigma=1.0) for i in range(100)] """) os.close(fd) schedule_for_cleanup(path) code_entity = syn.createEntity(Code(parent=project['id'])) code_entity = syn.uploadFile(code_entity, path) # Create a new Activity asserting that the Code Entity was 'used' activity = Activity(name='random.gauss', description='Generate some random numbers') activity.used(code_entity, wasExecuted=True) activity.used( { 'name': 'Superhack', 'url': 'https://github.com/joe_coder/Superhack' }, wasExecuted=True) activity = syn.setProvenance(data_entity, activity) # Retrieve and verify the saved Provenance record retrieved_activity = syn.getProvenance(data_entity) assert retrieved_activity == activity # Test Activity update new_description = 'Generate random numbers like a gangsta' retrieved_activity['description'] = new_description updated_activity = syn.updateActivity(retrieved_activity) assert updated_activity['name'] == retrieved_activity['name'] assert updated_activity['description'] == new_description # Test delete syn.deleteProvenance(data_entity) assert_raises(SynapseHTTPError, syn.getProvenance, data_entity['id'])
def test_activity_used_url(): """test activity creation with UsedURLs""" u1 = "http://xkcd.com" u2 = {"name": "The Onion", "url": "http://theonion.com"} u3 = { "name": "Seriously advanced code", "url": "https://github.com/cbare/Pydoku/blob/ef88069f70823808f3462410e941326ae7ffbbe0/solver.py", "wasExecuted": True, } u4 = {"name": "Heavy duty algorithm", "url": "https://github.com/cbare/Pydoku/blob/master/solver.py"} a = Activity(name="Foobarbat", description="Apply foo to a bar and a bat", used=[u1, u2, u3], executed=[u3, u4]) a.executed(url="http://cran.r-project.org/web/packages/glmnet/index.html", name="glm.net") a.used(url="http://earthquake.usgs.gov/earthquakes/feed/geojson/2.5/day", name="earthquakes") u = _find_used(a, lambda res: "url" in res and res["url"] == u1) assert u is not None assert u["url"] == u1 assert u["wasExecuted"] == False u = _find_used(a, lambda res: "name" in res and res["name"] == "The Onion") assert u is not None assert u["url"] == "http://theonion.com" assert u["wasExecuted"] == False u = _find_used(a, lambda res: "name" in res and res["name"] == "Seriously advanced code") assert u is not None assert u["url"] == u3["url"] assert u["wasExecuted"] == u3["wasExecuted"] u = _find_used(a, lambda res: "name" in res and res["name"] == "Heavy duty algorithm") assert u is not None assert u["url"] == u4["url"] assert u["wasExecuted"] == True u = _find_used(a, lambda res: "name" in res and res["name"] == "glm.net") assert u is not None assert u["url"] == "http://cran.r-project.org/web/packages/glmnet/index.html" assert u["wasExecuted"] == True u = _find_used(a, lambda res: "name" in res and res["name"] == "earthquakes") assert u is not None assert u["url"] == "http://earthquake.usgs.gov/earthquakes/feed/geojson/2.5/day" assert u["wasExecuted"] == False
def test_activity_used_execute_methods(): """test activity creation and used and execute methods""" a = Activity(name='Fuzz', description='hipster beard dataset') a.used({'id': 'syn101', 'versionNumber': 42, 'concreteType': 'org.sagebionetworks.repo.model.FileEntity'}) a.executed('syn102', targetVersion=1) usedEntities = a['used'] len(usedEntities), 2 assert_equals(a['name'], 'Fuzz') assert_equals(a['description'], 'hipster beard dataset') used_syn101 = _find_used(a, lambda res: res['reference']['targetId'] == 'syn101') assert_equals(used_syn101['reference']['targetVersionNumber'], 42) assert_false(used_syn101['wasExecuted']) used_syn102 = _find_used(a, lambda res: res['reference']['targetId'] == 'syn102') assert_equals(used_syn102['reference']['targetVersionNumber'], 1) assert_true(used_syn102['wasExecuted'])
def test_activity_used_execute_methods(): """test activity creation and used and execute methods""" a = Activity(name='Fuzz', description='hipster beard dataset') a.used({'id':'syn101', 'versionNumber':42, 'concreteType': 'org.sagebionetworks.repo.model.Data'}) a.executed('syn102', targetVersion=1) usedEntities = a['used'] len(usedEntities) == 2 assert a['name'] == 'Fuzz' assert a['description'] == 'hipster beard dataset' ## ??? are activities supposed to come back in order? Let's not count on it used_syn101 = _find_used(a, lambda res: res['reference']['targetId'] == 'syn101') assert used_syn101['reference']['targetVersionNumber'] == 42 assert used_syn101['wasExecuted'] == False used_syn102 = _find_used(a, lambda res: res['reference']['targetId'] == 'syn102') assert used_syn102['reference']['targetVersionNumber'] == 1 assert used_syn102['wasExecuted'] == True
def test_activity_used_execute_methods(): """test activity creation and used and execute methods""" a = Activity(name="Fuzz", description="hipster beard dataset") a.used({"id": "syn101", "versionNumber": 42, "concreteType": "org.sagebionetworks.repo.model.FileEntity"}) a.executed("syn102", targetVersion=1) usedEntities = a["used"] len(usedEntities) == 2 assert a["name"] == "Fuzz" assert a["description"] == "hipster beard dataset" ## ??? are activities supposed to come back in order? Let's not count on it used_syn101 = _find_used(a, lambda res: res["reference"]["targetId"] == "syn101") assert used_syn101["reference"]["targetVersionNumber"] == 42 assert used_syn101["wasExecuted"] == False used_syn102 = _find_used(a, lambda res: res["reference"]["targetId"] == "syn102") assert used_syn102["reference"]["targetVersionNumber"] == 1 assert used_syn102["wasExecuted"] == True
def test_activity_used_url(): """test activity creation with UsedURLs""" u1 = 'http://xkcd.com' u2 = {'name': 'The Onion', 'url': 'http://theonion.com'} u3 = {'name': 'Seriously advanced code', 'url': 'https://github.com/cbare/Pydoku/blob/ef88069f70823808f3462410e941326ae7ffbbe0/solver.py', 'wasExecuted': True} u4 = {'name': 'Heavy duty algorithm', 'url': 'https://github.com/cbare/Pydoku/blob/master/solver.py'} a = Activity(name='Foobarbat', description='Apply foo to a bar and a bat', used=[u1, u2, u3], executed=[u3, u4]) a.executed(url='http://cran.r-project.org/web/packages/glmnet/index.html', name='glm.net') a.used(url='http://earthquake.usgs.gov/earthquakes/feed/geojson/2.5/day', name='earthquakes') u = _find_used(a, lambda res: 'url' in res and res['url'] == u1) assert_is_not_none(u) assert_equals(u['url'], u1) assert_false(u['wasExecuted']) u = _find_used(a, lambda res: 'name' in res and res['name'] == 'The Onion') assert_is_not_none(u) assert_equals(u['url'], 'http://theonion.com') assert_false(u['wasExecuted']) u = _find_used(a, lambda res: 'name' in res and res['name'] == 'Seriously advanced code') assert_is_not_none(u) assert_equals(u['url'], u3['url']) assert_equals(u['wasExecuted'], u3['wasExecuted']) u = _find_used(a, lambda res: 'name' in res and res['name'] == 'Heavy duty algorithm') assert_is_not_none(u) assert_equals(u['url'], u4['url']) assert_true(u['wasExecuted']) u = _find_used(a, lambda res: 'name' in res and res['name'] == 'glm.net') assert_is_not_none(u) assert_equals(u['url'], 'http://cran.r-project.org/web/packages/glmnet/index.html') assert_true(u['wasExecuted']) u = _find_used(a, lambda res: 'name' in res and res['name'] == 'earthquakes') assert_is_not_none(u) assert_equals(u['url'], 'http://earthquake.usgs.gov/earthquakes/feed/geojson/2.5/day') assert_false(u['wasExecuted'])
def test_provenance(): # Create a Data Entity fname = utils.make_bogus_data_file() schedule_for_cleanup(fname) data_entity = syn.createEntity(Data(parent=project['id'])) data_entity = syn.uploadFile(data_entity, fname) # Create a Code Entity fd, path = tempfile.mkstemp(suffix=".py") os.write(fd, """ ## Chris's fabulous random data generator ############################################################ import random random.seed(12345) data = [random.gauss(mu=0.0, sigma=1.0) for i in range(100)] """) os.close(fd) schedule_for_cleanup(path) code_entity = syn.createEntity(Code(parent=project['id'])) code_entity = syn.uploadFile(code_entity, path) # Create a new Activity asserting that the Code Entity was 'used' activity = Activity(name='random.gauss', description='Generate some random numbers') activity.used(code_entity, wasExecuted=True) activity.used({'name':'Superhack', 'url':'https://github.com/joe_coder/Superhack'}, wasExecuted=True) activity = syn.setProvenance(data_entity, activity) # Retrieve and verify the saved Provenance record retrieved_activity = syn.getProvenance(data_entity) assert retrieved_activity == activity # Test Activity update new_description = 'Generate random numbers like a gangsta' retrieved_activity['description'] = new_description updated_activity = syn.updateActivity(retrieved_activity) assert updated_activity['name'] == retrieved_activity['name'] assert updated_activity['description'] == new_description # Test delete syn.deleteProvenance(data_entity) assert_raises(SynapseHTTPError, syn.getProvenance, data_entity['id'])
def test_activity_used_execute_methods(): """test activity creation and used and execute methods""" a = Activity(name='Fuzz', description='hipster beard dataset') a.used({ 'id': 'syn101', 'versionNumber': 42, 'concreteType': 'org.sagebionetworks.repo.model.FileEntity' }) a.executed('syn102', targetVersion=1) usedEntities = a['used'] len(usedEntities), 2 assert_equals(a['name'], 'Fuzz') assert_equals(a['description'], 'hipster beard dataset') used_syn101 = _find_used( a, lambda res: res['reference']['targetId'] == 'syn101') assert_equals(used_syn101['reference']['targetVersionNumber'], 42) assert_false(used_syn101['wasExecuted']) used_syn102 = _find_used( a, lambda res: res['reference']['targetId'] == 'syn102') assert_equals(used_syn102['reference']['targetVersionNumber'], 1) assert_true(used_syn102['wasExecuted'])