Fetch Prefixes from Triplestore

This commit is contained in:
Tom Wiesing 2022-09-21 15:20:42 +02:00
parent a63e656f69
commit 6f2ba18227
No known key found for this signature in database
8 changed files with 209 additions and 23 deletions

View file

@ -7,7 +7,10 @@ import (
"strings"
"github.com/FAU-CDI/wisski-distillery/pkg/fsx"
"github.com/FAU-CDI/wisski-distillery/pkg/slicesx"
"github.com/tkw1536/goprogram/stream"
_ "embed"
)
// NoPrefix checks if this WissKI instance is excluded from generating prefixes.
@ -16,6 +19,43 @@ func (wisski *WissKI) NoPrefix() bool {
return fsx.IsFile(wisski.instances.Environment, filepath.Join(wisski.FilesystemBase, "prefixes.skip"))
}
//go:embed php/list_uri_prefixes.php
var listURIPrefixesPHP string
// Prefixes returns the prefixes
func (wisski *WissKI) Prefixes() (prefixes []string, err error) {
// get all the ugly prefixes
err = wisski.ExecPHPScript(stream.FromEnv(), &prefixes, listURIPrefixesPHP, "list_prefixes")
if err != nil {
return nil, err
}
// filter out sequential prefixes
prefixes = slicesx.NonSequential(prefixes, func(prev, now string) bool {
return strings.HasPrefix(now, prev)
})
// filter out blocked prefixes
return slicesx.Filter(prefixes, func(uri string) bool { return !IsNonServedURI(uri) }), nil
}
// TODO: Eventually move this into a configuration file.
// But for now this is fine
var blockedURIs = []string{
"http://erlangen-crm.org/",
"http://www.w3.org/",
"xsd:",
}
func IsNonServedURI(candidate string) bool {
return slicesx.Any(
blockedURIs,
func(prefix string) bool {
return strings.HasPrefix(candidate, prefix)
},
)
}
var errPrefixExecFailed = errors.New("PrefixConfig: Failed to call list_uri_prefixes")
// PrefixConfig returns the prefix config belonging to this instance.
@ -32,10 +72,15 @@ func (wisski *WissKI) PrefixConfig() (config string, err error) {
builder.WriteString("\n")
// default prefixes
wu := stream.NewIOStream(&builder, nil, nil, 0)
code, err := wisski.Barrel().Exec(wu, "barrel", "/bin/bash", "/user_shell.sh", "-c", "drush php:script /wisskiutils/list_uri_prefixes.php")
if err != nil || code != 0 {
return "", errPrefixExecFailed
prefixes, err := wisski.Prefixes()
if err != nil {
return "", err
}
// predefined prefixes
for _, prefix := range prefixes {
builder.WriteString(prefix)
builder.WriteRune('\n')
}
// custom prefixes