Silicon Valley - Admin commited on
Commit
49a61bb
1 Parent(s): 76ca3e9

Enhance server.py with CORS support, versioning, and health check endpoints

Browse files

- Added CORS configuration to allow requests from specified domains.
- Introduced a version constant for the API to improve version management.
- Expanded trusted hosts for better network access.
- Implemented new root and health check endpoints for improved API usability.
- Updated status endpoint to return the API version from the constant instead of using importlib.metadata.

Files changed (1) hide show
  1. server.py +23 -4
server.py CHANGED
@@ -1,6 +1,5 @@
1
  # server.py
2
  from dataclasses import dataclass, asdict
3
- import importlib.metadata
4
  import secrets
5
  import logging
6
  import asyncio
@@ -9,17 +8,25 @@ from typing import Tuple
9
 
10
  from quart import Quart, websocket, request
11
  from quart_schema import QuartSchema, validate_request, validate_response
 
12
  from uvicorn.middleware.proxy_headers import ProxyHeadersMiddleware
13
 
14
  from broker import SessionBroker, SessionDoesNotExist, ClientRequest, ClientResponse, ClientError
15
 
16
  # Configuraci贸n
 
17
  TIMEOUT: int = 40
18
  LOG_LEVEL: int = logging.DEBUG
19
- TRUSTED_HOSTS: list[str] = ["127.0.0.1"]
20
 
21
  # Create app
22
  app = Quart(__name__)
 
 
 
 
 
 
23
  QuartSchema(app)
24
  app.asgi_app = ProxyHeadersMiddleware(app.asgi_app, trusted_hosts=TRUSTED_HOSTS)
25
  app.logger.setLevel(LOG_LEVEL)
@@ -74,7 +81,7 @@ class ErrorResponse:
74
  @app.get("/status")
75
  @validate_response(Status)
76
  async def status() -> Status:
77
- return Status(status="OK", version=importlib.metadata.version('your-package-name'))
78
 
79
  @app.websocket('/session')
80
  async def session_handler():
@@ -156,5 +163,17 @@ async def write(data: Write) -> Tuple[WriteResponse | ErrorResponse, int]:
156
  except asyncio.TimeoutError:
157
  return ErrorResponse('Timeout when waiting for client.'), 500
158
 
 
 
 
 
 
 
 
 
 
159
  def run():
160
- app.run(host='0.0.0.0', port=7860)
 
 
 
 
1
  # server.py
2
  from dataclasses import dataclass, asdict
 
3
  import secrets
4
  import logging
5
  import asyncio
 
8
 
9
  from quart import Quart, websocket, request
10
  from quart_schema import QuartSchema, validate_request, validate_response
11
+ from quart_cors import cors
12
  from uvicorn.middleware.proxy_headers import ProxyHeadersMiddleware
13
 
14
  from broker import SessionBroker, SessionDoesNotExist, ClientRequest, ClientResponse, ClientError
15
 
16
  # Configuraci贸n
17
+ VERSION = "1.0.0" # Versi贸n de la API
18
  TIMEOUT: int = 40
19
  LOG_LEVEL: int = logging.DEBUG
20
+ TRUSTED_HOSTS: list[str] = ["127.0.0.1", "10.16.38.136", "10.16.3.13", "10.16.13.73"]
21
 
22
  # Create app
23
  app = Quart(__name__)
24
+ app = cors(app,
25
+ allow_origin=["https://*.hf.space", "https://*.huggingface.co"],
26
+ allow_methods=["GET", "POST", "OPTIONS"],
27
+ allow_headers=["Content-Type"],
28
+ max_age=3600
29
+ )
30
  QuartSchema(app)
31
  app.asgi_app = ProxyHeadersMiddleware(app.asgi_app, trusted_hosts=TRUSTED_HOSTS)
32
  app.logger.setLevel(LOG_LEVEL)
 
81
  @app.get("/status")
82
  @validate_response(Status)
83
  async def status() -> Status:
84
+ return Status(status="OK", version=VERSION)
85
 
86
  @app.websocket('/session')
87
  async def session_handler():
 
163
  except asyncio.TimeoutError:
164
  return ErrorResponse('Timeout when waiting for client.'), 500
165
 
166
+ # Agregar un endpoint de health check y root
167
+ @app.route("/")
168
+ async def root():
169
+ return {"message": "Kaio API Server", "version": VERSION}
170
+
171
+ @app.route("/health")
172
+ async def health_check():
173
+ return {"status": "healthy"}
174
+
175
  def run():
176
+ app.run(host='0.0.0.0', port=7860)
177
+
178
+ if __name__ == "__main__":
179
+ run()