# Code generated by ndpgen. DO NOT EDIT.## This file contains client wrappers for the {{.Service.Name}} host service.# It is intended for use in Navidrome plugins built with extism-py.## IMPORTANT: Due to a limitation in extism-py, you cannot import this file directly.# The @extism.import_fn decorators are only detected when defined in the plugin's# main __init__.py file. Copy the needed functions from this file into your plugin.from dataclasses import dataclassfrom typing import Anyimport extismimport json{{- if .Service.HasByteFields}}import base64{{- end}}class HostFunctionError(Exception):"""Raised when a host function returns an error."""pass{{- /* Generate raw host function imports */ -}}{{range .Service.Methods}}@extism.import_fn("extism:host/user", "{{exportName .}}")def _{{exportName .}}(offset: int) -> int:"""Raw host function - do not call directly."""...{{- end}}{{- /* Generate dataclasses for multi-value returns */ -}}{{range .Service.Methods}}{{- if .NeedsResultClass}}@dataclassclass {{pythonResultType .}}:"""Result type for {{pythonFunc .}}."""{{- range .Returns}}{{.PythonName}}: {{.PythonType}}{{- end}}{{- end}}{{- end}}{{- /* Generate wrapper functions */ -}}{{range .Service.Methods}}def {{pythonFunc .}}({{range $i, $p := .Params}}{{if $i}}, {{end}}{{$p.PythonName}}: {{$p.PythonType}}{{end}}){{if .NeedsResultClass}} -> {{pythonResultType .}}{{else if .HasReturns}} -> {{(index .Returns 0).PythonType}}{{else}} -> None{{end}}:"""{{if .Doc}}{{.Doc}}{{else}}Call the {{exportName .}} host function.{{end}}{{- if .HasParams}}Args:{{- range .Params}}{{.PythonName}}: {{.PythonType}} parameter.{{- end}}{{- end}}{{- if .HasReturns}}Returns:{{- if .NeedsResultClass}}{{pythonResultType .}} containing{{range .Returns}} {{.PythonName}},{{end}}.{{- else}}{{(index .Returns 0).PythonType}}: The result value.{{- end}}{{- end}}Raises:HostFunctionError: If the host function returns an error."""{{- if .HasParams}}request = {{{- range .Params}}{{- if .IsByteSlice}}"{{.JSONName}}": base64.b64encode({{.PythonName}}).decode("ascii"),{{- else}}"{{.JSONName}}": {{.PythonName}},{{- end}}{{- end}}}request_bytes = json.dumps(request).encode("utf-8"){{- else}}request_bytes = b"{}"{{- end}}request_mem = extism.memory.alloc(request_bytes)response_offset = _{{exportName .}}(request_mem.offset)response_mem = extism.memory.find(response_offset)response = json.loads(extism.memory.string(response_mem)){{if .HasError}}if response.get("error"):raise HostFunctionError(response["error"]){{end}}{{- if .NeedsResultClass}}return {{pythonResultType .}}({{- range .Returns}}{{- if .IsByteSlice}}{{.PythonName}}=base64.b64decode(response.get("{{.JSONName}}", "")),{{- else}}{{.PythonName}}=response.get("{{.JSONName}}"{{pythonDefault .}}),{{- end}}{{- end}}){{- else if .HasReturns}}{{- if (index .Returns 0).IsByteSlice}}return base64.b64decode(response.get("{{(index .Returns 0).JSONName}}", "")){{- else}}return response.get("{{(index .Returns 0).JSONName}}"{{pythonDefault (index .Returns 0)}}){{- end}}{{- end}}{{- end}}