def save_paste_and_codes(form, paste=None): if not paste: paste = Paste(user=current_user.user) paste.title = form.title.data paste.is_private = form.is_private.data paste.codes = [] tags = {} for tag in form.tags.data.split(): tags[tag.lower()] = tag.lower() for i, c in enumerate(form.codes): syntax = Syntax.objects(key=c.syntax.data).get_or_404() if not c.title.data: c.title.data = '代码片段%s' % (i + 1) code = Code(title=c.title.data, content=c.content.data, syntax=syntax) tags[syntax.key] = syntax.name paste.codes.append(code) for key in tags: syntax = Syntax.objects(name__iexact=tags[key]).first() tag = Tag.objects(key__iexact=key).first() if not tag and syntax: tag = Tag(key=syntax.key, name=syntax.name) tag.save() elif not tag and not syntax: tag = Tag(key=key, name=tags[key]) else: tag.popularity += 1 tag.save() if tag not in paste.tags: paste.tags.append(tag) paste.save() return paste
def view(username): page = get_page() user = User.objects.get_or_404(username=username) pastes = user.pastes.order_by('-updated_at') if not (current_user.is_authenticated and current_user.user == user): pastes = pastes(is_private=False) pagination = pastes.paginate(page, per_page=20) pastes = Paste.objects(user=user) syntax = {} for paste in pastes: for code in paste.codes: if code.syntax.name not in syntax: syntax[code.syntax.name] = 1 else: syntax[code.syntax.name] += 1 if len(syntax.keys()) > 3: most_syntax = [get_most_syntax(syntax) for i in range(3)] else: most_syntax = [Syntax.objects(name=key).first() for key in syntax] return render_template('users/user.html', user=user, pagination=pagination, most_syntax=most_syntax, tags=Tag.objects().order_by('-popularity')[:10])
class CodeForm(Form): title = StringField(u'片段描述') tag = SelectField(u'语法', choices=[(s.name.lower(), s.name) for s in Syntax.objects().order_by('name')]) content = TextAreaField(u'代码片段', validators=[InputRequired(message=u'不能为空!')])
def get_most_syntax(syntax): highest_name = None for name in syntax: if not highest_name: highest_name = name else: if syntax[name] > syntax[highest_name]: highest_name = name syntax.pop(highest_name) return Syntax.objects(name=highest_name).first()
def index(): page = get_page() pagination = Paste.objects(is_private=False).order_by('-updated_at').paginate(page=page, per_page=20) print datetime.today() return render_template('index.html', pagination=pagination, hot_pastes=Paste.objects(is_private=False).order_by('-views')[:10], pastes_count=Paste.objects().count(), comments_count=Comment.objects().count(), users_count=User.objects().count(), syntax_count=Syntax.objects().count(), bookmarks_count=Bookmark.objects().count(), users_increased=User.objects(created_at__gt=date.today()).count(), pastes_increased=Paste.objects(created_at__gt=date.today()).count(), comments_increased=Comment.objects(created_at__gt=date.today()).count(), bookmarks_increased=Bookmark.objects(created_at__gt=date.today()).count(), tags=Tag.objects().order_by('-popularity')[:10])
def view(tag_name): criteria = {} tag = Tag.objects.get_or_404(key=tag_name) if request.args.get('filter', None) != 'mine' or not current_user.is_authenticated: criteria['is_private'] = False syntax = Syntax.objects(key=tag_name).first() if syntax: criteria['codes__syntax'] = syntax else: criteria['tags'] = tag pastes = Paste.objects(**criteria).order_by('-updated_at') page = get_page() pagination = pastes.paginate(page, per_page=20) return render_template('tags/view.html', tag=tag, hot_pastes=Paste.objects(is_private=False).order_by('-views')[:10], pagination=pagination)
def save_paste_and_codes(form, paste=None): if not paste: paste = Paste(user=current_user.user) paste.title = form.title.data paste.is_private = form.is_private.data paste.codes = [] paste.tags = [] tags = [] if form.tags.data: form.tags.data.split(' ') syntaxes = [] for i, c in enumerate(form.codes): syntax = Syntax.objects(key=c.syntax.data).get_or_404() syntaxes.append(syntax) if not c.title.data: c.title.data = '代码片段%s' % (i + 1) code = Code(title=c.title.data, content=c.content.data, syntax=syntax) paste.codes.append(code) for syntax in syntaxes: tag = Tag.objects(key=syntax.key).first() if not tag: tag = Tag(key=syntax.key, name=syntax.name) tag.save() for key in tags: tag = Tag.objects(name__iexact=key).first() if not tag: tag = Tag(key=key.lower(), name=key.lower()) else: tag.popularity += 1 tag.save() if tag not in paste.tags: paste.tags.append(tag) paste.save() return paste
def view(tag_name): criteria = {} tag = Tag.objects.get_or_404(key=tag_name) if request.args.get('filter', None) != 'mine' or not current_user.is_authenticated: criteria['is_private'] = False syntax = Syntax.objects(key=tag_name).first() if syntax: criteria['codes__syntax'] = syntax else: criteria['tags'] = tag pastes = Paste.objects(**criteria).order_by('-updated_at') page = get_page() pagination = pastes.paginate(page, per_page=20) return render_template( 'tags/view.html', tag=tag, hot_pastes=Paste.objects(is_private=False).order_by('-views')[:10], pagination=pagination)
def index(): page = get_page() pagination = Paste.objects( is_private=False).order_by('-updated_at').paginate(page=page, per_page=20) print datetime.today() return render_template( 'index.html', pagination=pagination, hot_pastes=Paste.objects(is_private=False).order_by('-views')[:10], pastes_count=Paste.objects().count(), comments_count=Comment.objects().count(), users_count=User.objects().count(), syntax_count=Syntax.objects().count(), bookmarks_count=Bookmark.objects().count(), users_increased=User.objects(created_at__gt=date.today()).count(), pastes_increased=Paste.objects(created_at__gt=date.today()).count(), comments_increased=Comment.objects( created_at__gt=date.today()).count(), bookmarks_increased=Bookmark.objects( created_at__gt=date.today()).count(), tags=Tag.objects().order_by('-popularity')[:10])
def find_or_create_syntax(key, syntax, name): syn = Syntax.objects(key=key).first() if syn is None: print "Seeding syntax: %s, %s, %s" % (key, syntax, name) Syntax(key=key, syntax=syntax, name=name).save()
def find_or_create_syntax(name): syntax = Syntax.objects(name=name).first() if syntax is None: print "Seeding syntax: %s" % name Syntax(name=name).save()