259 lines
7.4 KiB
Python
Executable File
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()
|