INTEGRITY Dokumentace

Foreign Function Interface (FFI)

Pomocí Pyodide, Python Workers poskytují Foreign Function Interface (FFI) na JavaScript. To vám umožňuje:

Podrobnosti o Foreign Function Interface nástroje Pyodide jsou popsány zde, a Workers napsané v Pythonu toho mohou plně využít.

Používání bindingů z Python Workers

Bindings umožňují vašemu Workeru interagovat se zdroji na Cloudflare Developer Platform. Když ve svém Workeru deklarujete binding, přidělíte mu konkrétní schopnost, například možnost číst a zapisovat soubory do R2 bucket.

Chcete-li například přistoupit k KV namespace z Python Workeru byste ve svém Workeru deklarovali následující Konfigurační soubor 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>"

...a poté zavolejte .get() na objektu bindingu, který je zpřístupněn na 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"

Převod Pythonu do JavaScriptu

Občas budete muset pro spolupráci s API JavaScriptu převést objekt Pythonu na JavaScript. Pyodide k tomu poskytuje to_js funkci pro usnadnění této konverze.

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)

Podrobnosti najdete v dokumentace k pyodide.ffi.to_js.

Používání globálních objektů JavaScriptu z Python Workers

Doporučujeme použít workers modul, který poskytujeme prostřednictvím naší workers-runtime-sdk balíček pro přístup ke globálním proměnným JavaScriptu pythoničtějším způsobem. Pokud však potřebujete z jakéhokoli důvodu přistupovat ke globálním proměnným JavaScriptu přímo, můžete je importovat z js modul.

Všimněte si například, jak Response se importuje z js v příkladu níže:

from workers import WorkerEntrypoint
from js import Response

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

Viz Příklady v Pythonu kde zjistíte, jak volat funkce JavaScriptu z Pythonu, včetně console.log a protokolování, přičemž nabízí možnosti Response, a parsování JSON.