Пример #1
0
def render_gist(request, id, raw):
    """Render a raw gist and store it"""
    gist = {
        'id': raw['id'],
        'html_url': raw['html_url'],
        'public': raw['public'],
        'description': raw['description'],
        'created_at': iso8601.parse_date(raw['created_at']),
        'updated_at': iso8601.parse_date(raw['updated_at']),
        'fetched_at': rdb.now(),
        'author_id': raw['user']['id'],
        'author_login': raw['user']['login'],
        'files': [],
    }

    for gistfile in raw['files'].values():
        format = RENDERABLE.get(gistfile['language'], None)

        if format is None:
            continue

        output = None

        if format is FORMAT_MD:
            payload = {
                'mode': 'gfm',
                'text': gistfile['content'],
            }
            req_render = requests.post('https://api.github.com/markdown',
                                       params=GITHUB_AUTH_PARAMS,
                                       data=unicode(json.dumps(payload)))
            if req_render.status_code != 200:
                logger.warn('Render {} file {} failed: {}'.format(
                    id, gistfile['filename'], req_render.status_code))
                continue
            else:
                output = smartypants.smartypants(req_render.text)

        if format is FORMAT_RST:
            rendered = render_rst(gistfile['content'],
                                  writer_name='html')['fragment']
            output = smartypants.smartypants(rendered)

        if output is not None:
            gistfile['rendered'] = output
            gist['files'].append(gistfile)

    rdb.table('gists').insert(gist, upsert=True).run(request.rdbconn)
    return gist
Пример #2
0
def render_gist(request, id, raw):
    """Render a raw gist and store it"""
    gist = {
        'id': raw['id'],
        'html_url': raw['html_url'],
        'public': raw['public'],
        'description': raw['description'],
        'created_at': iso8601.parse_date(raw['created_at']),
        'updated_at': iso8601.parse_date(raw['updated_at']),
        'fetched_at': rdb.now(),
        'author_id': raw['user']['id'],
        'author_login': raw['user']['login'],
        'files': [],
    }

    for gistfile in raw['files'].values():
        format = RENDERABLE.get(gistfile['language'], None)

        if format is None:
            continue

        output = None

        if format is FORMAT_MD:
            payload = {
                'mode': 'gfm',
                'text': gistfile['content'],
            }
            req_render = requests.post('https://api.github.com/markdown',
                                       params=GITHUB_AUTH_PARAMS,
                                       data=unicode(json.dumps(payload)))
            if req_render.status_code != 200:
                logger.warn('Render {} file {} failed: {}'.format(id, gistfile['filename'], req_render.status_code))
                continue
            else:
                output = smartypants.smartypants(req_render.text)

        if format is FORMAT_RST:
            rendered = render_rst(gistfile['content'], writer_name='html')['fragment']
            output = smartypants.smartypants(rendered)

        if output is not None:
                gistfile['rendered'] = output
                gist['files'].append(gistfile)


    rdb.table('gists').insert(gist, upsert=True).run(request.rdbconn)
    return gist
Пример #3
0
def fetch_and_render(id):
    """Fetch and render a post from the Github API"""
    req_gist = requests.get('https://api.github.com/gists/{}'.format(id),
                            params=AUTH_PARAMS)
    if req_gist.status_code != 200:
        app.logger.warning('Fetch {} failed: {}'.format(id, r.status_code))
        raise GistFetchError()

    try:
        raw = req_gist.json()
    except ValueError:
        app.logger.error(
            'Fetch {} failed: unable to decode JSON response'.format(id))
        raise GistFetchError()

    user = {}
    for prop in ['id', 'login', 'avatar_url', 'html_url', 'type']:
        user[prop] = raw['user'][prop]
    user['fetched_at'] = r.now()
    r.table('users').insert(user, upsert=True).run(g.rethink)

    gist = {
        'id': raw['id'],
        'html_url': raw['html_url'],
        'public': raw['public'],
        'description': raw['description'],
        'created_at': iso8601.parse_date(raw['created_at']),
        'updated_at': iso8601.parse_date(raw['updated_at']),
        'author_id': user['id'],
        'author_login': user['login'],
        'files': [],
    }

    for gistfile in raw['files'].values():
        format = RENDERABLE.get(gistfile['language'], None)

        if format is None:
            continue

        output = None

        if format is FORMAT_MD:
            payload = {
                'mode': 'gfm',
                'text': gistfile['content'],
            }
            req_render = requests.post('https://api.github.com/markdown',
                                       params=AUTH_PARAMS,
                                       data=unicode(json.dumps(payload)))
            if req_render.status_code != 200:
                app.logger.warn('Render {} file {} failed: {}'.format(
                    id, gistfile['filename'], req_render.status_code))
                continue
            else:
                output = smartypants.smartypants(req_render.text)

        if format is FORMAT_RST:
            rendered = render_rst(gistfile['content'],
                                  writer_name='html')['fragment']
            output = smartypants.smartypants(rendered)

        if output is not None:
            gistfile['rendered'] = output
            gist['files'].append(gistfile)

    r.table('gists').insert(gist, upsert=True).run(g.rethink)
    return user, gist
Пример #4
0
def fetch_and_render(id):
    """Fetch and render a post from the Github API"""
    req_gist = requests.get('https://api.github.com/gists/{}'.format(id),
                     params=AUTH_PARAMS)
    if req_gist.status_code != 200:
        app.logger.warning('Fetch {} failed: {}'.format(id, r.status_code))
        raise GistFetchError()

    try:
        raw = req_gist.json()
    except ValueError:
        app.logger.error('Fetch {} failed: unable to decode JSON response'.format(id))
        raise GistFetchError()

    user = {}
    for prop in ['id', 'login', 'avatar_url', 'html_url', 'type']:
        user[prop] = raw['user'][prop]
    user['fetched_at'] = r.now()
    r.table('users').insert(user, upsert=True).run(g.rethink)

    gist = {
        'id': raw['id'],
        'html_url': raw['html_url'],
        'public': raw['public'],
        'description': raw['description'],
        'created_at': iso8601.parse_date(raw['created_at']),
        'updated_at': iso8601.parse_date(raw['updated_at']),
        'author_id': user['id'],
        'author_login': user['login'],
        'files': [],
    }


    for gistfile in raw['files'].values():
        format = RENDERABLE.get(gistfile['language'], None)

        if format is None:
            continue

        output = None

        if format is FORMAT_MD:
            payload = {
                'mode': 'gfm',
                'text': gistfile['content'],
            }
            req_render = requests.post('https://api.github.com/markdown',
                                       params=AUTH_PARAMS,
                                       data=unicode(json.dumps(payload)))
            if req_render.status_code != 200:
                app.logger.warn('Render {} file {} failed: {}'.format(id, gistfile['filename'], req_render.status_code))
                continue
            else:
                output = smartypants.smartypants(req_render.text)

        if format is FORMAT_RST:
            rendered = render_rst(gistfile['content'], writer_name='html')['fragment']
            output = smartypants.smartypants(rendered)

        if output is not None:
                gistfile['rendered'] = output
                gist['files'].append(gistfile)


    r.table('gists').insert(gist, upsert=True).run(g.rethink)
    return user, gist
Пример #5
0
def rstToHTML(rst):
    overrides = {'output_encoding': 'unicode', 'input_encoding': 'unicode'}
    return render_rst(rst.decode("utf-8"),
                      writer_name="html",
                      settings_overrides=overrides)