コード例 #1
0
ファイル: crud.py プロジェクト: aehlke/manabi
def deck_create(request,
                post_save_redirect=None,
                cancel_redirect='add_decks'):
    cancel_redirect = reverse(cancel_redirect)

    if post_save_redirect is not None:
        post_save_redirect = reverse(post_save_redirect)

    if request.method == 'POST':

        deck_form = DeckForm(request.POST)
        if deck_form.is_valid():
            new_deck = deck_form.save(commit=False)
            new_deck.owner = request.user
            new_deck.save()

            if 'tags' in deck_form.cleaned_data:
                    new_deck.tags = deck_form.cleaned_data['tags']

            if post_save_redirect is None:
                post_save_redirect = new_deck.get_absolute_url()
            else:
                post_save_redirect = reverse(post_save_redirect)

            return HttpResponse(json_encode({'success': True, 'postRedirect': post_save_redirect}), mimetype='text/javascript')
        else:
            #FIXME post_redirect for failure? handle in ajax?
            return HttpResponse(json_encode({'success': False}), mimetype='text/javascript')
    else:
            deck_form = DeckForm()
    return render_to_response('flashcards/deck_form.html', 
        {'form': deck_form,
         'post_save_redirect': post_save_redirect,
         'cancel_redirect': cancel_redirect,
        } , context_instance=RequestContext(request)) #todo:post/pre redirs
コード例 #2
0
ファイル: decorators.py プロジェクト: santoshpy/manabi
    def wrapper(request, *args, **kwargs):
        ret = {'success': True}

        try:
            ret['data'] = view_func(request, *args, **kwargs)
        except ApiException as e:
            # Wrap our ApiException message in our container format
            ret['success'] = False
            error = e.args
            if len(error) == 1:
                error = error[0]
            ret['error'] = error

        try:
            # Sometimes the serialization fails, i.e. when there are
            # too deeply nested objects or even classes inside
            json_ret = json_encode(ret)

            # Content-Type header and HTTP response construction
            charset = 'charset={0}'.format(
                getattr(settings, 'DEFAULT_CHARSET', 'utf-8'))
            content_type = 'application/json'
            content_type = '; '.join([content_type, charset])
            http_ret = HttpResponse(json_ret, content_type=content_type)

            # The following are for IE especially
            http_ret['Pragma'] = 'no-cache'
            http_ret['Cache-Control'] = 'must-revalidate'
            http_ret['If-Modified-Since'] = str(datetime.datetime.utcnow())

            return http_ret
        except Exception, e:
            return HttpResponseServerError(content=unicode(e))
コード例 #3
0
ファイル: views.py プロジェクト: jagger13/manabi
def deck_textbook_source(request, deck_id=None):
    '''
    Expects 2 forms, at least one filled.
    Reusing a textbook takes precedence over creating a new one.
    '''
    deck = get_deck_or_404(request.user, deck_id, must_own=True)

    old_form = TextbookSourceForm(request.POST, instance=deck)
    new_form = TextbookForm(request.POST)

    success = True
    will_create_new_book = True

    if old_form.is_valid():
        deck = old_form.save()
        will_create_new_book = deck.textbook_source is None
    else:
        success = False
    if new_form.is_valid() and will_create_new_book:
        textbook = new_form.save()
        deck.textbook_source = textbook
        deck.save()
    elif not new_form.is_valid():
        success = False

    return HttpResponse(json_encode({'success': success}), mimetype='text/javascript')
コード例 #4
0
ファイル: views.py プロジェクト: santoshpy/manabi
def deck_textbook_source(request, deck_id=None):
    '''
    Expects 2 forms, at least one filled.
    Reusing a textbook takes precedence over creating a new one.
    '''
    deck = get_deck_or_404(request.user, deck_id, must_own=True)

    old_form = TextbookSourceForm(request.POST, instance=deck)
    new_form = TextbookForm(request.POST)

    success = True
    will_create_new_book = True

    if old_form.is_valid():
        deck = old_form.save()
        will_create_new_book = deck.textbook_source is None
    else:
        success = False
    if new_form.is_valid() and will_create_new_book:
        textbook = new_form.save()
        deck.textbook_source = textbook
        deck.save()
    elif not new_form.is_valid():
        success = False

    return HttpResponse(json_encode({'success': success}),
                        mimetype='text/javascript')
コード例 #5
0
    def wrapper(request, *args, **kwargs):
        ret = {'success': True}

        try:
            ret['data'] = view_func(request, *args, **kwargs)
        except ApiException as e:
            # Wrap our ApiException message in our container format
            ret['success'] = False
            error = e.args
            if len(error) == 1:
                error = error[0]
            ret['error'] = error

        try:
            # Sometimes the serialization fails, i.e. when there are 
            # too deeply nested objects or even classes inside
            json_ret = json_encode(ret)

            # Content-Type header and HTTP response construction
            charset = 'charset={0}'.format(getattr(settings, 'DEFAULT_CHARSET', 'utf-8'))
            content_type = 'application/json'
            content_type = '; '.join([content_type, charset])
            http_ret = HttpResponse(json_ret,
                content_type=content_type)

            # The following are for IE especially
            http_ret['Pragma'] = 'no-cache'
            http_ret['Cache-Control'] = 'must-revalidate'
            http_ret['If-Modified-Since'] = str(datetime.datetime.utcnow())

            return http_ret
        except Exception, e:
            return HttpResponseServerError(content=unicode(e))
コード例 #6
0
def deck_create(request, post_save_redirect=None, cancel_redirect='add_decks'):
    cancel_redirect = reverse(cancel_redirect)

    if post_save_redirect is not None:
        post_save_redirect = reverse(post_save_redirect)

    if request.method == 'POST':

        deck_form = DeckForm(request.POST)
        if deck_form.is_valid():
            new_deck = deck_form.save(commit=False)
            new_deck.owner = request.user
            new_deck.save()

            if 'tags' in deck_form.cleaned_data:
                new_deck.tags = deck_form.cleaned_data['tags']

            if post_save_redirect is None:
                post_save_redirect = new_deck.get_absolute_url()
            else:
                post_save_redirect = reverse(post_save_redirect)

            return HttpResponse(json_encode({
                'success': True,
                'postRedirect': post_save_redirect
            }),
                                mimetype='text/javascript')
        else:
            #FIXME post_redirect for failure? handle in ajax?
            return HttpResponse(json_encode({'success': False}),
                                mimetype='text/javascript')
    else:
        deck_form = DeckForm()
    return render_to_response(
        'flashcards/deck_form.html', {
            'form': deck_form,
            'post_save_redirect': post_save_redirect,
            'cancel_redirect': cancel_redirect,
        },
        context_instance=RequestContext(request))  #todo:post/pre redirs
コード例 #7
0
ファイル: decorators.py プロジェクト: santoshpy/manabi
 def wrapper(request, *args, **kwargs):
     try:
         return json_response(all_http_methods(view_func))(request, *args,
                                                           **kwargs)
     except ApiException as e:
         # Wrap our ApiException message in our container format
         ret = {'success': False}
         error = e.args
         if len(error) == 1:
             error = error[0]
         ret['error'] = error
         json_ret = json_encode(ret)
         return HttpResponse(json_ret)
コード例 #8
0
 def wrapper(request, *args, **kwargs):
     try:
         return json_response(
                all_http_methods(view_func))(request, *args, **kwargs)
     except ApiException as e:
         # Wrap our ApiException message in our container format
         ret = {'success':  False}
         error = e.args
         if len(error) == 1:
             error = error[0]
         ret['error'] = error
         json_ret = json_encode(ret)
         return HttpResponse(json_ret)
コード例 #9
0
ファイル: crud.py プロジェクト: aehlke/manabi
def deck_delete(request, deck_id, post_delete_redirect='/flashcards/decks'): #todo: pass post_*_redirect from urls.py
    obj = get_object_or_404(Deck, pk=deck_id)
    if obj.owner_id != request.user.id: #and not request.User.is_staff():
        raise forms.ValidationError('You do not have permission to access this flashcard deck.')
    if request.method == 'POST':
        if obj.subscriber_decks.filter(active=True).count() > 0: #exists():
            obj.active = False
            obj.save()
        else:
            obj.delete_cascading()
        return HttpResponse(json_encode({'success':True}), mimetype='text/javascript')
    else:
        return render_to_response('flashcards/deck_confirm_delete.html',
            {'deck': obj,
             'post_delete_redirect': post_delete_redirect,
             'container_id': 'deckDialog'})
コード例 #10
0
ファイル: crud.py プロジェクト: aehlke/manabi
def deck_update(request, deck_id):
    deck = get_object_or_404(Deck, pk=deck_id)
    if deck.owner_id != request.user.id: #and not request.User.is_staff():
        raise forms.ValidationError('You do not have permission to access this flashcard deck.')
    if request.method == 'POST':
        deck_form = DeckForm(request.POST, instance=deck)
        if deck_form.is_valid():
            deck = deck_form.save()
            return HttpResponse(json_encode({'success':True}), mimetype='text/javascript')
    else:
        deck_form = DeckForm(instance=deck)
    return render_to_response('flashcards/deck_form.html', 
        {'form': deck_form,
         'deck': deck,
         'container_id': 'deckDialog',
         'post_save_redirect': '/flashcards/decks'}) #todo:post/pre redirs
コード例 #11
0
ファイル: widgets.py プロジェクト: kanika901/lighthouse
    def build_attrs(self, extra_attrs=None, **kwargs):
        """Overwritten helper function for building an attribute dictionary.
        This helper also takes care passing the used dojo modules to the
        collector. Furthermore it mixes in the used field attributes into the
        attributes of this widget.
        """
        # gathering all widget attributes
        attrs = dict(self.attrs, **kwargs)
        field_attr = self.default_field_attr_map.copy(
        )  # use a copy of that object. otherwise changed field_attr_map would overwrite the default-map for all widgets!
        field_attr.update(self.field_attr_map
                          )  # the field-attribute-mapping can be customzied
        if extra_attrs:
            attrs.update(extra_attrs)
        # assigning dojoType to our widget
        dojo_type = getattr(self, "dojo_type", False)
        if dojo_type:
            attrs["dojoType"] = dojo_type  # add the dojoType attribute

        # fill the global collector object
        if getattr(self, "alt_require", False):
            dojo_collector.add_module(self.alt_require)
        elif dojo_type:
            dojo_collector.add_module(self.dojo_type)
        extra_requires = getattr(self, "extra_dojo_require", [])
        for i in extra_requires:
            dojo_collector.add_module(i)

        # mixin those additional field attrs, that are valid for this widget
        extra_field_attrs = attrs.get("extra_field_attrs", False)
        if extra_field_attrs:
            for i in self.valid_extra_attrs:
                field_val = extra_field_attrs.get(i, None)
                new_attr_name = field_attr.get(i, None)
                if field_val is not None and new_attr_name is not None:
                    attrs = self._mixin_attr(attrs, new_attr_name, field_val)
            del attrs["extra_field_attrs"]

        # now encode several attributes, e.g. False = false, True = true
        for i in attrs:
            if isinstance(attrs[i], bool):
                attrs[i] = json_encode(attrs[i])
        return attrs
コード例 #12
0
ファイル: views.py プロジェクト: afiler/sqladmin
def fetch(request, db=None, table=None):
    debug(repr(request))
    q = request.REQUEST.get("q", None)
    callback_param_name = request.REQUEST.get("callback", None)
    # items = re.match('items=(\d+)-(\d+)', request.META.get('Range', ''))
    # start = items and items.group(1)
    # stop = items and items.group(2)
    ##return dbx.fetch_hash(q, start=start, stop=stop)
    items = re.match("items=(\d+)-(\d+)", request.META.get("HTTP_RANGE", ""))
    if items:
        bottom = int(items.group(1))
        top = int(items.group(2))
    else:
        # return HttpResponseBadRequest()
        bottom = 1
        top = 100

    try:
        if db and table:
            table = dbx.Table(db=db, table=table)
            data = table.fetch_rows(bottom, top)
        elif q:
            result = dbx.fetch(q, bottom=bottom, top=top, return_columns=True)
            data = {"columns": result[1], "data": result[0]}
            # data = dbx.fetch_hash(q, bottom=bottom, top=top)
    except dbx.QueryError as error:
        return HttpResponseBadRequest(str(error))

    data = json_encode(data)
    if callback_param_name:
        data = "%s(%s)" % (callback_param_name, data)

    response = HttpResponse(data, mimetype="application/json; charset=%s" % settings.DEFAULT_CHARSET)
    # XXX need to fix this for raw queries
    if db and table:
        response["Content-Range"] = "items %s-%s/%s" % (bottom, top, table.total_rows)
    # The following are for IE especially
    response["Pragma"] = "no-cache"
    response["Cache-Control"] = "must-revalidate"
    response["If-Modified-Since"] = str(datetime.datetime.now())

    return response
コード例 #13
0
def deck_update(request, deck_id):
    deck = get_object_or_404(Deck, pk=deck_id)
    if deck.owner_id != request.user.id:  #and not request.User.is_staff():
        raise forms.ValidationError(
            'You do not have permission to access this flashcard deck.')
    if request.method == 'POST':
        deck_form = DeckForm(request.POST, instance=deck)
        if deck_form.is_valid():
            deck = deck_form.save()
            return HttpResponse(json_encode({'success': True}),
                                mimetype='text/javascript')
    else:
        deck_form = DeckForm(instance=deck)
    return render_to_response(
        'flashcards/deck_form.html', {
            'form': deck_form,
            'deck': deck,
            'container_id': 'deckDialog',
            'post_save_redirect': '/flashcards/decks'
        })  #todo:post/pre redirs
コード例 #14
0
ファイル: widgets.py プロジェクト: rubendario25/dojango
    def build_attrs(self, extra_attrs=None, **kwargs):
        """Overwritten helper function for building an attribute dictionary.
        This helper also takes care passing the used dojo modules to the
        collector. Furthermore it mixes in the used field attributes into the
        attributes of this widget.
        """
        # gathering all widget attributes
        attrs = dict(self.attrs, **kwargs)
        field_attr = self.default_field_attr_map.copy() # use a copy of that object. otherwise changed field_attr_map would overwrite the default-map for all widgets!
        field_attr.update(self.field_attr_map) # the field-attribute-mapping can be customzied
        if extra_attrs:
            attrs.update(extra_attrs)
        # assigning dojoType to our widget
        dojo_type = getattr(self, "dojo_type", False)
        if dojo_type:
            attrs["dojoType"] = dojo_type # add the dojoType attribute

        # fill the global collector object
        if getattr(self, "alt_require", False):
            dojo_collector.add_module(self.alt_require)
        elif dojo_type:
            dojo_collector.add_module(self.dojo_type)
        extra_requires = getattr(self, "extra_dojo_require", [])
        for i in extra_requires:
            dojo_collector.add_module(i)

        # mixin those additional field attrs, that are valid for this widget
        extra_field_attrs = attrs.get("extra_field_attrs", False)
        if extra_field_attrs:
            for i in self.valid_extra_attrs:
                field_val = extra_field_attrs.get(i, None)
                new_attr_name = field_attr.get(i, None)
                if field_val is not None and new_attr_name is not None:
                    attrs = self._mixin_attr(attrs, new_attr_name, field_val)
            del attrs["extra_field_attrs"]

        # now encode several attributes, e.g. False = false, True = true
        for i in attrs:
            if isinstance(attrs[i], bool):
                attrs[i] = json_encode(attrs[i])
        return attrs
コード例 #15
0
def deck_delete(request,
                deck_id,
                post_delete_redirect='/flashcards/decks'
                ):  #todo: pass post_*_redirect from urls.py
    obj = get_object_or_404(Deck, pk=deck_id)
    if obj.owner_id != request.user.id:  #and not request.User.is_staff():
        raise forms.ValidationError(
            'You do not have permission to access this flashcard deck.')
    if request.method == 'POST':
        if obj.subscriber_decks.filter(active=True).count() > 0:  #exists():
            obj.active = False
            obj.save()
        else:
            obj.delete_cascading()
        return HttpResponse(json_encode({'success': True}),
                            mimetype='text/javascript')
    else:
        return render_to_response(
            'flashcards/deck_confirm_delete.html', {
                'deck': obj,
                'post_delete_redirect': post_delete_redirect,
                'container_id': 'deckDialog'
            })
コード例 #16
0
ファイル: views.py プロジェクト: afiler/sqladmin
def fetch_table(request, db, table):
    items = re.match("items=(\d+)-(\d+)", request.META.get("HTTP_RANGE", ""))
    if items:
        bottom = int(items.group(1))
        top = int(items.group(2))
    else:
        # return HttpResponseBadRequest()
        bottom = 1
        top = 100

    table = dbx.Table(db=db, table=table)
    data = table.fetch_rows(bottom, top)
    # data = {'identifier': table.pk, 'items': items}
    # ret = __prepare_json_ret(request, items)
    data = json_encode(data)
    response = HttpResponse(data, mimetype="application/json; charset=%s" % settings.DEFAULT_CHARSET)
    response["Content-Range"] = "items %s-%s/%s" % (bottom, top, table.total_rows)
    # The following are for IE especially
    response["Pragma"] = "no-cache"
    response["Cache-Control"] = "must-revalidate"
    response["If-Modified-Since"] = str(datetime.datetime.now())

    return response
コード例 #17
0
def json(input):
    return json_encode(input)
コード例 #18
0
def json(input):
    return json_encode(input)