PlaywrightSafeThread


NamePlaywrightSafeThread JSON
Version 0.5.5 PyPI version JSON
download
home_pagehttps://github.com/3mora2/PlaywrightSafeThread
SummaryPlaywrightSafeThread
upload_time2024-07-22 10:09:06
maintainerNone
docs_urlNone
authorAmmar Alkotb
requires_pythonNone
licenseMIT License
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # PlaywrightSafeThread
use [playwright](https://github.com/microsoft/playwright-python) as async and sync safe thread

used in [WPP_Whatsapp](https://github.com/3mora2/WPP_Whatsapp)

use sync in only one at time, else use async

in events like `page.on` use async and wait

from [minet](https://github.com/medialab/minet/blob/master/minet/browser/threadsafe_browser.py)

### Installation
```
pip install PlaywrightSafeThread
```
```
pip install git+https://www.github.com/3mora2/PlaywrightSafeThread@main
```



### Example

- to run async method in like page, user `await th.create_task` or `th.run_threadsafe`
- can't run async method from page outside ThreadsafeBrowser Loop, use `await th.create_task`
- can't run method `run_threadsafe` in ThreadsafeBrowser Loop

#### Sync

```python
from PlaywrightSafeThread import ThreadsafeBrowser


th = ThreadsafeBrowser(
    install=False,
    no_context=False,
    browser="chromium", channel="chrome", headless=False,
    no_viewport=True, bypass_csp=True
)
th.goto_sync("https://web.whatsapp.com/", wait_until="networkidle")
# or
th.run_threadsafe(th.page.goto("https://web.whatsapp.com/", wait_until="networkidle"))
th.sync_close()
```

#### Async

Use asyncio.run
```python
import asyncio
from PlaywrightSafeThread import ThreadsafeBrowser




async def main():
    
    th = ThreadsafeBrowser(
        install=False,
        no_context=False,
        browser="chromium", channel="chrome", headless=False,
        no_viewport=True, bypass_csp=True,  # loop=loop
    )
    
    # Work Only When start from th loop, not in (asyncio.run(main()))
    # await th.page.goto("https://web.whatsapp.com/", wait_until="networkidle")

    await th.goto("https://web.whatsapp.com/")
    # or 

    await th.create_task(
        th.page.goto("https://web.whatsapp.com/")
    )


    # Not Work when start from th loop, work in only (asyncio.run(main()))
    th.goto_sync("https://web.whatsapp.com/", wait_until="networkidle")

    await th.close()

asyncio.run(main())
```

Use ThreadsafeBrowser.loop
```python
import asyncio
from PlaywrightSafeThread import ThreadsafeBrowser


th = ThreadsafeBrowser(
    install=False,
    no_context=False,
    browser="chromium", channel="chrome", headless=False,
    no_viewport=True, bypass_csp=True,  # loop=loop
)
loop = th.loop


async def main():
    
    await th.page.goto("https://web.whatsapp.com/", wait_until="networkidle")

    await th.create_task(
        th.page.goto("https://web.whatsapp.com/")
    )
    await th.goto("https://web.whatsapp.com/")

    # Not Work when start from th loop, work in only (asyncio.run(main()))
    # th.goto_sync("https://web.whatsapp.com/", wait_until="networkidle")

    await th.close()


task = asyncio.run_coroutine_threadsafe(main(), loop=loop)
task.result()
```

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/3mora2/PlaywrightSafeThread",
    "name": "PlaywrightSafeThread",
    "maintainer": null,
    "docs_url": null,
    "requires_python": null,
    "maintainer_email": null,
    "keywords": null,
    "author": "Ammar Alkotb",
    "author_email": "ammar.alkotb@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/41/f2/af2b7493f6584b96c8b3f24487cb0c581fc44a7458a57eba93daffdfb63d/playwrightsafethread-0.5.5.tar.gz",
    "platform": null,
    "description": "# PlaywrightSafeThread\nuse [playwright](https://github.com/microsoft/playwright-python) as async and sync safe thread\n\nused in [WPP_Whatsapp](https://github.com/3mora2/WPP_Whatsapp)\n\nuse sync in only one at time, else use async\n\nin events like `page.on` use async and wait\n\nfrom [minet](https://github.com/medialab/minet/blob/master/minet/browser/threadsafe_browser.py)\n\n### Installation\n```\npip install PlaywrightSafeThread\n```\n```\npip install git+https://www.github.com/3mora2/PlaywrightSafeThread@main\n```\n\n\n\n### Example\n\n- to run async method in like page, user `await th.create_task` or `th.run_threadsafe`\n- can't run async method from page outside ThreadsafeBrowser Loop, use `await th.create_task`\n- can't run method `run_threadsafe` in ThreadsafeBrowser Loop\n\n#### Sync\n\n```python\nfrom PlaywrightSafeThread import ThreadsafeBrowser\n\n\nth = ThreadsafeBrowser(\n    install=False,\n    no_context=False,\n    browser=\"chromium\", channel=\"chrome\", headless=False,\n    no_viewport=True, bypass_csp=True\n)\nth.goto_sync(\"https://web.whatsapp.com/\", wait_until=\"networkidle\")\n# or\nth.run_threadsafe(th.page.goto(\"https://web.whatsapp.com/\", wait_until=\"networkidle\"))\nth.sync_close()\n```\n\n#### Async\n\nUse asyncio.run\n```python\nimport asyncio\nfrom PlaywrightSafeThread import ThreadsafeBrowser\n\n\n\n\nasync def main():\n    \n    th = ThreadsafeBrowser(\n        install=False,\n        no_context=False,\n        browser=\"chromium\", channel=\"chrome\", headless=False,\n        no_viewport=True, bypass_csp=True,  # loop=loop\n    )\n    \n    # Work Only When start from th loop, not in (asyncio.run(main()))\n    # await th.page.goto(\"https://web.whatsapp.com/\", wait_until=\"networkidle\")\n\n    await th.goto(\"https://web.whatsapp.com/\")\n    # or \n\n    await th.create_task(\n        th.page.goto(\"https://web.whatsapp.com/\")\n    )\n\n\n    # Not Work when start from th loop, work in only (asyncio.run(main()))\n    th.goto_sync(\"https://web.whatsapp.com/\", wait_until=\"networkidle\")\n\n    await th.close()\n\nasyncio.run(main())\n```\n\nUse ThreadsafeBrowser.loop\n```python\nimport asyncio\nfrom PlaywrightSafeThread import ThreadsafeBrowser\n\n\nth = ThreadsafeBrowser(\n    install=False,\n    no_context=False,\n    browser=\"chromium\", channel=\"chrome\", headless=False,\n    no_viewport=True, bypass_csp=True,  # loop=loop\n)\nloop = th.loop\n\n\nasync def main():\n    \n    await th.page.goto(\"https://web.whatsapp.com/\", wait_until=\"networkidle\")\n\n    await th.create_task(\n        th.page.goto(\"https://web.whatsapp.com/\")\n    )\n    await th.goto(\"https://web.whatsapp.com/\")\n\n    # Not Work when start from th loop, work in only (asyncio.run(main()))\n    # th.goto_sync(\"https://web.whatsapp.com/\", wait_until=\"networkidle\")\n\n    await th.close()\n\n\ntask = asyncio.run_coroutine_threadsafe(main(), loop=loop)\ntask.result()\n```\n",
    "bugtrack_url": null,
    "license": "MIT License",
    "summary": "PlaywrightSafeThread",
    "version": "0.5.5",
    "project_urls": {
        "Bug Report": "https://github.com/3mora2/PlaywrightSafeThread/issues/new",
        "Homepage": "https://github.com/3mora2/PlaywrightSafeThread"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "35aed86abb887a6b908942786811d4f2daefe0f5d11a16484d286c67f990375f",
                "md5": "ea7db50e284b28d9550926bd19ea7aaf",
                "sha256": "6225a7cb55d1661c334fa034c4f270f018e455f67badf5af12031469f31091a5"
            },
            "downloads": -1,
            "filename": "PlaywrightSafeThread-0.5.5-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "ea7db50e284b28d9550926bd19ea7aaf",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": null,
            "size": 12251,
            "upload_time": "2024-07-22T10:09:04",
            "upload_time_iso_8601": "2024-07-22T10:09:04.769774Z",
            "url": "https://files.pythonhosted.org/packages/35/ae/d86abb887a6b908942786811d4f2daefe0f5d11a16484d286c67f990375f/PlaywrightSafeThread-0.5.5-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "41f2af2b7493f6584b96c8b3f24487cb0c581fc44a7458a57eba93daffdfb63d",
                "md5": "51c7d2ec0183a557800124ee5a297c24",
                "sha256": "8bb25cdec2a4c6c6b8a1c784f37028ee1d6d3c4b505b76c041eeada9cbc2c880"
            },
            "downloads": -1,
            "filename": "playwrightsafethread-0.5.5.tar.gz",
            "has_sig": false,
            "md5_digest": "51c7d2ec0183a557800124ee5a297c24",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 12083,
            "upload_time": "2024-07-22T10:09:06",
            "upload_time_iso_8601": "2024-07-22T10:09:06.150460Z",
            "url": "https://files.pythonhosted.org/packages/41/f2/af2b7493f6584b96c8b3f24487cb0c581fc44a7458a57eba93daffdfb63d/playwrightsafethread-0.5.5.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-07-22 10:09:06",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "3mora2",
    "github_project": "PlaywrightSafeThread",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [],
    "lcname": "playwrightsafethread"
}
        
Elapsed time: 1.32990s