diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | python-hypha.spec | 564 | ||||
-rw-r--r-- | sources | 1 |
3 files changed, 566 insertions, 0 deletions
@@ -0,0 +1 @@ +/hypha-0.15.8.tar.gz diff --git a/python-hypha.spec b/python-hypha.spec new file mode 100644 index 0000000..5ce6ee5 --- /dev/null +++ b/python-hypha.spec @@ -0,0 +1,564 @@ +%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 + +# 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 +<script src="https://cdn.jsdelivr.net/npm/imjoy-rpc@0.5.6/dist/hypha-rpc-websocket.min.js"></script> +``` + +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 + +# 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 +<script src="https://cdn.jsdelivr.net/npm/imjoy-rpc@0.5.6/dist/hypha-rpc-websocket.min.js"></script> +``` + +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 + +# 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 +<script src="https://cdn.jsdelivr.net/npm/imjoy-rpc@0.5.6/dist/hypha-rpc-websocket.min.js"></script> +``` + +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 +* Mon May 15 2023 Python_Bot <Python_Bot@openeuler.org> - 0.15.8-1 +- Package Spec generated @@ -0,0 +1 @@ +b45bcb483f20cf0671d71486071838f0 hypha-0.15.8.tar.gz |