Comments (6)
It seems good to me, even the presentation of the overloadings, 👍
from flask-jsonrpc.
Not sure about "alias" keyword though, maybe it there will be "needed" for other feature in the future, but not sure what else to suggest.
overload_set="foo.bar"
might be correctly specific, but maybe too cryptic?
group="foo.bar"
could be another alternative, though not sure why it's better than alias
.
from flask-jsonrpc.
I was thought in some think like that:
from __future__ import annotations
from collections.abc import Sequence
from typing import overload
from flask import Flask
from flask_jsonrpc import JSONRPC
app = Flask('application')
jsonrpc = JSONRPC(app, '/api', enable_web_browsable_api=True)
@overload
def double(input_: int) -> int:
...
@overload
def double(input_: Sequence[int]) -> list[int]:
...
@jsonrpc.method('App.double')
def double(input_: int | Sequence[int]) -> int | list[int]:
if isinstance(input_, Sequence):
return [i * 2 for i in input_]
return input_ * 2
from flask-jsonrpc.
The idea of overloading was to avoid having if isinstance...
logic inside function.
Maybe I do not follow this example. What will be in the bodies of these two @overload
'ed functions if I see all code in @jsonrpc.method('App.double')
then?
from flask-jsonrpc.
Maybe I do not follow this example. What will be in the bodies of these two
@overload
'ed functions if I see all code in@jsonrpc.method('App.double')
then?
No, did you see it right, I didn't see that were two completely different functions, and I thought about the typing.overload
support that can be used with typing.TypeGuard
[1] together.
In that case, I have a bad feeling regarding it, Flask doesn't allow mapping two functions to one URL, the opposite is true. Besides that, to do that, we will need to analyze the input (payload) and choice the right function to trigger, and further more, changing the way of register of functions in Flask-JSONRPC, from Dict[str, Callable]
to Dict[str, List[Callable]]
.
[1] - https://peps.python.org/pep-0647/
from flask-jsonrpc.
Flask doesn't allow mapping two functions to one URL
OK, could then some sort of jsonrpc.register_overload_set('foo.bar')
(not an decorator) be used to register "generated" single method with single URL to make Flask happy?
Then, inside that "generated" method implementation, it would select best match from @jsonrpc.overloaded_method('foo.bar')'
s for given argument set.
Not sure how would @jwt_required()
would for these "not-really-a-flask-views"?
from flask-jsonrpc.
Related Issues (20)
- Logging approach creates redundant events on each exception HOT 2
- werkzeug.exceptions.BadRequest (400) is converted to internal server error (500) HOT 1
- App.wellcome() is visible in Dashboard but unaccessible? HOT 2
- Directories in API browser HOT 8
- Feature reqest: do not allow to invoke method as JSON-RPC "Notification" HOT 2
- API browser does not work with flask-jwt HOT 4
- API browser does not support more complex type anotations
- Default values for parameters in API Browser HOT 3
- Feature request: package description and package documentation page
- Feature request: Markdown/HTML support for descriptions HOT 2
- Allow to use custom error codes for unexpected errors HOT 1
- Feature request: use Annotated type hint for per-field documentation HOT 2
- Feature request: allow deeper view nesting in API Browser HOT 2
- The API Browser doesn't support method without types hints
- Unified API Browser in case of using modular server
- Add support to Python 3.11
- Goodbye Python 3.6
- JSON Schema Service Descriptor
- Can not import in windows HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from flask-jsonrpc.