mirror of
https://github.com/stashapp/stash.git
synced 2025-12-17 20:34:37 +03:00
Fix stash scraper errors and add apikey field (#5474)
* Use hasura/go-graphql-client instead of shurcooL version * Fix graphql query errors * Support setting api key for stash server
This commit is contained in:
55
pkg/scraper/graphql.go
Normal file
55
pkg/scraper/graphql.go
Normal file
@@ -0,0 +1,55 @@
|
||||
package scraper
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"strings"
|
||||
|
||||
"github.com/hasura/go-graphql-client"
|
||||
)
|
||||
|
||||
type graphqlErrors []error
|
||||
|
||||
func (e graphqlErrors) Error() string {
|
||||
b := strings.Builder{}
|
||||
for _, err := range e {
|
||||
_, _ = b.WriteString(err.Error())
|
||||
}
|
||||
return b.String()
|
||||
}
|
||||
|
||||
type graphqlError struct {
|
||||
err graphql.Error
|
||||
}
|
||||
|
||||
func (e graphqlError) Error() string {
|
||||
unwrapped := e.err.Unwrap()
|
||||
if unwrapped != nil {
|
||||
var networkErr graphql.NetworkError
|
||||
if errors.As(unwrapped, &networkErr) {
|
||||
if networkErr.StatusCode() == 422 {
|
||||
return networkErr.Body()
|
||||
}
|
||||
}
|
||||
}
|
||||
return e.err.Error()
|
||||
}
|
||||
|
||||
// convertGraphqlError converts a graphql.Error or graphql.Errors into an error with a useful message.
|
||||
// graphql.Error swallows important information, so we need to convert it to a more useful error type.
|
||||
func convertGraphqlError(err error) error {
|
||||
var gqlErrs graphql.Errors
|
||||
if errors.As(err, &gqlErrs) {
|
||||
ret := make(graphqlErrors, len(gqlErrs))
|
||||
for i, e := range gqlErrs {
|
||||
ret[i] = convertGraphqlError(e)
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
var gqlErr graphql.Error
|
||||
if errors.As(err, &gqlErr) {
|
||||
return graphqlError{gqlErr}
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
Reference in New Issue
Block a user