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())
Example #2
0
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())
Example #3
0
def test_activity_creation_from_dict():
    """test that activities are created correctly from a dictionary"""
    d = {
        'name':
        'Project Fuzz',
        'description':
        'hipster beard dataset',
        'used': [{
            'reference': {
                'targetId': 'syn12345',
                'versionNumber': 42
            },
            'wasExecuted': True
        }]
    }
    a = Activity(data=d)
    assert_equals(a['name'], 'Project Fuzz')
    assert_equals(a['description'], 'hipster beard dataset')

    usedEntities = a['used']
    assert_equals(len(usedEntities), 1)

    u = usedEntities[0]
    assert_true(u['wasExecuted'])

    assert_equals(u['reference']['targetId'], 'syn12345')
    assert_equals(u['reference']['versionNumber'], 42)
Example #4
0
def test_activity_creation_from_dict():
    """test that activities are created correctly from a dictionary"""
    d = {
        'name':
        'Project Fuzz',
        'description':
        'hipster beard dataset',
        'used': [{
            'reference': {
                'targetId': 'syn12345',
                'versionNumber': 42
            },
            'wasExecuted': True
        }]
    }
    a = Activity(data=d)
    assert a['name'] == 'Project Fuzz'
    assert a['description'] == 'hipster beard dataset'

    usedEntities = a['used']
    assert len(usedEntities) == 1

    u = usedEntities[0]
    assert u['wasExecuted'] == True

    assert u['reference']['targetId'] == 'syn12345'
    assert u['reference']['versionNumber'] == 42
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'])
Example #7
0
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'])
Example #11
0
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
Example #12
0
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
Example #13
0
def test_activity_parameter_errors():
    """Test error handling in Activity.used()"""
    a = Activity(name='Foobarbat', description='Apply foo to a bar and a bat')
    assert_raises(SynapseMalformedEntityError,
                  a.used, ['syn12345', 'http://google.com'],
                  url='http://amazon.com')
    assert_raises(SynapseMalformedEntityError,
                  a.used,
                  'syn12345',
                  url='http://amazon.com')
    assert_raises(SynapseMalformedEntityError,
                  a.used,
                  'http://amazon.com',
                  targetVersion=1)
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'])
Example #15
0
def test_activity_creation_by_constructor():
    """test activity creation adding used entities by the constructor"""

    ue1 = {
        'reference': {
            'targetId': 'syn101',
            'targetVersionNumber': 42
        },
        'wasExecuted': False
    }
    ue2 = {
        'id': 'syn102',
        'versionNumber': 2,
        'concreteType': 'org.sagebionetworks.repo.model.FileEntity'
    }
    ue3 = 'syn103'

    a = Activity(name='Fuzz',
                 description='hipster beard dataset',
                 used=[ue1, ue3],
                 executed=[ue2])

    # print(a['used'])

    used_syn101 = _find_used(
        a, lambda res: res['reference']['targetId'] == 'syn101')
    assert used_syn101 is not None
    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 is not None
    assert used_syn102['reference']['targetVersionNumber'] == 2
    assert used_syn102['wasExecuted'] == True

    used_syn103 = _find_used(
        a, lambda res: res['reference']['targetId'] == 'syn103')
    assert used_syn103 is not None
Example #16
0
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'])