import os
import sys
os.chdir("/opt/planetstack")
sys.path.append("/opt/planetstack")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "planetstack.settings")
import django
import core.models
from django.db import models
django.setup()
from django.forms.models import model_to_dict
import inspect
from django.core import serializers
import json

print "function xos_get_validators() {"

for c in dir(core.models):
    c = getattr(core.models,c)
    if inspect.isclass(c) and issubclass(c, models.Model):
        c=c()
        classname = c.__class__.__name__
        classname = classname[0].lower() + classname[1:]

        if (classname in ["plCoreBase", "singletonModel"]):
            continue

        fields = c.getValidators();

        fields_json = json.dumps(fields)

        print "  this." + classname + " = " + fields_json + ";"

print "};"
print "xosvalidators = new xos_get_validators();"

