(job_id: str, number: int)
| 38 | |
| 39 | @app.task(queue=QUEUE_NAME, name="worker.tasks.prime_factorize") |
| 40 | def prime_factorize(job_id: str, number: int) -> dict[str, Any]: |
| 41 | original = int(number) |
| 42 | value = abs(original) |
| 43 | try: |
| 44 | if value < 2: |
| 45 | result = {"number": original, "factors": [original], "is_prime": False} |
| 46 | update_job(job_id, status="completed", result=result, progress={"step": "Done", "percent": 100}) |
| 47 | return result |
| 48 | |
| 49 | remaining = value |
| 50 | divisor = 2 |
| 51 | factors: list[int] = [] |
| 52 | max_divisor = max(2, int(value**0.5)) |
| 53 | |
| 54 | update_job(job_id, status="running", progress={"step": "Scanning factors", "percent": 0}) |
| 55 | while divisor * divisor <= remaining: |
| 56 | while remaining % divisor == 0: |
| 57 | factors.append(divisor) |
| 58 | remaining //= divisor |
| 59 | |
| 60 | if divisor == 2 or divisor % 100 == 0 or divisor * divisor > remaining: |
| 61 | update_job(job_id, status="running", progress={ |
| 62 | "step": f"Testing divisor {divisor}", |
| 63 | "percent": min(95, int((divisor / max_divisor) * 100)), |
| 64 | }) |
| 65 | time.sleep(0.02) |
| 66 | |
| 67 | divisor += 1 |
| 68 | |
| 69 | if remaining > 1: |
| 70 | factors.append(remaining) |
| 71 | |
| 72 | result = {"number": original, "factors": factors, "is_prime": len(factors) == 1} |
| 73 | update_job(job_id, status="completed", result=result, progress={"step": "Done", "percent": 100}) |
| 74 | return result |
| 75 | except Exception as exc: |
| 76 | update_job(job_id, status="failed", result={"error": str(exc)}) |
| 77 | return {"error": str(exc)} |
nothing calls this directly
no test coverage detected