def new_paste(self, language=None): """The 'create a new paste' view.""" language = local.request.args.get('language', language) if language is None: language = local.request.session.get('language', 'text') code = error = '' show_captcha = private = False parent = None req = local.request getform = req.form.get if local.request.method == 'POST': code = getform('code', u'') language = getform('language') parent_id = getform('parent') if parent_id is not None: parent = Paste.get(parent_id) spam = getform('webpage') or antispam.is_spam(code) if spam: error = _('your paste contains spam') captcha = getform('captcha') if captcha: if check_hashed_solution(captcha): error = None else: error = _('your paste contains spam and the ' 'CAPTCHA solution was incorrect') show_captcha = True if code and language and not error: paste = Paste(code, language, parent, req.user_hash, 'private' in req.form) db.session.add(paste) db.session.commit() local.request.session['language'] = language return redirect(paste.url) else: if local.request.args.get('private', '0') != '0': private = True parent_id = req.values.get('reply_to') if parent_id is not None: parent = Paste.get(parent_id) if parent is not None: code = parent.code language = parent.language private = parent.private return render_to_response('new_paste.html', languages=list_languages(), parent=parent, code=code, language=language, error=error, show_captcha=show_captcha, private=private )
def new_paste(self, language=None): """The 'create a new paste' view.""" language = local.request.args.get('language', language) if language is None: language = local.request.session.get('language', 'text') code = error = '' show_captcha = private = False parent = None req = local.request getform = req.form.get if local.request.method == 'POST': code = getform('code', u'') language = getform('language') parent_id = getform('parent') if parent_id is not None: parent = Paste.get(parent_id) spam = getform('webpage') or antispam.is_spam(code) if spam: error = _('your paste contains spam') captcha = getform('captcha') if captcha: if check_hashed_solution(captcha): error = None else: error = _('your paste contains spam and the ' 'CAPTCHA solution was incorrect') show_captcha = True if code and language and not error: paste = Paste(code, language, parent, req.user_hash, 'private' in req.form) db.session.add(paste) db.session.commit() local.request.session['language'] = language return redirect(paste.url) else: if local.request.args.get('private', '0') != '0': private = True parent_id = req.values.get('reply_to') if parent_id is not None: parent = Paste.get(parent_id) if parent is not None: code = parent.code language = parent.language private = parent.private return render_to_response('new_paste.html', languages=list_languages(), parent=parent, code=code, language=language, error=error, show_captcha=show_captcha, private=private)
def _get_pygments_lexers(add_empty=True): r = [] if add_empty: r.append(('', ''),) for lexer in get_all_lexers(): r.append((lexer[1][0], _(lexer[0])),) return r
def _get_pygments_lexers(add_empty=True): r = [] if add_empty: r.append(('', ''), ) for lexer in get_all_lexers(): r.append((lexer[1][0], _(lexer[0])), ) return r
#: we use a hardcoded list here because we want to keep the interface #: simple def _get_pygments_lexers(add_empty=True): r = [] if add_empty: r.append(('', ''),) for lexer in get_all_lexers(): r.append((lexer[1][0], _(lexer[0])),) return r LANGUAGES = _get_pygments_lexers() #: Add LodgeIt's special language lexers #: Or at least ensure those exist. LANGUAGES.extend([ ('csv', _('CSV')), ('javac-messages', _('javac Messages')), ('diff', _('Unified Diff')), ('gcc-messages', _('GCC Messages')), ('creole', _('Creole Wiki')), ('multi', _('Multi-File')), ]) LANGUAGES = dict(sorted(LANGUAGES, key=itemgetter(1))) STYLES = dict((x, x.title()) for x in get_all_styles()) DEFAULT_STYLE = 'friendly' _section_marker_re = re.compile(r'^(?<!\\)###\s*(.*?)(?:\[(.+?)\])?\s*$(?m)') _escaped_marker = re.compile(r'^\\(?=###)(?m)')
#: we use a hardcoded list here because we want to keep the interface #: simple def _get_pygments_lexers(add_empty=True): r = [] if add_empty: r.append(('', ''), ) for lexer in get_all_lexers(): r.append((lexer[1][0], _(lexer[0])), ) return r LANGUAGES = _get_pygments_lexers() #: Add LodgeIt's special language lexers #: Or at least ensure those exist. LANGUAGES.extend([ ('csv', _('CSV')), ('javac-messages', _('javac Messages')), ('diff', _('Unified Diff')), ('gcc-messages', _('GCC Messages')), ('creole', _('Creole Wiki')), ('multi', _('Multi-File')), ]) LANGUAGES = dict(sorted(LANGUAGES, key=itemgetter(1))) STYLES = dict((x, x.title()) for x in get_all_styles()) DEFAULT_STYLE = 'friendly' _section_marker_re = re.compile(r'^(?<!\\)###\s*(.*?)(?:\[(.+?)\])?\s*$(?m)') _escaped_marker = re.compile(r'^\\(?=###)(?m)')
from pygments.formatters import HtmlFormatter from lodgeit import local from lodgeit.i18n import lazy_gettext as _ from lodgeit.utils import render_template from lodgeit.lib.diff import prepare_udiff from lodgeit.lib.compilerparser import parse_gcc_messages, \ parse_javac_messages from werkzeug import escape #: we use a hardcoded list here because we want to keep the interface #: simple LANGUAGES = { 'text': _('Text'), 'multi': _('Multi-File'), 'python': _('Python'), 'pycon': _('Python Console Sessions'), 'pytb': _('Python Tracebacks'), 'html+php': _('PHP'), 'php': _('PHP (inline)'), 'html+django': _('Django / Jinja Templates'), 'html+mako': _('Mako Templates'), 'html+myghty': _('Myghty Templates'), 'apache': _('Apache Config (.htaccess)'), 'bash': _('Bash'), 'bat': _('Batch (.bat)'), 'brainfuck': _('Brainfuck'), 'c': _('C'), 'gcc-messages': _('GCC Messages'),
""" lodgeit.libs.filterable ~~~~~~~~~~~~~~~~~~~~~~~ Small library that adds filterable support to some parts of lodgeit. :copyright: 2008 by Christopher Grebs. :license: BSD. """ from lodgeit.i18n import _ from lodgeit.utils import render_template ACTIONS = { 'str': { 'is': _(u'is'), 'contains': _(u'contains'), 'startswith': _('startswith'), }, 'int': { 'is': _(u'is'), 'greater': _(u'greater'), 'lower': _(u'lower'), }, 'date': { 'is': _(u'same date'), 'greater': _(u'later'), 'lower': _(u'earlier'), } } ACTIONS_MAP = {
from pygments.styles import get_all_styles from pygments.formatters import HtmlFormatter from lodgeit import local from lodgeit.i18n import lazy_gettext as _ from lodgeit.utils import render_template from lodgeit.lib.diff import prepare_udiff from lodgeit.lib.compilerparser import parse_gcc_messages, \ parse_javac_messages from werkzeug import escape #: we use a hardcoded list here because we want to keep the interface #: simple LANGUAGES = { 'text': _('Text'), 'multi': _('Multi-File'), 'python': _('Python'), 'pycon': _('Python Console Sessions'), 'pytb': _('Python Tracebacks'), 'html+php': _('PHP'), 'php': _('PHP (inline)'), 'html+django': _('Django / Jinja Templates'), 'html+mako': _('Mako Templates'), 'html+myghty': _('Myghty Templates'), 'apache': _('Apache Config (.htaccess)'), 'bash': _('Bash'), 'bat': _('Batch (.bat)'), 'brainfuck': _('Brainfuck'), 'c': _('C'), 'gcc-messages': _('GCC Messages'),
def generate_pagination(page, per_page, total, link_builder=None, normal='<a href="%(url)s">%(page)d</a>', active='<strong>%(page)d</strong>', commata=',\n', ellipsis=' ...\n', threshold=3, prev_link=True, next_link=True, gray_prev_link=True, gray_next_link=True): """Generates a pagination. :param page: current page number :param per_page: items per page :param total: total number of items :param link_builder: a function which is called with a page number and has to return the link to a page. Per default it links to ``?page=$PAGE`` :param normal: template for normal (not active) link :param active: template for active link :param commata: inserted into the output to separate two links :param ellipsis: inserted into the output to display an ellipsis :param threshold: number of links next to each node (left end, right end and current page) :param prev_link: display back link :param next_link: dipslay next link :param gray_prev_link: the back link is displayed as span class disabled if no backlink exists. otherwise it's not displayed at all :param gray_next_link: like `gray_prev_link` just for the next page link """ page = int(page or 1) if link_builder is None: link_builder = lambda page: '?page=%d' % page was_ellipsis = False result = [] pages = int(math.ceil(total / float(per_page))) prev = None next = None for num in xrange(1, pages + 1): if num == page: was_ellipsis = False if num - 1 == page: next = num if num + 1 == page: prev = num if num <= threshold or num > pages - threshold or \ abs(page - num) < math.ceil(threshold / 2.0): if result and result[-1] != ellipsis: result.append(commata) was_space = False link = link_builder(num) template = num == page and active or normal result.append(template % { 'url': link, 'page': num }) elif not was_ellipsis: was_ellipsis = True result.append(ellipsis) if next_link: if next is not None: result.append(_(u' <a href="%s">Next »</a>') % link_builder(next)) elif gray_next_link: result.append(_(u' <span class="disabled">Next »</span>')) if prev_link: if prev is not None: result.insert(0, _(u'<a href="%s">« Prev</a> ') % link_builder(prev)) elif gray_prev_link: result.insert(0, _(u'<span class="disabled">« Prev</span> ')) return u''.join(result)
def generate_pagination(page, per_page, total, link_builder=None, normal='<a href="%(url)s">%(page)d</a>', active='<strong>%(page)d</strong>', commata=',\n', ellipsis=' ...\n', threshold=3, prev_link=True, next_link=True, gray_prev_link=True, gray_next_link=True): """Generates a pagination. :param page: current page number :param per_page: items per page :param total: total number of items :param link_builder: a function which is called with a page number and has to return the link to a page. Per default it links to ``?page=$PAGE`` :param normal: template for normal (not active) link :param active: template for active link :param commata: inserted into the output to separate two links :param ellipsis: inserted into the output to display an ellipsis :param threshold: number of links next to each node (left end, right end and current page) :param prev_link: display back link :param next_link: dipslay next link :param gray_prev_link: the back link is displayed as span class disabled if no backlink exists. otherwise it's not displayed at all :param gray_next_link: like `gray_prev_link` just for the next page link """ page = int(page or 1) if link_builder is None: link_builder = lambda page: '?page=%d' % page was_ellipsis = False result = [] pages = int(math.ceil(total / float(per_page))) prev = None next = None for num in xrange(1, pages + 1): if num == page: was_ellipsis = False if num - 1 == page: next = num if num + 1 == page: prev = num if num <= threshold or num > pages - threshold or \ abs(page - num) < math.ceil(threshold / 2.0): if result and result[-1] != ellipsis: result.append(commata) was_space = False link = link_builder(num) template = num == page and active or normal result.append(template % {'url': link, 'page': num}) elif not was_ellipsis: was_ellipsis = True result.append(ellipsis) if next_link: if next is not None: result.append( _(u' <a href="%s">Next »</a>') % link_builder(next)) elif gray_next_link: result.append(_(u' <span class="disabled">Next »</span>')) if prev_link: if prev is not None: result.insert( 0, _(u'<a href="%s">« Prev</a> ') % link_builder(prev)) elif gray_prev_link: result.insert(0, _(u'<span class="disabled">« Prev</span> ')) return u''.join(result)