Comments (3)
I'm sorry @BDadmehr0 , but I don't think your proposed solution is what I'm looking for. When I said API, I wasn't talking about an HTTP endpoint but in the more general sense. Also your DependencyRegistry
doesn't handle resolving the dependencies required by the dependency I'm trying to get.
from sanic-ext.
Certainly! Here's an example of an API that takes a type and attempts to retrieve the corresponding dependency from the registry:
class DependencyRegistry:
def __init__(self):
self._registry = {}
def register_dependency(self, dependency_type, dependency):
self._registry[dependency_type] = dependency
def get_dependency(self, dependency_type):
return self._registry.get(dependency_type)
class MyService:
def __init__(self, connection: DBConnection):
self._connection = connection
app = Sanic("my-app")
registry = DependencyRegistry()
@app.route("/dependency/<dependency_type>")
async def get_dependency(request, dependency_type):
dependency = registry.get_dependency(dependency_type)
if dependency is None:
return json({"error": "Dependency not found"}, status=404)
return json({"dependency": str(dependency)})
@app.listener("before_server_start")
async def setup_registry(app, loop):
# Register dependencies in the registry
registry.register_dependency(DBConnection, "database_connection")
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8000)
In this example, we have a DependencyRegistry
class that maintains a dictionary _registry
for storing dependencies. It provides methods to register and retrieve dependencies.
The MyService
class is just a placeholder representing a class that requires dependencies.
The Sanic app (app
) is created with the name "my-app". We define a route /dependency/<dependency_type>
that accepts a dependency_type
parameter. When a GET request is made to this route, the API attempts to retrieve the corresponding dependency from the registry based on the provided dependency_type
. If the dependency is found, it is returned in the response. Otherwise, a 404 error response is returned.
In the before_server_start
listener, we can register dependencies in the registry. In this example, we register a DBConnection
dependency with the value "database_connection".
You can modify and expand this example to suit your specific needs.
from sanic-ext.
Sorry, but I can't think of any other solution
from sanic-ext.
Related Issues (20)
- [Bug] The error for not having Jinja installed is confusing
- [Bug] Wrong default variables type of Server object.
- [Feature Request] Blueprints cannot access the 'decorator way' of managing / rendering templates
- Allow the option to define a template directory in a blueprint HOT 1
- [Bug] Dependency injection not working for requests received during server is initializing HOT 1
- [Question] How to set field description on data class?
- [Question] OpenAPI spec available on all subdomains, and route exclusion without decorators does not seem to work.
- [Bug] Dependeny Injection throw exceptions by default if @classmethod constructors don't return value/objects
- [Feature Request]
- [Bug] OpenAPI definition does not include placeholder for "headers"
- [Bug] Json validator throws 500 instead of 400
- [Feature Request] Response Compression
- [Bug] Can't use `pydantic>=2.0` model in OpenAPI definition HOT 1
- [Bug] Can't document/exclude websocket routes with OpenAPI decorator
- [Bug] Subheader "parameter" missing in sanic extensions document
- [Bug] Can't apply openapi decorators to blueprintss' routes
- [Bug]TypeError: listener() got an unexpected keyword argument 'priority' HOT 1
- [Bug] Documentation: dead link to the setting
- Query params validation is completely broken HOT 2
- Question regarding licensing info
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 sanic-ext.