Uvicorn
Created at | 18 Feb 2024 |
Editor(s) | Alejandro Carmena Magro , JD-017 Machine Learning Ops |
Supervisor(s) | Alfonso Medela , JD-005 Technical Manager & Person Responsible for Regulatory Compliance |
Approval | - Approved |
Description​
Uvicorn is an ASGI (Asynchronous Server Gateway Interface) web server implementation for Python. It is designed to serve as a production-ready interface for ASGI applications, enabling asynchronous programming features of Python 3. ASGI is a successor to WSGI (Web Server Gateway Interface), aimed at providing a standard interface between async-capable Python web servers, frameworks, and applications. Uvicorn is particularly noted for its performance, simplicity, and compatibility with asynchronous web frameworks such as FastAPI and Starlette.
General details​
- Developer(s): Tom Christie is the original author, with contributions from multiple community members.
- Open source: Yes
- Language(s): Python
- Repository: https://github.com/encode/uvicorn
- License: BSD-3-Clause
- Operating system(s): OS Independent
- Actively maintained: Yes (less than a week ago)
Intended use on the device​
The SOUP is used in the medical device for the following specific purposes only:
- Run our REST API-based applications. It should be the performance-optimized server environment to serve our APIs to users over the web, receiving HTTP requests, passing them to the application, and then sending the responses created by the application back to the clients.
Requirements​
For the integration and safe usage of this SOUP within a software system, it's important to outline both functional and performance requirements. These requirements help mitigate risks and ensure compatibility and performance standards are met.
Functional​
- ASGI server: Implement the ASGI specification, so the web server can efficiently manage asynchronous operations, such as long-running connections and real-time data updates, providing scalable foundation for web applications that require high concurrency and low-latency responses.
- Configuration flexibility: Provide the ability to configure various operational parameters such as host, port, workers, log levels, and SSL certificates through command-line arguments, environment variables, or configuration files, to meet the deployment needs.
- Lifecycle hook support: Offer events for startup and shutdown, which can be used by the application for setup and cleanup processes.
- Security features: Support or be compatible with security features such as HTTPS, data encryption in transit, and protection against common vulnerabilities (e.g., SQL injection, CSRF).
Performance​
- Concurrency support: Ability to handle a high number of concurrent connections efficiently, making use of Python's async and await features.
- Resource utilisation: Minimal overhead in terms of CPU and memory usage, ensuring the server can run efficiently on various hardware configurations.
- Scalability: Support for running in multiple worker processes to handle increased load, possibly integrating with process managers like Gunicorn for managed scalability.
- Response time: Capable of maintaining low response times under load, ensuring that the integration does not introduce significant latencies to client requests.
System requirements​
Establishing minimum software and hardware requirements is important to mitigate risks, such as security vulnerabilities, performance issues, or compatibility problems, and to ensure that the SOUP functions effectively within the intended environment.
Software​
After evaluation, we find that there are no specific software requirements for this SOUP. It works properly on standard computing devices, which includes our environment
Hardware​
After evaluation, we find that there are no specific hardware requirements for this SOUP. It works properly on standard computing devices, which includes our environment.
Documentation​
The official SOUP documentation can be found at: https://www.uvicorn.org/
Additionally, a criterion for validating the SOUP is that all the items of the following checklist are satisfied:
- The vendor maintains clear and comprehensive documentation of the SOUP describing its functional capabilities, user guidelines, tutorials, and integration instructions, facilitating seamless adoption.
- The documentation for the SOUP is regularly updated and clearly outlines every feature utilized by the medical device, doing so for all SOUP versions integrated into the device.
Related software items​
We catalog the interconnections between the microservices within our software architecture and the specific versions of the SOUP they utilize. This mapping ensures clarity and traceability, facilitating both the understanding of the system's dependencies and the management of SOUP components.
Although the title of the section mentions software items, the relationship with SOUP versions has been established with microservices (also considered software items, by the way) because each one is inside a different Docker container and, therefore, has its own isolated runtime environment.
SOUP version | Software item(s) |
---|---|
0.29.0 | WEB API GATEWAY REPORT BUILDER AGPPGA ALADIN APASI-API APASI-SEGMENTER APASI-CLASSIFIER APULSI ASALT ASCORAD-API ASCORAD-SEGMENTER ASCORAD-CLASSIFIER AUAS AIHS4 NSIL ICD MULTICLASS CLASSIFIER ICD BINARY CLASSIFIER BINARY REFERRER QUALITY VALIDATOR DOMAIN VALIDATOR |
Related risks​
The following are risks applicable to this SOUP from the table found in document R-TF-013-002 Risk management record_2023_001
:
- 58. SOUP presents an anomaly that makes it incompatible with other SOUPs or with software elements of the device.
- 59. SOUP is not being maintained nor regularly patched.
- 60. SOUP presents cybersecurity vulnerabilities.
Lists of published anomalies​
The incidents, anomalies, known issues or changes between versions for this SOUP can be found at:
History of evaluation of SOUP anomalies​
29 Feb 2024​
- Reviewer of the anomalies: Alejandro Carmena Magro
- Version(s) of the SOUP reviewed: 0.29.0
No anomalies have been found.
Record signature meaning​
- Author: JD-004
- Reviewer: JD-003
- Approver: JD-005