Coverage for backend / app / job_email_scraping / routers / scraper_service.py: 79%

19 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-03-17 21:34 +0000

1"""FastAPI routers for the job email scraping service endpoints. 

2 

3Provides REST API endpoints for managing job alert emails, scraped job postings, 

4and service execution logs with CRUD operations and admin access controls.""" 

5 

6from fastapi import APIRouter, Depends, Query 

7 

8from app import models 

9from app.core.oauth2 import get_current_user 

10from app.job_email_scraping import schemas 

11from app.job_email_scraping.email_scraper import job_scraping_service_runner, SERVICE_NAME 

12from app.service_runner import routers 

13 

14email_scraper_service_router = APIRouter(prefix="/job-scraper-service", tags=["job-scraper-service"]) 

15 

16 

17@email_scraper_service_router.post("/start") 

18def start_scraper( 

19 request: schemas.JobEmailScrapingStartRequest, 

20 current_user: models.User = Depends(get_current_user), 

21) -> dict: 

22 """Start the service runner with the specified period. 

23 :param request: StartRequest object containing period_hours 

24 :param current_user: Current authenticated user""" 

25 

26 return routers.start_scraper(job_scraping_service_runner, current_user, request.period_hours) 

27 

28 

29@email_scraper_service_router.post("/stop") 

30def stop_scraper( 

31 current_user: models.User = Depends(get_current_user), 

32) -> dict: 

33 """Stop the service runner. 

34 :param current_user: Current authenticated user""" 

35 

36 return routers.stop_scraper(job_scraping_service_runner, current_user) 

37 

38 

39@email_scraper_service_router.get("/status") 

40def scraper_status( 

41 current_user: models.User = Depends(get_current_user), 

42) -> dict: 

43 """Get the current status of the service""" 

44 

45 return routers.scraper_status(job_scraping_service_runner, current_user) 

46 

47 

48@email_scraper_service_router.get("/logs") 

49def get_scraper_logs( 

50 lines: int = Query(100, ge=1, le=10000), 

51 current_user: models.User = Depends(get_current_user), 

52): 

53 """Get the last N lines from the service log file 

54 :param lines: Number of lines to retrieve (default 100, max 10000) 

55 :param current_user: Current authenticated user""" 

56 

57 return routers.get_service_logs(SERVICE_NAME, lines, current_user)