zhasm
11/13/2012 - 2:51 AM

django data dumper (the default `python manage.py datadumper` is not working for no reason)

django data dumper (the default python manage.py datadumper is not working for no reason)

#!/usr/bin/env   python
# -*- encoding:  utf-8 -*-
#
#       Author:  Rex Zhang
#  Create Time:  2012-11-13 10:14
#    File name:  datadumper.py

import sys, os
import re
import imp
import logging
import json

PROJECTROOT = os.path.expanduser('~/git/charts')
PROJECTNAME = 'charts'

sys.path.append(PROJECTROOT)
os.environ["DJANGO_SETTINGS_MODULE"] = '%s.settings' % (PROJECTNAME)

from django.core import serializers
from django.conf import settings
from django.utils.importlib import import_module

format = 'json'
indent = 4

class Dumper(object):
    def __init__(self):
        self.models = []
        self.init_models()

    def init_models(self):
        apps = [a for a in settings.INSTALLED_APPS if 'django' not in a]

        for a in apps:
            try:
                app_path = import_module(a).__path__
            except AttributeError:
                continue

            try:
                imp.find_module('models', app_path)
            except ImportError as e:
                print 'import error', e
                continue
            m = '%s.models' % a
            m = import_module(m)
            self.models.append(m)

    def get(self, model):

        try:
            return [getattr(m, model) for m in self.models if hasattr(m, model)][0]
        except Exception as e:
            logging.error(e)

    def to_json(self, model):
        data = serializers.serialize(format, model.objects.all())
        return data

dumper = Dumper()
model = dumper.get(sys.argv[1])
data = dumper.to_json(model)

print json.dumps(json.loads(data), indent=indent)