aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArthur Rand <arand@ucsc.edu>2018-04-18 10:47:13 -0700
committerGitHub <noreply@github.com>2018-04-18 10:47:13 -0700
commit6e13eb85a862bf8c8a20bc547f7eee9a85641c5c (patch)
treeb94719b5a2b53a6059e487e167c334089955e885
parent979d16d518b05c9f702bb526388bd278b9c51cee (diff)
downloaddriver-core-6e13eb85a862bf8c8a20bc547f7eee9a85641c5c.tar.gz
driver-core-6e13eb85a862bf8c8a20bc547f7eee9a85641c5c.tar.bz2
driver-core-6e13eb85a862bf8c8a20bc547f7eee9a85641c5c.zip
[API-1498] add url method to blobStorage (#157)v1.8.24
* add url method to blobStorage * typo * typo * address comments * address comments * remove * scalafmt
-rw-r--r--src/main/scala/xyz/driver/core/storage/BlobStorage.scala5
-rw-r--r--src/main/scala/xyz/driver/core/storage/FileSystemBlobStorage.scala7
-rw-r--r--src/main/scala/xyz/driver/core/storage/GcsBlobStorage.scala7
-rw-r--r--src/test/scala/xyz/driver/core/BlobStorageTest.scala5
4 files changed, 24 insertions, 0 deletions
diff --git a/src/main/scala/xyz/driver/core/storage/BlobStorage.scala b/src/main/scala/xyz/driver/core/storage/BlobStorage.scala
index b12230e..ee6c5d7 100644
--- a/src/main/scala/xyz/driver/core/storage/BlobStorage.scala
+++ b/src/main/scala/xyz/driver/core/storage/BlobStorage.scala
@@ -38,6 +38,11 @@ trait BlobStorage {
/** Delete a stored value. */
def delete(name: String): Future[String]
+ /**
+ * Path to specified resource. Checks that the resource exists and returns None if
+ * it is not found. Depending on the implementation, may throw.
+ */
+ def url(name: String): Future[Option[URL]]
}
trait SignedBlobStorage extends BlobStorage {
diff --git a/src/main/scala/xyz/driver/core/storage/FileSystemBlobStorage.scala b/src/main/scala/xyz/driver/core/storage/FileSystemBlobStorage.scala
index 80076b6..e12c73d 100644
--- a/src/main/scala/xyz/driver/core/storage/FileSystemBlobStorage.scala
+++ b/src/main/scala/xyz/driver/core/storage/FileSystemBlobStorage.scala
@@ -1,5 +1,6 @@
package xyz.driver.core.storage
+import java.net.URL
import java.nio.file.{Files, Path, StandardCopyOption}
import akka.stream.scaladsl.{FileIO, Sink, Source}
@@ -72,4 +73,10 @@ class FileSystemBlobStorage(root: Path)(implicit ec: ExecutionContext) extends B
name
}
+ override def url(name: String): Future[Option[URL]] = exists(name) map {
+ case true =>
+ Some(root.resolve(name).toUri.toURL)
+ case false =>
+ None
+ }
}
diff --git a/src/main/scala/xyz/driver/core/storage/GcsBlobStorage.scala b/src/main/scala/xyz/driver/core/storage/GcsBlobStorage.scala
index c176d12..95164c7 100644
--- a/src/main/scala/xyz/driver/core/storage/GcsBlobStorage.scala
+++ b/src/main/scala/xyz/driver/core/storage/GcsBlobStorage.scala
@@ -68,6 +68,13 @@ class GcsBlobStorage(client: Storage, bucketId: String, chunkSize: Int = GcsBlob
Option(bucket.get(name)).map(blob => blob.signUrl(duration.length, duration.unit))
}
+ override def url(name: String): Future[Option[URL]] = Future {
+ val protocol: String = "https"
+ val resourcePath: String = s"storage.googleapis.com/${bucket.getName}/"
+ Option(bucket.get(name)).map { blob =>
+ new URL(protocol, resourcePath, blob.getName)
+ }
+ }
}
object GcsBlobStorage {
diff --git a/src/test/scala/xyz/driver/core/BlobStorageTest.scala b/src/test/scala/xyz/driver/core/BlobStorageTest.scala
index 65f9cbc..637f9e0 100644
--- a/src/test/scala/xyz/driver/core/BlobStorageTest.scala
+++ b/src/test/scala/xyz/driver/core/BlobStorageTest.scala
@@ -80,6 +80,11 @@ class BlobStorageTest extends FlatSpec with ScalaFutures {
assert(storage.list("a").futureValue === Set("a/a.txt", "a/b"))
assert(storage.list("c").futureValue === Set("c/d"))
}
+ it should "get valid URL" in {
+ assert(storage.exists(key).futureValue === true)
+ val fooUrl = storage.url(key).futureValue
+ assert(fooUrl.isDefined)
+ }
}
"File system storage" should behave like storageBehaviour(