You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.6 KiB
54 lines
1.6 KiB
# hadis/management/commands/dump_with_encoding.py
|
|
from django.core.management.base import BaseCommand
|
|
from django.core.management import call_command
|
|
import sys
|
|
import os
|
|
|
|
class Command(BaseCommand):
|
|
help = 'Dump data with proper UTF-8 encoding'
|
|
|
|
def add_arguments(self, parser):
|
|
parser.add_argument(
|
|
'models',
|
|
nargs='+',
|
|
type=str,
|
|
help='Models to dump (e.g., hadis.HadisCategory hadis.HadisSect)'
|
|
)
|
|
parser.add_argument(
|
|
'--output',
|
|
type=str,
|
|
default='fixture.json',
|
|
help='Output file path'
|
|
)
|
|
parser.add_argument(
|
|
'--indent',
|
|
type=int,
|
|
default=2,
|
|
help='JSON indent level'
|
|
)
|
|
|
|
def handle(self, *args, **options):
|
|
models = options['models']
|
|
output_file = options['output']
|
|
indent = options['indent']
|
|
|
|
# Ensure directory exists
|
|
os.makedirs(os.path.dirname(output_file) or '.', exist_ok=True)
|
|
|
|
self.stdout.write(f'Dumping models: {", ".join(models)}...')
|
|
|
|
try:
|
|
# Force UTF-8 encoding
|
|
with open(output_file, 'w', encoding='utf-8') as f:
|
|
call_command(
|
|
'dumpdata',
|
|
*models,
|
|
indent=indent,
|
|
stdout=f
|
|
)
|
|
|
|
self.stdout.write(
|
|
self.style.SUCCESS(f'✓ Successfully dumped to {output_file}')
|
|
)
|
|
except Exception as e:
|
|
self.stdout.write(self.style.ERROR(f'✗ Error: {str(e)}'))
|