示例#1
0
文件: views.py 项目: rootart/snippify
def history(request, id = None):
	""" Show history list or display diff between two versions """
	snippet = get_object_or_404(Snippet, pk=id)
	if request.GET.get('v'):
		version = int(request.GET['v'])
		if version == 0:
			body = snippet.highlight(snippet.body, get_lexer_by_name(snippet.lexer))
		else:
			ver = get_object_or_404(SnippetVersion, snippet = snippet, version=version)
			body = snippet.highlight(ver.body, get_lexer_by_name(snippet.lexer))
		return render_to_response('snippets/version.html', {'snippet': snippet, 'version': version, 'body': body, 'lines': range(1, body.count('\n'))},
								context_instance=build_context(request))
	elif request.GET.get('v1') and request.GET.get('v2'):
		version1 = int(request.GET['v1'])
		version2 = int(request.GET['v2'])
		if version1 == 0:
			version1_label = 'current'
			body_1 = snippet.body
		else:
			version1_label = 'v' + str(version1)
			body_1 = get_object_or_404(SnippetVersion, snippet = snippet, version=version1).body
		if version2 == 0:
			version2_label = 'current'
			body_2 = snippet.body
		else:
			version2_label = 'v' + str(version2)
			body_2 = get_object_or_404(SnippetVersion, snippet = snippet, version=version2).body
		fromlines = str(body_1).splitlines(True)
		tolines = str(body_2).splitlines(True)
		debug(fromlines)
		debug(tolines)
		if len(fromlines) >= len(tolines):
			no = len(fromlines)
		else:
			no = len(tolines)
		diffbody = ''
		for line in difflib.unified_diff(fromlines, tolines, fromfile=version1_label, tofile=version2_label):
			diffbody = diffbody + str(line)
		diffbody = snippet.highlight(diffbody, get_lexer_by_name('diff'))
		return render_to_response('snippets/diff.html', {
			'snippet': snippet,
			'version1': version1,
			'version2': version2,
			'diffbody': diffbody,
			'lines': range(1, diffbody.count('\n'))
		},
		context_instance=build_context(request))
	else:
		snippet_versions = SnippetVersion.objects.filter(snippet = snippet).all()
		return render_to_response('snippets/history_index.html', {'snippet': snippet, 'snippet_versions': snippet_versions},
								context_instance=build_context(request))
示例#2
0
文件: views.py 项目: rootart/snippify
def create(request):
	data = {}
	if request.method == 'POST':
		data['form'] = SnippetForm(request.POST) # A form bound to the POST data
		if data['form'].is_valid():
			formData = data['form'].save(commit = False)
			formData.author = request.user
			if not formData.lexer:
				try:
					lexer = guess_lexer(formData.body)
					for lex in LEXERS.itervalues():
						if lexer.name == lex[1]:
							formData.lexer = lex[2][0].lower()
				except ClassNotFound:
					formData.lexer = u'text'
			if 'preview' in request.POST:
				data['title'] = formData.title;
				data['preview_body'] = highlight(formData.body, get_lexer_by_name(formData.lexer), HtmlFormatter(cssclass = 'source'))
				data['lines'] = range(1, formData.body.count('\n') + 2)
				return render_to_response('snippets/process.html', data, context_instance=build_context(request))
			else:#save - notify followers this user and have the option on
				formData.body = str(formData.body).replace("\r\n","\n")
				formData.save()
				try:
					followers = UserFollow.objects.select_related().filter(followed_user=request.user).all()
				except:
					followers = None
				if followers: # this is very inneficient - find some other way
					for follower in followers:
						profile = follower.user.get_profile();
						if profile.followed_user_created: #User wants to recieve a notification
							queue = EmailQueue(
								mail_to=follower.user.email,
								mail_subject="Followed user created a new snippet",
								mail_body=render_to_string('emails/followed_user_created.txt', {
									'user': follower.user,
									'username': request.user.username,
									'SITE': request.META['HTTP_HOST']}
								)
							)
							queue.save()
				request.session['flash'] = ['#' + str(formData.pk) +' created successfuly', 'success']
				return HttpResponseRedirect('/accounts/profile/') # Redirect after POST
		else:
		   	return render_to_response('snippets/process.html', data, context_instance=build_context(request))
	else:
		data['form'] = SnippetForm() # An unbound form
	return render_to_response('snippets/process.html', data, context_instance=build_context(request))
示例#3
0
文件: views.py 项目: joskid/snippify
def edit(request):
    """ Update UserProfile """

    if request.method == 'POST':
        form = ProfileForm(request.POST,
                           instance=UserProfile.objects.get(user=request.user))
        if form.is_valid(): # All validation rules pass
            try:
                User.objects.filter(email=form.cleaned_data['email']).\
                exclude(pk=request.user.pk).get()
                request.session['flash'] = ['This e-mail is already in use',
                                            'error']
                return HttpResponseRedirect(
                    request.META.get('HTTP_REFERER', '/'))
            except User.DoesNotExist:#Check if the e-mail is not already in use
                pass
            request.user.email = form.cleaned_data['email']
            request.user.save()
            form.save()
            request.session['flash'] = ['Your profile has been updated',
                                        'success']
            return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
    else:
        form = ProfileForm(instance=UserProfile.objects.get(user=request.user),
                           initial = {'email': request.user.email})
    return render_to_response('accounts/edit.html', {'form': form},
                              context_instance=build_context(request))
示例#4
0
文件: views.py 项目: joskid/snippify
def read(request, pk):
    """Show a snippet with title, tags and render pygments body"""

    snippet = get_object_or_404(Snippet, pk=pk)
    if len(SnippetVersion.objects.filter(snippet=snippet).all()):
        versions = True
    else:
        versions = False

    comments_paginator = Paginator(SnippetComment.objects.filter(
                                                    snippet=snippet).all(), 2)
    try:
        comments = comments_paginator.page(int(request.GET.get('page', 1)))
    except EmptyPage:
        comments  = None

    snippet.highlight_body = snippet.highlight(snippet.body,
                                            get_lexer_by_name(snippet.lexer))

    return render_to_response('snippets/read.html', {
                'snippet': snippet,
                'comments': comments,
                'versions': versions,
                'lines': range(1, snippet.body.count('\n')+2),
            }, context_instance=build_context(request))
示例#5
0
文件: views.py 项目: joskid/snippify
def tag_view(request, tag):
    """ Show snippets of some tag """

    snippets = Snippet.objects.filter(tags__name__in=[tag, ]).all()

    return render_to_response('tags/view.html', {
        'tag': tag,
        'snippets': snippets
        }, context_instance=build_context(request))
示例#6
0
文件: views.py 项目: joskid/snippify
def search(request):
    """ Search using haystack """
    data = {}
    query = data['query'] = request.GET.get('q', '')
    results = _search(query)
    paginator = Paginator(results, 25)
    data['results'] = paginator.page(int(request.GET.get('page', 1)))
    return render_to_response('snippets/search.html', data,
                              context_instance=build_context(request))
示例#7
0
文件: views.py 项目: joskid/snippify
def snippets_index(request):
    """ Used for the front page. Return latest 5 snippets"""

    snippets = Snippet.objects.all()[:5]
    if snippets == None:
        snippets = []
    return render_to_response('pages/index.html', {
        'snippets': snippets, 'home_page': True },
                            context_instance=build_context(request))
示例#8
0
文件: views.py 项目: fanboi/snippify
def following(request, username= None):
	""" Who is following username """
	data = {}
	data['userdata'] = get_object_or_404(User, username=username)
	try:
		data['users'] = UserFollow.objects.select_related().filter(user=data['userdata']).all()
	except:
		data['users'] = None
	return render_to_response('accounts/following.html', data,  context_instance=build_context(request))
示例#9
0
文件: views.py 项目: rootart/snippify
def user(request, username=None):
	"""Show user's profile"""
	if username == request.user.username:
		return HttpResponseRedirect('/accounts/profile')
	userdata = get_object_or_404(User, username=username)
	profile = UserProfile.objects.filter(user=userdata).get()
	if profile.profile_privacy == 'private':
		raise Http404
	try:
		UserFollow.objects.filter(user=request.user, followed_user=userdata).get()
		is_following = True
	except:
		is_following = False
	if not user:
		raise Http404
	tags = []
	snippets = {}
	snippets_all = snippets = Snippet.objects.filter(author=userdata).filter(status='published').filter(privacy='public')
	paginator = Paginator(snippets, 25)
	try:
		page = int(request.GET.get('page', '1'))
	except:
		page = 1
	snippets = paginator.page(page).object_list
	for snippet in snippets_all:
		try:
			tag_list = Tag.objects.get_for_object(snippet)
			for tag in tag_list:
				if tag not in tags:
					tags.append(tag)
		except:
			pass
	try:
		followed_users = UserFollow.objects.select_related().filter(user=userdata).all()[0:14]
	except:
		followed_users = None

	try:
		followers = UserFollow.objects.select_related().filter(followed_user=userdata).all()[0:14]
	except:
		followers = None

	return render_to_response(
		'accounts/user.html',
		{
			'userdata': userdata,
			'profile': profile,
			'tags': tags,
			'snippets': snippets,
			'followed_users': followed_users,
			'followers': followers,
			'is_following': is_following,
			'sidebared': True,
		},
		context_instance=build_context(request)
	)
示例#10
0
文件: views.py 项目: rootart/snippify
def followers(request, username = None):
	""" Who are your followers Jesus? """
	data = {}
	data['userdata'] = get_object_or_404(User, username=username)
	data['attribute'] = 'user'
	try:
		data['users'] = UserFollow.objects.select_related().filter(followed_user=data['userdata']).all()
	except:
		data['users'] = None
	return render_to_response('accounts/followers.html', data,  context_instance=build_context(request))
示例#11
0
文件: views.py 项目: joskid/snippify
def tag_user(request, tag, username):
    """ Display all `tag` snippets of `username` user """

    user = get_object_or_404(User, username=username)
    snippets = Snippet.objects.filter(author=user).filter(
        tags__name__in=[tag, ]).all()

    return render_to_response('tags/view.html', {
        'tag': tag,
        'snippets': snippets
        }, context_instance=build_context(request))
示例#12
0
文件: views.py 项目: rootart/snippify
def index(request, extra_context=None):
    """ 
	This is the first page
	Need to return latest 10 snippets
	@todo: tag cloud
	"""
    snippets = Snippet.objects.all()[0:5]
    if snippets == None:
        snippets = []
    return render_to_response(
        "pages/index.html",
        {"snippets": snippets, "home_page": True},
        context_instance=build_context(request, extra_context=extra_context),
    )
示例#13
0
文件: views.py 项目: rootart/snippify
def update(request, id=None):
	snippet = get_object_or_404(Snippet, pk=id)
	if request.user.id == snippet.author_id:
		if request.method == 'POST': # If the form has been submitted...
			form = SnippetForm(request.POST) # A form bound to the POST data
			if form.is_valid():
				formData = form.save(commit = False)
				formData.pk = snippet.pk
				if 'delete' in request.POST:
					snippet.delete()
					request.session['flash'] = ['#' + str(formData.pk) +' deleted successfuly', 'sucess']
					return HttpResponseRedirect('/accounts/profile/')
				if 'preview' in request.POST:
					data = {}
					data['title'] = formData.title;
					data['preview_body'] = highlight(formData.body, get_lexer_by_name(formData.lexer), HtmlFormatter(cssclass = 'source'))
					data['lines'] = range(1, formData.body.count('\n') + 2)
					data['form'] = form
					data['snippet'] = snippet
					return render_to_response('snippets/process.html', data, context_instance=build_context(request))
				else: #save
					formData.author = request.user
					if not formData.lexer:
						try:
							lexer = guess_lexer(formData.body)
							for lex in LEXERS.itervalues():
								if lexer.name == lex[1]:
									formData.lexer = lex[2][0].lower()
						except ClassNotFound:
							formData.lexer = 'text'
					formData.save()
					if snippet.body != formData.body:
						try:
							last_version = SnippetVersion.objects.order_by('-version').filter(snippet = snippet).all()[0]
							new_version = SnippetVersion(snippet = snippet, version = last_version.version + 1, body = snippet.body)
							new_version.save()
						except:
							create_version = SnippetVersion(snippet = snippet, version = 1, body = snippet.body)
							create_version.save()
					request.session['flash'] = ['#' + str(formData.pk) +' updated successfuly', 'sucess'];
					return HttpResponseRedirect('/accounts/profile/') # Redirect after POST
			else:
			   	return render_to_response('snippets/process.html', {'form': form }, context_instance=build_context(request))
		else:
			form = SnippetForm(instance=snippet)
		return render_to_response('snippets/process.html', {'form': form, 'snippet': snippet }, context_instance=build_context(request))
	else:
		request.session['flash'] = ['Access denied', 'error'];
		return HttpResponseRedirect('/accounts/profile/') # Redirect after POST
示例#14
0
文件: views.py 项目: rootart/snippify
def profile(request):
	tags = []
	snippets = {}
	snippets_all = snippets = Snippet.objects.filter(author=request.user)
	paginator = Paginator(snippets, 25)
	try:
		page = int(request.GET.get('page', '1'))
	except:
		page = 1
	snippets = paginator.page(page).object_list
	for snippet in snippets_all:
		try:
			tag_list = Tag.objects.get_for_object(snippet)
			for tag in tag_list:
				if tag not in tags:
					tags.append(tag)
		except:
			pass
	try:
		profile_data = request.user.get_profile()
	except UserProfile.DoesNotExist:
		profile_data = None

	try:
		followed_users = UserFollow.objects.select_related().filter(user=request.user).all()[0:14]
	except:
		followed_users = None

	try:
		followers = UserFollow.objects.select_related().filter(followed_user=request.user).all()[0:14]
	except:
		followers = None
	return render_to_response(
		'accounts/profile.html',
		{
			'profile': profile_data,
			'tags': tags,
			'snippets': snippets,
			'followed_users': followed_users,
			'followers': followers,
			'sidebared': True,
		},
		context_instance=build_context(request)
	)
示例#15
0
文件: views.py 项目: fanboi/snippify
def read(request, id=None):
	snippet = get_object_or_404(Snippet, pk=id)
	if SnippetVersion.objects.filter(snippet = snippet).all():
		versions = True
	else:
		versions = False
	comments_paginator = Paginator(SnippetComment.objects.filter(snippet=snippet).all(), 2)
	comments = comments_paginator.page(int(request.GET.get('page', 1)))

	snippet.highlight_body = snippet.highlight(snippet.body, get_lexer_by_name(snippet.lexer))
	return render_to_response(
		'snippets/read.html',
		{
			'snippet': snippet,
			'comments': comments,
			'versions': versions,
			'lines': range(1, snippet.body.count('\n')+2),
		},
		context_instance=build_context(request)
	)
示例#16
0
文件: views.py 项目: rootart/snippify
def edit(request):
	if request.method == 'POST':
		form = EditForm(request.POST) # A form bound to the POST data
		if form.is_valid(): # All validation rules pass
			request.user.email = form.cleaned_data['email']
			request.user.save()

			profile = UserProfile.objects.get(user=request.user)
			profile.location = form.cleaned_data['location']
			profile.url = form.cleaned_data['url']
			profile.about = form.cleaned_data['about']
			profile.user_follows_you = form.cleaned_data['user_follows_you']
			profile.followed_user_created = form.cleaned_data['followed_user_created']
			profile.user_commented = form.cleaned_data['user_commented']
			#profile.user_shared = form.cleaned_data['user_shared']
			#profile.my_snippet_changed = form.cleaned_data['my_snippet_changed']
			profile.newsletter = form.cleaned_data['newsletter']
			profile.profile_privacy = form.cleaned_data['profile_privacy']
			profile.snippet_privacy = form.cleaned_data['snippet_privacy']

			profile.save()
			request.session['flash'] = ['Your profile has been updated', 'success']
	else:
		profile = UserProfile.objects.get(user=request.user)
		form = EditForm(initial = {
			'email': request.user.email,
			'location': profile.location,
			'url': profile.url,
			'about': profile.about,
			'user_follows_you': profile.user_follows_you,
			'followed_user_created': profile.followed_user_created,
			'user_commented': profile.user_commented,
			#'user_shared': profile.user_shared,
			#'my_snippet_changed': profile.my_snippet_changed,
			'newsletter': profile.newsletter,
			'profile_privacy': profile.profile_privacy,
			'snippet_privacy': profile.snippet_privacy,
		})
	return render_to_response('accounts/edit.html', {'form': form, }, context_instance=build_context(request))
示例#17
0
文件: views.py 项目: rootart/snippify
def index(request):
	""" My snippets  """
	snippets = Snippet.objects.filter(author=request.user)
	return render_to_response('snippets/index.html', {'snippets': snippets},
							context_instance=build_context(request))
示例#18
0
文件: views.py 项目: rootart/snippify
def search(request):
	data = {}
	data['query'] = request.GET.get('q', '')
	paginator = Paginator(Snippet.indexer.search(data['query']).prefetch(), 25)
	data['results'] = paginator.page(int(request.GET.get('page', 1)))
	return render_to_response('snippets/search.html', data, context_instance=build_context(request))
示例#19
0
文件: views.py 项目: joskid/snippify
def process(request, pk=None):
    """ Create/Update snippet """

    if pk is not None: #Update
        snippet = get_object_or_404(Snippet, pk=pk)
        form = SnippetUpdateForm(instance=snippet)

        if request.user != snippet.author and not request.user.is_staff:
            request.session['flash'] = ['Access denied', 'error']
            return HttpResponseRedirect('/accounts/profile/')

        if 'delete' in request.POST:
            snippet.delete()
            request.session['flash'] = ['#%s deleted successfuly' % pk,
                                        'sucess']
            return HttpResponseRedirect('/accounts/profile/')

    else: #Create
        snippet = None
        form = SnippetCreateForm()

    if request.method == 'POST':
        if snippet is not None:
            form = SnippetUpdateForm(request.POST, instance=snippet)
        else:
            form = SnippetCreateForm(request.POST)

        if not form.is_valid(): # redirect to form with errors
            return render_to_response('snippets/process.html', {
                'form': form
                }, context_instance=build_context(request))

        formData = form.save(commit=False)
        if snippet is None:
            formData.author = request.user
        if not formData.lexer:
            try:
                lexer = guess_lexer(formData.body)
                for lex in LEXERS.itervalues():
                    if lexer.name == lex[1]:
                        formData.lexer = lex[2][0].lower()
            except ClassNotFound:
                formData.lexer = 'text'
        formData.save()
        form.save_m2m() #Save tags

        if snippet is not None and snippet.body != formData.body:
            #The body has changed - create a new version
            try:
                last_version = SnippetVersion.objects.order_by('-version').\
                                        filter(snippet=snippet).all()[0]
                version = SnippetVersion(snippet=snippet,
                                         version=last_version.version + 1,
                                         body=snippet.body)
            except:
                version = SnippetVersion(snippet=snippet,
                                                version=1, body=snippet.body)
            version.save()

        request.session['flash'] = ['#%s %s successfuly' % (formData.pk,
            'update' if pk is not None else 'created'), 'sucess']
        return HttpResponseRedirect('/accounts/profile/')
    else:
        return render_to_response('snippets/process.html', {
            'form': form,
            'snippet': snippet
        }, context_instance=build_context(request))
示例#20
0
文件: views.py 项目: rootart/snippify
def user(request, tag = None, username = None):
	try:
		tag_object = Tag.objects.get(name=tag)
		snippets = TaggedItem.objects.get_by_model(Snippet, tag_object)
	except:
		snippets = None
	return render_to_response('tags/view.html', {'tag': tag, 'snippets': snippets}, context_instance=build_context(request))
示例#21
0
文件: views.py 项目: joskid/snippify
def tags_index(request):
    """ View for all tags """

    return render_to_response('tags/index.html', {'tags': Tag.objects.all()},
                              context_instance=build_context(request))
示例#22
0
文件: views.py 项目: joskid/snippify
def view_profile(request, username=None):
    """ Display profile info, such as snippets, tags, and followed users """

    #Set current user and check if it's my profile
    if username is None or username == request.user.username:
        user = request.user
        my_profile = True
    else:
        user = get_object_or_404(User, username=username)
        my_profile = False

    #If a user is created from the administration it may not have a profile
    try:
        user_profile = UserProfile.objects.filter(user=user).get()
    except UserProfile.DoesNotExist:
        raise Http404

    #Check if the profile is private
    if user != request.user and user_profile.profile_privacy == 'private':
        raise Http404

    #Check if the visiting user is following this user

    if request.user.is_anonymous():
        is_following = False
    else:
        try:
            UserFollow.objects.filter(user=request.user).filter(
                                                followed_user=user).get()
            is_following = True
        except UserFollow.DoesNotExist:
            is_following = False

    snippets = Snippet.objects.filter(author=user)
    paginator = Paginator(snippets, 25)
    page = request.GET.get('page', '1')

    tags = []
    for snippet in snippets.all():
        for tag in snippet.tags.all():
            if tag not in tags:
                tags.append(tag)

    followed_users = UserFollow.objects.select_related().filter(
        user=user).all()[:14]

    followers_list = UserFollow.objects.select_related().filter(
        followed_user=user).all()[:14]

    return render_to_response(
        'accounts/profile.html', {
            'userdata': user,
            'profile': user_profile,
            'tags': tags,
            'snippets': paginator.page(page).object_list,
            'followed_users': followed_users,
            'followers': followers_list,
            'is_following': is_following,
            'sidebared': True,
            'my_profile': my_profile,
        },
        context_instance=build_context(request)
    )
示例#23
0
文件: views.py 项目: rootart/snippify
def index(request):
	tags = Tag.objects.all()
	return render_to_response('tags/index.html', {}, context_instance=build_context(request))