summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-05-10 07:24:20 +0000
committerCoprDistGit <infra@openeuler.org>2023-05-10 07:24:20 +0000
commiteaa74c72d690bc17e0ab26392b05e06fc634e098 (patch)
tree83836979f4be30cc5d9ab96ed493f99e2b5a102c
parent580af1bcb9926c4c290a63bd0ec26f81fe6aadd1 (diff)
automatic import of python-flask-shell2http
-rw-r--r--.gitignore1
-rw-r--r--python-flask-shell2http.spec505
-rw-r--r--sources1
3 files changed, 507 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..617d37c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/Flask-Shell2HTTP-1.9.1.tar.gz
diff --git a/python-flask-shell2http.spec b/python-flask-shell2http.spec
new file mode 100644
index 0000000..e5a3c8a
--- /dev/null
+++ b/python-flask-shell2http.spec
@@ -0,0 +1,505 @@
+%global _empty_manifest_terminate_build 0
+Name: python-Flask-Shell2HTTP
+Version: 1.9.1
+Release: 1
+Summary: A minimalist REST API wrapper for python's subprocess API.
+License: BSD
+URL: https://github.com/eshaan7/flask-shell2http
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/58/46/7f7341c054f13ac6ba2bbebb75a71fba08438bc952cc442848a65d865d1a/Flask-Shell2HTTP-1.9.1.tar.gz
+BuildArch: noarch
+
+Requires: python3-flask
+Requires: python3-blinker
+Requires: python3-flask-executor
+Requires: python3-flask
+Requires: python3-blinker
+Requires: python3-flask-executor
+Requires: python3-flask-testing
+Requires: python3-codecov
+Requires: python3-tox
+Requires: python3-tox-gh-actions
+Requires: python3-black
+Requires: python3-flake8
+Requires: python3-pre-commit
+
+%description
+[![Get Support](https://xscode.com/assets/promo-banner.svg)](https://xscode.com/eshaan7/Flask-Shell2HTTP)
+
+_For urgent issues and priority support, visit [https://xscode.com/eshaan7/flask-shell2http](https://xscode.com/eshaan7/flask-shell2http)._
+
+# Flask-Shell2HTTP
+
+[![flask-shell2http on pypi](https://img.shields.io/pypi/v/flask-shell2http)](https://pypi.org/project/Flask-Shell2HTTP/)
+[![Build Status](https://github.com/Eshaan7/flask-shell2http/workflows/Linter%20&%20Tests/badge.svg?branch=master)](https://github.com/Eshaan7/flask-shell2http/actions?query=workflow%3A%22Linter+%26+Tests%22)
+[![codecov](https://codecov.io/gh/Eshaan7/Flask-Shell2HTTP/branch/master/graph/badge.svg?token=UQ43PYQPMR)](https://codecov.io/gh/Eshaan7/flask-shell2http/)
+[![CodeFactor](https://www.codefactor.io/repository/github/eshaan7/flask-shell2http/badge)](https://www.codefactor.io/repository/github/eshaan7/flask-shell2http)
+<a href="https://lgtm.com/projects/g/Eshaan7/Flask-Shell2HTTP/context:python">
+<img alt="Language grade: Python" src="https://img.shields.io/lgtm/grade/python/g/Eshaan7/Flask-Shell2HTTP.svg?logo=lgtm&logoWidth=18"/>
+</a>
+
+A minimalist [Flask](https://github.com/pallets/flask) extension that serves as a RESTful/HTTP wrapper for python's subprocess API.
+
+- **Convert any command-line tool into a REST API service.**
+- Execute pre-defined shell commands asynchronously and securely via flask's endpoints with dynamic arguments, file upload, callback function capabilities.
+- Designed for binary to binary/HTTP communication, development, prototyping, remote control and [more](https://flask-shell2http.readthedocs.io/en/stable/Examples.html).
+
+## Use Cases
+
+- Set a script that runs on a succesful POST request to an endpoint of your choice. See [Example code](examples/run_script.py).
+- Map a base command to an endpoint and pass dynamic arguments to it. See [Example code](examples/basic.py).
+- Can also process multiple uploaded files in one command. See [Example code](examples/multiple_files.py).
+- This is useful for internal docker-to-docker communications if you have different binaries distributed in micro-containers. See [real-life example](https://github.com/intelowlproject/IntelOwl/blob/master/integrations/static_analyzers/app.py).
+- You can define a callback function/ use signals to listen for process completion. See [Example code](examples/with_callback.py).
+ - Maybe want to pass some additional context to the callback function ?
+ - Maybe intercept on completion and update the result ? See [Example code](examples/custom_save_fn.py)
+- You can also apply [View Decorators](https://flask.palletsprojects.com/en/1.1.x/patterns/viewdecorators/) to the exposed endpoint. See [Example code](examples/with_decorators.py).
+
+> Note: This extension is primarily meant for executing long-running
+> shell commands/scripts (like nmap, code-analysis' tools) in background from an HTTP request and getting the result at a later time.
+
+## Documentation
+
+[![Documentation Status](https://readthedocs.org/projects/flask-shell2http/badge/?version=latest)](https://flask-shell2http.readthedocs.io/en/latest/?badge=latest)
+
+- Read the [Quickstart](https://flask-shell2http.readthedocs.io/en/stable/Quickstart.html) from the [documentation](https://flask-shell2http.readthedocs.io/) to get started!
+- I also highly recommend the [Examples](https://flask-shell2http.readthedocs.io/en/stable/Examples.html) section.
+- [CHANGELOG](https://github.com/eshaan7/Flask-Shell2HTTP/blob/master/.github/CHANGELOG.md).
+
+## Quick Start
+
+##### Dependencies
+
+- Python: `>=v3.6`
+- [Flask](https://pypi.org/project/Flask/)
+- [Flask-Executor](https://pypi.org/project/Flask-Executor)
+
+##### Installation
+
+```bash
+$ pip install flask flask_shell2http
+```
+
+##### Example Program
+
+Create a file called `app.py`.
+
+```python
+from flask import Flask
+from flask_executor import Executor
+from flask_shell2http import Shell2HTTP
+
+# Flask application instance
+app = Flask(__name__)
+
+executor = Executor(app)
+shell2http = Shell2HTTP(app=app, executor=executor, base_url_prefix="/commands/")
+
+def my_callback_fn(context, future):
+ # optional user-defined callback function
+ print(context, future.result())
+
+shell2http.register_command(endpoint="saythis", command_name="echo", callback_fn=my_callback_fn, decorators=[])
+```
+
+Run the application server with, `$ flask run -p 4000`.
+
+With <10 lines of code, we succesfully mapped the shell command `echo` to the endpoint `/commands/saythis`.
+
+##### Making HTTP calls
+
+This section demonstrates how we can now call/ execute commands over HTTP that we just mapped in the [example](#example-program) above.
+
+```bash
+$ curl -X POST -H 'Content-Type: application/json' -d '{"args": ["Hello", "World!"]}' http://localhost:4000/commands/saythis
+```
+
+<details><summary>or using python's requests module,</summary>
+
+```python
+# You can also add a timeout if you want, default value is 3600 seconds
+data = {"args": ["Hello", "World!"], "timeout": 60}
+resp = requests.post("http://localhost:4000/commands/saythis", json=data)
+print("Result:", resp.json())
+```
+
+</details>
+
+> Note: You can see the JSON schema for the POST request [here](https://github.com/Eshaan7/Flask-Shell2HTTP/blob/master/post-request-schema.json).
+
+returns JSON,
+
+```json
+{
+ "key": "ddbe0a94",
+ "result_url": "http://localhost:4000/commands/saythis?key=ddbe0a94&wait=false",
+ "status": "running"
+}
+```
+
+Then using this `key` you can query for the result or just by going to the `result_url`,
+
+```bash
+$ curl http://localhost:4000/commands/saythis?key=ddbe0a94&wait=true # wait=true so we do not have to poll
+```
+
+Returns result in JSON,
+
+```json
+{
+ "report": "Hello World!\n",
+ "key": "ddbe0a94",
+ "start_time": 1593019807.7754705,
+ "end_time": 1593019807.782958,
+ "process_time": 0.00748753547668457,
+ "returncode": 0,
+ "error": null
+}
+```
+
+## Inspiration
+
+This was initially made to integrate various command-line tools easily with [Intel Owl](https://github.com/intelowlproject/IntelOwl), which I am working on as part of Google Summer of Code.
+
+The name was inspired by the awesome folks over at [msoap/shell2http](https://github.com/msoap/shell2http).
+
+
+
+
+%package -n python3-Flask-Shell2HTTP
+Summary: A minimalist REST API wrapper for python's subprocess API.
+Provides: python-Flask-Shell2HTTP
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-Flask-Shell2HTTP
+[![Get Support](https://xscode.com/assets/promo-banner.svg)](https://xscode.com/eshaan7/Flask-Shell2HTTP)
+
+_For urgent issues and priority support, visit [https://xscode.com/eshaan7/flask-shell2http](https://xscode.com/eshaan7/flask-shell2http)._
+
+# Flask-Shell2HTTP
+
+[![flask-shell2http on pypi](https://img.shields.io/pypi/v/flask-shell2http)](https://pypi.org/project/Flask-Shell2HTTP/)
+[![Build Status](https://github.com/Eshaan7/flask-shell2http/workflows/Linter%20&%20Tests/badge.svg?branch=master)](https://github.com/Eshaan7/flask-shell2http/actions?query=workflow%3A%22Linter+%26+Tests%22)
+[![codecov](https://codecov.io/gh/Eshaan7/Flask-Shell2HTTP/branch/master/graph/badge.svg?token=UQ43PYQPMR)](https://codecov.io/gh/Eshaan7/flask-shell2http/)
+[![CodeFactor](https://www.codefactor.io/repository/github/eshaan7/flask-shell2http/badge)](https://www.codefactor.io/repository/github/eshaan7/flask-shell2http)
+<a href="https://lgtm.com/projects/g/Eshaan7/Flask-Shell2HTTP/context:python">
+<img alt="Language grade: Python" src="https://img.shields.io/lgtm/grade/python/g/Eshaan7/Flask-Shell2HTTP.svg?logo=lgtm&logoWidth=18"/>
+</a>
+
+A minimalist [Flask](https://github.com/pallets/flask) extension that serves as a RESTful/HTTP wrapper for python's subprocess API.
+
+- **Convert any command-line tool into a REST API service.**
+- Execute pre-defined shell commands asynchronously and securely via flask's endpoints with dynamic arguments, file upload, callback function capabilities.
+- Designed for binary to binary/HTTP communication, development, prototyping, remote control and [more](https://flask-shell2http.readthedocs.io/en/stable/Examples.html).
+
+## Use Cases
+
+- Set a script that runs on a succesful POST request to an endpoint of your choice. See [Example code](examples/run_script.py).
+- Map a base command to an endpoint and pass dynamic arguments to it. See [Example code](examples/basic.py).
+- Can also process multiple uploaded files in one command. See [Example code](examples/multiple_files.py).
+- This is useful for internal docker-to-docker communications if you have different binaries distributed in micro-containers. See [real-life example](https://github.com/intelowlproject/IntelOwl/blob/master/integrations/static_analyzers/app.py).
+- You can define a callback function/ use signals to listen for process completion. See [Example code](examples/with_callback.py).
+ - Maybe want to pass some additional context to the callback function ?
+ - Maybe intercept on completion and update the result ? See [Example code](examples/custom_save_fn.py)
+- You can also apply [View Decorators](https://flask.palletsprojects.com/en/1.1.x/patterns/viewdecorators/) to the exposed endpoint. See [Example code](examples/with_decorators.py).
+
+> Note: This extension is primarily meant for executing long-running
+> shell commands/scripts (like nmap, code-analysis' tools) in background from an HTTP request and getting the result at a later time.
+
+## Documentation
+
+[![Documentation Status](https://readthedocs.org/projects/flask-shell2http/badge/?version=latest)](https://flask-shell2http.readthedocs.io/en/latest/?badge=latest)
+
+- Read the [Quickstart](https://flask-shell2http.readthedocs.io/en/stable/Quickstart.html) from the [documentation](https://flask-shell2http.readthedocs.io/) to get started!
+- I also highly recommend the [Examples](https://flask-shell2http.readthedocs.io/en/stable/Examples.html) section.
+- [CHANGELOG](https://github.com/eshaan7/Flask-Shell2HTTP/blob/master/.github/CHANGELOG.md).
+
+## Quick Start
+
+##### Dependencies
+
+- Python: `>=v3.6`
+- [Flask](https://pypi.org/project/Flask/)
+- [Flask-Executor](https://pypi.org/project/Flask-Executor)
+
+##### Installation
+
+```bash
+$ pip install flask flask_shell2http
+```
+
+##### Example Program
+
+Create a file called `app.py`.
+
+```python
+from flask import Flask
+from flask_executor import Executor
+from flask_shell2http import Shell2HTTP
+
+# Flask application instance
+app = Flask(__name__)
+
+executor = Executor(app)
+shell2http = Shell2HTTP(app=app, executor=executor, base_url_prefix="/commands/")
+
+def my_callback_fn(context, future):
+ # optional user-defined callback function
+ print(context, future.result())
+
+shell2http.register_command(endpoint="saythis", command_name="echo", callback_fn=my_callback_fn, decorators=[])
+```
+
+Run the application server with, `$ flask run -p 4000`.
+
+With <10 lines of code, we succesfully mapped the shell command `echo` to the endpoint `/commands/saythis`.
+
+##### Making HTTP calls
+
+This section demonstrates how we can now call/ execute commands over HTTP that we just mapped in the [example](#example-program) above.
+
+```bash
+$ curl -X POST -H 'Content-Type: application/json' -d '{"args": ["Hello", "World!"]}' http://localhost:4000/commands/saythis
+```
+
+<details><summary>or using python's requests module,</summary>
+
+```python
+# You can also add a timeout if you want, default value is 3600 seconds
+data = {"args": ["Hello", "World!"], "timeout": 60}
+resp = requests.post("http://localhost:4000/commands/saythis", json=data)
+print("Result:", resp.json())
+```
+
+</details>
+
+> Note: You can see the JSON schema for the POST request [here](https://github.com/Eshaan7/Flask-Shell2HTTP/blob/master/post-request-schema.json).
+
+returns JSON,
+
+```json
+{
+ "key": "ddbe0a94",
+ "result_url": "http://localhost:4000/commands/saythis?key=ddbe0a94&wait=false",
+ "status": "running"
+}
+```
+
+Then using this `key` you can query for the result or just by going to the `result_url`,
+
+```bash
+$ curl http://localhost:4000/commands/saythis?key=ddbe0a94&wait=true # wait=true so we do not have to poll
+```
+
+Returns result in JSON,
+
+```json
+{
+ "report": "Hello World!\n",
+ "key": "ddbe0a94",
+ "start_time": 1593019807.7754705,
+ "end_time": 1593019807.782958,
+ "process_time": 0.00748753547668457,
+ "returncode": 0,
+ "error": null
+}
+```
+
+## Inspiration
+
+This was initially made to integrate various command-line tools easily with [Intel Owl](https://github.com/intelowlproject/IntelOwl), which I am working on as part of Google Summer of Code.
+
+The name was inspired by the awesome folks over at [msoap/shell2http](https://github.com/msoap/shell2http).
+
+
+
+
+%package help
+Summary: Development documents and examples for Flask-Shell2HTTP
+Provides: python3-Flask-Shell2HTTP-doc
+%description help
+[![Get Support](https://xscode.com/assets/promo-banner.svg)](https://xscode.com/eshaan7/Flask-Shell2HTTP)
+
+_For urgent issues and priority support, visit [https://xscode.com/eshaan7/flask-shell2http](https://xscode.com/eshaan7/flask-shell2http)._
+
+# Flask-Shell2HTTP
+
+[![flask-shell2http on pypi](https://img.shields.io/pypi/v/flask-shell2http)](https://pypi.org/project/Flask-Shell2HTTP/)
+[![Build Status](https://github.com/Eshaan7/flask-shell2http/workflows/Linter%20&%20Tests/badge.svg?branch=master)](https://github.com/Eshaan7/flask-shell2http/actions?query=workflow%3A%22Linter+%26+Tests%22)
+[![codecov](https://codecov.io/gh/Eshaan7/Flask-Shell2HTTP/branch/master/graph/badge.svg?token=UQ43PYQPMR)](https://codecov.io/gh/Eshaan7/flask-shell2http/)
+[![CodeFactor](https://www.codefactor.io/repository/github/eshaan7/flask-shell2http/badge)](https://www.codefactor.io/repository/github/eshaan7/flask-shell2http)
+<a href="https://lgtm.com/projects/g/Eshaan7/Flask-Shell2HTTP/context:python">
+<img alt="Language grade: Python" src="https://img.shields.io/lgtm/grade/python/g/Eshaan7/Flask-Shell2HTTP.svg?logo=lgtm&logoWidth=18"/>
+</a>
+
+A minimalist [Flask](https://github.com/pallets/flask) extension that serves as a RESTful/HTTP wrapper for python's subprocess API.
+
+- **Convert any command-line tool into a REST API service.**
+- Execute pre-defined shell commands asynchronously and securely via flask's endpoints with dynamic arguments, file upload, callback function capabilities.
+- Designed for binary to binary/HTTP communication, development, prototyping, remote control and [more](https://flask-shell2http.readthedocs.io/en/stable/Examples.html).
+
+## Use Cases
+
+- Set a script that runs on a succesful POST request to an endpoint of your choice. See [Example code](examples/run_script.py).
+- Map a base command to an endpoint and pass dynamic arguments to it. See [Example code](examples/basic.py).
+- Can also process multiple uploaded files in one command. See [Example code](examples/multiple_files.py).
+- This is useful for internal docker-to-docker communications if you have different binaries distributed in micro-containers. See [real-life example](https://github.com/intelowlproject/IntelOwl/blob/master/integrations/static_analyzers/app.py).
+- You can define a callback function/ use signals to listen for process completion. See [Example code](examples/with_callback.py).
+ - Maybe want to pass some additional context to the callback function ?
+ - Maybe intercept on completion and update the result ? See [Example code](examples/custom_save_fn.py)
+- You can also apply [View Decorators](https://flask.palletsprojects.com/en/1.1.x/patterns/viewdecorators/) to the exposed endpoint. See [Example code](examples/with_decorators.py).
+
+> Note: This extension is primarily meant for executing long-running
+> shell commands/scripts (like nmap, code-analysis' tools) in background from an HTTP request and getting the result at a later time.
+
+## Documentation
+
+[![Documentation Status](https://readthedocs.org/projects/flask-shell2http/badge/?version=latest)](https://flask-shell2http.readthedocs.io/en/latest/?badge=latest)
+
+- Read the [Quickstart](https://flask-shell2http.readthedocs.io/en/stable/Quickstart.html) from the [documentation](https://flask-shell2http.readthedocs.io/) to get started!
+- I also highly recommend the [Examples](https://flask-shell2http.readthedocs.io/en/stable/Examples.html) section.
+- [CHANGELOG](https://github.com/eshaan7/Flask-Shell2HTTP/blob/master/.github/CHANGELOG.md).
+
+## Quick Start
+
+##### Dependencies
+
+- Python: `>=v3.6`
+- [Flask](https://pypi.org/project/Flask/)
+- [Flask-Executor](https://pypi.org/project/Flask-Executor)
+
+##### Installation
+
+```bash
+$ pip install flask flask_shell2http
+```
+
+##### Example Program
+
+Create a file called `app.py`.
+
+```python
+from flask import Flask
+from flask_executor import Executor
+from flask_shell2http import Shell2HTTP
+
+# Flask application instance
+app = Flask(__name__)
+
+executor = Executor(app)
+shell2http = Shell2HTTP(app=app, executor=executor, base_url_prefix="/commands/")
+
+def my_callback_fn(context, future):
+ # optional user-defined callback function
+ print(context, future.result())
+
+shell2http.register_command(endpoint="saythis", command_name="echo", callback_fn=my_callback_fn, decorators=[])
+```
+
+Run the application server with, `$ flask run -p 4000`.
+
+With <10 lines of code, we succesfully mapped the shell command `echo` to the endpoint `/commands/saythis`.
+
+##### Making HTTP calls
+
+This section demonstrates how we can now call/ execute commands over HTTP that we just mapped in the [example](#example-program) above.
+
+```bash
+$ curl -X POST -H 'Content-Type: application/json' -d '{"args": ["Hello", "World!"]}' http://localhost:4000/commands/saythis
+```
+
+<details><summary>or using python's requests module,</summary>
+
+```python
+# You can also add a timeout if you want, default value is 3600 seconds
+data = {"args": ["Hello", "World!"], "timeout": 60}
+resp = requests.post("http://localhost:4000/commands/saythis", json=data)
+print("Result:", resp.json())
+```
+
+</details>
+
+> Note: You can see the JSON schema for the POST request [here](https://github.com/Eshaan7/Flask-Shell2HTTP/blob/master/post-request-schema.json).
+
+returns JSON,
+
+```json
+{
+ "key": "ddbe0a94",
+ "result_url": "http://localhost:4000/commands/saythis?key=ddbe0a94&wait=false",
+ "status": "running"
+}
+```
+
+Then using this `key` you can query for the result or just by going to the `result_url`,
+
+```bash
+$ curl http://localhost:4000/commands/saythis?key=ddbe0a94&wait=true # wait=true so we do not have to poll
+```
+
+Returns result in JSON,
+
+```json
+{
+ "report": "Hello World!\n",
+ "key": "ddbe0a94",
+ "start_time": 1593019807.7754705,
+ "end_time": 1593019807.782958,
+ "process_time": 0.00748753547668457,
+ "returncode": 0,
+ "error": null
+}
+```
+
+## Inspiration
+
+This was initially made to integrate various command-line tools easily with [Intel Owl](https://github.com/intelowlproject/IntelOwl), which I am working on as part of Google Summer of Code.
+
+The name was inspired by the awesome folks over at [msoap/shell2http](https://github.com/msoap/shell2http).
+
+
+
+
+%prep
+%autosetup -n Flask-Shell2HTTP-1.9.1
+
+%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-Flask-Shell2HTTP -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Wed May 10 2023 Python_Bot <Python_Bot@openeuler.org> - 1.9.1-1
+- Package Spec generated
diff --git a/sources b/sources
new file mode 100644
index 0000000..a959642
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+6c447332e30ce7823746d7d53f34f132 Flask-Shell2HTTP-1.9.1.tar.gz