107 lines
4.1 KiB
Python
107 lines
4.1 KiB
Python
#!/usr/bin/env python
|
|
"""
|
|
Fix missing taxonomy relationships for existing content
|
|
This script will:
|
|
1. Find content that should have tags/categories based on their keywords
|
|
2. Create appropriate taxonomy terms
|
|
3. Link them to the content
|
|
"""
|
|
import os
|
|
import sys
|
|
import django
|
|
|
|
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
|
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'igny8_core.settings')
|
|
django.setup()
|
|
|
|
from django.db import transaction
|
|
from django.utils.text import slugify
|
|
from igny8_core.business.content.models import Content, ContentTaxonomy
|
|
|
|
print("=" * 80)
|
|
print("FIXING MISSING TAXONOMY RELATIONSHIPS")
|
|
print("=" * 80)
|
|
|
|
# Get all content without taxonomy terms
|
|
content_without_tags = Content.objects.filter(taxonomy_terms__isnull=True).distinct()
|
|
print(f"\nFound {content_without_tags.count()} content items without tags/categories")
|
|
|
|
fixed_count = 0
|
|
for content in content_without_tags:
|
|
print(f"\nProcessing Content #{content.id}: {content.title[:50]}...")
|
|
|
|
# Generate tags from keywords
|
|
tags_to_add = []
|
|
categories_to_add = []
|
|
|
|
# Use primary keyword as a tag
|
|
if content.primary_keyword:
|
|
tags_to_add.append(content.primary_keyword)
|
|
|
|
# Use secondary keywords as tags
|
|
if content.secondary_keywords and isinstance(content.secondary_keywords, list):
|
|
tags_to_add.extend(content.secondary_keywords[:3]) # Limit to 3
|
|
|
|
# Create category based on cluster only
|
|
if content.cluster:
|
|
categories_to_add.append(content.cluster.name)
|
|
|
|
with transaction.atomic():
|
|
# Process tags
|
|
for tag_name in tags_to_add:
|
|
if tag_name and isinstance(tag_name, str):
|
|
tag_name = tag_name.strip()
|
|
if tag_name:
|
|
try:
|
|
tag_obj, created = ContentTaxonomy.objects.get_or_create(
|
|
site=content.site,
|
|
name=tag_name,
|
|
taxonomy_type='tag',
|
|
defaults={
|
|
'slug': slugify(tag_name),
|
|
'sector': content.sector,
|
|
'account': content.account,
|
|
'description': '',
|
|
'external_taxonomy': '',
|
|
'sync_status': '',
|
|
'count': 0,
|
|
'metadata': {},
|
|
}
|
|
)
|
|
content.taxonomy_terms.add(tag_obj)
|
|
print(f" + Tag: {tag_name} ({'created' if created else 'existing'})")
|
|
except Exception as e:
|
|
print(f" ✗ Failed to add tag '{tag_name}': {e}")
|
|
|
|
# Process categories
|
|
for category_name in categories_to_add:
|
|
if category_name and isinstance(category_name, str):
|
|
category_name = category_name.strip()
|
|
if category_name:
|
|
try:
|
|
category_obj, created = ContentTaxonomy.objects.get_or_create(
|
|
site=content.site,
|
|
name=category_name,
|
|
taxonomy_type='category',
|
|
defaults={
|
|
'slug': slugify(category_name),
|
|
'sector': content.sector,
|
|
'account': content.account,
|
|
'description': '',
|
|
'external_taxonomy': '',
|
|
'sync_status': '',
|
|
'count': 0,
|
|
'metadata': {},
|
|
}
|
|
)
|
|
content.taxonomy_terms.add(category_obj)
|
|
print(f" + Category: {category_name} ({'created' if created else 'existing'})")
|
|
except Exception as e:
|
|
print(f" ✗ Failed to add category '{category_name}': {e}")
|
|
|
|
fixed_count += 1
|
|
|
|
print("\n" + "=" * 80)
|
|
print(f"FIXED {fixed_count} CONTENT ITEMS")
|
|
print("=" * 80)
|