Luis Chaves commited on
Commit
550c7ec
·
1 Parent(s): e13f3a2

right app permission and write http error codes

Browse files
Files changed (3) hide show
  1. Dockerfile +9 -5
  2. src/everycure/app.py +4 -4
  3. tests/test_api.py +2 -2
Dockerfile CHANGED
@@ -1,12 +1,16 @@
1
  FROM python:3.12-slim
2
 
 
 
 
 
3
  WORKDIR /code
4
 
5
- COPY ./pyproject.toml /code/
6
- COPY ./README.md /code/
7
- COPY ./src /code/src
8
- COPY ./openapi.yaml /code/
9
 
10
  RUN pip install --no-cache-dir .[all]
11
 
12
- CMD ["uvicorn", "everycure.app:app", "--host", "0.0.0.0", "--port", "7860"]
 
1
  FROM python:3.12-slim
2
 
3
+ # Create application user with home directory
4
+ RUN useradd -m appuser
5
+ USER appuser
6
+ ENV HOME=/home/appuser
7
  WORKDIR /code
8
 
9
+ COPY --chown=appuser:appuser ./pyproject.toml /code/
10
+ COPY --chown=appuser:appuser ./README.md /code/
11
+ COPY --chown=appuser:appuser ./src /code/src
12
+ COPY --chown=appuser:appuser ./openapi.yaml /code/
13
 
14
  RUN pip install --no-cache-dir .[all]
15
 
16
+ CMD ["uvicorn", "everycure.app:app", "--host", "0.0.0.0", "--port", "7860"]
src/everycure/app.py CHANGED
@@ -5,7 +5,7 @@ import logging
5
  import uvicorn
6
 
7
  # Set up logging
8
- logging.basicConfig(level=logging.DEBUG)
9
  logger = logging.getLogger(__name__)
10
 
11
  app = FastAPI(
@@ -27,7 +27,7 @@ app.add_middleware(
27
  # Rest of your existing code
28
  @app.post("/api/v1/extract", response_model=List[Entity])
29
  async def extract_entities(file: UploadFile):
30
- logger.debug(f"Received request for file: {file.filename}")
31
 
32
  if not file:
33
  logger.error("No file provided")
@@ -38,9 +38,9 @@ async def extract_entities(file: UploadFile):
38
  raise HTTPException(status_code=415, detail="File must be a PDF")
39
 
40
  try:
41
- logger.debug("Starting entity extraction")
42
  result = extract_entities_from_pdf(file)
43
- logger.debug(f"Successfully extracted {len(result)} entities")
44
  return result
45
  except Exception as e:
46
  logger.error(f"Error during extraction: {str(e)}", exc_info=True)
 
5
  import uvicorn
6
 
7
  # Set up logging
8
+ logging.basicConfig(level=logging.INFO)
9
  logger = logging.getLogger(__name__)
10
 
11
  app = FastAPI(
 
27
  # Rest of your existing code
28
  @app.post("/api/v1/extract", response_model=List[Entity])
29
  async def extract_entities(file: UploadFile):
30
+ logger.info(f"Received request for file: {file.filename}")
31
 
32
  if not file:
33
  logger.error("No file provided")
 
38
  raise HTTPException(status_code=415, detail="File must be a PDF")
39
 
40
  try:
41
+ logger.info("Starting entity extraction")
42
  result = extract_entities_from_pdf(file)
43
+ logger.info(f"Successfully extracted {len(result)} entities")
44
  return result
45
  except Exception as e:
46
  logger.error(f"Error during extraction: {str(e)}", exc_info=True)
tests/test_api.py CHANGED
@@ -30,7 +30,7 @@ def test_extract_entities_invalid_file():
30
  files={"file": ("test.txt", tmp, "text/plain")}
31
  )
32
 
33
- assert response.status_code == 400
34
  assert "Invalid file type" in response.json()["detail"]
35
 
36
  def test_extract_entities_empty_file(test_pdf):
@@ -40,4 +40,4 @@ def test_extract_entities_empty_file(test_pdf):
40
  files={} # No file provided
41
  )
42
 
43
- assert response.status_code == 422 # FastAPI's validation error
 
30
  files={"file": ("test.txt", tmp, "text/plain")}
31
  )
32
 
33
+ assert response.status_code == 415
34
  assert "Invalid file type" in response.json()["detail"]
35
 
36
  def test_extract_entities_empty_file(test_pdf):
 
40
  files={} # No file provided
41
  )
42
 
43
+ assert response.status_code == 400 # FastAPI's validation error