INTEGRITY Документация

Foreign Function Interface (FFI)

Через Pyodide, Python Workers предоставляют Foreign Function Interface (FFI) в JavaScript. Это позволяет:

Подробности о Foreign Function Interface Pyodide описаны здесь, и Workers, написанные на Python, могут в полной мере этим воспользоваться.

Использование Bindings в Python Workers

Привязки позволяют вашему Worker взаимодействовать с ресурсами Cloudflare Developer Platform. Объявляя привязку в Worker, вы предоставляете ему определённую возможность, например читать и записывать файлы в R2 bucket.

Например, чтобы получить доступ к KV пространство имён из Python Worker, необходимо объявить следующее в файле конфигурационный файл Wrangler:

{
	"main": "./src/index.py",
	"kv_namespaces": [
		{
			"binding": "FOO",
			"id": "<YOUR_KV_NAMESPACE_ID>"
		}
	]
}
main = "./src/index.py"

[[kv_namespaces]]
binding = "FOO"
id = "<YOUR_KV_NAMESPACE_ID>"

...а затем вызовите .get() для объекта привязки, который доступен в env:

from workers import WorkerEntrypoint, Response

class Default(WorkerEntrypoint):
    async def fetch(self, request):
        await self.env.FOO.put("bar", "baz")
        bar = await self.env.FOO.get("bar")
        return Response(bar) # returns "baz"

Преобразование Python в JavaScript

Иногда для взаимодействия с API JavaScript требуется преобразовать объект Python в JavaScript. Pyodide предоставляет to_js функцию для упрощения этого преобразования.

from js import Object
from pyodide.ffi import to_js as _to_js

from workers import WorkerEntrypoint, Response

# to_js converts between Python dictionaries and JavaScript Objects
def to_js(obj):
   return _to_js(obj, dict_converter=Object.fromEntries)

Подробнее см. в документация о pyodide.ffi.to_js.

Использование глобальных объектов JavaScript в Python Workers

Мы рекомендуем использовать workers модуль, который предоставляется нашим workers-runtime-sdk пакет, чтобы обращаться к глобальным объектам JavaScript в более питоническом стиле. Однако если вам по какой-либо причине нужно обращаться к глобальным объектам JavaScript напрямую, вы можете импортировать их из js модуль.

Например, обратите внимание, как Response импортируется из js в примере ниже:

from workers import WorkerEntrypoint
from js import Response

class Default(WorkerEntrypoint):
    async def fetch(self, request):
        return Response.new("Hello World!")

См. Примеры на Python чтобы узнать, как вызывать функции JavaScript из Python, в том числе console.log и логирования, предоставляя возможность Response, и разбор JSON.