def test_entity_version(): # Test the ability to get specific versions of Synapse Entities #Create a new project project = create_project() entity = create_data_entity(project['id']) syn.setAnnotations(entity, {'fizzbuzz':111222}) #Get new entity and check that it is same entity = syn.getEntity(entity) assert entity.versionNumber == 1 entity.description = 'Changed something' entity.foo = 998877 entity = syn.updateEntity(entity, incrementVersion=True) assert entity.versionNumber == 2 annotations = syn.getAnnotations(entity, version=1) assert annotations['fizzbuzz'][0] == 111222 returnEntity = syn.getEntity(entity, version=1) assert returnEntity.versionNumber == 1 assert returnEntity['fizzbuzz'][0] == 111222 assert 'foo' not in returnEntity returnEntity = syn.getEntity(entity) assert returnEntity.versionNumber == 2 assert returnEntity['description'] == 'Changed something' assert returnEntity['foo'][0] == 998877 returnEntity = syn.get(entity, version=1) assert returnEntity.versionNumber == 1 assert returnEntity['fizzbuzz'][0] == 111222 assert 'foo' not in returnEntity
def test_annotations(): ## create a new project project = create_project() entity = create_data_entity(project['id']) a = syn.getAnnotations(entity) assert 'etag' in a print a a['bogosity'] = 'total' print a syn.setAnnotations(entity, a) a2 = syn.getAnnotations(entity) assert a2['bogosity'] == ['total'] a2['primes'] = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29] a2['phat_numbers'] = [1234.5678, 8888.3333, 1212.3434, 6677.8899] a2['goobers'] = ['chris', 'jen', 'jane'] a2['present_time'] = datetime.now() syn.setAnnotations(entity, a2) a3 = syn.getAnnotations(entity) assert a3['primes'] == [2, 3, 5, 7, 11, 13, 17, 19, 23, 29] assert a3['phat_numbers'] == [1234.5678, 8888.3333, 1212.3434, 6677.8899] assert a3['goobers'] == ['chris', 'jen', 'jane'] ## only accurate to within a second 'cause synapse strips off the fractional part assert a3['present_time'][0].strftime('%Y-%m-%d %H:%M:%S') == a2[ 'present_time'].strftime('%Y-%m-%d %H:%M:%S')
def test_annotations(): ## create a new project project = create_project() entity = create_data_entity(project['id']) a = syn.getAnnotations(entity) assert 'etag' in a print a a['bogosity'] = 'total' print a syn.setAnnotations(entity, a) a2 = syn.getAnnotations(entity) assert a2['bogosity'] == ['total'] a2['primes'] = [2,3,5,7,11,13,17,19,23,29] a2['phat_numbers'] = [1234.5678, 8888.3333, 1212.3434, 6677.8899] a2['goobers'] = ['chris', 'jen', 'jane'] a2['present_time'] = datetime.now() syn.setAnnotations(entity, a2) a3 = syn.getAnnotations(entity) assert a3['primes'] == [2,3,5,7,11,13,17,19,23,29] assert a3['phat_numbers'] == [1234.5678, 8888.3333, 1212.3434, 6677.8899] assert a3['goobers'] == ['chris', 'jen', 'jane'] ## only accurate to within a second 'cause synapse strips off the fractional part assert a3['present_time'][0].strftime('%Y-%m-%d %H:%M:%S') == a2['present_time'].strftime('%Y-%m-%d %H:%M:%S')
def test_entity_version(): # Test the ability to get specific versions of Synapse Entities #Create a new project project = create_project() entity = create_data_entity(project['id']) syn.setAnnotations(entity, {'fizzbuzz': 111222}) #Get new entity and check that it is same entity = syn.getEntity(entity) assert entity.versionNumber == 1 entity.description = 'Changed something' entity.foo = 998877 entity = syn.updateEntity(entity, incrementVersion=True) assert entity.versionNumber == 2 annotations = syn.getAnnotations(entity, version=1) assert annotations['fizzbuzz'][0] == 111222 returnEntity = syn.getEntity(entity, version=1) assert returnEntity.versionNumber == 1 assert returnEntity['fizzbuzz'][0] == 111222 assert 'foo' not in returnEntity returnEntity = syn.getEntity(entity) assert returnEntity.versionNumber == 2 assert returnEntity['description'] == 'Changed something' assert returnEntity['foo'][0] == 998877 returnEntity = syn.get(entity, version=1) assert returnEntity.versionNumber == 1 assert returnEntity['fizzbuzz'][0] == 111222 assert 'foo' not in returnEntity
def test_query(): #Create a project then add entities and verify that I can find them with a query project = create_project() for i in range(2): try: entity = create_data_entity(project['id']) except Exception as ex: print ex print ex.response.text qry= syn.query("select id, name from entity where entity.parentId=='%s'" % project['id']) assert qry['totalNumberOfResults']==(i+1)
def test_keyword_annotations(): """ Test setting annotations using keyword arguments """ ## create a new project and data entity project = create_project() entity = create_data_entity(project['id']) annos = syn.setAnnotations(entity, wazoo='Frank', label='Barking Pumpkin', shark=16776960) assert annos['wazoo'] == ['Frank'] assert annos['label'] == ['Barking Pumpkin'] assert annos['shark'] == [16776960]
def test_updateEntity_version(): project = create_project() entity = create_data_entity(project['id']) entity['name'] = 'foobarbat' entity['description'] = 'This is a test entity...' entity = syn.updateEntity(entity, incrementVersion=True, versionLabel="Prada remix") returnEntity = syn.getEntity(entity) # syn.printEntity(returnEntity) assert returnEntity['name'] == 'foobarbat' assert returnEntity['description'] == 'This is a test entity...' assert returnEntity['versionNumber'] == 2 assert returnEntity['versionLabel'] == 'Prada remix'
def test_query(): #Create a project then add entities and verify that I can find them with a query project = create_project() for i in range(2): try: entity = create_data_entity(project['id']) except Exception as ex: print ex print ex.response.text qry = syn.query( "select id, name from entity where entity.parentId=='%s'" % project['id']) assert qry['totalNumberOfResults'] == (i + 1)
def test_uploadFile(): project = create_project() ## here, entity has been saved to Synapse and entity is an Entity object entity = create_data_entity(project['id']) #create a temporary file fname = utils.make_bogus_data_file() syn.uploadFile(entity, fname) #Download and verify that it is the same filename entity = syn.downloadEntity(entity) assert entity['files'][0]==os.path.basename(fname) assert filecmp.cmp(fname, os.path.join(entity['cacheDir'],entity['files'][0])) os.remove(fname)
def test_uploadFile(): project = create_project() ## here, entity has been saved to Synapse and entity is an Entity object entity = create_data_entity(project['id']) #create a temporary file fname = utils.make_bogus_data_file() syn.uploadFile(entity, fname) #Download and verify that it is the same filename entity = syn.downloadEntity(entity) assert entity['files'][0] == os.path.basename(fname) assert filecmp.cmp(fname, os.path.join(entity['cacheDir'], entity['files'][0])) os.remove(fname)
def test_chunked_query(): # Change the size of the query limit oldLimit = client.QUERY_LIMIT client.QUERY_LIMIT = 3 # Create a project to dump a bunch of Entities into project = create_project() for i in range(client.QUERY_LIMIT * 5): try: entity = create_data_entity(project['id']) except Exception as ex: print ex print ex.response.text iter = syn.chunkedQuery("select * from entity where entity.parentId=='%s'" % project['id']) count = 0 for res in iter: count += 1 assert count == (client.QUERY_LIMIT * 5) # Restore the size of the query limit client.QUERY_LIMIT = oldLimit
def test_chunked_query(): # Change the size of the query limit oldLimit = client.QUERY_LIMIT client.QUERY_LIMIT = 3 # Create a project to dump a bunch of Entities into project = create_project() for i in range(client.QUERY_LIMIT * 5): try: entity = create_data_entity(project['id']) except Exception as ex: print ex print ex.response.text iter = syn.chunkedQuery( "select * from entity where entity.parentId=='%s'" % project['id']) count = 0 for res in iter: count += 1 assert count == (client.QUERY_LIMIT * 5) # Restore the size of the query limit client.QUERY_LIMIT = oldLimit
def test_provenance(): """ test provenance features """ ## create a new project project = create_project() ## create a data entity try: filename = utils.make_bogus_data_file() data_entity = create_data_entity(project['id']) data_entity = syn.uploadFile(data_entity, filename) finally: os.remove(filename) ## create a code entity, source of the data above code = """ ## 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)] """ try: try: f = tempfile.NamedTemporaryFile(suffix=".py", delete=False) f.write(code) f.write("\n") finally: f.close() CODE_JSON['parentId'] = project['id'] code_entity = syn.createEntity(CODE_JSON) code_entity = syn.uploadFile(code_entity, f.name) finally: os.remove(f.name) ## create a new activity asserting that the code entity was used to ## make the data entity 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 the saved provenance record retrieved_activity = syn.getProvenance(data_entity) ## does it match what we expect? assert retrieved_activity == activity ## test update new_description = 'Generate random numbers like a gangsta' retrieved_activity['description'] = new_description updated_activity = syn.updateActivity(retrieved_activity) ## did the update stick? assert updated_activity['name'] == retrieved_activity['name'] assert updated_activity['description'] == new_description ## test delete syn.deleteProvenance(data_entity) try: ## provenance should be gone now ## decided this should throw exception with a 404 deleted_activity = syn.getProvenance(data_entity['id']) except Exception as ex: assert ex.response.status_code == 404 else: assert False, 'Should throw 404 exception'
def test_download_empty_entity(): project = create_project() entity = create_data_entity(project['id']) entity = syn.downloadEntity(entity)
def test_provenance(): """ test provenance features """ ## create a new project project = create_project() ## create a data entity try: filename = utils.make_bogus_data_file() data_entity = create_data_entity(project['id']) data_entity = syn.uploadFile(data_entity, filename) finally: os.remove(filename) ## create a code entity, source of the data above code = """ ## 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)] """ try: try: f = tempfile.NamedTemporaryFile(suffix=".py", delete=False) f.write(code) f.write("\n") finally: f.close() CODE_JSON['parentId']= project['id'] code_entity = syn.createEntity(CODE_JSON) code_entity = syn.uploadFile(code_entity, f.name) finally: os.remove(f.name) ## create a new activity asserting that the code entity was used to ## make the data entity 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 the saved provenance record retrieved_activity = syn.getProvenance(data_entity) ## does it match what we expect? assert retrieved_activity == activity ## test update new_description = 'Generate random numbers like a gangsta' retrieved_activity['description'] = new_description updated_activity = syn.updateActivity(retrieved_activity) ## did the update stick? assert updated_activity['name'] == retrieved_activity['name'] assert updated_activity['description'] == new_description ## test delete syn.deleteProvenance(data_entity) try: ## provenance should be gone now ## decided this should throw exception with a 404 deleted_activity = syn.getProvenance(data_entity['id']) except Exception as ex: assert ex.response.status_code == 404 else: assert False, 'Should throw 404 exception'