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
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))
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')
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))
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
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)
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)
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'})
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
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
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
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
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
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' })
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
def json(input): return json_encode(input)