| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 | import datetimefrom importlib import import_moduleimport jsonfrom django.core.serializers.json import DjangoJSONEncoderfrom django.http import HttpResponsefrom django.core.urlresolvers import reverse, resolvefrom django.contrib import adminfrom django.contrib.admin import AdminSitefrom django.utils.encoding import smart_textfrom jet import settingsfrom django.contrib import messagesfrom django.utils.encoding import force_textfrom django.utils.functional import Promiseclass JsonResponse(HttpResponse):    """    An HTTP response class that consumes data to be serialized to JSON.    :param data: Data to be dumped into json. By default only ``dict`` objects      are allowed to be passed due to a security flaw before EcmaScript 5. See      the ``safe`` parameter for more information.    :param encoder: Should be an json encoder class. Defaults to      ``django.core.serializers.json.DjangoJSONEncoder``.    :param safe: Controls if only ``dict`` objects may be serialized. Defaults      to ``True``.    """    def __init__(self, data, encoder=DjangoJSONEncoder, safe=True, **kwargs):        if safe and not isinstance(data, dict):            raise TypeError('In order to allow non-dict objects to be '                'serialized set the safe parameter to False')        kwargs.setdefault('content_type', 'application/json')        data = json.dumps(data, cls=encoder)        super(JsonResponse, self).__init__(content=data, **kwargs)def get_app_list(context):    template_response = get_admin_site(context.get('current_app', '')).index(context['request'])    try:        return template_response.context_data['app_list']    except Exception:        return Nonedef get_admin_site(current_app):    try:        resolver_match = resolve(reverse('%s:index' % current_app))        for func_closure in resolver_match.func.func_closure:            if isinstance(func_closure.cell_contents, AdminSite):                return func_closure.cell_contents    except:        pass    return admin.sitedef get_admin_site_name(context):    return get_admin_site(context).nameclass LazyDateTimeEncoder(json.JSONEncoder):    def default(self, obj):        if isinstance(obj, datetime.datetime) or isinstance(obj, datetime.date):            return obj.isoformat()        elif isinstance(obj, Promise):            return force_text(obj)        return json.JSONEncoder.default(self, obj)def get_model_instance_label(instance):    if getattr(instance, "related_label", None):        return instance.related_label()    return smart_text(instance)class SuccessMessageMixin(object):    """    Adds a success message on successful form submission.    """    success_message = ''    def form_valid(self, form):        response = super(SuccessMessageMixin, self).form_valid(form)        success_message = self.get_success_message(form.cleaned_data)        if success_message:            messages.success(self.request, success_message)        return response    def get_success_message(self, cleaned_data):        return self.success_message % cleaned_data
 |