mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-21 18:08:25 +00:00
Updated following dependencies as they need changes to the code to work properly:
- Scala - fs2 - http4s
This commit is contained in:
@ -19,7 +19,7 @@ final case class AddonArchive(url: LenientUri, name: String, version: String) {
|
||||
def nameAndVersion: String =
|
||||
s"$name-$version"
|
||||
|
||||
def extractTo[F[_]: Async](
|
||||
def extractTo[F[_]: Async: Files](
|
||||
reader: UrlReader[F],
|
||||
directory: Path,
|
||||
withSubdir: Boolean = true,
|
||||
@ -48,7 +48,7 @@ final case class AddonArchive(url: LenientUri, name: String, version: String) {
|
||||
/** Read meta either from the given directory or extract the url to find the metadata
|
||||
* file to read
|
||||
*/
|
||||
def readMeta[F[_]: Async](
|
||||
def readMeta[F[_]: Async: Files](
|
||||
urlReader: UrlReader[F],
|
||||
directory: Option[Path] = None
|
||||
): F[AddonMeta] =
|
||||
@ -58,7 +58,7 @@ final case class AddonArchive(url: LenientUri, name: String, version: String) {
|
||||
}
|
||||
|
||||
object AddonArchive {
|
||||
def read[F[_]: Async](
|
||||
def read[F[_]: Async: Files](
|
||||
url: LenientUri,
|
||||
urlReader: UrlReader[F],
|
||||
extractDir: Option[Path] = None
|
||||
@ -69,7 +69,7 @@ object AddonArchive {
|
||||
.map(m => addon.copy(name = m.meta.name, version = m.meta.version))
|
||||
}
|
||||
|
||||
def dockerAndFlakeExists[F[_]: Async](
|
||||
def dockerAndFlakeExists[F[_]: Async: Files](
|
||||
archive: Either[Path, Stream[F, Byte]]
|
||||
): F[(Boolean, Boolean)] = {
|
||||
val files = Files[F]
|
||||
|
@ -29,7 +29,7 @@ trait AddonExecutor[F[_]] {
|
||||
|
||||
object AddonExecutor {
|
||||
|
||||
def apply[F[_]: Async](
|
||||
def apply[F[_]: Async: Files](
|
||||
cfg: AddonExecutorConfig,
|
||||
urlReader: UrlReader[F]
|
||||
): AddonExecutor[F] =
|
||||
@ -104,7 +104,7 @@ object AddonExecutor {
|
||||
} yield result
|
||||
}
|
||||
|
||||
def selectRunner[F[_]: Async](
|
||||
def selectRunner[F[_]: Async: Files](
|
||||
cfg: AddonExecutorConfig,
|
||||
meta: AddonMeta,
|
||||
addonDir: Path
|
||||
|
@ -50,7 +50,7 @@ case class AddonMeta(
|
||||
* inspecting the archive to return defaults when the addon isn't declaring it in the
|
||||
* descriptor.
|
||||
*/
|
||||
def enabledTypes[F[_]: Async](
|
||||
def enabledTypes[F[_]: Async: Files](
|
||||
archive: Either[Path, Stream[F, Byte]]
|
||||
): F[List[RunnerType]] =
|
||||
for {
|
||||
@ -207,7 +207,7 @@ object AddonMeta {
|
||||
)
|
||||
}
|
||||
|
||||
def findInZip[F[_]: Async](zipFile: Stream[F, Byte]): F[AddonMeta] = {
|
||||
def findInZip[F[_]: Async: Files](zipFile: Stream[F, Byte]): F[AddonMeta] = {
|
||||
val logger = docspell.logging.getLogger[F]
|
||||
val fail: F[AddonMeta] = Async[F].raiseError(
|
||||
new FileNotFoundException(
|
||||
|
@ -10,6 +10,7 @@ import cats.Applicative
|
||||
import cats.effect._
|
||||
import cats.syntax.all._
|
||||
import fs2.Stream
|
||||
import fs2.io.file.Files
|
||||
|
||||
import docspell.addons.runner._
|
||||
import docspell.common.exec.Env
|
||||
@ -26,7 +27,9 @@ trait AddonRunner[F[_]] {
|
||||
}
|
||||
|
||||
object AddonRunner {
|
||||
def forType[F[_]: Async](cfg: AddonExecutorConfig)(rt: RunnerType) =
|
||||
def forType[F[_]: Async: Files](
|
||||
cfg: AddonExecutorConfig
|
||||
)(rt: RunnerType): AddonRunner[F] =
|
||||
rt match {
|
||||
case RunnerType.NixFlake => NixFlakeRunner[F](cfg)
|
||||
case RunnerType.Docker => DockerRunner[F](cfg)
|
||||
@ -38,9 +41,9 @@ object AddonRunner {
|
||||
|
||||
def pure[F[_]: Applicative](result: AddonResult): AddonRunner[F] =
|
||||
new AddonRunner[F] {
|
||||
val runnerType = Nil
|
||||
val runnerType: List[RunnerType] = Nil
|
||||
|
||||
def run(logger: Logger[F], env: Env, ctx: Context) =
|
||||
def run(logger: Logger[F], env: Env, ctx: Context): F[AddonResult] =
|
||||
Applicative[F].pure(result)
|
||||
}
|
||||
|
||||
@ -50,9 +53,9 @@ object AddonRunner {
|
||||
case a :: Nil => a
|
||||
case _ =>
|
||||
new AddonRunner[F] {
|
||||
val runnerType = runners.flatMap(_.runnerType).distinct
|
||||
val runnerType: List[RunnerType] = runners.flatMap(_.runnerType).distinct
|
||||
|
||||
def run(logger: Logger[F], env: Env, ctx: Context) =
|
||||
def run(logger: Logger[F], env: Env, ctx: Context): F[AddonResult] =
|
||||
Stream
|
||||
.emits(runners)
|
||||
.evalTap(r =>
|
||||
|
@ -18,7 +18,7 @@ import docspell.common.Duration
|
||||
import docspell.common.exec._
|
||||
import docspell.logging.Logger
|
||||
|
||||
final class NixFlakeRunner[F[_]: Async](cfg: NixFlakeRunner.Config)
|
||||
final class NixFlakeRunner[F[_]: Async: Files](cfg: NixFlakeRunner.Config)
|
||||
extends AddonRunner[F] {
|
||||
|
||||
val runnerType = List(RunnerType.NixFlake)
|
||||
@ -104,7 +104,7 @@ final class NixFlakeRunner[F[_]: Async](cfg: NixFlakeRunner.Config)
|
||||
}
|
||||
|
||||
object NixFlakeRunner {
|
||||
def apply[F[_]: Async](cfg: AddonExecutorConfig): NixFlakeRunner[F] =
|
||||
def apply[F[_]: Async: Files](cfg: AddonExecutorConfig): NixFlakeRunner[F] =
|
||||
new NixFlakeRunner[F](Config(cfg.nixRunner, cfg.nspawn, cfg.runTimeout))
|
||||
|
||||
case class Config(
|
||||
|
@ -45,7 +45,7 @@ private[addons] object RunnerUtil {
|
||||
* expected to be relative to the `ctx.baseDir`. Additional arguments and environment
|
||||
* variables are added as configured in the addon.
|
||||
*/
|
||||
def runInContainer[F[_]: Async](
|
||||
def runInContainer[F[_]: Async: Files](
|
||||
logger: Logger[F],
|
||||
cfg: AddonExecutorConfig.NSpawn,
|
||||
ctx: Context
|
||||
|
@ -19,10 +19,12 @@ import docspell.common.Duration
|
||||
import docspell.common.exec.{Args, Env, SysCmd}
|
||||
import docspell.logging.Logger
|
||||
|
||||
final class TrivialRunner[F[_]: Async](cfg: TrivialRunner.Config) extends AddonRunner[F] {
|
||||
final class TrivialRunner[F[_]: Async: Files](cfg: TrivialRunner.Config)
|
||||
extends AddonRunner[F] {
|
||||
private val sync = Async[F]
|
||||
private val files = Files[F]
|
||||
implicit val andMonoid: Monoid[Boolean] = Monoid.instance[Boolean](true, _ && _)
|
||||
implicit val andMonoid: Monoid[Boolean] =
|
||||
Monoid.instance[Boolean](emptyValue = true, _ && _)
|
||||
|
||||
private val executeBits = PosixPermissions(
|
||||
OwnerExecute,
|
||||
@ -34,13 +36,13 @@ final class TrivialRunner[F[_]: Async](cfg: TrivialRunner.Config) extends AddonR
|
||||
OthersRead
|
||||
)
|
||||
|
||||
val runnerType = List(RunnerType.Trivial)
|
||||
val runnerType: List[RunnerType] = List(RunnerType.Trivial)
|
||||
|
||||
def run(
|
||||
logger: Logger[F],
|
||||
env: Env,
|
||||
ctx: Context
|
||||
) = {
|
||||
): F[AddonResult] = {
|
||||
val binaryPath = ctx.meta.runner
|
||||
.flatMap(_.trivial)
|
||||
.map(_.exec)
|
||||
@ -71,7 +73,7 @@ final class TrivialRunner[F[_]: Async](cfg: TrivialRunner.Config) extends AddonR
|
||||
}
|
||||
|
||||
object TrivialRunner {
|
||||
def apply[F[_]: Async](cfg: AddonExecutorConfig): TrivialRunner[F] =
|
||||
def apply[F[_]: Async: Files](cfg: AddonExecutorConfig): TrivialRunner[F] =
|
||||
new TrivialRunner[F](Config(cfg.nspawn, cfg.runTimeout))
|
||||
|
||||
case class Config(nspawn: NSpawn, timeout: Duration)
|
||||
|
Reference in New Issue
Block a user