Skip to content

Commit c5315f8

Browse files
committed
Updates Python Workers examples to use new cloudflare.workers API
1 parent 58bde24 commit c5315f8

29 files changed

+131
-121
lines changed

src/content/docs/d1/examples/query-d1-from-python-workers.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ The value of `binding` is how you will refer to your database from within your W
8181
To create a Python Worker, create an empty file at `src/entry.py`, matching the value of `main` in your Wrangler file with the contents below:
8282

8383
```python
84-
from js import Response
84+
from workers import Response
8585

8686
async def on_fetch(request, env):
8787
# Do anything else you'd like on request here!

src/content/docs/workers/examples/103-early-hints.mdx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ export default {
111111

112112
```py
113113
import re
114-
from js import Response, Headers
114+
from workers import Response
115115

116116
CSS = "body { color: red; }"
117117
HTML = """
@@ -129,11 +129,11 @@ HTML = """
129129
"""
130130
def on_fetch(request):
131131
if re.search("test.css", request.url):
132-
headers = Headers.new({"content-type": "text/css"}.items())
133-
return Response.new(CSS, headers=headers)
132+
headers = {"content-type": "text/css"}
133+
return Response(CSS, headers=headers)
134134
else:
135-
headers = Headers.new({"content-type": "text/html","link": "</test.css>; rel=preload; as=style"}.items())
136-
return Response.new(HTML, headers=headers)
135+
headers = {"content-type": "text/html","link": "</test.css>; rel=preload; as=style"}
136+
return Response(HTML, headers=headers)
137137
```
138138

139139
</TabItem> </Tabs>

src/content/docs/workers/examples/ab-testing.mdx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ export default {
100100
```py
101101
import random
102102
from urllib.parse import urlparse, urlunparse
103-
from js import Response, Headers, fetch
103+
from workers import Response, fetch
104104

105105
NAME = "myExampleWorkersABTest"
106106

@@ -132,8 +132,7 @@ async def on_fetch(request):
132132
res = await fetch(urlunparse(url))
133133
headers = dict(res.headers)
134134
headers["Set-Cookie"] = f'{NAME}={group}; path=/'
135-
headers = Headers.new(headers.items())
136-
return Response.new(res.body, headers=headers)
135+
return Response(res.body, headers=headers)
137136

138137
return fetch(urlunparse(url))
139138
```

src/content/docs/workers/examples/accessing-the-cloudflare-object.mdx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,14 @@ export default {
6060

6161
```py
6262
import json
63-
from js import Response, Headers, JSON
63+
from workers import Response
64+
from js import JSON
6465

6566
def on_fetch(request):
6667
error = json.dumps({ "error": "The `cf` object is not available inside the preview." })
6768
data = request.cf if request.cf is not None else error
68-
headers = Headers.new({"content-type":"application/json"}.items())
69-
return Response.new(JSON.stringify(data, None, 2), headers=headers)
69+
headers = {"content-type":"application/json"}
70+
return Response(JSON.stringify(data, None, 2), headers=headers)
7071
```
7172

7273
</TabItem> </Tabs>

src/content/docs/workers/examples/aggregate-requests.mdx

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,19 +61,21 @@ export default {
6161
</TabItem> <TabItem label="Python" icon="seti:python">
6262

6363
```py
64-
from js import Response, fetch, Headers, JSON, Promise
64+
from workers import Response, fetch
65+
import asyncio
66+
import json
6567

6668
async def on_fetch(request):
6769
# some_host is set up to return JSON responses
6870
some_host = "https://jsonplaceholder.typicode.com"
6971
url1 = some_host + "/todos/1"
7072
url2 = some_host + "/todos/2"
7173

72-
responses = await Promise.all([fetch(url1), fetch(url2)])
73-
results = await Promise.all(map(lambda r: r.json(), responses))
74+
responses = await asyncio.gather(*[fetch(url1), fetch(url2)])
75+
results = await asyncio.gather(*map(lambda r: r.json(), responses))
7476

75-
headers = Headers.new({"content-type": "application/json;charset=UTF-8"}.items())
76-
return Response.new(JSON.stringify(results), headers=headers)
77+
headers = {"content-type": "application/json;charset=UTF-8"}
78+
return Response(json.dumps(results), headers=headers)
7779
```
7880

7981
</TabItem> </Tabs>

src/content/docs/workers/examples/alter-headers.mdx

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -80,28 +80,27 @@ export default {
8080
</TabItem> <TabItem label="Python" icon="seti:python">
8181

8282
```py
83-
from js import Response, fetch
83+
from workers import Response, fetch
8484

8585
async def on_fetch(request):
8686
response = await fetch("https://example.com")
8787

88-
# Clone the response so that it's no longer immutable
89-
new_response = Response.new(response.body, response)
88+
# Grab the response headers so they can be modified
89+
new_headers = response.headers
9090

9191
# Add a custom header with a value
92-
new_response.headers.append(
93-
"x-workers-hello",
94-
"Hello from Cloudflare Workers"
95-
)
96-
92+
new_headers["x-workers-hello"] = "Hello from Cloudflare Workers"
93+
9794
# Delete headers
98-
new_response.headers.delete("x-header-to-delete")
99-
new_response.headers.delete("x-header2-to-delete")
95+
if "x-header-to-delete" in new_headers:
96+
del new_headers["x-header-to-delete"]
97+
if "x-header2-to-delete" in new_headers:
98+
del new_headers["x-header2-to-delete"]
10099

101100
# Adjust the value for an existing header
102-
new_response.headers.set("x-header-to-change", "NewValue")
101+
new_headers["x-header-to-change"] = "NewValue"
103102

104-
return new_response
103+
return Response(response.body, headers=new_headers)
105104
```
106105

107106
</TabItem> </Tabs>

src/content/docs/workers/examples/auth-with-headers.mdx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,20 +79,20 @@ export default {
7979
</TabItem> <TabItem label="Python" icon="seti:python">
8080

8181
```py
82-
from js import Response, fetch
82+
from workers import Response, fetch
8383

8484
async def on_fetch(request):
8585
PRESHARED_AUTH_HEADER_KEY = "X-Custom-PSK"
8686
PRESHARED_AUTH_HEADER_VALUE = "mypresharedkey"
8787

88-
psk = request.headers.get(PRESHARED_AUTH_HEADER_KEY)
88+
psk = request.headers[PRESHARED_AUTH_HEADER_KEY]
8989

9090
if psk == PRESHARED_AUTH_HEADER_VALUE:
9191
# Correct preshared header key supplied. Fetch request from origin.
9292
return fetch(request)
9393

9494
# Incorrect key supplied. Reject the request.
95-
return Response.new("Sorry, you have supplied an invalid key.", status=403);
95+
return Response("Sorry, you have supplied an invalid key.", status=403)
9696
```
9797

9898
</TabItem> </Tabs>

src/content/docs/workers/examples/block-on-tls.mdx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,12 +72,12 @@ export default {
7272
</TabItem> <TabItem label="Python" icon="seti:python">
7373

7474
```py
75-
from js import Response, fetch
75+
from workers import Response, fetch
7676

7777
async def on_fetch(request):
7878
tls_version = request.cf.tlsVersion
7979
if tls_version not in ("TLSv1.2", "TLSv1.3"):
80-
return Response.new("Please use TLS version 1.2 or higher.", status=403)
80+
return Response("Please use TLS version 1.2 or higher.", status=403)
8181
return fetch(request)
8282
```
8383

src/content/docs/workers/examples/bulk-redirects.mdx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,8 @@ export default {
7676
</TabItem> <TabItem label="Python" icon="seti:python">
7777

7878
```py
79-
from js import Response, fetch, URL
79+
from workers import Response, fetch
80+
from urllib.parse import urlparse
8081

8182
async def on_fetch(request):
8283
external_hostname = "examples.cloudflareworkers.com"
@@ -88,8 +89,8 @@ async def on_fetch(request):
8889
"/bulk4": "https://google.com",
8990
}
9091

91-
url = URL.new(request.url)
92-
location = redirect_map.get(url.pathname, None)
92+
url = urlparse(request.url)
93+
location = redirect_map.get(url.path, None)
9394

9495
if location:
9596
return Response.redirect(location, 301)

src/content/docs/workers/examples/conditional-response.mdx

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -120,37 +120,38 @@ export default {
120120

121121
```py
122122
import re
123-
from js import Response, URL, fetch
123+
from workers import Response
124+
from urllib.parse import urlparse
124125

125126
async def on_fetch(request):
126127
blocked_hostnames = ["nope.mywebsite.com", "bye.website.com"]
127-
url = URL.new(request.url)
128+
url = urlparse(request.url)
128129

129130
# Block on hostname
130131
if url.hostname in blocked_hostnames:
131-
return Response.new("Blocked Host", status=403)
132+
return Response("Blocked Host", status=403)
132133

133134
# On paths ending in .doc or .xml
134-
if re.search(r'\.(doc|xml)$', url.pathname):
135-
return Response.new("Blocked Extension", status=403)
135+
if re.search(r'\.(doc|xml)$', url.path):
136+
return Response("Blocked Extension", status=403)
136137

137138
# On HTTP method
138139
if "POST" in request.method:
139-
return Response.new("Response for POST")
140+
return Response("Response for POST")
140141

141142
# On User Agent
142143
user_agent = request.headers["User-Agent"] or ""
143144
if "bot" in user_agent:
144-
return Response.new("Block User Agent containing bot", status=403)
145+
return Response("Block User Agent containing bot", status=403)
145146

146147
# On Client's IP address
147148
client_ip = request.headers["CF-Connecting-IP"]
148149
if client_ip == "1.2.3.4":
149-
return Response.new("Block the IP 1.2.3.4", status=403)
150+
return Response("Block the IP 1.2.3.4", status=403)
150151

151152
# On ASN
152153
if request.cf and request.cf.asn == 64512:
153-
return Response.new("Block the ASN 64512 response")
154+
return Response("Block the ASN 64512 response")
154155

155156
# On Device Type
156157
# Requires Enterprise "CF-Device-Type Header" zone setting or

0 commit comments

Comments
 (0)