def test_store_with_create_or_update_flag(): project = create_project() filepath = utils.make_bogus_binary_file() bogus1 = File(filepath, name='Bogus Test File', parent=project) bogus1 = syn.store(bogus1, createOrUpdate=True) # Create a different file with the same name and parent new_filepath = utils.make_bogus_binary_file() bogus1.path = new_filepath # Expected behavior is that a new version of the first File will be created bogus2 = syn.store(bogus1, createOrUpdate=True) assert bogus2.id == bogus1.id assert bogus2.versionNumber == 2 assert not filecmp.cmp(bogus2.path, filepath) bogus2a = syn.get(bogus2.id) assert bogus2a.id == bogus1.id assert bogus2a.versionNumber == 2 assert filecmp.cmp(bogus2.path, bogus2a.path) # Create yet another file with the same name and parent newer_filepath = utils.make_bogus_binary_file() bogus3 = File(newer_filepath, name='Bogus Test File', parent=project) # Expected behavior is raising an exception with a 409 error assert_raises(requests.exceptions.HTTPError, syn.store, bogus3, createOrUpdate=False)
def test_uploadFileEntity(syn, project, schedule_for_cleanup): # Create a FileEntity # Dictionaries default to FileEntity as a type fname = utils.make_bogus_data_file() schedule_for_cleanup(fname) entity = File(name='fooUploadFileEntity', path=fname, parentId=project['id'], description='A test file entity') entity = syn.store(entity) # Download and verify entity = syn.get(entity) assert entity['files'][0] == os.path.basename(fname) assert filecmp.cmp(fname, entity['path']) # Check if we upload the wrong type of file handle fh = syn.restGET('/entity/%s/filehandles' % entity.id)['list'][0] assert fh[ 'concreteType'] == 'org.sagebionetworks.repo.model.file.S3FileHandle' # Create a different temporary file fname = utils.make_bogus_data_file() schedule_for_cleanup(fname) # Update existing FileEntity entity.path = fname entity = syn.store(entity) # Download and verify that it is the same file entity = syn.get(entity) assert entity['files'][0] == os.path.basename(fname) assert filecmp.cmp(fname, entity['path'])
def test_download_file_URL_false(): # Upload an external file handle fileThatExists = 'http://dev-versions.synapse.sagebase.org/synapsePythonClient' reupload = File(fileThatExists, synapseStore=False, parent=project) reupload = syn.store(reupload) reupload = syn.get(reupload, downloadFile=False) originalVersion = reupload.versionNumber # Reupload and check that the URL and version does not get mangled reupload = syn.store(reupload, forceVersion=False) assert_equals(reupload.path, fileThatExists, "Entity should still be pointing at a URL") assert_equals(originalVersion, reupload.versionNumber) # Try a URL with an extra slash at the end fileThatDoesntExist = 'http://dev-versions.synapse.sagebase.org/synapsePythonClient/' reupload.synapseStore = False reupload.path = fileThatDoesntExist reupload = syn.store(reupload) reupload = syn.get(reupload, downloadFile=False) originalVersion = reupload.versionNumber reupload = syn.store(reupload, forceVersion=False) assert_equals(reupload.path, fileThatDoesntExist, "Entity should still be pointing at a URL") assert_equals(originalVersion, reupload.versionNumber)
def test_Entity(): # Test CRUD on Entity objects, Project, Folder, File with createEntity/getEntity/updateEntity project_name = str(uuid.uuid4()) project = Project(project_name, description='Bogus testing project') project = syn.createEntity(project) schedule_for_cleanup(project) folder = Folder('Test Folder', parent=project, description='A place to put my junk', foo=1000) folder = syn.createEntity(folder) path = utils.make_bogus_data_file() schedule_for_cleanup(path) a_file = File(path, parent=folder, description='Random data for testing', foo='An arbitrary value', bar=[33,44,55], bday=Datetime(2013,3,15)) a_file = syn._createFileEntity(a_file) ## local object state should be preserved assert a_file.path == path ## check the project entity project = syn.getEntity(project) assert project.name == project_name ## check the folder entity folder = syn.getEntity(folder.id) assert folder.name == 'Test Folder' assert folder.parentId == project.id assert folder.foo[0] == 1000 ## check the file entity a_file = syn.getEntity(a_file) assert a_file['foo'][0] == 'An arbitrary value' assert a_file['bar'] == [33,44,55] assert a_file['bday'][0] == Datetime(2013,3,15) ## make sure file comes back intact a_file = syn.downloadEntity(a_file) assert filecmp.cmp(path, a_file.path) #TODO We're forgotten the local file path a_file.path = path ## update the file entity a_file['foo'] = 'Another arbitrary chunk of text data' a_file['new_key'] = 'A newly created value' a_file = syn.updateEntity(a_file) assert a_file['foo'][0] == 'Another arbitrary chunk of text data' assert a_file['bar'] == [33,44,55] assert a_file['bday'][0] == Datetime(2013,3,15) assert a_file.new_key[0] == 'A newly created value' assert a_file.path == path ## upload a new file new_path = utils.make_bogus_data_file() schedule_for_cleanup(new_path) a_file = syn.uploadFile(a_file, new_path) ## make sure file comes back intact a_file = syn.downloadEntity(a_file) assert filecmp.cmp(new_path, a_file.path)
def test_download_file_URL_false(): # Upload an external file handle fileThatExists = 'http://dev-versions.synapse.sagebase.org/synapsePythonClient' reupload = File(fileThatExists, synapseStore=False, parent=project) reupload = syn.store(reupload) reupload = syn.get(reupload, downloadFile=False) originalVersion = reupload.versionNumber # Reupload and check that the URL and version does not get mangled reupload = syn.store(reupload, forceVersion=False) assert reupload.path == fileThatExists, "Entity should still be pointing at a URL" assert originalVersion == reupload.versionNumber # Try a URL with an extra slash at the end fileThatDoesntExist = 'http://dev-versions.synapse.sagebase.org/synapsePythonClient/' reupload.synapseStore = False reupload.path = fileThatDoesntExist reupload = syn.store(reupload) reupload = syn.get(reupload, downloadFile=False) originalVersion = reupload.versionNumber reupload = syn.store(reupload, forceVersion=False) assert reupload.path == fileThatDoesntExist, "Entity should still be pointing at a URL" assert originalVersion == reupload.versionNumber
def test_Entity(): # Update the project project_name = str(uuid.uuid4()) project = Project(name=project_name) project = syn.store(project) schedule_for_cleanup(project) project = syn.getEntity(project) assert project.name == project_name # Create and get a Folder folder = Folder('Test Folder', parent=project, description='A place to put my junk', foo=1000) folder = syn.createEntity(folder) folder = syn.getEntity(folder) assert folder.name == 'Test Folder' assert folder.parentId == project.id assert folder.description == 'A place to put my junk' assert folder.foo[0] == 1000 # Update and get the Folder folder.pi = 3.14159265359 folder.description = 'The rejects from the other folder' folder = syn.store(folder) folder = syn.get(folder) assert folder.name == 'Test Folder' assert folder.parentId == project.id assert folder.description == 'The rejects from the other folder' assert folder.pi[0] == 3.14159265359 # Test CRUD on Files path = utils.make_bogus_data_file() schedule_for_cleanup(path) a_file = File(path, parent=folder, description='Random data for testing', contentType='text/flapdoodle', foo='An arbitrary value', bar=[33,44,55], bday=Datetime(2013,3,15)) a_file = syn._createFileEntity(a_file) assert a_file.path == path a_file = syn.getEntity(a_file) assert a_file['foo'][0] == 'An arbitrary value' assert a_file['bar'] == [33,44,55] assert a_file['bday'][0] == Datetime(2013,3,15) assert a_file.contentType == 'text/flapdoodle' a_file = syn.downloadEntity(a_file) assert filecmp.cmp(path, a_file.path) # Update the File a_file.path = path a_file['foo'] = 'Another arbitrary chunk of text data' a_file['new_key'] = 'A newly created value' a_file = syn.updateEntity(a_file) assert a_file['foo'][0] == 'Another arbitrary chunk of text data' assert a_file['bar'] == [33,44,55] assert a_file['bday'][0] == Datetime(2013,3,15) assert a_file.new_key[0] == 'A newly created value' assert a_file.path == path assert a_file.versionNumber == 1 # Upload a new File and verify new_path = utils.make_bogus_data_file() schedule_for_cleanup(new_path) a_file = syn.uploadFile(a_file, new_path) a_file = syn.downloadEntity(a_file) assert filecmp.cmp(new_path, a_file.path) assert a_file.versionNumber == 2 # Make sure we can still get the older version of file old_random_data = syn.get(a_file.id, version=1) assert filecmp.cmp(old_random_data.path, path)
def test_Entity(): # Update the project project_name = str(uuid.uuid4()) project = Project(name=project_name) project = syn.store(project) schedule_for_cleanup(project) project = syn.getEntity(project) assert project.name == project_name # Create and get a Folder folder = Folder('Test Folder', parent=project, description='A place to put my junk', foo=1000) folder = syn.createEntity(folder) folder = syn.getEntity(folder) assert folder.name == 'Test Folder' assert folder.parentId == project.id assert folder.description == 'A place to put my junk' assert folder.foo[0] == 1000 # Update and get the Folder folder.pi = 3.14159265359 folder.description = 'The rejects from the other folder' folder = syn.store(folder) folder = syn.get(folder) assert folder.name == 'Test Folder' assert folder.parentId == project.id assert folder.description == 'The rejects from the other folder' assert folder.pi[0] == 3.14159265359 # Test CRUD on Files, check unicode path = utils.make_bogus_data_file() schedule_for_cleanup(path) a_file = File(path, parent=folder, description= u'Description with funny characters: Déjà vu, ประเทศไทย, 中国', contentType='text/flapdoodle', foo='An arbitrary value', bar=[33, 44, 55], bday=Datetime(2013, 3, 15), band=u"Motörhead", lunch=u"すし") a_file = syn.store(a_file) assert a_file.path == path a_file = syn.getEntity(a_file) assert a_file.description == u'Description with funny characters: Déjà vu, ประเทศไทย, 中国', u'description= %s' % a_file.description assert a_file['foo'][ 0] == 'An arbitrary value', u'foo= %s' % a_file['foo'][0] assert a_file['bar'] == [33, 44, 55] assert a_file['bday'][0] == Datetime(2013, 3, 15) assert a_file.contentType == 'text/flapdoodle', u'contentType= %s' % a_file.contentType assert a_file['band'][0] == u"Motörhead", u'band= %s' % a_file['band'][0] assert a_file['lunch'][0] == u"すし", u'lunch= %s' % a_file['lunch'][0] a_file = syn.downloadEntity(a_file) assert filecmp.cmp(path, a_file.path) # Update the File a_file.path = path a_file['foo'] = 'Another arbitrary chunk of text data' a_file['new_key'] = 'A newly created value' a_file = syn.updateEntity(a_file) assert a_file['foo'][0] == 'Another arbitrary chunk of text data' assert a_file['bar'] == [33, 44, 55] assert a_file['bday'][0] == Datetime(2013, 3, 15) assert a_file.new_key[0] == 'A newly created value' assert a_file.path == path assert a_file.versionNumber == 1, "unexpected version number: " + str( a_file.versionNumber) #Test create, store, get Links link = Link(a_file['id'], targetVersion=a_file.versionNumber, parent=project) link = syn.store(link) assert link['linksTo']['targetId'] == a_file['id'] assert link['linksTo']['targetVersionNumber'] == a_file.versionNumber assert link['linksToClassName'] == a_file['concreteType'] testLink = syn.get(link, followLink=False) assert testLink == link link = syn.getEntity(link) assert link['foo'][0] == 'Another arbitrary chunk of text data' assert link['bar'] == [33, 44, 55] assert link['bday'][0] == Datetime(2013, 3, 15) assert link.new_key[0] == 'A newly created value' assert utils.equal_paths(link.path, path) assert link.versionNumber == 1, "unexpected version number: " + str( a_file.versionNumber) # Upload a new File and verify new_path = utils.make_bogus_data_file() schedule_for_cleanup(new_path) a_file = syn.uploadFile(a_file, new_path) a_file = syn.downloadEntity(a_file) assert filecmp.cmp(new_path, a_file.path) assert a_file.versionNumber == 2 # Make sure we can still get the older version of file old_random_data = syn.get(a_file.id, version=1) assert filecmp.cmp(old_random_data.path, path) tmpdir = tempfile.mkdtemp() schedule_for_cleanup(tmpdir) ## test file name override a_file.fileNameOverride = "peaches_en_regalia.zoinks" syn.store(a_file) ## TODO We haven't defined how filename override interacts with ## TODO previously cached files so, side-step that for now by ## TODO making sure the file is not in the cache! syn.cache.remove(a_file.dataFileHandleId, delete=True) a_file_retreived = syn.get(a_file, downloadLocation=tmpdir) assert os.path.basename( a_file_retreived.path) == a_file.fileNameOverride, os.path.basename( a_file_retreived.path) ## test getting the file from the cache with downloadLocation parameter (SYNPY-330) a_file_cached = syn.get(a_file.id, downloadLocation=tmpdir) assert a_file_cached.path is not None assert os.path.basename( a_file_cached.path) == a_file.fileNameOverride, a_file_cached.path print("\n\nList of files in project:\n") syn._list(project, recursive=True)
def test_Entity(): # Test CRUD on Entity objects, Project, Folder, File with createEntity/getEntity/updateEntity project_name = str(uuid.uuid4()) project = Project(project_name, description='Bogus testing project') project = syn.createEntity(project) schedule_for_cleanup(project) folder = Folder('Test Folder', parent=project, description='A place to put my junk', foo=1000) folder = syn.createEntity(folder) path = utils.make_bogus_data_file() schedule_for_cleanup(path) a_file = File(path, parent=folder, description='Random data for testing', foo='An arbitrary value', bar=[33, 44, 55], bday=Datetime(2013, 3, 15)) a_file = syn._createFileEntity(a_file) ## local object state should be preserved assert a_file.path == path ## check the project entity project = syn.getEntity(project) assert project.name == project_name ## check the folder entity folder = syn.getEntity(folder.id) assert folder.name == 'Test Folder' assert folder.parentId == project.id assert folder.foo[0] == 1000 ## check the file entity a_file = syn.getEntity(a_file) assert a_file['foo'][0] == 'An arbitrary value' assert a_file['bar'] == [33, 44, 55] assert a_file['bday'][0] == Datetime(2013, 3, 15) ## make sure file comes back intact a_file = syn.downloadEntity(a_file) assert filecmp.cmp(path, a_file.path) #TODO We're forgotten the local file path a_file.path = path ## update the file entity a_file['foo'] = 'Another arbitrary chunk of text data' a_file['new_key'] = 'A newly created value' a_file = syn.updateEntity(a_file) assert a_file['foo'][0] == 'Another arbitrary chunk of text data' assert a_file['bar'] == [33, 44, 55] assert a_file['bday'][0] == Datetime(2013, 3, 15) assert a_file.new_key[0] == 'A newly created value' assert a_file.path == path ## upload a new file new_path = utils.make_bogus_data_file() schedule_for_cleanup(new_path) a_file = syn.uploadFile(a_file, new_path) ## make sure file comes back intact a_file = syn.downloadEntity(a_file) assert filecmp.cmp(new_path, a_file.path)
def test_get_and_store(): """Test synapse.get and synapse.store in Project, Folder and File""" ## create project project = Project(name=str(uuid.uuid4()), description='A bogus test project') project = syn.store(project) schedule_for_cleanup(project) ## create folder folder = Folder('Bad stuff', parent=project, description='The rejects from the other fauxldurr', pi=3) folder = syn.store(folder) ## get folder folder = syn.get(folder.id) assert folder.name == 'Bad stuff' assert folder.parentId == project.id assert folder.description == 'The rejects from the other fauxldurr' assert folder.pi[0] == 3 ## update folder folder.pi = 3.14159265359 folder.description = 'The rejects from the other folder' syn.store(folder) ## verify that the updates stuck folder = syn.get(folder) assert folder.name == 'Bad stuff' assert folder.parentId == project.id assert folder.description == 'The rejects from the other folder' assert folder.pi[0] == 3.14159265359 ## upload a File path = utils.make_bogus_data_file() schedule_for_cleanup(path) random_data = File(path, parent=folder, description='Random data', foo=9844) random_data = syn.store(random_data) ## make sure file comes back intact random_data_2 = syn.downloadEntity(random_data) assert filecmp.cmp(path, random_data_2.path) assert random_data.foo[0] == 9844 ## update with a new File new_file_path = utils.make_bogus_data_file() schedule_for_cleanup(new_file_path) random_data.path = new_file_path random_data.foo = 1266 random_data = syn.store(random_data) ## should be version 2 assert random_data.versionNumber == 2 ## make sure the updates stuck random_data_2 = syn.get(random_data) assert random_data_2.path is not None assert filecmp.cmp(new_file_path, random_data_2.path) assert random_data_2.foo[0] == 1266 assert random_data_2.versionNumber == 2 ## make sure we can still get the older version of file old_random_data = syn.get(random_data.id, version=1) assert filecmp.cmp(old_random_data.path, path)
def test_Entity(): # Update the project project_name = str(uuid.uuid4()) project = Project(name=project_name) project = syn.store(project) schedule_for_cleanup(project) project = syn.getEntity(project) assert project.name == project_name # Create and get a Folder folder = Folder('Test Folder', parent=project, description='A place to put my junk', foo=1000) folder = syn.createEntity(folder) folder = syn.getEntity(folder) assert folder.name == 'Test Folder' assert folder.parentId == project.id assert folder.description == 'A place to put my junk' assert folder.foo[0] == 1000 # Update and get the Folder folder.pi = 3.14159265359 folder.description = 'The rejects from the other folder' folder = syn.store(folder) folder = syn.get(folder) assert folder.name == 'Test Folder' assert folder.parentId == project.id assert folder.description == 'The rejects from the other folder' assert folder.pi[0] == 3.14159265359 # Test CRUD on Files, check unicode path = utils.make_bogus_data_file() schedule_for_cleanup(path) a_file = File(path, parent=folder, description=u'Description with funny characters: Déjà vu, ประเทศไทย, 中国', contentType='text/flapdoodle', foo='An arbitrary value', bar=[33,44,55], bday=Datetime(2013,3,15), band=u"Motörhead", lunch=u"すし") a_file = syn.store(a_file) assert a_file.path == path a_file = syn.getEntity(a_file) assert a_file.description == u'Description with funny characters: Déjà vu, ประเทศไทย, 中国', u'description= %s' % a_file.description assert a_file['foo'][0] == 'An arbitrary value', u'foo= %s' % a_file['foo'][0] assert a_file['bar'] == [33,44,55] assert a_file['bday'][0] == Datetime(2013,3,15) assert a_file.contentType == 'text/flapdoodle', u'contentType= %s' % a_file.contentType assert a_file['band'][0] == u"Motörhead", u'band= %s' % a_file['band'][0] assert a_file['lunch'][0] == u"すし", u'lunch= %s' % a_file['lunch'][0] a_file = syn.downloadEntity(a_file) assert filecmp.cmp(path, a_file.path) # Update the File a_file.path = path a_file['foo'] = 'Another arbitrary chunk of text data' a_file['new_key'] = 'A newly created value' a_file = syn.updateEntity(a_file) assert a_file['foo'][0] == 'Another arbitrary chunk of text data' assert a_file['bar'] == [33,44,55] assert a_file['bday'][0] == Datetime(2013,3,15) assert a_file.new_key[0] == 'A newly created value' assert a_file.path == path assert a_file.versionNumber == 1, "unexpected version number: " + str(a_file.versionNumber) # Upload a new File and verify new_path = utils.make_bogus_data_file() schedule_for_cleanup(new_path) a_file = syn.uploadFile(a_file, new_path) a_file = syn.downloadEntity(a_file) assert filecmp.cmp(new_path, a_file.path) assert a_file.versionNumber == 2 # Make sure we can still get the older version of file old_random_data = syn.get(a_file.id, version=1) assert filecmp.cmp(old_random_data.path, path)
def test_Entity(syn, project, schedule_for_cleanup): # Update the project project_name = str(uuid.uuid4()) project = Project(name=project_name) project = syn.store(project) schedule_for_cleanup(project) project = syn.get(project) assert project.name == project_name # Create and get a Folder folder = Folder('Test Folder', parent=project, description='A place to put my junk', foo=1000) folder = syn.store(folder) folder = syn.get(folder) assert folder.name == 'Test Folder' assert folder.parentId == project.id assert folder.description == 'A place to put my junk' assert folder.foo[0] == 1000 # Update and get the Folder folder.pi = 3.14159265359 folder.description = 'The rejects from the other folder' folder = syn.store(folder) folder = syn.get(folder) assert folder.name == 'Test Folder' assert folder.parentId == project.id assert folder.description == 'The rejects from the other folder' assert folder.pi[0] == 3.14159265359 # Test CRUD on Files, check unicode path = utils.make_bogus_data_file() schedule_for_cleanup(path) a_file = File(path, parent=folder, description=u'Description with funny characters: Déjà vu, ประเทศไทย, 中国', contentType='text/flapdoodle', foo='An arbitrary value', bar=[33, 44, 55], bday=Datetime(2013, 3, 15), band=u"Motörhead", lunch=u"すし") a_file = syn.store(a_file) assert a_file.path == path a_file = syn.get(a_file) assert a_file.description ==\ u'Description with funny characters: Déjà vu, ประเทศไทย, 中国', \ u'description= %s' % a_file.description assert a_file['foo'][0] == 'An arbitrary value', u'foo= %s' % a_file['foo'][0] assert a_file['bar'] == [33, 44, 55] assert a_file['bday'][0] == Datetime(2013, 3, 15) assert a_file.contentType == 'text/flapdoodle', u'contentType= %s' % a_file.contentType assert a_file['band'][0] == u"Motörhead", u'band= %s' % a_file['band'][0] assert a_file['lunch'][0] == u"すし", u'lunch= %s' % a_file['lunch'][0] a_file = syn.get(a_file) assert filecmp.cmp(path, a_file.path) b_file = File(name="blah", parent=folder, dataFileHandleId=a_file.dataFileHandleId) b_file = syn.store(b_file) assert b_file.dataFileHandleId == a_file.dataFileHandleId # Update the File a_file.path = path a_file['foo'] = 'Another arbitrary chunk of text data' a_file['new_key'] = 'A newly created value' a_file = syn.store(a_file, forceVersion=False) assert a_file['foo'][0] == 'Another arbitrary chunk of text data' assert a_file['bar'] == [33, 44, 55] assert a_file['bday'][0] == Datetime(2013, 3, 15) assert a_file.new_key[0] == 'A newly created value' assert a_file.path == path assert a_file.versionNumber == 1, "unexpected version number: " + str(a_file.versionNumber) # Test create, store, get Links # If version isn't specified, targetVersionNumber should not be set link = Link(a_file['id'], parent=project) link = syn.store(link) assert link['linksTo']['targetId'] == a_file['id'] assert link['linksTo'].get('targetVersionNumber') is None assert link['linksToClassName'] == a_file['concreteType'] link = Link(a_file['id'], targetVersion=a_file.versionNumber, parent=project) link = syn.store(link) assert link['linksTo']['targetId'] == a_file['id'] assert link['linksTo']['targetVersionNumber'] == a_file.versionNumber assert link['linksToClassName'] == a_file['concreteType'] testLink = syn.get(link) assert testLink == link link = syn.get(link, followLink=True) assert link['foo'][0] == 'Another arbitrary chunk of text data' assert link['bar'] == [33, 44, 55] assert link['bday'][0] == Datetime(2013, 3, 15) assert link.new_key[0] == 'A newly created value' assert utils.equal_paths(link.path, path) assert link.versionNumber == 1, "unexpected version number: " + str(a_file.versionNumber) newfolder = Folder('Testing Folder', parent=project) newfolder = syn.store(newfolder) link = Link(newfolder, parent=folder.id) link = syn.store(link) assert link['linksTo']['targetId'] == newfolder.id assert link['linksToClassName'] == newfolder['concreteType'] assert link['linksTo'].get('targetVersionNumber') is None # Upload a new File and verify new_path = utils.make_bogus_data_file() schedule_for_cleanup(new_path) a_file.path = new_path a_file = syn.store(a_file) a_file = syn.get(a_file) assert filecmp.cmp(new_path, a_file.path) assert a_file.versionNumber == 2 # Make sure we can still get the older version of file old_random_data = syn.get(a_file.id, version=1) assert filecmp.cmp(old_random_data.path, path) tmpdir = tempfile.mkdtemp() schedule_for_cleanup(tmpdir) # test getting the file from the cache with downloadLocation parameter (SYNPY-330) a_file_cached = syn.get(a_file.id, downloadLocation=tmpdir) assert a_file_cached.path is not None assert os.path.basename(a_file_cached.path) == os.path.basename(a_file.path)
def test_Entity(): # Update the project project_name = str(uuid.uuid4()) project = Project(name=project_name) project = syn.store(project) schedule_for_cleanup(project) project = syn.getEntity(project) assert project.name == project_name # Create and get a Folder folder = Folder("Test Folder", parent=project, description="A place to put my junk", foo=1000) folder = syn.createEntity(folder) folder = syn.getEntity(folder) assert folder.name == "Test Folder" assert folder.parentId == project.id assert folder.description == "A place to put my junk" assert folder.foo[0] == 1000 # Update and get the Folder folder.pi = 3.14159265359 folder.description = "The rejects from the other folder" folder = syn.store(folder) folder = syn.get(folder) assert folder.name == "Test Folder" assert folder.parentId == project.id assert folder.description == "The rejects from the other folder" assert folder.pi[0] == 3.14159265359 # Test CRUD on Files, check unicode path = utils.make_bogus_data_file() schedule_for_cleanup(path) a_file = File( path, parent=folder, description="Description with funny characters: Déjà vu, ประเทศไทย, 中国", contentType="text/flapdoodle", foo="An arbitrary value", bar=[33, 44, 55], bday=Datetime(2013, 3, 15), band="Motörhead", lunch="すし", ) a_file = syn.store(a_file) assert a_file.path == path a_file = syn.getEntity(a_file) assert a_file.description == "Description with funny characters: Déjà vu, ประเทศไทย, 中国", ( "description= %s" % a_file.description ) assert a_file["foo"][0] == "An arbitrary value", "foo= %s" % a_file["foo"][0] assert a_file["bar"] == [33, 44, 55] assert a_file["bday"][0] == Datetime(2013, 3, 15) assert a_file.contentType == "text/flapdoodle", "contentType= %s" % a_file.contentType assert a_file["band"][0] == "Motörhead", "band= %s" % a_file["band"][0] assert a_file["lunch"][0] == "すし", "lunch= %s" % a_file["lunch"][0] a_file = syn.downloadEntity(a_file) assert filecmp.cmp(path, a_file.path) # Update the File a_file.path = path a_file["foo"] = "Another arbitrary chunk of text data" a_file["new_key"] = "A newly created value" a_file = syn.updateEntity(a_file) assert a_file["foo"][0] == "Another arbitrary chunk of text data" assert a_file["bar"] == [33, 44, 55] assert a_file["bday"][0] == Datetime(2013, 3, 15) assert a_file.new_key[0] == "A newly created value" assert a_file.path == path assert a_file.versionNumber == 1 # Upload a new File and verify new_path = utils.make_bogus_data_file() schedule_for_cleanup(new_path) a_file = syn.uploadFile(a_file, new_path) a_file = syn.downloadEntity(a_file) assert filecmp.cmp(new_path, a_file.path) assert a_file.versionNumber == 2 # Make sure we can still get the older version of file old_random_data = syn.get(a_file.id, version=1) assert filecmp.cmp(old_random_data.path, path)
def test_Entity(): # Update the project project_name = str(uuid.uuid4()) project = Project(name=project_name) project = syn.store(project) schedule_for_cleanup(project) project = syn.getEntity(project) assert project.name == project_name # Create and get a Folder folder = Folder('Test Folder', parent=project, description='A place to put my junk', foo=1000) folder = syn.createEntity(folder) folder = syn.getEntity(folder) assert folder.name == 'Test Folder' assert folder.parentId == project.id assert folder.description == 'A place to put my junk' assert folder.foo[0] == 1000 # Update and get the Folder folder.pi = 3.14159265359 folder.description = 'The rejects from the other folder' folder = syn.store(folder) folder = syn.get(folder) assert folder.name == 'Test Folder' assert folder.parentId == project.id assert folder.description == 'The rejects from the other folder' assert folder.pi[0] == 3.14159265359 # Test CRUD on Files, check unicode path = utils.make_bogus_data_file() schedule_for_cleanup(path) a_file = File(path, parent=folder, description=u'Description with funny characters: Déjà vu, ประเทศไทย, 中国', contentType='text/flapdoodle', foo='An arbitrary value', bar=[33,44,55], bday=Datetime(2013,3,15), band=u"Motörhead", lunch=u"すし") a_file = syn.store(a_file) assert a_file.path == path a_file = syn.getEntity(a_file) assert a_file.description == u'Description with funny characters: Déjà vu, ประเทศไทย, 中国', u'description= %s' % a_file.description assert a_file['foo'][0] == 'An arbitrary value', u'foo= %s' % a_file['foo'][0] assert a_file['bar'] == [33,44,55] assert a_file['bday'][0] == Datetime(2013,3,15) assert a_file.contentType == 'text/flapdoodle', u'contentType= %s' % a_file.contentType assert a_file['band'][0] == u"Motörhead", u'band= %s' % a_file['band'][0] assert a_file['lunch'][0] == u"すし", u'lunch= %s' % a_file['lunch'][0] a_file = syn.downloadEntity(a_file) assert filecmp.cmp(path, a_file.path) assert_raises(ValueError,File,a_file.path,parent=folder,dataFileHandleId=56456) b_file = File(name="blah",parent=folder,dataFileHandleId=a_file.dataFileHandleId) b_file = syn.store(b_file) assert b_file.dataFileHandleId == a_file.dataFileHandleId # Update the File a_file.path = path a_file['foo'] = 'Another arbitrary chunk of text data' a_file['new_key'] = 'A newly created value' a_file = syn.updateEntity(a_file) assert a_file['foo'][0] == 'Another arbitrary chunk of text data' assert a_file['bar'] == [33,44,55] assert a_file['bday'][0] == Datetime(2013,3,15) assert a_file.new_key[0] == 'A newly created value' assert a_file.path == path assert a_file.versionNumber == 1, "unexpected version number: " + str(a_file.versionNumber) #Test create, store, get Links link = Link(a_file['id'], targetVersion=a_file.versionNumber, parent=project) link = syn.store(link) assert link['linksTo']['targetId'] == a_file['id'] assert link['linksTo']['targetVersionNumber'] == a_file.versionNumber assert link['linksToClassName'] == a_file['concreteType'] testLink = syn.get(link) assert testLink == link link = syn.get(link,followLink= True) assert link['foo'][0] == 'Another arbitrary chunk of text data' assert link['bar'] == [33,44,55] assert link['bday'][0] == Datetime(2013,3,15) assert link.new_key[0] == 'A newly created value' assert utils.equal_paths(link.path, path) assert link.versionNumber == 1, "unexpected version number: " + str(a_file.versionNumber) # Upload a new File and verify new_path = utils.make_bogus_data_file() schedule_for_cleanup(new_path) a_file = syn.uploadFile(a_file, new_path) a_file = syn.downloadEntity(a_file) assert filecmp.cmp(new_path, a_file.path) assert a_file.versionNumber == 2 # Make sure we can still get the older version of file old_random_data = syn.get(a_file.id, version=1) assert filecmp.cmp(old_random_data.path, path) tmpdir = tempfile.mkdtemp() schedule_for_cleanup(tmpdir) ## test file name override a_file.fileNameOverride = "peaches_en_regalia.zoinks" syn.store(a_file) ## TODO We haven't defined how filename override interacts with ## TODO previously cached files so, side-step that for now by ## TODO making sure the file is not in the cache! syn.cache.remove(a_file.dataFileHandleId, delete=True) a_file_retreived = syn.get(a_file, downloadLocation=tmpdir) assert os.path.basename(a_file_retreived.path) == a_file.fileNameOverride, os.path.basename(a_file_retreived.path) ## test getting the file from the cache with downloadLocation parameter (SYNPY-330) a_file_cached = syn.get(a_file.id, downloadLocation=tmpdir) assert a_file_cached.path is not None assert os.path.basename(a_file_cached.path) == a_file.fileNameOverride, a_file_cached.path print("\n\nList of files in project:\n") syn._list(project, recursive=True)
def test_Entity(): # Update the project project_name = str(uuid.uuid4()) project = Project(name=project_name) project = syn.store(project) schedule_for_cleanup(project) project = syn.getEntity(project) assert_equals(project.name, project_name) # Create and get a Folder folder = Folder('Test Folder', parent=project, description='A place to put my junk', foo=1000) folder = syn.createEntity(folder) folder = syn.getEntity(folder) assert_equals(folder.name, 'Test Folder') assert_equals(folder.parentId, project.id) assert_equals(folder.description, 'A place to put my junk') assert_equals(folder.foo[0], 1000) # Update and get the Folder folder.pi = 3.14159265359 folder.description = 'The rejects from the other folder' folder = syn.store(folder) folder = syn.get(folder) assert_equals(folder.name, 'Test Folder') assert_equals(folder.parentId, project.id) assert_equals(folder.description, 'The rejects from the other folder') assert_equals(folder.pi[0], 3.14159265359) # Test CRUD on Files, check unicode path = utils.make_bogus_data_file() schedule_for_cleanup(path) a_file = File(path, parent=folder, description=u'Description with funny characters: Déjà vu, ประเทศไทย, 中国', contentType='text/flapdoodle', foo='An arbitrary value', bar=[33, 44, 55], bday=Datetime(2013, 3, 15), band=u"Motörhead", lunch=u"すし") a_file = syn.store(a_file) assert_equals(a_file.path, path) a_file = syn.getEntity(a_file) assert_equals(a_file.description, u'Description with funny characters: Déjà vu, ประเทศไทย, 中国', u'description= %s' % a_file.description) assert_equals(a_file['foo'][0], 'An arbitrary value', u'foo= %s' % a_file['foo'][0]) assert_equals(a_file['bar'], [33, 44, 55]) assert_equals(a_file['bday'][0], Datetime(2013, 3, 15)) assert_equals(a_file.contentType, 'text/flapdoodle', u'contentType= %s' % a_file.contentType) assert_equals(a_file['band'][0], u"Motörhead", u'band= %s' % a_file['band'][0]) assert_equals(a_file['lunch'][0], u"すし", u'lunch= %s' % a_file['lunch'][0]) a_file = syn.downloadEntity(a_file) assert_true(filecmp.cmp(path, a_file.path)) b_file = File(name="blah", parent=folder, dataFileHandleId=a_file.dataFileHandleId) b_file = syn.store(b_file) assert_equals(b_file.dataFileHandleId, a_file.dataFileHandleId) # Update the File a_file.path = path a_file['foo'] = 'Another arbitrary chunk of text data' a_file['new_key'] = 'A newly created value' a_file = syn.updateEntity(a_file) assert_equals(a_file['foo'][0], 'Another arbitrary chunk of text data') assert_equals(a_file['bar'], [33, 44, 55]) assert_equals(a_file['bday'][0], Datetime(2013, 3, 15)) assert_equals(a_file.new_key[0], 'A newly created value') assert_equals(a_file.path, path) assert_equals(a_file.versionNumber, 1, "unexpected version number: " + str(a_file.versionNumber)) # Test create, store, get Links # If version isn't specified, targetVersionNumber should not be set link = Link(a_file['id'], parent=project) link = syn.store(link) assert_equals(link['linksTo']['targetId'], a_file['id']) assert_is_none(link['linksTo'].get('targetVersionNumber')) assert_equals(link['linksToClassName'], a_file['concreteType']) link = Link(a_file['id'], targetVersion=a_file.versionNumber, parent=project) link = syn.store(link) assert_equals(link['linksTo']['targetId'], a_file['id']) assert_equals(link['linksTo']['targetVersionNumber'], a_file.versionNumber) assert_equals(link['linksToClassName'], a_file['concreteType']) testLink = syn.get(link) assert_equals(testLink, link) link = syn.get(link, followLink=True) assert_equals(link['foo'][0], 'Another arbitrary chunk of text data') assert_equals(link['bar'], [33, 44, 55]) assert_equals(link['bday'][0], Datetime(2013, 3, 15)) assert_equals(link.new_key[0], 'A newly created value') assert_true(utils.equal_paths(link.path, path)) assert_equals(link.versionNumber, 1, "unexpected version number: " + str(a_file.versionNumber)) newfolder = Folder('Testing Folder', parent=project) newfolder = syn.store(newfolder) link = Link(newfolder, parent=folder.id) link = syn.store(link) assert_equals(link['linksTo']['targetId'], newfolder.id) assert_equals(link['linksToClassName'], newfolder['concreteType']) assert_is_none(link['linksTo'].get('targetVersionNumber')) # Upload a new File and verify new_path = utils.make_bogus_data_file() schedule_for_cleanup(new_path) a_file = syn.uploadFile(a_file, new_path) a_file = syn.downloadEntity(a_file) assert_true(filecmp.cmp(new_path, a_file.path)) assert_equals(a_file.versionNumber, 2) # Make sure we can still get the older version of file old_random_data = syn.get(a_file.id, version=1) assert_true(filecmp.cmp(old_random_data.path, path)) tmpdir = tempfile.mkdtemp() schedule_for_cleanup(tmpdir) # test getting the file from the cache with downloadLocation parameter (SYNPY-330) a_file_cached = syn.get(a_file.id, downloadLocation=tmpdir) assert_is_not_none(a_file_cached.path) assert_equal(os.path.basename(a_file_cached.path), os.path.basename(a_file.path))
def test_store_with_flags(syn, project, schedule_for_cleanup): # -- CreateOrUpdate flag for Projects -- # If we store a project with the same name, it should become an update projUpdate = Project(project.name) projUpdate.updatedThing = 'Yep, sho\'nuf it\'s updated!' projUpdate = syn.store(projUpdate, createOrUpdate=True) assert project.id == projUpdate.id assert projUpdate.updatedThing == ['Yep, sho\'nuf it\'s updated!'] # Store a File filepath = utils.make_bogus_binary_file() schedule_for_cleanup(filepath) origBogus = File(filepath, name='Bogus Test File', parent=project) origBogus = syn.store(origBogus, createOrUpdate=True) assert origBogus.versionNumber == 1 # Modify existing annotations by createOrUpdate del projUpdate['parentId'] del projUpdate['id'] projUpdate.updatedThing = 'Updated again' projUpdate.addedThing = 'Something new' projUpdate = syn.store(projUpdate, createOrUpdate=True) assert project.id == projUpdate.id assert projUpdate.updatedThing == ['Updated again'] # -- ForceVersion flag -- # Re-store the same thing and don't up the version mutaBogus = syn.store(origBogus, forceVersion=False) assert mutaBogus.versionNumber == 1 # Re-store again, essentially the same condition mutaBogus = syn.store(mutaBogus, createOrUpdate=True, forceVersion=False) assert mutaBogus.versionNumber == 1, "expected version 1 but got version %s" % mutaBogus.versionNumber # And again, but up the version this time mutaBogus = syn.store(mutaBogus, forceVersion=True) assert mutaBogus.versionNumber == 2 # Create file with different contents and store it with force version false # This should be ignored because contents (and md5) are different different_filepath = utils.make_bogus_binary_file() schedule_for_cleanup(different_filepath) mutaBogus = File(different_filepath, name='Bogus Test File', parent=project) mutaBogus = syn.store(mutaBogus, forceVersion=False) assert mutaBogus.versionNumber == 3 # -- CreateOrUpdate flag for files -- # Store a different file with the same name and parent # Expected behavior is that a new version of the first File will be created new_filepath = utils.make_bogus_binary_file() schedule_for_cleanup(new_filepath) mutaBogus.path = new_filepath mutaBogus = syn.store(mutaBogus, createOrUpdate=True) assert mutaBogus.id == origBogus.id assert mutaBogus.versionNumber == 4 assert not filecmp.cmp(mutaBogus.path, filepath) # Make doubly sure the File was uploaded checkBogus = syn.get(mutaBogus.id) assert checkBogus.id == origBogus.id assert checkBogus.versionNumber == 4 assert filecmp.cmp(mutaBogus.path, checkBogus.path) # Create yet another file with the same name and parent # Expected behavior is raising an exception with a 409 error newer_filepath = utils.make_bogus_binary_file() schedule_for_cleanup(newer_filepath) badBogus = File(newer_filepath, name='Bogus Test File', parent=project) pytest.raises(SynapseHTTPError, syn.store, badBogus, createOrUpdate=False) # -- Storing after syn.get(..., downloadFile=False) -- ephemeralBogus = syn.get(mutaBogus, downloadFile=False) ephemeralBogus.description = 'Snorklewacker' ephemeralBogus.shoe_size = 11.5 ephemeralBogus = syn.store(ephemeralBogus) ephemeralBogus = syn.get(ephemeralBogus, downloadFile=False) assert ephemeralBogus.description == 'Snorklewacker' assert ephemeralBogus.shoe_size == [11.5]
def test_Entity(): # Update the project project_name = str(uuid.uuid4()) project = Project(name=project_name) project = syn.store(project) schedule_for_cleanup(project) project = syn.getEntity(project) assert project.name == project_name # Create and get a Folder folder = Folder('Test Folder', parent=project, description='A place to put my junk', foo=1000) folder = syn.createEntity(folder) folder = syn.getEntity(folder) assert folder.name == 'Test Folder' assert folder.parentId == project.id assert folder.description == 'A place to put my junk' assert folder.foo[0] == 1000 # Update and get the Folder folder.pi = 3.14159265359 folder.description = 'The rejects from the other folder' folder = syn.store(folder) folder = syn.get(folder) assert folder.name == 'Test Folder' assert folder.parentId == project.id assert folder.description == 'The rejects from the other folder' assert folder.pi[0] == 3.14159265359 # Test CRUD on Files, check unicode path = utils.make_bogus_data_file() schedule_for_cleanup(path) a_file = File(path, parent=folder, description=u'Description with funny characters: Déjà vu, ประเทศไทย, 中国', contentType='text/flapdoodle', foo='An arbitrary value', bar=[33,44,55], bday=Datetime(2013,3,15), band=u"Motörhead", lunch=u"すし") a_file = syn.store(a_file) assert a_file.path == path a_file = syn.getEntity(a_file) assert a_file.description == u'Description with funny characters: Déjà vu, ประเทศไทย, 中国', u'description= %s' % a_file.description assert a_file['foo'][0] == 'An arbitrary value', u'foo= %s' % a_file['foo'][0] assert a_file['bar'] == [33,44,55] assert a_file['bday'][0] == Datetime(2013,3,15) assert a_file.contentType == 'text/flapdoodle', u'contentType= %s' % a_file.contentType assert a_file['band'][0] == u"Motörhead", u'band= %s' % a_file['band'][0] assert a_file['lunch'][0] == u"すし", u'lunch= %s' % a_file['lunch'][0] a_file = syn.downloadEntity(a_file) assert filecmp.cmp(path, a_file.path) # Update the File a_file.path = path a_file['foo'] = 'Another arbitrary chunk of text data' a_file['new_key'] = 'A newly created value' a_file = syn.updateEntity(a_file) assert a_file['foo'][0] == 'Another arbitrary chunk of text data' assert a_file['bar'] == [33,44,55] assert a_file['bday'][0] == Datetime(2013,3,15) assert a_file.new_key[0] == 'A newly created value' assert a_file.path == path assert a_file.versionNumber == 1 # Upload a new File and verify new_path = utils.make_bogus_data_file() schedule_for_cleanup(new_path) a_file = syn.uploadFile(a_file, new_path) a_file = syn.downloadEntity(a_file) assert filecmp.cmp(new_path, a_file.path) assert a_file.versionNumber == 2 # Make sure we can still get the older version of file old_random_data = syn.get(a_file.id, version=1) assert filecmp.cmp(old_random_data.path, path)