initial cacheserver

This commit is contained in:
2021-06-18 06:36:30 +02:00
commit af77633c60
3 changed files with 64 additions and 0 deletions

13
Dockerfile Normal file
View File

@@ -0,0 +1,13 @@
FROM python:3.7
RUN mkdir app
COPY requirements.txt /app/
RUN pip install -r /app/requirements.txt
EXPOSE 80
COPY main.py /app/main.py
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]

32
main.py Normal file
View File

@@ -0,0 +1,32 @@
from fastapi import FastAPI
import requests
from fastapi.responses import FileResponse
import uvicorn
import hashlib
import pathlib
import logging
app = FastAPI()
logger = logging.getLogger(__name__)
cachepath = pathlib.Path('./cache')
if not cachepath.is_dir():
cachepath.mkdir()
def fetch_url(url):
urlhash = hashlib.sha1(url.encode('utf8')).hexdigest()
cachefile = (cachepath/urlhash)
if not cachefile.is_file():
logger.info(f"caching file {cachefile} for {url}")
r = requests.get(url, allow_redirects=True)
open(cachefile, 'wb').write(r.content)
return FileResponse(cachefile)
@app.get("/{url:path}")
async def root(url):
return fetch_url(url)
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)

19
requirements.txt Normal file
View File

@@ -0,0 +1,19 @@
aiofiles==0.7.0
aiohttp==3.7.4.post0
asgiref==3.3.4
async-timeout==3.0.1
attrs==21.2.0
certifi==2021.5.30
chardet==4.0.0
click==8.0.1
fastapi==0.65.2
h11==0.12.0
idna==2.10
multidict==5.1.0
pydantic==1.8.2
requests==2.25.1
starlette==0.14.2
typing-extensions==3.10.0.0
urllib3==1.26.5
uvicorn==0.14.0
yarl==1.6.3