|
import os |
|
import json |
|
import zipfile |
|
import datetime |
|
|
|
|
|
def get_revenue_stats(): |
|
""" |
|
Returns a list of revenue and usage metrics for the past 7 days. |
|
Each entry includes date, revenue_usd, active_users, and subscriptions. |
|
""" |
|
today = datetime.date.today() |
|
stats = [] |
|
for i in range(7): |
|
dt = today - datetime.timedelta(days=i) |
|
stats.append({ |
|
"date": dt.isoformat(), |
|
"revenue_usd": round(100 + i * 10, 2), |
|
"active_users": 50 + i * 5, |
|
"subscriptions": 10 + i |
|
}) |
|
return stats |
|
|
|
|
|
def package_artifacts(assets): |
|
""" |
|
Packages generated app assets (blueprint and code files) into a zip archive |
|
stored under the persistent /data directory so artifacts appear in the Space UI. |
|
Returns the path to the zip file. |
|
""" |
|
|
|
timestamp = datetime.datetime.now().strftime("%Y%m%d%H%M%S") |
|
base_dir = f"/data/artifacts_{timestamp}" |
|
os.makedirs(base_dir, exist_ok=True) |
|
|
|
|
|
blueprint = assets.get("blueprint", {}) |
|
bp_path = os.path.join(base_dir, "blueprint.json") |
|
with open(bp_path, "w") as f: |
|
json.dump(blueprint, f, indent=2) |
|
|
|
|
|
code_files = assets.get("code", {}) |
|
for fname, content in code_files.items(): |
|
file_path = os.path.join(base_dir, fname) |
|
os.makedirs(os.path.dirname(file_path), exist_ok=True) |
|
with open(file_path, "w") as f: |
|
f.write(content) |
|
|
|
|
|
zip_path = f"{base_dir}.zip" |
|
with zipfile.ZipFile(zip_path, "w", zipfile.ZIP_DEFLATED) as zipf: |
|
for root, _, files in os.walk(base_dir): |
|
for file in files: |
|
full_path = os.path.join(root, file) |
|
rel_path = os.path.relpath(full_path, base_dir) |
|
zipf.write(full_path, arcname=rel_path) |
|
|
|
return zip_path |
|
|