Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add ResourceReaderFactory abstraction #647

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions docs/src/test/kotlin/DocSnippetTests.kt
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import org.pkl.core.resource.ResourceReaders
import org.pkl.core.util.IoUtils
import org.antlr.v4.runtime.ParserRuleContext
import org.pkl.core.http.HttpClient
import org.pkl.core.resource.ResourceReaderFactories
import java.nio.file.Files
import kotlin.io.path.isDirectory
import kotlin.io.path.isRegularFile
Expand Down Expand Up @@ -87,8 +88,8 @@ class DocSnippetTestsEngine : HierarchicalTestEngine<DocSnippetTestsEngine.Execu
ModuleKeyFactories.file
),
listOf(
ResourceReaders.environmentVariable(),
ResourceReaders.externalProperty()
ResourceReaderFactories.environmentVariable(),
ResourceReaderFactories.externalProperty()
),
System.getenv(),
emptyMap(),
Expand Down
18 changes: 9 additions & 9 deletions pkl-cli/src/main/kotlin/org/pkl/cli/CliRepl.kt
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import org.pkl.core.SecurityManagers
import org.pkl.core.module.ModuleKeyFactories
import org.pkl.core.module.ModulePathResolver
import org.pkl.core.repl.ReplServer
import org.pkl.core.resource.ResourceReaders
import org.pkl.core.resource.ResourceReaderFactories

internal class CliRepl(private val options: CliEvaluatorOptions) : CliCommand(options.base) {
override fun doRun() {
Expand Down Expand Up @@ -51,14 +51,14 @@ internal class CliRepl(private val options: CliEvaluatorOptions) : CliCommand(op
ModuleKeyFactories.genericUrl
),
listOf(
ResourceReaders.environmentVariable(),
ResourceReaders.externalProperty(),
ResourceReaders.modulePath(modulePathResolver),
ResourceReaders.file(),
ResourceReaders.http(),
ResourceReaders.https(),
ResourceReaders.pkg(),
ResourceReaders.projectpackage()
ResourceReaderFactories.environmentVariable(),
ResourceReaderFactories.externalProperty(),
ResourceReaderFactories.modulePath(modulePathResolver),
ResourceReaderFactories.file(),
ResourceReaderFactories.http(),
ResourceReaderFactories.https(),
ResourceReaderFactories.pkg(),
ResourceReaderFactories.projectpackage()
),
environmentVariables,
externalProperties,
Expand Down
26 changes: 14 additions & 12 deletions pkl-commons-cli/src/main/kotlin/org/pkl/commons/cli/CliCommand.kt
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ import org.pkl.core.module.ModuleKeyFactories
import org.pkl.core.module.ModuleKeyFactory
import org.pkl.core.module.ModulePathResolver
import org.pkl.core.project.Project
import org.pkl.core.resource.ResourceReader
import org.pkl.core.resource.ResourceReaders
import org.pkl.core.resource.ResourceReaderFactories
import org.pkl.core.resource.ResourceReaderFactory
import org.pkl.core.settings.PklSettings
import org.pkl.core.util.IoUtils

Expand Down Expand Up @@ -224,16 +224,18 @@ abstract class CliCommand(protected val cliOptions: CliBaseOptions) {
}
}

private fun resourceReaders(modulePathResolver: ModulePathResolver): List<ResourceReader> {
private fun resourceReaderFactories(
modulePathResolver: ModulePathResolver
): List<ResourceReaderFactory> {
return buildList {
add(ResourceReaders.environmentVariable())
add(ResourceReaders.externalProperty())
add(ResourceReaders.modulePath(modulePathResolver))
add(ResourceReaders.pkg())
add(ResourceReaders.projectpackage())
add(ResourceReaders.file())
add(ResourceReaders.http())
add(ResourceReaders.https())
add(ResourceReaderFactories.environmentVariable())
add(ResourceReaderFactories.externalProperty())
add(ResourceReaderFactories.modulePath(modulePathResolver))
add(ResourceReaderFactories.pkg())
add(ResourceReaderFactories.projectpackage())
add(ResourceReaderFactories.file())
add(ResourceReaderFactories.http())
add(ResourceReaderFactories.https())
}
}

Expand All @@ -253,7 +255,7 @@ abstract class CliCommand(protected val cliOptions: CliBaseOptions) {
.setExternalProperties(externalProperties)
.setEnvironmentVariables(environmentVariables)
.addModuleKeyFactories(moduleKeyFactories(modulePathResolver))
.addResourceReaders(resourceReaders(modulePathResolver))
.addResourceReaderFactories(resourceReaderFactories(modulePathResolver))
.setLogger(Loggers.stdErr())
.setTimeout(cliOptions.timeout)
.setModuleCacheDir(moduleCacheDir)
Expand Down
43 changes: 22 additions & 21 deletions pkl-core/src/main/java/org/pkl/core/EvaluatorBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@
import org.pkl.core.module.ModulePathResolver;
import org.pkl.core.project.DeclaredDependencies;
import org.pkl.core.project.Project;
import org.pkl.core.resource.ResourceReader;
import org.pkl.core.resource.ResourceReaderFactories;
import org.pkl.core.resource.ResourceReaderFactory;
import org.pkl.core.resource.ResourceReaders;
import org.pkl.core.runtime.LoggerImpl;
import org.pkl.core.util.IoUtils;
Expand All @@ -47,7 +48,7 @@ public final class EvaluatorBuilder {

private final List<ModuleKeyFactory> moduleKeyFactories = new ArrayList<>();

private final List<ResourceReader> resourceReaders = new ArrayList<>();
private final List<ResourceReaderFactory> resourceReaderFactories = new ArrayList<>();

private final Map<String, String> environmentVariables = new HashMap<>();

Expand Down Expand Up @@ -97,21 +98,21 @@ public static EvaluatorBuilder preconfigured() {
.setStackFrameTransformer(StackFrameTransformers.defaultTransformer)
.setAllowedModules(SecurityManagers.defaultAllowedModules)
.setAllowedResources(SecurityManagers.defaultAllowedResources)
.addResourceReader(ResourceReaders.environmentVariable())
.addResourceReader(ResourceReaders.externalProperty())
.addResourceReader(ResourceReaders.file())
.addResourceReader(ResourceReaders.http())
.addResourceReader(ResourceReaders.https())
.addResourceReader(ResourceReaders.pkg())
.addResourceReader(ResourceReaders.projectpackage())
.addResourceReaderFactory(ResourceReaderFactories.environmentVariable())
.addResourceReaderFactory(ResourceReaderFactories.externalProperty())
.addResourceReaderFactory(ResourceReaderFactories.file())
.addResourceReaderFactory(ResourceReaderFactories.http())
.addResourceReaderFactory(ResourceReaderFactories.https())
.addResourceReaderFactory(ResourceReaderFactories.pkg())
.addResourceReaderFactory(ResourceReaderFactories.projectpackage())
.addModuleKeyFactory(ModuleKeyFactories.standardLibrary);

if (!TruffleOptions.AOT) {
// AOT does not support class loader API
var classLoader = EvaluatorBuilder.class.getClassLoader();
builder
.addModuleKeyFactory(ModuleKeyFactories.classPath(classLoader))
.addResourceReader(ResourceReaders.classPath(classLoader));
.addResourceReaderFactory(ResourceReaderFactories.classPath(classLoader));

// only add system properties when running on JVM
addSystemProperties(builder);
Expand Down Expand Up @@ -276,24 +277,24 @@ public List<ModuleKeyFactory> getModuleKeyFactories() {
return moduleKeyFactories;
}

public EvaluatorBuilder addResourceReader(ResourceReader reader) {
resourceReaders.add(reader);
public EvaluatorBuilder addResourceReaderFactory(ResourceReaderFactory reader) {
resourceReaderFactories.add(reader);
return this;
}

public EvaluatorBuilder addResourceReaders(Collection<ResourceReader> readers) {
resourceReaders.addAll(readers);
public EvaluatorBuilder addResourceReaderFactories(Collection<ResourceReaderFactory> readers) {
resourceReaderFactories.addAll(readers);
return this;
}

public EvaluatorBuilder setResourceReaders(Collection<ResourceReader> readers) {
resourceReaders.clear();
return addResourceReaders(readers);
public EvaluatorBuilder setResourceReaderFactories(Collection<ResourceReaderFactory> readers) {
resourceReaderFactories.clear();
return addResourceReaderFactories(readers);
}

/** Returns the currently set resource readers. */
public List<ResourceReader> getResourceReaders() {
return resourceReaders;
public List<ResourceReaderFactory> getResourceReaderFactories() {
return resourceReaderFactories;
}

/**
Expand Down Expand Up @@ -463,7 +464,7 @@ public EvaluatorBuilder applyFromProject(Project project) {
if (settings.modulePath() != null) {
// indirectly closed by `ModuleKeyFactories.closeQuietly(builder.moduleKeyFactories)`
var modulePathResolver = new ModulePathResolver(settings.modulePath());
addResourceReader(ResourceReaders.modulePath(modulePathResolver));
addResourceReaderFactory(ResourceReaderFactories.modulePath(modulePathResolver));
addModuleKeyFactory(ModuleKeyFactories.modulePath(modulePathResolver));
}
if (settings.rootDir() != null) {
Expand Down Expand Up @@ -493,7 +494,7 @@ public Evaluator build() {
new LoggerImpl(logger, stackFrameTransformer),
// copy to shield against subsequent modification through builder
new ArrayList<>(moduleKeyFactories),
new ArrayList<>(resourceReaders),
new ArrayList<>(resourceReaderFactories),
new HashMap<>(environmentVariables),
new HashMap<>(externalProperties),
timeout,
Expand Down
6 changes: 3 additions & 3 deletions pkl-core/src/main/java/org/pkl/core/EvaluatorImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
import org.pkl.core.module.ProjectDependenciesManager;
import org.pkl.core.packages.PackageResolver;
import org.pkl.core.project.DeclaredDependencies;
import org.pkl.core.resource.ResourceReader;
import org.pkl.core.resource.ResourceReaderFactory;
import org.pkl.core.runtime.BaseModule;
import org.pkl.core.runtime.Identifier;
import org.pkl.core.runtime.ModuleResolver;
Expand Down Expand Up @@ -73,7 +73,7 @@ public EvaluatorImpl(
HttpClient httpClient,
Logger logger,
Collection<ModuleKeyFactory> factories,
Collection<ResourceReader> readers,
Collection<ResourceReaderFactory> readerFactories,
Map<String, String> environmentVariables,
Map<String, String> externalProperties,
@Nullable Duration timeout,
Expand All @@ -96,7 +96,7 @@ public EvaluatorImpl(
manager,
httpClient,
moduleResolver,
new ResourceManager(manager, readers),
new ResourceManager(manager, readerFactories),
this.logger,
environmentVariables,
externalProperties,
Expand Down
10 changes: 5 additions & 5 deletions pkl-core/src/main/java/org/pkl/core/project/Project.java
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@
import org.pkl.core.packages.PackageLoadError;
import org.pkl.core.packages.PackageUri;
import org.pkl.core.packages.PackageUtils;
import org.pkl.core.resource.ResourceReaders;
import org.pkl.core.resource.ResourceReaderFactories;
import org.pkl.core.util.IoUtils;
import org.pkl.core.util.Nullable;

Expand Down Expand Up @@ -82,8 +82,8 @@ public static Project loadFromPath(
.setStackFrameTransformer(stackFrameTransformer)
.addModuleKeyFactory(ModuleKeyFactories.standardLibrary)
.addModuleKeyFactory(ModuleKeyFactories.file)
.addResourceReader(ResourceReaders.environmentVariable())
.addResourceReader(ResourceReaders.file())
.addResourceReaderFactory(ResourceReaderFactories.environmentVariable())
.addResourceReaderFactory(ResourceReaderFactories.file())
.addEnvironmentVariables(envVars)
.setTimeout(timeout)
.build()) {
Expand Down Expand Up @@ -115,8 +115,8 @@ public static Project load(ModuleSource moduleSource) {
.addModuleKeyFactory(ModuleKeyFactories.standardLibrary)
.addModuleKeyFactory(ModuleKeyFactories.file)
.addModuleKeyFactory(ModuleKeyFactories.classPath(Project.class.getClassLoader()))
.addResourceReader(ResourceReaders.environmentVariable())
.addResourceReader(ResourceReaders.file())
.addResourceReaderFactory(ResourceReaderFactories.environmentVariable())
.addResourceReaderFactory(ResourceReaderFactories.file())
.build()) {
return load(evaluator, moduleSource);
}
Expand Down
6 changes: 3 additions & 3 deletions pkl-core/src/main/java/org/pkl/core/repl/ReplServer.java
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@
import org.pkl.core.repl.ReplResponse.EvalError;
import org.pkl.core.repl.ReplResponse.EvalSuccess;
import org.pkl.core.repl.ReplResponse.InvalidRequest;
import org.pkl.core.resource.ResourceReader;
import org.pkl.core.resource.ResourceReaderFactory;
import org.pkl.core.runtime.*;
import org.pkl.core.util.EconomicMaps;
import org.pkl.core.util.IoUtils;
Expand All @@ -71,7 +71,7 @@ public ReplServer(
HttpClient httpClient,
Logger logger,
Collection<ModuleKeyFactory> moduleKeyFactories,
Collection<ResourceReader> resourceReaders,
Collection<ResourceReaderFactory> resourceReaderFactories,
Map<String, String> environmentVariables,
Map<String, String> externalProperties,
@Nullable Path moduleCacheDir,
Expand Down Expand Up @@ -103,7 +103,7 @@ public ReplServer(
securityManager,
httpClient,
moduleResolver,
new ResourceManager(securityManager, resourceReaders),
new ResourceManager(securityManager, resourceReaderFactories),
logger,
environmentVariables,
externalProperties,
Expand Down
Loading