def mv(self, source_path, target_path): source_path = source_path target_path = self._dir_path(target_path) try: GCSObject(source_path).mv(GCSObject(target_path)) except GCSObjectException: GCSObject(self._dir_path(source_path)).mv(GCSObject(target_path))
def publish_initial(self, active_project, published_project): bucket_name = published_project.project_file_root() create_bucket(bucket_name) try: active_project_path = self._dir_path(active_project.file_root()) published_project_path = self._dir_path(published_project.file_root()) GCSObject(active_project_path).cp_dir_content(GCSObject(published_project_path), None) except BaseException: delete_bucket(bucket_name) raise
def test_rm_removes_file_when_object_is_file(self): # GIVEN gcs_object = self._monkeypatch_gcsobject(GCSObject('test/dir/file.jpg')) gcs_object.client.create_bucket('test') gcs_object.upload_from_string('content') # WHEN gcs_object.rm() # THEN dir_ = self._monkeypatch_gcsobject(self._monkeypatch_gcsobject(GCSObject('test/dir/'))) self.assertEqual(dir_.size(), 0)
def rename(self, source_path, target_path): gcs_obj = GCSObject(source_path) if not gcs_obj.exists(): gcs_obj = GCSObject(self._dir_path(source_path)) target_path = self._dir_path(target_path) gcs_obj.rename(GCSObject(target_path))
def cp_file(self, source_path, target_path): gcs_obj = GCSObject(source_path) if not gcs_obj.exists(): gcs_obj = GCSObject(self._dir_path(source_path)) target_path = self._dir_path(target_path) gcs_obj.cp(GCSObject(target_path))
def test_size_when_object_is_directory(self): # GIVEN gcs_object = self._monkeypatch_gcsobject(GCSObject('test/dir1/')) gcs_object_1 = self._monkeypatch_gcsobject(GCSObject('test/dir1/notes1.txt')) gcs_object_2 = self._monkeypatch_gcsobject(GCSObject('test/dir1/notes2.txt')) # create a bucket gcs_object.client.create_bucket('test') # put files into a bucket gcs_object_1.upload_from_string('content') gcs_object_2.upload_from_string('content') # WHEN + THEN self.assertEqual(gcs_object.size(), len('content') * 2)
def test_rename_file(self): # GIVEN gcs_object = self._monkeypatch_gcsobject(GCSObject('test/file.jpg')) gcs_object.client.create_bucket('test') gcs_object.upload_from_string('content') gcs_object_renamed = self._monkeypatch_gcsobject(GCSObject('test/renamed.jpg')) # WHEN gcs_object.rename(gcs_object_renamed) # THEN self.assertFalse(gcs_object.exists()) self.assertTrue(gcs_object_renamed.exists()) self.assertEqual(gcs_object_renamed.size(), len('content'))
def _list_dir(self, path): path = self._dir_path(path) iterator = GCSObject(path).ls(delimiter='/') _, object_name = self._local_filesystem_path_to_gcs_path(path) object_name = self._dir_path(object_name) blobs = list(iterator) prefixes = iterator.prefixes files = [] dirs = [] for blob in blobs: name = blob.name.replace(object_name, '', 1) if name != '': size = readable_size(blob.size) modified = blob.updated.strftime("%Y-%m-%d") files.append(FileInfo(name, size, modified)) for prefix in prefixes: dirs.append(DirectoryInfo(prefix.replace(object_name, '', 1)[:-1])) files.sort() dirs.sort() return files, dirs
def test_repr(self): gcs_object = self._monkeypatch_gcsobject(GCSObject(self.path)) self.assertEqual( repr(gcs_object), 'GCSObject(Bucket=physionet, Object="users/admin/profile.jpg")', )
def mkdir(self, path): path = self._dir_path(path) try: GCSObject(path).mkdir() except GCSObjectException: raise FileExistsError
def test_mkdir_doesnt_work_when_object_name_is_taken(self): # GIVEN gcs_object = self._monkeypatch_gcsobject(GCSObject('test/dir1/dir2/')) gcs_object.client.create_bucket('test') gcs_object.mkdir() # WHEN + THEN self.assertRaises(GCSObjectException, gcs_object.mkdir)
def test_cp_copies_file_to_directory(self): # GIVEN gcs_object = self._monkeypatch_gcsobject(GCSObject('test/dir/file.jpg')) gcs_object_1 = self._monkeypatch_gcsobject(GCSObject('test/dir/')) # create a bucket gcs_object.client.create_bucket('test') # put a file into a bucket gcs_object.upload_from_string('content') # WHEN gcs_object_1.cp(self._monkeypatch_gcsobject(GCSObject('test/dir_copied/'))) # THEN self.assertEqual(gcs_object_1.size(), len('content')) self.assertEqual(gcs_object.size(), len('content'))
def test_size_when_object_is_file(self): # GIVEN gcs_object = self._monkeypatch_gcsobject(GCSObject('test/dir1/notes.txt')) gcs_object.client.create_bucket('test') gcs_object.upload_from_string('content') # WHEN + THEN self.assertEqual(gcs_object.size(), len('content'))
def test_mv_moves_file_when_object_is_file(self): # GIVEN gcs_object = self._monkeypatch_gcsobject(GCSObject('test/dir/file.jpg')) gcs_object_1 = self._monkeypatch_gcsobject(GCSObject('test/dir/')) gcs_object_2 = self._monkeypatch_gcsobject(GCSObject('test/dir_copied/')) # create a bucket gcs_object.client.create_bucket('test') # put a file into a bucket gcs_object.upload_from_string('content') # WHEN gcs_object_1.mv(self._monkeypatch_gcsobject(GCSObject('test/dir_copied/'))) # THEN self.assertEqual(gcs_object_2.size(), len('content')) self.assertEqual(gcs_object.exists(), False)
def test_mkdir_makes_directories(self): # GIVEN gcs_object = self._monkeypatch_gcsobject(GCSObject('test/dir1/dir2/')) gcs_object.client.create_bucket('test') # WHEN gcs_object.mkdir() # THEN self.assertTrue(gcs_object.bucket.get_blob('dir1/dir2/'))
def rmtree(self, path): path = self._dir_path(path) GCSObject(path).rm()
def cp_dir(self, source_path, target_path, ignored_files=None): source_path = self._dir_path(source_path) target_path = self._dir_path(target_path) GCSObject(source_path).cp_dir_content(GCSObject(target_path), ignored_files=ignored_files)
def open(self, path, mode='rb'): return GCSObject(path).open(mode)
def test_init_when_storage_type_is_gcp(self): gcs_object = self._monkeypatch_gcsobject(GCSObject(self.path)) self.assertEqual(gcs_object.bucket.name, 'physionet') self.assertEqual(gcs_object._object_name, 'users/admin/profile.jpg')
def test_bucket_property_return_bucket_proper_object(self): gcs_object = self._monkeypatch_gcsobject(GCSObject(self.path)) self.assertIsInstance(gcs_object.bucket, Bucket) self.assertEqual(gcs_object.bucket.name, 'physionet')
def fput(self, path, file): gcs_object = GCSObject(os.path.join(path, file.name)) if gcs_object.exists(): raise FileExistsError gcs_object.upload_from_file(file)
def fwrite(self, path, content): gcs_object = GCSObject(path) if gcs_object.exists(): raise FileExistsError gcs_object.upload_from_string(content)
def rm_dir(self, path, remove_zip=None): path = self._dir_path(path) GCSObject(path).rm()
def rm(self, path): try: GCSObject(path).rm() except NotFound: GCSObject(self._dir_path(path)).rm()
def test_blob_property_return_proper_object(self): gcs_object = self._monkeypatch_gcsobject(GCSObject(self.path)) self.assertIsInstance(gcs_object.blob, Blob) self.assertEqual(gcs_object.blob.name, 'users/admin/profile.jpg')
def _url(self, path): return GCSObject(path).url
def remove_photo(self, path): target_path = os.path.join(settings.GCP_STORAGE_BUCKET_NAME, path) GCSObject(target_path).rm()
def rename(self, source_path, user): target_path = os.path.join(settings.GCP_STORAGE_BUCKET_NAME, user.file_root(relative=True)) GCSObject(source_path).rename(GCSObject(target_path))
def _storage_used(self, project): return GCSObject(self._dir_path(project.file_root())).size()