Fix type coercion for numeric fields in scanner and upload endpoint

This commit is contained in:
Jarian 2026-05-13 04:38:54 +00:00
parent 549877ab4b
commit 7180de2063
3 changed files with 18 additions and 9 deletions

View File

@ -19,13 +19,15 @@ Create a JSON file with app metadata. All fields except `screenshots` are requir
"screenshots": [], "screenshots": [],
"package_name": "com.your.package", "package_name": "com.your.package",
"version_name": "1.0", "version_name": "1.0",
"version_code": "1", "version_code": 1,
"min_sdk": "26", "min_sdk": 26,
"target_sdk": "34", "target_sdk": 34,
"permissions": ["android.permission.INTERNET"] "permissions": ["android.permission.INTERNET"]
} }
``` ```
**Note:** `version_code`, `min_sdk`, and `target_sdk` can be integers or strings — the server converts them automatically.
**Field notes:** **Field notes:**
- **`name`**: Human-readable display name shown in the store - **`name`**: Human-readable display name shown in the store
- **`description`**: Short description shown in app details - **`description`**: Short description shown in app details

View File

@ -309,6 +309,11 @@ async def upload_app(
apk_target.unlink(missing_ok=True) apk_target.unlink(missing_ok=True)
raise HTTPException(400, f"Metadata JSON requires: {', '.join(missing)}") raise HTTPException(400, f"Metadata JSON requires: {', '.join(missing)}")
# Coerce numeric fields to strings for consistency
for key in ("version_name", "version_code", "min_sdk", "target_sdk"):
if key in metadata_json:
metadata_json[key] = str(metadata_json[key])
json_target = REPO_PATH / f"{target_id}.json" json_target = REPO_PATH / f"{target_id}.json"
json_target.write_text(json.dumps(metadata_json, indent=2)) json_target.write_text(json.dumps(metadata_json, indent=2))

View File

@ -202,15 +202,15 @@ def scan_repository(repo_path: str) -> List[Dict]:
app = { app = {
"id": apk_file.stem, "id": apk_file.stem,
"package_name": metadata["package_name"], "package_name": metadata["package_name"],
"version_name": metadata["version_name"] or "unknown", "version_name": str(metadata["version_name"]) if metadata["version_name"] else "unknown",
"version_code": metadata["version_code"] or "0", "version_code": str(metadata["version_code"]) if metadata["version_code"] else "0",
"name": metadata["label"] or apk_file.stem, "name": metadata["label"] or apk_file.stem,
"description": "", "description": "",
"icon": metadata["icon"], "icon": metadata["icon"],
"size": apk_file.stat().st_size, "size": apk_file.stat().st_size,
"file_path": str(apk_file), "file_path": str(apk_file),
"min_sdk": metadata["min_sdk"], "min_sdk": str(metadata["min_sdk"]) if metadata["min_sdk"] else None,
"target_sdk": metadata["target_sdk"], "target_sdk": str(metadata["target_sdk"]) if metadata["target_sdk"] else None,
"permissions": metadata["permissions"], "permissions": metadata["permissions"],
} }
@ -222,9 +222,11 @@ def scan_repository(repo_path: str) -> List[Dict]:
info = json.load(f) info = json.load(f)
for key in ("name", "description", "icon", "package_name", for key in ("name", "description", "icon", "package_name",
"version_name", "version_code", "min_sdk", "version_name", "version_code", "min_sdk",
"target_sdk", "permissions", "screenshots"): "target_sdk", "screenshots"):
if key in info: if key in info:
app[key] = info[key] app[key] = str(info[key]) if key in ("version_name", "version_code", "min_sdk", "target_sdk") else info[key]
if "permissions" in info:
app["permissions"] = info["permissions"]
apps.append(app) apps.append(app)