pyrpc-flask 0.1.0a1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,154 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ !docs/lib/
19
+ lib64/
20
+ parts/
21
+ sdist/
22
+ var/
23
+ wheels/
24
+ share/python-wheels/
25
+ *.egg-info/
26
+ .installed.cfg
27
+ *.egg
28
+ MANIFEST
29
+
30
+ # PyInstaller
31
+ # Used for packaging Python scripts into standalone executables
32
+ *.manifest
33
+ *.spec
34
+
35
+ # Installer logs
36
+ pip-log.txt
37
+ pip-delete-this-directory.txt
38
+
39
+ # Unit test / coverage reports
40
+ htmlcov/
41
+ .tox/
42
+ .nox/
43
+ .coverage
44
+ .coverage.*
45
+ .cache
46
+ nosetests.xml
47
+ coverage.xml
48
+ *.cover
49
+ *.py,cover
50
+ .stats
51
+ .hypothesis/
52
+ .pytest_cache/
53
+ pytestdebug.log
54
+
55
+ # Translations
56
+ *.mo
57
+ *.pot
58
+
59
+ # Django stuff:
60
+ *.log
61
+ local_settings.py
62
+ db.sqlite3
63
+ db.sqlite3-journal
64
+
65
+ # Flask stuff:
66
+ instance/
67
+ .webassets-cache
68
+
69
+ # Scrapy stuff:
70
+ .scrapy
71
+
72
+ # Sphinx documentation
73
+ docs/_build/
74
+
75
+ # PyBuilder
76
+ .pybuilder/
77
+ target/
78
+
79
+ # Jupyter Notebook
80
+ .ipynb_checkpoints
81
+
82
+ # IPython
83
+ profile_default/
84
+ ipython_config.py
85
+
86
+ # pyenv
87
+ # Project-specific python versions
88
+ # .python-version
89
+
90
+ # pipenv
91
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92
+ # However, in case of collaboration, if Pipfile.lock (and requirements.txt) are not
93
+ # preferred, then add them into the ignore list.
94
+ # Pipfile.lock
95
+
96
+ # poetry
97
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
98
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
99
+ # poetry.lock
100
+
101
+ # pdm
102
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
103
+ # pdm.lock
104
+ # .pdm-python
105
+
106
+ # PEP 582; used by e.g. github.com/fannheyward/coc-pyright
107
+ __pypackages__/
108
+
109
+ # Celery stuff
110
+ celerybeat-schedule
111
+ celerybeat.pid
112
+
113
+ # SageMath parsed files
114
+ *.sage.py
115
+
116
+ # Environments
117
+ .env
118
+ .venv
119
+ env/
120
+ venv/
121
+ ENV/
122
+ env.bak/
123
+ venv.bak/
124
+
125
+ # Spyder project settings
126
+ .spyderproject
127
+ .spyderformpoint
128
+
129
+ # Rope project settings
130
+ .ropeproject
131
+
132
+ # mkdocs documentation
133
+ /site
134
+
135
+ # mypy
136
+ .mypy_cache/
137
+ .dmypy.json
138
+ dmypy.json
139
+
140
+ # Pyre type checker
141
+ .pyre/
142
+
143
+ # pytype static type analyzer
144
+ .pytype/
145
+
146
+ # Cython debug symbols
147
+ cython_debug/
148
+
149
+ # OS X
150
+ .DS_Store
151
+
152
+ # Node modules
153
+ node_modules
154
+ dist
@@ -0,0 +1,7 @@
1
+ Metadata-Version: 2.4
2
+ Name: pyrpc-flask
3
+ Version: 0.1.0a1
4
+ Summary: Flask adapter for pyRPC
5
+ Requires-Python: >=3.11
6
+ Requires-Dist: flask>=3.0.0
7
+ Requires-Dist: pyrpc-core
@@ -0,0 +1,16 @@
1
+ [project]
2
+ name = "pyrpc-flask"
3
+ version = "0.1.0-alpha.1"
4
+ description = "Flask adapter for pyRPC"
5
+ requires-python = ">=3.11"
6
+ dependencies = [
7
+ "pyrpc-core",
8
+ "flask>=3.0.0",
9
+ ]
10
+
11
+ [build-system]
12
+ requires = ["hatchling"]
13
+ build-backend = "hatchling.build"
14
+
15
+ [tool.hatch.build.targets.wheel]
16
+ packages = ["src/pyrpc_flask"]
@@ -0,0 +1,31 @@
1
+ from pyrpc_core import handle_request, Router, rpc, model
2
+ from typing import Any, Optional
3
+
4
+
5
+ def mount_flask(app: Any, router: Optional[Router] = None) -> None:
6
+ """
7
+ Mount the pyRPC RPC endpoint onto a Flask application.
8
+
9
+ Args:
10
+ app: A Flask application instance.
11
+ router: An optional pyRPC Router. If None, the global default router is used.
12
+ """
13
+ # Import inside function to avoid hard dependency on Flask if not used
14
+ from flask import request, jsonify
15
+ import anyio
16
+
17
+ @app.route("/rpc", methods=["POST"])
18
+ def rpc_endpoint():
19
+ payload = request.get_json(force=True)
20
+ # Flask is generally sync, so we use anyio.run to execute the async interpreter
21
+ response_dict = anyio.run(handle_request, payload, router)
22
+ return jsonify(response_dict)
23
+
24
+ @app.route("/rpc", methods=["GET"])
25
+ def introspection_endpoint():
26
+ from pyrpc_core import get_registry_schema
27
+ schemas = get_registry_schema(router)
28
+ return jsonify({
29
+ name: schema.model_dump() if hasattr(schema, "model_dump") else schema
30
+ for name, schema in schemas.items()
31
+ })