%global _empty_manifest_terminate_build 0 Name: python-hypha Version: 0.15.8 Release: 1 Summary: A serverless application framework for large-scale data management and AI model serving. License: MIT URL: http://github.com/imjoy-team/hypha Source0: https://mirrors.nju.edu.cn/pypi/web/packages/5f/f5/974dbcd4812824cf3f90d85490f8c6b7df7931f35b4ea2b5bdb8cd72cdbf/hypha-0.15.8.tar.gz BuildArch: noarch Requires: python3-aiobotocore Requires: python3-aiofiles Requires: python3-fastapi Requires: python3-imjoy-rpc Requires: python3-msgpack Requires: python3-numpy Requires: python3-pydantic[email] Requires: python3-typing-extensions Requires: python3-jinja2 Requires: python3-lxml Requires: python3-dotenv Requires: python3-engineio Requires: python3-jose Requires: python3-pyyaml Requires: python3-redislite Requires: python3-aioredis Requires: python3-shortuuid Requires: python3-uvicorn Requires: python3-httpx Requires: python3-pyotritonclient Requires: python3-requests Requires: python3-playwright Requires: python3-base58 Requires: python3-pymultihash %description ![PyPI](https://img.shields.io/pypi/v/imjoy.svg?style=popout) # Hypha Hypha is an application framework for large-scale data management and AI model serving, it allows creating computational platforms consists of computational and user interface components. Hypha server act as a hub for connecting different components through [imjoy-rpc](https://github.com/imjoy-team/imjoy-rpc). ## Installation Run the following command: ``` pip install -U hypha ``` If you want full support with server-side browser applications, run the following command instead: ``` pip install -U hypha[server-apps] playwright install ``` ## Usage ### Start the server Start the hypha server with the following command: ``` python3 -m hypha.server --host=0.0.0.0 --port=9000 ``` If you want to enable server apps (i.e. browsers running on the server side), run: ``` python -m hypha.server --host=0.0.0.0 --port=9000 --enable-server-apps ``` To test it, you should be able to visit http://localhost:9000 and see the version of the hypha server. In addition to run your own server, you can also use our public testing server: https://ai.imjoy.io ### Connect from a client We currently provide native support for both Python and Javascript client, for other languages, you can use access services using the built-in HTTP proxy of Hypha. Keep the above server running, and now you can connect to it with the `hypha` module under `imjoy-rpc` in a client script. You can either register a service or use an existing service. #### Register a service In Python, you can install the `imjoy-rpc` library: ``` pip install imjoy-rpc ``` Here is a complete client example in Python, you can save the following content as `hello-world-worker.py` and start the server via `python hello-world-worker.py`: ```python import asyncio from imjoy_rpc.hypha import connect_to_server async def start_server(server_url): server = await connect_to_server({"server_url": server_url}) def hello(name): print("Hello " + name) return "Hello " + name await server.register_service({ "name": "Hello World", "id": "hello-world", "config": { "visibility": "public" }, "hello": hello }) print(f"hello world service regisered at workspace: {api.config.workspace}") print(f"Test it with the http proxy: {server_url}/{api.config.workspace}/services/hello-world/hello?name=John") if __name__ == "__main__": server_url = "http://localhost:9000" loop = asyncio.get_event_loop() loop.create_task(start_server(server_url)) loop.run_forever() ``` You don't need to run the client script on the same server, just make sure you change the corresponding `server_url` (to an URL with the external ip or domain name of the server) if you try to connect to the server from another computer. #### Using the service If you keep the above python service running, you can also connect from either a Python client or Javascript client (on the same or a different host): In Python: ``` pip install imjoy-rpc ``` ```python import asyncio from imjoy_rpc.hypha import connect_to_server async def main(): server = await connect_to_server({"server_url": "http://localhost:9000"}) # get an existing service # since hello-world is registered as a public service, we can access it with only the name "hello-world" svc = await server.get_service("hello-world") ret = await svc.hello("John") print(ret) asyncio.run(main()) ``` In Javascript: Make sure you load the imjoy-rpc client: ```html ``` Then in a javascript you can do: ```javascript async function main(){ const server = await hyphaWebsocketClient.connectToServer({"server_url": "http://localhost:9000"}) const svc = await server.getService("hello-world") const ret = await svc.hello("John") console.log(ret) } ``` #### Service Authorization In the above example, we registered a public service (`config.visibility = "public"`) which can be access by any clients. There are two ways for providing authorization if you want to limit the service access to a subset of the client. 1. Connecting to the same workspace. In this case, we can set `config.visibility` to `"private"`, the authorization is achived by generating a token from the client which registered the service (via `server.config.workspace` and `server.generate_token()`), and another client can connect to the same workspace using the token (`connect_to_server({"workspace": xxxx, "token": xxxx, "server_url": xxxx})`). 2. Using user context. When registering a service, set `config.require_context` to `True` and `config.visibility` to `"public"` (you can also set `config.visibility` to `"private"` if yo want to limit the access for clients from the same workspace). Each of the service functions will need to accept a keyword argument called `context`. For each service function call the server will be responsible to providing the context information containing `user`. Each service function can then check whether the `context.user.id` is allowed to access the service. On the client which uses the service, it need to login and generate a token from https://ai.imjoy.io/apps/built-in/account-manager.html. The token is then used in `connect_to_server({"token": xxxx, "server_url": xxxx})`. ## Development - We use [`black`](https://github.com/ambv/black) for code formatting. ``` git clone git@github.com:imjoy-team/hypha.git # Enter directory. cd hypha # Install all development requirements and package in development mode. pip3 install -r requirements_dev.txt ``` - Run `tox` to run all tests and lint, including checking that `black` doesn't change any files. %package -n python3-hypha Summary: A serverless application framework for large-scale data management and AI model serving. Provides: python-hypha BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3-pip %description -n python3-hypha ![PyPI](https://img.shields.io/pypi/v/imjoy.svg?style=popout) # Hypha Hypha is an application framework for large-scale data management and AI model serving, it allows creating computational platforms consists of computational and user interface components. Hypha server act as a hub for connecting different components through [imjoy-rpc](https://github.com/imjoy-team/imjoy-rpc). ## Installation Run the following command: ``` pip install -U hypha ``` If you want full support with server-side browser applications, run the following command instead: ``` pip install -U hypha[server-apps] playwright install ``` ## Usage ### Start the server Start the hypha server with the following command: ``` python3 -m hypha.server --host=0.0.0.0 --port=9000 ``` If you want to enable server apps (i.e. browsers running on the server side), run: ``` python -m hypha.server --host=0.0.0.0 --port=9000 --enable-server-apps ``` To test it, you should be able to visit http://localhost:9000 and see the version of the hypha server. In addition to run your own server, you can also use our public testing server: https://ai.imjoy.io ### Connect from a client We currently provide native support for both Python and Javascript client, for other languages, you can use access services using the built-in HTTP proxy of Hypha. Keep the above server running, and now you can connect to it with the `hypha` module under `imjoy-rpc` in a client script. You can either register a service or use an existing service. #### Register a service In Python, you can install the `imjoy-rpc` library: ``` pip install imjoy-rpc ``` Here is a complete client example in Python, you can save the following content as `hello-world-worker.py` and start the server via `python hello-world-worker.py`: ```python import asyncio from imjoy_rpc.hypha import connect_to_server async def start_server(server_url): server = await connect_to_server({"server_url": server_url}) def hello(name): print("Hello " + name) return "Hello " + name await server.register_service({ "name": "Hello World", "id": "hello-world", "config": { "visibility": "public" }, "hello": hello }) print(f"hello world service regisered at workspace: {api.config.workspace}") print(f"Test it with the http proxy: {server_url}/{api.config.workspace}/services/hello-world/hello?name=John") if __name__ == "__main__": server_url = "http://localhost:9000" loop = asyncio.get_event_loop() loop.create_task(start_server(server_url)) loop.run_forever() ``` You don't need to run the client script on the same server, just make sure you change the corresponding `server_url` (to an URL with the external ip or domain name of the server) if you try to connect to the server from another computer. #### Using the service If you keep the above python service running, you can also connect from either a Python client or Javascript client (on the same or a different host): In Python: ``` pip install imjoy-rpc ``` ```python import asyncio from imjoy_rpc.hypha import connect_to_server async def main(): server = await connect_to_server({"server_url": "http://localhost:9000"}) # get an existing service # since hello-world is registered as a public service, we can access it with only the name "hello-world" svc = await server.get_service("hello-world") ret = await svc.hello("John") print(ret) asyncio.run(main()) ``` In Javascript: Make sure you load the imjoy-rpc client: ```html ``` Then in a javascript you can do: ```javascript async function main(){ const server = await hyphaWebsocketClient.connectToServer({"server_url": "http://localhost:9000"}) const svc = await server.getService("hello-world") const ret = await svc.hello("John") console.log(ret) } ``` #### Service Authorization In the above example, we registered a public service (`config.visibility = "public"`) which can be access by any clients. There are two ways for providing authorization if you want to limit the service access to a subset of the client. 1. Connecting to the same workspace. In this case, we can set `config.visibility` to `"private"`, the authorization is achived by generating a token from the client which registered the service (via `server.config.workspace` and `server.generate_token()`), and another client can connect to the same workspace using the token (`connect_to_server({"workspace": xxxx, "token": xxxx, "server_url": xxxx})`). 2. Using user context. When registering a service, set `config.require_context` to `True` and `config.visibility` to `"public"` (you can also set `config.visibility` to `"private"` if yo want to limit the access for clients from the same workspace). Each of the service functions will need to accept a keyword argument called `context`. For each service function call the server will be responsible to providing the context information containing `user`. Each service function can then check whether the `context.user.id` is allowed to access the service. On the client which uses the service, it need to login and generate a token from https://ai.imjoy.io/apps/built-in/account-manager.html. The token is then used in `connect_to_server({"token": xxxx, "server_url": xxxx})`. ## Development - We use [`black`](https://github.com/ambv/black) for code formatting. ``` git clone git@github.com:imjoy-team/hypha.git # Enter directory. cd hypha # Install all development requirements and package in development mode. pip3 install -r requirements_dev.txt ``` - Run `tox` to run all tests and lint, including checking that `black` doesn't change any files. %package help Summary: Development documents and examples for hypha Provides: python3-hypha-doc %description help ![PyPI](https://img.shields.io/pypi/v/imjoy.svg?style=popout) # Hypha Hypha is an application framework for large-scale data management and AI model serving, it allows creating computational platforms consists of computational and user interface components. Hypha server act as a hub for connecting different components through [imjoy-rpc](https://github.com/imjoy-team/imjoy-rpc). ## Installation Run the following command: ``` pip install -U hypha ``` If you want full support with server-side browser applications, run the following command instead: ``` pip install -U hypha[server-apps] playwright install ``` ## Usage ### Start the server Start the hypha server with the following command: ``` python3 -m hypha.server --host=0.0.0.0 --port=9000 ``` If you want to enable server apps (i.e. browsers running on the server side), run: ``` python -m hypha.server --host=0.0.0.0 --port=9000 --enable-server-apps ``` To test it, you should be able to visit http://localhost:9000 and see the version of the hypha server. In addition to run your own server, you can also use our public testing server: https://ai.imjoy.io ### Connect from a client We currently provide native support for both Python and Javascript client, for other languages, you can use access services using the built-in HTTP proxy of Hypha. Keep the above server running, and now you can connect to it with the `hypha` module under `imjoy-rpc` in a client script. You can either register a service or use an existing service. #### Register a service In Python, you can install the `imjoy-rpc` library: ``` pip install imjoy-rpc ``` Here is a complete client example in Python, you can save the following content as `hello-world-worker.py` and start the server via `python hello-world-worker.py`: ```python import asyncio from imjoy_rpc.hypha import connect_to_server async def start_server(server_url): server = await connect_to_server({"server_url": server_url}) def hello(name): print("Hello " + name) return "Hello " + name await server.register_service({ "name": "Hello World", "id": "hello-world", "config": { "visibility": "public" }, "hello": hello }) print(f"hello world service regisered at workspace: {api.config.workspace}") print(f"Test it with the http proxy: {server_url}/{api.config.workspace}/services/hello-world/hello?name=John") if __name__ == "__main__": server_url = "http://localhost:9000" loop = asyncio.get_event_loop() loop.create_task(start_server(server_url)) loop.run_forever() ``` You don't need to run the client script on the same server, just make sure you change the corresponding `server_url` (to an URL with the external ip or domain name of the server) if you try to connect to the server from another computer. #### Using the service If you keep the above python service running, you can also connect from either a Python client or Javascript client (on the same or a different host): In Python: ``` pip install imjoy-rpc ``` ```python import asyncio from imjoy_rpc.hypha import connect_to_server async def main(): server = await connect_to_server({"server_url": "http://localhost:9000"}) # get an existing service # since hello-world is registered as a public service, we can access it with only the name "hello-world" svc = await server.get_service("hello-world") ret = await svc.hello("John") print(ret) asyncio.run(main()) ``` In Javascript: Make sure you load the imjoy-rpc client: ```html ``` Then in a javascript you can do: ```javascript async function main(){ const server = await hyphaWebsocketClient.connectToServer({"server_url": "http://localhost:9000"}) const svc = await server.getService("hello-world") const ret = await svc.hello("John") console.log(ret) } ``` #### Service Authorization In the above example, we registered a public service (`config.visibility = "public"`) which can be access by any clients. There are two ways for providing authorization if you want to limit the service access to a subset of the client. 1. Connecting to the same workspace. In this case, we can set `config.visibility` to `"private"`, the authorization is achived by generating a token from the client which registered the service (via `server.config.workspace` and `server.generate_token()`), and another client can connect to the same workspace using the token (`connect_to_server({"workspace": xxxx, "token": xxxx, "server_url": xxxx})`). 2. Using user context. When registering a service, set `config.require_context` to `True` and `config.visibility` to `"public"` (you can also set `config.visibility` to `"private"` if yo want to limit the access for clients from the same workspace). Each of the service functions will need to accept a keyword argument called `context`. For each service function call the server will be responsible to providing the context information containing `user`. Each service function can then check whether the `context.user.id` is allowed to access the service. On the client which uses the service, it need to login and generate a token from https://ai.imjoy.io/apps/built-in/account-manager.html. The token is then used in `connect_to_server({"token": xxxx, "server_url": xxxx})`. ## Development - We use [`black`](https://github.com/ambv/black) for code formatting. ``` git clone git@github.com:imjoy-team/hypha.git # Enter directory. cd hypha # Install all development requirements and package in development mode. pip3 install -r requirements_dev.txt ``` - Run `tox` to run all tests and lint, including checking that `black` doesn't change any files. %prep %autosetup -n hypha-0.15.8 %build %py3_build %install %py3_install install -d -m755 %{buildroot}/%{_pkgdocdir} if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi pushd %{buildroot} if [ -d usr/lib ]; then find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/lib64 ]; then find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/bin ]; then find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/sbin ]; then find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst fi touch doclist.lst if [ -d usr/share/man ]; then find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst fi popd mv %{buildroot}/filelist.lst . mv %{buildroot}/doclist.lst . %files -n python3-hypha -f filelist.lst %dir %{python3_sitelib}/* %files help -f doclist.lst %{_docdir}/* %changelog * Tue May 30 2023 Python_Bot - 0.15.8-1 - Package Spec generated