Files
net/import-data.py

259 lines
7.4 KiB
Python
Executable File

#!/usr/bin/env python3
"""
Directus Data Import Script
Imports all JSON data files from the Directus container into the database
"""
import json
import requests
import subprocess
DIRECTUS_URL = "https://spark.jumpstartscaling.com"
TOKEN = "oGn-0AZjenB900pfzQYH8zCbFwGw7flU"
CONTAINER = "directus-i8cswkos04c4s08404ok0ws4-022108320046"
headers = {
"Authorization": f"Bearer {TOKEN}",
"Content-Type": "application/json"
}
def get_file_from_container(filename):
"""Get JSON file from Directus container"""
cmd = f"ssh -i ~/.ssh/coolify_manual_key root@72.61.15.216 'docker exec {CONTAINER} cat /directus/data/{filename}'"
result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
if result.returncode == 0:
return json.loads(result.stdout)
else:
print(f"❌ Error reading {filename}: {result.stderr}")
return None
def import_avatar_intelligence():
"""Import avatar intelligence data"""
print("📦 Importing avatar_intelligence...")
data = get_file_from_container("avatar_intelligence.json")
if not data:
return
avatars = data.get("avatars", {})
count = 0
for avatar_key, avatar_data in avatars.items():
item = {
"avatar_key": avatar_key,
"base_name": avatar_data.get("base_name"),
"wealth_cluster": avatar_data.get("wealth_cluster"),
"business_niches": avatar_data.get("business_niches"),
"data": avatar_data
}
response = requests.post(
f"{DIRECTUS_URL}/items/avatar_intelligence",
headers=headers,
json=item,
verify=False
)
if response.status_code in [200, 201]:
count += 1
print(f" ✅ Imported: {avatar_key}")
else:
print(f" ❌ Failed: {avatar_key} - {response.text}")
print(f"✅ Imported {count} avatars\n")
def import_avatar_variants():
"""Import avatar variants data"""
print("📦 Importing avatar_variants...")
data = get_file_from_container("avatar_variants.json")
if not data:
return
variants = data.get("variants", {})
count = 0
for avatar_key, variant_data in variants.items():
for variant_type, variant_content in variant_data.items():
item = {
"avatar_key": avatar_key,
"variant_type": variant_type,
"data": variant_content
}
response = requests.post(
f"{DIRECTUS_URL}/items/avatar_variants",
headers=headers,
json=item,
verify=False
)
if response.status_code in [200, 201]:
count += 1
else:
print(f" ❌ Failed: {avatar_key}/{variant_type}")
print(f"✅ Imported {count} variants\n")
def import_geo_intelligence():
"""Import geographic intelligence data"""
print("📦 Importing geo_intelligence...")
data = get_file_from_container("geo_intelligence.json")
if not data:
return
clusters = data.get("clusters", {})
count = 0
for cluster_key, cluster_data in clusters.items():
item = {
"cluster_key": cluster_key,
"data": cluster_data
}
response = requests.post(
f"{DIRECTUS_URL}/items/geo_intelligence",
headers=headers,
json=item,
verify=False
)
if response.status_code in [200, 201]:
count += 1
print(f" ✅ Imported: {cluster_key}")
else:
print(f" ❌ Failed: {cluster_key}")
print(f"✅ Imported {count} clusters\n")
def import_spintax_dictionaries():
"""Import spintax dictionaries"""
print("📦 Importing spintax_dictionaries...")
data = get_file_from_container("spintax_dictionaries.json")
if not data:
return
dictionaries = data.get("dictionaries", {})
count = 0
for category, dict_data in dictionaries.items():
item = {
"category": category,
"data": dict_data
}
response = requests.post(
f"{DIRECTUS_URL}/items/spintax_dictionaries",
headers=headers,
json=item,
verify=False
)
if response.status_code in [200, 201]:
count += 1
print(f" ✅ Imported: {category}")
else:
print(f" ❌ Failed: {category}")
print(f"✅ Imported {count} dictionaries\n")
def import_cartesian_patterns():
"""Import cartesian patterns"""
print("📦 Importing cartesian_patterns...")
data = get_file_from_container("cartesian_patterns.json")
if not data:
return
patterns = data.get("patterns", {})
count = 0
for pattern_key, pattern_data in patterns.items():
item = {
"pattern_key": pattern_key,
"pattern_type": pattern_data.get("type"),
"data": pattern_data
}
response = requests.post(
f"{DIRECTUS_URL}/items/cartesian_patterns",
headers=headers,
json=item,
verify=False
)
if response.status_code in [200, 201]:
count += 1
print(f" ✅ Imported: {pattern_key}")
else:
print(f" ❌ Failed: {pattern_key}")
print(f"✅ Imported {count} patterns\n")
def import_offer_blocks():
"""Import all offer blocks"""
print("📦 Importing offer_blocks...")
files = [
("offer_blocks_universal.json", "universal"),
("offer_blocks_avatar_personalized.json", "avatar_personalized"),
("offer_blocks_cartesian_engine.json", "cartesian")
]
total_count = 0
for filename, block_type in files:
data = get_file_from_container(filename)
if not data:
continue
blocks = data.get("blocks", [])
for block in blocks:
item = {
"block_type": block_type,
"avatar_key": block.get("avatar_key"),
"data": block
}
response = requests.post(
f"{DIRECTUS_URL}/items/offer_blocks",
headers=headers,
json=item,
verify=False
)
if response.status_code in [200, 201]:
total_count += 1
else:
print(f" ❌ Failed: {block.get('id', 'unknown')}")
print(f" ✅ Imported {len(blocks)} {block_type} blocks")
print(f"✅ Total imported: {total_count} offer blocks\n")
def main():
"""Main import function"""
print("🚀 Starting Directus Data Import")
print("=" * 50)
print()
# Disable SSL warnings
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
# Import all data
import_avatar_intelligence()
import_avatar_variants()
import_geo_intelligence()
import_spintax_dictionaries()
import_cartesian_patterns()
import_offer_blocks()
print("=" * 50)
print("🎉 Import Complete!")
print()
print("Verify by visiting:")
print(" https://spark.jumpstartscaling.com/admin")
print()
if __name__ == "__main__":
main()