emee commited on
Commit
70ca71a
·
1 Parent(s): ec8ad43
Files changed (4) hide show
  1. .gitignore +3 -0
  2. Dockerfile +6 -0
  3. main.py +47 -0
  4. requirements.txt +4 -0
.gitignore ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ env
2
+ .env
3
+ /.env
Dockerfile ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ FROM python:3.9
2
+ WORKDIR /code
3
+ COPY ./requirements.txt /code/requirements.txt
4
+ RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
5
+ COPY . .
6
+ CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "7860"]
main.py ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from fastapi.responses import StreamingResponse, JSONResponse
2
+ from fastapi import FastAPI, Response, Request, Query
3
+ from fastapi.middleware.cors import CORSMiddleware
4
+ from dotenv import load_dotenv
5
+ import requests
6
+ import os
7
+
8
+ load_dotenv()
9
+ app = FastAPI()
10
+
11
+ # uvicorn main:app --reload
12
+
13
+ app.add_middleware(
14
+ CORSMiddleware,
15
+ allow_origins=["*"],
16
+ allow_credentials=True,
17
+ allow_methods=["*"],
18
+ allow_headers=["*"],
19
+ )
20
+
21
+ @app.get("/{path:path}")
22
+ async def redirect(request:Request, path: str):
23
+ try:
24
+ base_url = os.environ.get("BASE_URL")
25
+ query_params = request.query_params
26
+ provider = query_params.get("provider")
27
+ base_url = base_url.replace("<provider>", provider)
28
+
29
+ full_url = f"{base_url}/{path}"
30
+ if query_params:
31
+ full_url += "?" + "&".join([f"{key}={value}" for key, value in query_params.items()])
32
+
33
+ auth_token = os.environ.get("API_KEY")
34
+ headers = { "Authorization": f"Bearer {auth_token}" }
35
+ response = requests.get(full_url, stream=True, headers=headers)
36
+
37
+ if response.status_code == 404:
38
+ return JSONResponse({ "msg": "bro, i think you provider is wrong" })
39
+
40
+ def stream_content():
41
+ for chunk in response.iter_content(chunk_size=1024):
42
+ yield chunk
43
+
44
+ content_type = response.headers.get('content-type', 'application/octet-stream')
45
+ return StreamingResponse(stream_content(), media_type=content_type)
46
+ except:
47
+ return JSONResponse({ "msg": "try hard bro" })
requirements.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ fastapi==0.74.*
2
+ requests==2.27.*
3
+ uvicorn[standard]==0.17.*
4
+ python-dotenv==0.21.0