Example #1
0
def index(request):
	if request.method == 'POST':
		form = BookmarkForm(request.POST)
		if form.is_valid():
			new_bookmark = form.save()
			raw_tags = form.cleaned_data['tags'].split(',')
			if raw_tags:
				for raw_tag in raw_tags:
					raw_tag = raw_tag.strip().replace(' ', '-').lower()
					tag_slug = urllib.quote(raw_tag)
					tag, created = Tag.objects.get_or_create(slug=tag_slug)
					tag.save()
					tag.bookmarks.add(new_bookmark)
			if request.is_ajax():
				return render(request, 'bookmark.html', {'bookmark': new_bookmark})
			return redirect(index)
		else:
			response = 'Errors: '
			for key in form.errors.keys():
				value = form.errors[key]
				errors = ''
				for error in value:
					errors = errors + error + ' '
				response = response + ' ' + key + ': ' + errors
			return HttpResponse('<li class="error">' + response + '</li>')
	else:
		bookmarks = Bookmark.objects.all().order_by('-timestamp')[:10]
		current_user = request.user
		form = BookmarkForm(initial={'author': current_user})
		context = {
			'bookmarks': bookmarks,
			'form': form,
		}
		return render(request, 'index.html', context)
Example #2
0
    def test_form_does_not_validate_with_no_url(self):
        form_data = {
            'name': '',
            'url': 'https://www.google.com',
        }

        form = BookmarkForm(data=form_data)
        self.assertFalse(form.is_valid())
Example #3
0
def add_bookmark():
    form = BookmarkForm(link='http://')
    if form.validate_on_submit() and request.method == 'POST':
        # Get form data
        link = form.link.data
        follow_redirects = form.follow_redirects.data  # T/F for following link redirects
        # Test that link works, or return error to user
        try:
            r = requests.get(link,
                             headers={'user-agent': USER_AGENT},
                             allow_redirects=follow_redirects,
                             timeout=TIMEOUT)
            r.raise_for_status()
        # Exceptions for 400 or 500 errors
        except requests.exceptions.HTTPError as e:
            flash('Please check your link. It leads to this error: {}.'.format(
                e),
                  category='danger')
        # Missing schema
        except requests.exceptions.MissingSchema as e:
            flash('No schema. Did you mean http://{}?'.format(link),
                  category='danger')
        # Timeout errors
        except requests.exceptions.Timeout:
            flash('There was a timeout error. Please check URL.',
                  category='danger')
        # Connection errors
        except requests.exceptions.ConnectionError:
            flash('Could not connect to your link. Please check URL.',
                  category='danger')
        # Too many redirects
        except requests.exceptions.TooManyRedirects:
            flash('Exceeded max number of redirects. Please check URL.',
                  category='danger')
        # All other requests-related exceptions
        except requests.exceptions.RequestException as e:
            flash('Please check your link. It leads to this error: {}.'.format(
                e),
                  category='danger')
        # No errors when requesting link, so add to database
        else:
            # Generate a possible id
            b_id = hex_gen()
            # If it exists, keep regenerating
            while (Bookmark.query.filter(Bookmark.id == b_id).one_or_none()
                   is not None):
                b_id = hex_gen()
            url = r.url  # Get final url (from redirects)
            url_root = request.url_root
            b = Bookmark(b_id, link=url, user_id=flask_login.current_user.id)
            db_session.add(b)
            db_session.commit()
            msg_uf = ('Successfully added {0}. Your short link is ' +
                      '<a target="_blank" href="{1}">{1}</a>.')
            msg = msg_uf.format(url, url_root + b_id)
            flash(Markup(msg), category='success')
            return redirect(url_for('add_bookmark'), 303)
    return render_template('add_bookmark.html', form=form)
Example #4
0
    def test_form_validates(self):
        form_data = {
            'name': 'Bookmark 1',
            'url': 'https://www.google.com',
            'notes': 'This is the first note.',
        }

        form = BookmarkForm(data=form_data)
        self.assertTrue(form.is_valid())
Example #5
0
    def test_form_does_not_validate_with_empty_data(self):
        form_data = {
            'name': '',
            'url': '',
            'notes': '',
        }

        form = BookmarkForm(data=form_data)
        self.assertFalse(form.is_valid())
Example #6
0
def add(request):
    if request.method == "POST":
        bookmark_form = BookmarkForm(request.user, request.POST)
        if bookmark_form.is_valid():
            bookmark_instance = bookmark_form.save()

            if bookmark_form.should_redirect():
                return HttpResponseRedirect(bookmark.page.url)
            else:
                return HttpResponseRedirect(reverse("all_bookmarks"))
    else:
        initial = {}
        if "url" in request.GET:
            initial["url"] = request.GET["url"]
        if "title" in request.GET:
            initial["title"] = request.GET["title"]
        if "redirect" in request.GET:
            initial["redirect"] = request.GET["redirect"]

        if initial:
            bookmark_form = BookmarkForm(initial=initial)
        else:
            bookmark_form = BookmarkForm()

    bookmarks_add_url = "http://" + Site.objects.get_current(
    ).domain + reverse("add_bookmark")
    bookmarklet = "javascript:location.href='%s?url='+encodeURIComponent(location.href)+';title='+encodeURIComponent(document.title)+';redirect=on'" % bookmarks_add_url
    return render(request, ["bookmarks/add.html"], {
        "bookmarklet": bookmarklet,
        "bookmark_form": bookmark_form,
    })
Example #7
0
def bookmark_save(request):
    if request.method == 'POST':
        form = BookmarkForm(request.POST)
        
        if form.is_valid():
            
            #Create or get link
            
            link,dummy = Link.objects.get_or_create(url=form.cleaned_data['url'])
            
            #create or get bookmark
            
            bookmark,created = Bookmark.objects.get_or_create(
                user = request.user,link=link
            )
            
            #update bookmark title
            
            bookmark.title = form.cleaned_data['title']
            
            #if bookmark is being updated clear old tag list
            
            if not created:
                bookmark.tag_set.clear()
                
            #create new tag list
            
            tag_names = form.cleaned_data['tags'].split()
            
            for tag_name in tag_names:
                tag,dummy = Tag.objects.get_or_create(name=tag_name)
                bookmark.tag_set.add(tag)
                
            #share bookmark on main page if requested
            
            if form.cleaned_data['share']:
                shared,created = SharedBookmark.objects.get_or_create(bookmark=bookmark)
                
                if created:
                    shared.users_voted.add(request.user)
                    shared.save()
                
            #save bookmark to database
            
            bookmark.save()
            
            return HttpResponseRedirect('/bookmarks/user/%s'% request.user.username)
            
    else:
        form = BookmarkForm()
        
    variables = RequestContext(request,{'form':form})
    
    return render_to_response('bookmark_save.html',variables)
Example #8
0
def bookmark_edit(id):
    bookmark = Bookmark.query.filter_by(id=id).first()
    if not bookmark:
        return abort(404)
    form = BookmarkForm(request.form, obj=bookmark)
    if form.validate_on_submit():
        form.populate_obj(bookmark)
        db.session.add(bookmark)
        db.session.commit()
        flash(u'Done!')
        return redirect('%d' % bookmark.id)
    flash_errors(form)
    return render_template('bookmark-form.html', form=form)
Example #9
0
def edit_bookmark(bookmark_id):
    bookmark = Bookmark.query.get_or_404(bookmark_id)
    if current_user != bookmark.user:
        return render_template('403.html')
    form = BookmarkForm(obj=bookmark)
    if form.validate_on_submit():
        form.populate_obj(bookmark)
        db.session.commit()
        flash("Stored '{}'".format(bookmark.description))
        return redirect(url_for('user', username=current_user.username))
    return render_template('bookmark_form.html',
                           form=form,
                           title="Edit bookmark")
Example #10
0
def bookmark_edit(id):
    bookmark = Bookmark.query.filter_by(id=id).first()
    if not bookmark:
        return abort(404)
    form = BookmarkForm(request.form, obj=bookmark)
    if form.validate_on_submit():
        form.populate_obj(bookmark)
        db.session.add(bookmark)
        db.session.commit()
        flash(u'Done!')
        return redirect('%d' % bookmark.id)
    flash_errors(form)
    return render_template('bookmark-form.html', form=form)
Example #11
0
def add_bookmark(request):
    if request.method == 'POST':
        form = BookmarkForm(request.POST)
        if form.is_valid():
            bookmark = form.save(commit=False)
            bookmark.author = request.user
            bookmark.save()
            return render_to_response('add_bookmark_thanks.html', 
                                        context_instance=RequestContext(request))
    else:
        form = BookmarkForm()
        
    return render_to_response('add_bookmark.html', 
                                {'form':form}, 
                                context_instance=RequestContext(request))
Example #12
0
def get_form_for_sound(request, sound_id):
    sound = Sound.objects.get(id=sound_id)
    form = BookmarkForm(instance=Bookmark(name=sound.original_filename),
                        prefix=sound.id)
    form.fields['category'].queryset = BookmarkCategory.objects.filter(
        user=request.user)
    categories_already_containing_sound = BookmarkCategory.objects.filter(
        user=request.user, bookmarks__sound=sound).distinct()
    add_bookmark_url = '/'.join(
        reverse('add-bookmark', args=[sound_id]).split('/')[:-2]) + '/'
    add_bookmark_url = '/'.join(
        request.build_absolute_uri(reverse(
            'add-bookmark', args=[sound_id])).split('/')[:-2]) + '/'

    data_dict = {
        'bookmarks':
        Bookmark.objects.filter(user=request.user, sound=sound).count() != 0,
        'sound_id':
        sound.id,
        'form':
        form,
        'categories_aready_containing_sound':
        categories_already_containing_sound,
        'add_bookmark_url':
        add_bookmark_url
    }
    template = 'bookmarks/bookmark_form.html'
    return render_to_response(template,
                              data_dict,
                              context_instance=RequestContext(request))
Example #13
0
def add():
    form = BookmarkForm()
    if form.validate_on_submit():
        url = form.url.data
        description = form.description.data
        tags = form.tags.data
        bm = Bookmark(user=current_user,
                      url=url,
                      description=description,
                      tags=tags)
        db.session.add(bm)
        db.session.commit()
        flash("Stored '{}'".format(description))
        return redirect(url_for('index'))
    return render_template('bookmark_form.html',
                           form=form,
                           title="Add a bookmark")
def bookmarks_ajax(request):
    response_data = {}
    response_data['success'] = False
    response_data['errors'] = ''

    if not request.method == 'POST'or not request.is_ajax():
        return http.HttpResponseForbidden('Forbidden.')

    data = request.POST
    files = request.FILES
    form = BookmarkForm(data, files, user=request.user)

    if form.is_valid():
        try:
            b = Bookmark.objects.get(article_id=form.cleaned_data.get('article_id'),
                                     user=request.user)
            b.delete()
        except Bookmark.DoesNotExist:
            b = Bookmark(article_id=form.cleaned_data.get('article_id'),
                         user=request.user)
            b.save()

        # Delete bookmarks session key so they get rebuilt on next request
        # via middleware
        if request.session.get('bookmarks'):
            del request.session['bookmarks']

        # Delete article instance cache
        a = Article.objects.get(pk=form.cleaned_data.get('article_id'))
        a.clear_cache()

        # Delete user dashboard cache if possible
        try:
            urlpath = URLPath.objects.get(slug=request.user.username)
            urlpath.article.clear_cache()
        except:
            pass

        response_data['success'] = True
    else:
        response_data['errors'] = dict((k, map(unicode, v))
                                       for (k, v) in form.errors.iteritems())

    return http.HttpResponse(simplejson.dumps(response_data),
                             mimetype='application/json; charset=UTF-8')
Example #15
0
def bookmark_new():
    form = BookmarkForm(request.form)
    if form.validate_on_submit():
        try:
            bookmark = Bookmark(form.url.data,
                                form.title.data,
                                description=form.description.data,
                                tags=form.tags.data,
                                public=form.public.data)
            db.session.add(bookmark)
            db.session.commit()
        except IntegrityError:
            flash(u'Boomark for "%s" exists already.' % form.url.data, 'error')
            return render_template('bookmark-form.html', form=form)
        flash(u'Done!')
        return redirect('%d' % bookmark.id)
    flash_errors(form)
    return render_template('bookmark-form.html', form=form)
Example #16
0
def add(request):
    if request.method == 'POST':
        form = BookmarkForm(request.POST)
        if form.is_valid():
            bookmark = Bookmark.objects.get(url=form.cleaned_data['url'])
            profile = Profile.objects.get(user_id = request.user.id)
            if bookmark is None:
                bookmark = form.save(commit = False)
                bookmark.author = profile
                bookmark.save()
            bookmark.subscribers.add(profile)

            return redirect(reverse('bookmarks:index'))
    else:
        form = BookmarkForm()

    return render(request, 'bookmarks/add.html', {
        'form' : form
    })
Example #17
0
def modify(request, bookmark_id):
    bookmark = get_object_or_404(Bookmark, pk=bookmark_id, author=request.user)
    if request.method == 'POST':
        form = BookmarkForm(request.POST, instance=bookmark)
        if form.is_valid():
            bookmark = form.save(commit=False)
            bookmark.author = request.user
            bookmark.save()
            messages.success(request, 'Bookmark details updated.')
            return HttpResponseRedirect('/bookmark/%s/'%bookmark_id)
        else:
            return render_to_response('bookmark_modify.html', 
                                        {'bookmark_id': bookmark_id, 'form': form}, 
                                        context_instance=RequestContext(request))
    else:
        form = BookmarkForm(instance=bookmark)
        return render_to_response('bookmark_modify.html', 
                                    {'bookmark_id': bookmark_id, 'form': form}, 
                                    context_instance=RequestContext(request))
Example #18
0
def bookmark_new():
    form = BookmarkForm(request.form)
    if form.validate_on_submit():
        try:
            bookmark = Bookmark(form.url.data,
                        form.title.data,
                        description=form.description.data,
                        tags=form.tags.data,
                        public=form.public.data)
            db.session.add(bookmark)
            db.session.commit()
        except IntegrityError:
            flash(u'Boomark for "%s" exists already.' % form.url.data,
                    'error')
            return render_template('bookmark-form.html', form=form)
        flash(u'Done!')
        return redirect('%d' % bookmark.id)
    flash_errors(form)
    return render_template('bookmark-form.html', form=form)
Example #19
0
def create_bookmarks(request):
    if request.method == "POST":
        form = BookmarkForm(request.POST)
        if form.is_valid():
            url = form.cleaned_data['url']
            urlname = form.cleaned_data['urlname']
            course = form.cleaned_data['course']
            Bookmark.add_bookmark(course, url, urlname)
            messages.success(request, "Bookmark saved successfully!")
            return redirect('bookmarks:create')
    else:
        form = BookmarkForm()
    form.fields["course"].queryset = Course.objects.filter(user=request.user)
    bookmarks = Bookmark.objects.select_related('course').filter(
        course__user=request.user)
    return render(request, 'bookmarks/bookmarks.html', {
        'bookmarks': bookmarks,
        'form': form,
    })
Example #20
0
def add_bookmark(request, sound_id):
    sound = get_object_or_404(Sound, id=sound_id)
    
    if request.POST:
        form = BookmarkForm(request.POST, instance=Bookmark(user=request.user, sound=sound))
        form.fields['category'].queryset = BookmarkCategory.objects.filter(user=request.user)
        if form.is_valid():
            form.save()
    
    if request.is_ajax():
        return HttpResponse()   
    
    else:
        msg = "Added new bookmark for sound \"" + sound.original_filename + "\"."
        messages.add_message(request, messages.WARNING, msg)
        
        next = request.GET.get("next","")
        if next:
            return HttpResponseRedirect(next)
        else:
            return HttpResponseRedirect(reverse("sound", args=[sound.user.username, sound.id]))
Example #21
0
def add_bookmark(request, sound_id):
    sound = get_object_or_404(Sound, id=sound_id)

    if request.POST:
        form = BookmarkForm(request.POST, instance=Bookmark(user=request.user, sound=sound))
        form.fields['category'].queryset = BookmarkCategory.objects.filter(user=request.user)
        if form.is_valid():
            form.save()

    if request.is_ajax():
        return HttpResponse()

    else:
        msg = "Added new bookmark for sound \"" + sound.original_filename + "\"."
        messages.add_message(request, messages.WARNING, msg)

        next = request.GET.get("next", "")
        if next:
            return HttpResponseRedirect(next)
        else:
            return HttpResponseRedirect(reverse("sound", args=[sound.user.username, sound.id]))
Example #22
0
def add(request):
    if request.method == "POST":
        bookmark_form = BookmarkForm(request.user, request.POST)
        if bookmark_form.is_valid():
            bookmark_instance = bookmark_form.save()

            if bookmark_form.should_redirect():
                return HttpResponseRedirect(bookmark.page.url)
            else:
                return HttpResponseRedirect(reverse("all_bookmarks"))
    else:
        initial = {}
        if "url" in request.GET:
            initial["url"] = request.GET["url"]
        if "title" in request.GET:
            initial["title"] = request.GET["title"]
        if "redirect" in request.GET:
            initial["redirect"] = request.GET["redirect"]

        if initial:
            bookmark_form = BookmarkForm(initial=initial)
        else:
            bookmark_form = BookmarkForm()

    bookmarks_add_url = "http://" + Site.objects.get_current().domain + reverse("add_bookmark")
    bookmarklet = "javascript:location.href='%s?url='+encodeURIComponent(location.href)+';title='+encodeURIComponent(document.title)+';redirect=on'" % bookmarks_add_url
    return render(request, ["bookmarks/add.html"], {
        "bookmarklet": bookmarklet,
        "bookmark_form": bookmark_form,
    })