We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
remove duplicate webscraper example once #669 is merged


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `10_integrations/webscraper.py`
Content:
```
1 # ---
2 # runtimes: ["runc", "gvisor"]
3 # ---
4 import os
5 
6 import modal
7 
8 stub = modal.Stub("example-linkscraper")
9 
10 
11 playwright_image = modal.Image.debian_slim(
12     python_version="3.10"
13 ).run_commands(  # Doesn't work with 3.11 yet
14     "apt-get update",
15     "apt-get install -y software-properties-common",
16     "apt-add-repository non-free",
17     "apt-add-repository contrib",
18     "pip install playwright==1.30.0",
19     "playwright install-deps chromium",
20     "playwright install chromium",
21 )
22 
23 
24 @stub.function(image=playwright_image)
25 async def get_links(url: str) -> set[str]:
26     from playwright.async_api import async_playwright
27 
28     async with async_playwright() as p:
29         browser = await p.chromium.launch()
30         page = await browser.new_page()
31         await page.goto(url)
32         links = await page.eval_on_selector_all(
33             "a[href]", "elements => elements.map(element => element.href)"
34         )
35         await browser.close()
36 
37     return set(links)
38 
39 
40 slack_sdk_image = modal.Image.debian_slim().pip_install("slack-sdk")
41 
42 
43 @stub.function(
44     image=slack_sdk_image,
45     secrets=[modal.Secret.from_name("scraper-slack-secret")],
46 )
47 def bot_token_msg(channel, message):
48     import slack_sdk
49 
50     print(f"Posting {message} to #{channel}")
51     client = slack_sdk.WebClient(token=os.environ["SLACK_BOT_TOKEN"])
52     client.chat_postMessage(channel=channel, text=message)
53 
54 
55 @stub.function()
56 def scrape():
57     links_of_interest = ["http://modal.com"]
58 
59     for links in get_links.map(links_of_interest):
60         for link in links:
61             bot_token_msg.remote("scraped-links", link)
62 
63 
64 @stub.function(schedule=modal.Period(days=1))
65 def daily_scrape():
66     scrape.remote()
67 
68 
69 @stub.local_entrypoint()
70 def run():
71     scrape.remote()
72
```

Path: `misc/webscraper.py`
Content:
```
1 # ---
2 # runtimes: ["runc", "gvisor"]
3 # ---
4 import os
5 
6 import modal
7 
8 stub = modal.Stub("example-linkscraper")
9 
10 
11 playwright_image = modal.Image.debian_slim(
12     python_version="3.10"
13 ).run_commands(  # Doesn't work with 3.11 yet
14     "apt-get update",
15     "apt-get install -y software-properties-common",
16     "apt-add-repository non-free",
17     "apt-add-repository contrib",
18     "pip install playwright==1.30.0",
19     "playwright install-deps chromium",
20     "playwright install chromium",
21 )
22 
23 
24 @stub.function(image=playwright_image)
25 async def get_links(url: str) -> set[str]:
26     from playwright.async_api import async_playwright
27 
28     async with async_playwright() as p:
29         browser = await p.chromium.launch()
30         page = await browser.new_page()
31         await page.goto(url)
32         links = await page.eval_on_selector_all(
33             "a[href]", "elements => elements.map(element => element.href)"
34         )
35         await browser.close()
36 
37     return set(links)
38 
39 
40 slack_sdk_image = modal.Image.debian_slim().pip_install("slack-sdk")
41 
42 
43 @stub.function(
44     image=slack_sdk_image,
45     secrets=[modal.Secret.from_name("scraper-slack-secret")],
46 )
47 def bot_token_msg(channel, message):
48     import slack_sdk
49 
50     print(f"Posting {message} to #{channel}")
51     client = slack_sdk.WebClient(token=os.environ["SLACK_BOT_TOKEN"])
52     client.chat_postMessage(channel=channel, text=message)
53 
54 
55 @stub.function()
56 def scrape():
57     links_of_interest = ["http://modal.com"]
58 
59     for links in get_links.map(links_of_interest):
60         for link in links:
61             bot_token_msg.remote("scraped-links", link)
62 
63 
64 @stub.function(schedule=modal.Period(days=1))
65 def daily_scrape():
66     scrape.remote()
67 
68 
69 @stub.local_entrypoint()
70 def run():
71     scrape.remote()
72
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/10_integrations/webscraper.py b/10_integrations/webscraper.py
--- a/10_integrations/webscraper.py
+++ b/10_integrations/webscraper.py
@@ -15,7 +15,7 @@
     "apt-get install -y software-properties-common",
     "apt-add-repository non-free",
     "apt-add-repository contrib",
-    "pip install playwright==1.30.0",
+    "pip install playwright==1.42.0",
     "playwright install-deps chromium",
     "playwright install chromium",
 )
diff --git a/misc/webscraper.py b/misc/webscraper.py
deleted file mode 100644
--- a/misc/webscraper.py
+++ /dev/null
@@ -1,71 +0,0 @@
-# ---
-# runtimes: ["runc", "gvisor"]
-# ---
-import os
-
-import modal
-
-stub = modal.Stub("example-linkscraper")
-
-
-playwright_image = modal.Image.debian_slim(
-    python_version="3.10"
-).run_commands(  # Doesn't work with 3.11 yet
-    "apt-get update",
-    "apt-get install -y software-properties-common",
-    "apt-add-repository non-free",
-    "apt-add-repository contrib",
-    "pip install playwright==1.30.0",
-    "playwright install-deps chromium",
-    "playwright install chromium",
-)
-
-
-@stub.function(image=playwright_image)
-async def get_links(url: str) -> set[str]:
-    from playwright.async_api import async_playwright
-
-    async with async_playwright() as p:
-        browser = await p.chromium.launch()
-        page = await browser.new_page()
-        await page.goto(url)
-        links = await page.eval_on_selector_all(
-            "a[href]", "elements => elements.map(element => element.href)"
-        )
-        await browser.close()
-
-    return set(links)
-
-
-slack_sdk_image = modal.Image.debian_slim().pip_install("slack-sdk")
-
-
-@stub.function(
-    image=slack_sdk_image,
-    secrets=[modal.Secret.from_name("scraper-slack-secret")],
-)
-def bot_token_msg(channel, message):
-    import slack_sdk
-
-    print(f"Posting {message} to #{channel}")
-    client = slack_sdk.WebClient(token=os.environ["SLACK_BOT_TOKEN"])
-    client.chat_postMessage(channel=channel, text=message)
-
-
-@stub.function()
-def scrape():
-    links_of_interest = ["http://modal.com"]
-
-    for links in get_links.map(links_of_interest):
-        for link in links:
-            bot_token_msg.remote("scraped-links", link)
-
-
-@stub.function(schedule=modal.Period(days=1))
-def daily_scrape():
-    scrape.remote()
-
-
-@stub.local_entrypoint()
-def run():
-    scrape.remote()

{"golden_diff": "diff --git a/10_integrations/webscraper.py b/10_integrations/webscraper.py\n--- a/10_integrations/webscraper.py\n+++ b/10_integrations/webscraper.py\n@@ -15,7 +15,7 @@\n     \"apt-get install -y software-properties-common\",\n     \"apt-add-repository non-free\",\n     \"apt-add-repository contrib\",\n-    \"pip install playwright==1.30.0\",\n+    \"pip install playwright==1.42.0\",\n     \"playwright install-deps chromium\",\n     \"playwright install chromium\",\n )\ndiff --git a/misc/webscraper.py b/misc/webscraper.py\ndeleted file mode 100644\n--- a/misc/webscraper.py\n+++ /dev/null\n@@ -1,71 +0,0 @@\n-# ---\n-# runtimes: [\"runc\", \"gvisor\"]\n-# ---\n-import os\n-\n-import modal\n-\n-stub = modal.Stub(\"example-linkscraper\")\n-\n-\n-playwright_image = modal.Image.debian_slim(\n-    python_version=\"3.10\"\n-).run_commands(  # Doesn't work with 3.11 yet\n-    \"apt-get update\",\n-    \"apt-get install -y software-properties-common\",\n-    \"apt-add-repository non-free\",\n-    \"apt-add-repository contrib\",\n-    \"pip install playwright==1.30.0\",\n-    \"playwright install-deps chromium\",\n-    \"playwright install chromium\",\n-)\n-\n-\n-@stub.function(image=playwright_image)\n-async def get_links(url: str) -> set[str]:\n-    from playwright.async_api import async_playwright\n-\n-    async with async_playwright() as p:\n-        browser = await p.chromium.launch()\n-        page = await browser.new_page()\n-        await page.goto(url)\n-        links = await page.eval_on_selector_all(\n-            \"a[href]\", \"elements => elements.map(element => element.href)\"\n-        )\n-        await browser.close()\n-\n-    return set(links)\n-\n-\n-slack_sdk_image = modal.Image.debian_slim().pip_install(\"slack-sdk\")\n-\n-\n-@stub.function(\n-    image=slack_sdk_image,\n-    secrets=[modal.Secret.from_name(\"scraper-slack-secret\")],\n-)\n-def bot_token_msg(channel, message):\n-    import slack_sdk\n-\n-    print(f\"Posting {message} to #{channel}\")\n-    client = slack_sdk.WebClient(token=os.environ[\"SLACK_BOT_TOKEN\"])\n-    client.chat_postMessage(channel=channel, text=message)\n-\n-\n-@stub.function()\n-def scrape():\n-    links_of_interest = [\"http://modal.com\"]\n-\n-    for links in get_links.map(links_of_interest):\n-        for link in links:\n-            bot_token_msg.remote(\"scraped-links\", link)\n-\n-\n-@stub.function(schedule=modal.Period(days=1))\n-def daily_scrape():\n-    scrape.remote()\n-\n-\n-@stub.local_entrypoint()\n-def run():\n-    scrape.remote()\n", "issue": "remove duplicate webscraper example once #669 is merged\n\n", "before_files": [{"content": "# ---\n# runtimes: [\"runc\", \"gvisor\"]\n# ---\nimport os\n\nimport modal\n\nstub = modal.Stub(\"example-linkscraper\")\n\n\nplaywright_image = modal.Image.debian_slim(\n    python_version=\"3.10\"\n).run_commands(  # Doesn't work with 3.11 yet\n    \"apt-get update\",\n    \"apt-get install -y software-properties-common\",\n    \"apt-add-repository non-free\",\n    \"apt-add-repository contrib\",\n    \"pip install playwright==1.30.0\",\n    \"playwright install-deps chromium\",\n    \"playwright install chromium\",\n)\n\n\n@stub.function(image=playwright_image)\nasync def get_links(url: str) -> set[str]:\n    from playwright.async_api import async_playwright\n\n    async with async_playwright() as p:\n        browser = await p.chromium.launch()\n        page = await browser.new_page()\n        await page.goto(url)\n        links = await page.eval_on_selector_all(\n            \"a[href]\", \"elements => elements.map(element => element.href)\"\n        )\n        await browser.close()\n\n    return set(links)\n\n\nslack_sdk_image = modal.Image.debian_slim().pip_install(\"slack-sdk\")\n\n\n@stub.function(\n    image=slack_sdk_image,\n    secrets=[modal.Secret.from_name(\"scraper-slack-secret\")],\n)\ndef bot_token_msg(channel, message):\n    import slack_sdk\n\n    print(f\"Posting {message} to #{channel}\")\n    client = slack_sdk.WebClient(token=os.environ[\"SLACK_BOT_TOKEN\"])\n    client.chat_postMessage(channel=channel, text=message)\n\n\n@stub.function()\ndef scrape():\n    links_of_interest = [\"http://modal.com\"]\n\n    for links in get_links.map(links_of_interest):\n        for link in links:\n            bot_token_msg.remote(\"scraped-links\", link)\n\n\n@stub.function(schedule=modal.Period(days=1))\ndef daily_scrape():\n    scrape.remote()\n\n\n@stub.local_entrypoint()\ndef run():\n    scrape.remote()\n", "path": "10_integrations/webscraper.py"}, {"content": "# ---\n# runtimes: [\"runc\", \"gvisor\"]\n# ---\nimport os\n\nimport modal\n\nstub = modal.Stub(\"example-linkscraper\")\n\n\nplaywright_image = modal.Image.debian_slim(\n    python_version=\"3.10\"\n).run_commands(  # Doesn't work with 3.11 yet\n    \"apt-get update\",\n    \"apt-get install -y software-properties-common\",\n    \"apt-add-repository non-free\",\n    \"apt-add-repository contrib\",\n    \"pip install playwright==1.30.0\",\n    \"playwright install-deps chromium\",\n    \"playwright install chromium\",\n)\n\n\n@stub.function(image=playwright_image)\nasync def get_links(url: str) -> set[str]:\n    from playwright.async_api import async_playwright\n\n    async with async_playwright() as p:\n        browser = await p.chromium.launch()\n        page = await browser.new_page()\n        await page.goto(url)\n        links = await page.eval_on_selector_all(\n            \"a[href]\", \"elements => elements.map(element => element.href)\"\n        )\n        await browser.close()\n\n    return set(links)\n\n\nslack_sdk_image = modal.Image.debian_slim().pip_install(\"slack-sdk\")\n\n\n@stub.function(\n    image=slack_sdk_image,\n    secrets=[modal.Secret.from_name(\"scraper-slack-secret\")],\n)\ndef bot_token_msg(channel, message):\n    import slack_sdk\n\n    print(f\"Posting {message} to #{channel}\")\n    client = slack_sdk.WebClient(token=os.environ[\"SLACK_BOT_TOKEN\"])\n    client.chat_postMessage(channel=channel, text=message)\n\n\n@stub.function()\ndef scrape():\n    links_of_interest = [\"http://modal.com\"]\n\n    for links in get_links.map(links_of_interest):\n        for link in links:\n            bot_token_msg.remote(\"scraped-links\", link)\n\n\n@stub.function(schedule=modal.Period(days=1))\ndef daily_scrape():\n    scrape.remote()\n\n\n@stub.local_entrypoint()\ndef run():\n    scrape.remote()\n", "path": "misc/webscraper.py"}], "after_files": [{"content": "# ---\n# runtimes: [\"runc\", \"gvisor\"]\n# ---\nimport os\n\nimport modal\n\nstub = modal.Stub(\"example-linkscraper\")\n\n\nplaywright_image = modal.Image.debian_slim(\n    python_version=\"3.10\"\n).run_commands(  # Doesn't work with 3.11 yet\n    \"apt-get update\",\n    \"apt-get install -y software-properties-common\",\n    \"apt-add-repository non-free\",\n    \"apt-add-repository contrib\",\n    \"pip install playwright==1.42.0\",\n    \"playwright install-deps chromium\",\n    \"playwright install chromium\",\n)\n\n\n@stub.function(image=playwright_image)\nasync def get_links(url: str) -> set[str]:\n    from playwright.async_api import async_playwright\n\n    async with async_playwright() as p:\n        browser = await p.chromium.launch()\n        page = await browser.new_page()\n        await page.goto(url)\n        links = await page.eval_on_selector_all(\n            \"a[href]\", \"elements => elements.map(element => element.href)\"\n        )\n        await browser.close()\n\n    return set(links)\n\n\nslack_sdk_image = modal.Image.debian_slim().pip_install(\"slack-sdk\")\n\n\n@stub.function(\n    image=slack_sdk_image,\n    secrets=[modal.Secret.from_name(\"scraper-slack-secret\")],\n)\ndef bot_token_msg(channel, message):\n    import slack_sdk\n\n    print(f\"Posting {message} to #{channel}\")\n    client = slack_sdk.WebClient(token=os.environ[\"SLACK_BOT_TOKEN\"])\n    client.chat_postMessage(channel=channel, text=message)\n\n\n@stub.function()\ndef scrape():\n    links_of_interest = [\"http://modal.com\"]\n\n    for links in get_links.map(links_of_interest):\n        for link in links:\n            bot_token_msg.remote(\"scraped-links\", link)\n\n\n@stub.function(schedule=modal.Period(days=1))\ndef daily_scrape():\n    scrape.remote()\n\n\n@stub.local_entrypoint()\ndef run():\n    scrape.remote()\n", "path": "10_integrations/webscraper.py"}, {"content": null, "path": "misc/webscraper.py"}]}