def test_store_with_flags(): # -- 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 # And again, but up the version this time mutaBogus = syn.store(mutaBogus, forceVersion=True) assert mutaBogus.versionNumber == 2 # -- 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 == 3 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 == 3 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) assert_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_store_with_flags(): # -- 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 # -- 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 == 3 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 == 3 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) assert_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]