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": [],
"package_name": "com.your.package",
"version_name": "1.0",
"version_code": "1",
"min_sdk": "26",
"target_sdk": "34",
"version_code": 1,
"min_sdk": 26,
"target_sdk": 34,
"permissions": ["android.permission.INTERNET"]
}
```
**Note:** `version_code`, `min_sdk`, and `target_sdk` can be integers or strings — the server converts them automatically.
**Field notes:**
- **`name`**: Human-readable display name shown in the store
- **`description`**: Short description shown in app details

View File

@ -309,6 +309,11 @@ async def upload_app(
apk_target.unlink(missing_ok=True)
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.write_text(json.dumps(metadata_json, indent=2))

View File

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