]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
Add fill HTTP Response info into .Data in resources.GetRemote
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Mon, 16 Jan 2023 11:44:39 +0000 (12:44 +0100)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Mon, 16 Jan 2023 13:44:15 +0000 (14:44 +0100)
See #10604

docs/content/en/hugo-pipes/introduction.md
resources/resource.go
resources/resource_factories/create/integration_test.go
resources/resource_factories/create/remote.go
resources/resource_spec.go

index c16572e48845711016a613d16551a06a6caae353..116523fd501bf808a3202d32bb9eabede6c07d02 100755 (executable)
@@ -50,6 +50,20 @@ With `resources.GetRemote`, the first argument is a remote URL:
 
 `resources.Get` and `resources.GetRemote` return `nil` if the resource is not found.
 
+{{< new-in "0.110.0" >}} You can get information about the HTTP Response using `.Data` in the returned `Resource`. This is especially useful for HEAD request without any body. The Data object contains:
+
+StatusCode
+: The HTTP status code, e.g. 200
+Status
+: The HTTP status text, e.g. "200 OK"
+TransferEncoding
+: The transfer encoding, e.g. "chunked"
+ContentLength
+: The content length, e.g. 1234
+ContentType
+: The content type, e.g. "text/html"
+
+
 ## Copy a Resource
 
 {{< new-in "0.100.0" >}}
index fd60fd4f6e1af397b03a67cec2b7cc6ab99d0d62..0d7d1d85a5799dfb353a6eadba2e69b5489a7f7f 100644 (file)
@@ -70,6 +70,8 @@ type ResourceSourceDescriptor struct {
 
        Fs afero.Fs
 
+       Data map[string]any
+
        // Set when its known up front, else it's resolved from the target filename.
        MediaType media.Type
 
index e3a41d3350506daefb1afae46c05d22c152f0008..2d9a700d39de64afb339e72a862291cbde7f68a3 100644 (file)
@@ -35,7 +35,7 @@ func TestGetResourceHead(t *testing.T) {
   {{ with .Err }}
     {{ errorf "Unable to get remote resource: %s" . }}
   {{ else }}
-    Head Content: {{ .Content }}.
+    Head Content: {{ .Content }}. Head Data: {{ .Data }}
   {{ end }}
 {{ else }}
   {{ errorf "Unable to get remote resource: %s" $url }}
@@ -51,6 +51,9 @@ func TestGetResourceHead(t *testing.T) {
 
        b.Build()
 
-       b.AssertFileContent("public/index.html", "Head Content: .")
+       b.AssertFileContent("public/index.html",
+               "Head Content: .",
+               "Head Data: map[ContentLength:18210 ContentType:image/png Status:200 OK StatusCode:200 TransferEncoding:[]]",
+       )
 
 }
index 5216fff7914681037320cfa9caa9bd2b6e655eb6..1ae5e095b0051dabc2179d96284ebb9f506d7a3b 100644 (file)
@@ -207,10 +207,12 @@ func (c *Client) FromRemote(uri string, optionsm map[string]any) (resource.Resou
        }
 
        resourceID = filename[:len(filename)-len(path.Ext(filename))] + "_" + resourceID + mediaType.FirstSuffix.FullSuffix
+       data := responseToData(res, false)
 
        return c.rs.New(
                resources.ResourceSourceDescriptor{
                        MediaType:   mediaType,
+                       Data:        data,
                        LazyPublish: true,
                        OpenReadSeekCloser: func() (hugio.ReadSeekCloser, error) {
                                return hugio.NewReadSeekerNoOpCloser(bytes.NewReader(body)), nil
index 13920be7e66cfffc4b00949b0345b1675e419199..8ef69318362cdf19d5e50fd254c09d905a8a7f13 100644 (file)
@@ -192,6 +192,7 @@ func (r *Spec) newGenericResource(sourceFs afero.Fs,
                sourceFilename,
                baseFilename,
                mediaType,
+               nil,
        )
 }
 
@@ -203,7 +204,9 @@ func (r *Spec) newGenericResourceWithBase(
        osFileInfo os.FileInfo,
        sourceFilename,
        baseFilename string,
-       mediaType media.Type) *genericResource {
+       mediaType media.Type,
+       data map[string]any,
+) *genericResource {
        if osFileInfo != nil && osFileInfo.IsDir() {
                panic(fmt.Sprintf("dirs not supported resource types: %v", osFileInfo))
        }
@@ -244,6 +247,7 @@ func (r *Spec) newGenericResourceWithBase(
                name:                   baseFilename,
                title:                  baseFilename,
                resourceContent:        &resourceContent{},
+               data:                   data,
        }
 
        return g
@@ -305,7 +309,8 @@ func (r *Spec) newResource(sourceFs afero.Fs, fd ResourceSourceDescriptor) (reso
                fi,
                sourceFilename,
                fd.RelTargetFilename,
-               mimeType)
+               mimeType,
+               fd.Data)
 
        if mimeType.MainType == "image" {
                imgFormat, ok := images.ImageFormatFromMediaSubType(mimeType.SubType)