Adding db flag for new job form. Not working yet.
This commit is contained in:
@@ -5,6 +5,8 @@ from pydantic import BaseModel
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
import logging
|
import logging
|
||||||
import base64
|
import base64
|
||||||
|
import json
|
||||||
|
import gzip
|
||||||
from traceback import format_exc
|
from traceback import format_exc
|
||||||
|
|
||||||
from packetserver.http.dependencies import get_current_http_user
|
from packetserver.http.dependencies import get_current_http_user
|
||||||
@@ -12,7 +14,7 @@ from packetserver.http.auth import HttpUser
|
|||||||
from packetserver.http.database import DbDependency
|
from packetserver.http.database import DbDependency
|
||||||
from packetserver.server.jobs import Job, JobStatus
|
from packetserver.server.jobs import Job, JobStatus
|
||||||
from packetserver.http.server import templates
|
from packetserver.http.server import templates
|
||||||
from packetserver.runner import RunnerFile
|
from packetserver.server.db import get_user_db_json
|
||||||
|
|
||||||
router = APIRouter(prefix="/api/v1", tags=["jobs"])
|
router = APIRouter(prefix="/api/v1", tags=["jobs"])
|
||||||
dashboard_router = APIRouter(tags=["jobs"])
|
dashboard_router = APIRouter(tags=["jobs"])
|
||||||
@@ -157,6 +159,7 @@ async def create_job_from_form(
|
|||||||
env_keys: List[str] = Form(default=[]),
|
env_keys: List[str] = Form(default=[]),
|
||||||
env_values: List[str] = Form(default=[]),
|
env_values: List[str] = Form(default=[]),
|
||||||
files: List[UploadFile] = File(default=[]),
|
files: List[UploadFile] = File(default=[]),
|
||||||
|
include_db: Optional[str] = Form(None),
|
||||||
current_user: HttpUser = Depends(get_current_http_user)
|
current_user: HttpUser = Depends(get_current_http_user)
|
||||||
):
|
):
|
||||||
# Build env dict from parallel lists
|
# Build env dict from parallel lists
|
||||||
@@ -172,6 +175,19 @@ async def create_job_from_form(
|
|||||||
content = await upload.read()
|
content = await upload.read()
|
||||||
files_dict[upload.filename] = base64.b64encode(content).decode('ascii')
|
files_dict[upload.filename] = base64.b64encode(content).decode('ascii')
|
||||||
|
|
||||||
|
if include_db == "on":
|
||||||
|
try:
|
||||||
|
username_lower = current_user.username.lower()
|
||||||
|
# get_user_db_json needs the raw ZODB.DB instance
|
||||||
|
user_db_bytes = get_user_db_json(username_lower,db)
|
||||||
|
# Base64-encode for payload consistency
|
||||||
|
b64_db = base64.b64encode(user_db_bytes).decode('ascii')
|
||||||
|
files_dict["user-db.json.gz"] = b64_db
|
||||||
|
logging.debug(f"Injected user-db.json.gz for {current_user.username}")
|
||||||
|
except Exception as e:
|
||||||
|
logging.error(f"Failed to generate user-db.json.gz: {e}")
|
||||||
|
raise HTTPException(status_code=500, detail="Failed to include user database")
|
||||||
|
|
||||||
# Prepare payload for the existing API
|
# Prepare payload for the existing API
|
||||||
payload = {
|
payload = {
|
||||||
"cmd": [part.strip() for part in cmd.split() if part.strip()], # split on whitespace, like shell
|
"cmd": [part.strip() for part in cmd.split() if part.strip()], # split on whitespace, like shell
|
||||||
|
|||||||
@@ -32,6 +32,14 @@
|
|||||||
<div class="form-text">Uploaded files will be available in the container's working directory.</div>
|
<div class="form-text">Uploaded files will be available in the container's working directory.</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="mb-3 form-check">
|
||||||
|
<input type="checkbox" class="form-check-input" id="include_db" name="include_db" value="on">
|
||||||
|
<label class="form-check-label" for="include_db">
|
||||||
|
Include user database (db flag)
|
||||||
|
<small class="text-muted d-block">Adds user-db.json.gz with the full user database snapshot to job files</small>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
<button type="submit" class="btn btn-primary me-2">Queue Job</button>
|
<button type="submit" class="btn btn-primary me-2">Queue Job</button>
|
||||||
<a href="/jobs" class="btn btn-secondary">Cancel</a>
|
<a href="/jobs" class="btn btn-secondary">Cancel</a>
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
Reference in New Issue
Block a user