From c769134a293803bf45da7d1ba73d87df8daa4e61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=28=D0=A5?= =?UTF-8?q?=D1=80=D0=B0=D0=BC=D1=8B=D1=87=D0=AA=29=20=D0=A5=D1=80=D0=B0?= =?UTF-8?q?=D0=BC=D0=BE=D0=B2?= Date: Sat, 16 Aug 2025 12:42:08 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D1=84=D0=BB=D0=B0=D0=B3=20--now?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/builtins/http.go | 1 + internal/convert/convert.go | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/internal/builtins/http.go b/internal/builtins/http.go index 471cd11..82bab2e 100644 --- a/internal/builtins/http.go +++ b/internal/builtins/http.go @@ -178,6 +178,7 @@ func starlarkResponse(res *http.Response) *starlarkstruct.Struct { "code": starlark.MakeInt(res.StatusCode), "headers": starlarkStringSliceMap(res.Header), "body": reader, + "url": starlark.String(res.Request.URL.String()), "json": starlark.NewBuiltin("response.json", func(thread *starlark.Thread, b *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) { return reader.readJSON(thread, b, args, kwargs) }), diff --git a/internal/convert/convert.go b/internal/convert/convert.go index 4a1c75a..2deadfb 100644 --- a/internal/convert/convert.go +++ b/internal/convert/convert.go @@ -23,8 +23,16 @@ func Convert(v any) (starlark.Value, error) { } func convert(val reflect.Value) (starlark.Value, error) { + // Check for invalid or nil values + if !val.IsValid() { + return starlark.None, nil + } + switch val.Kind() { case reflect.Interface: + if val.IsNil() { + return starlark.None, nil + } return convert(val.Elem()) case reflect.Int, reflect.Int64, reflect.Int32, reflect.Int16, reflect.Int8: return starlark.MakeInt64(val.Int()), nil @@ -37,9 +45,20 @@ func convert(val reflect.Value) (starlark.Value, error) { case reflect.String: return starlark.String(val.String()), nil case reflect.Slice, reflect.Array: + if val.IsNil() { + return starlark.None, nil + } return convertSlice(val) case reflect.Map: + if val.IsNil() { + return starlark.None, nil + } return convertMap(val) + case reflect.Ptr: + if val.IsNil() { + return starlark.None, nil + } + return convert(val.Elem()) default: return nil, fmt.Errorf("%w: %s", ErrInvalidType, val.Type()) }