当前位置: 首页>>代码示例>>Python>>正文


Python IAnnotations.absolute_url方法代码示例

本文整理汇总了Python中zope.annotation.interfaces.IAnnotations.absolute_url方法的典型用法代码示例。如果您正苦于以下问题:Python IAnnotations.absolute_url方法的具体用法?Python IAnnotations.absolute_url怎么用?Python IAnnotations.absolute_url使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在zope.annotation.interfaces.IAnnotations的用法示例。


在下文中一共展示了IAnnotations.absolute_url方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。

示例1: end_request

# 需要导入模块: from zope.annotation.interfaces import IAnnotations [as 别名]
# 或者: from zope.annotation.interfaces.IAnnotations import absolute_url [as 别名]
def end_request(event):
    # Ignore internal requests.
    if event.request.get('HTTP_USER_AGENT') == 'Bobo':
        return

    # Must have add-on browser layer.
    if not ILayer.providedBy(event.request):
        return

    try:
        site = IAnnotations(event.request)[TRAVERSAL_KEY]
    except KeyError:
        return

    try:
        tool = getToolByName(site, 'portal_linkcheck')
    except AttributeError as exc:
        logger.warn("Did not find tool: %s." % exc)
        return

    # Must be HTML.
    response = event.request.response
    content_type = response.getHeader('Content-Type')
    if content_type and not content_type.startswith('text/html'):
        return

    # Update the status of the present request.
    status = response.getStatus()

    if not tool.is_available():
        logger.warn("Tool not available; please run update step.")
        return

    # Compute path given the actual URL, relative to the site root.
    base_url = site.absolute_url()
    actual_url = event.request.get('ACTUAL_URL', '')
    if not actual_url.startswith(base_url):
        return

    path = actual_url[len(base_url):]
    tool.update(path, status)

    # Must be good response.
    if status != 200:
        return

    # Skip control panel view.
    if '@@linkcheck-controlpanel' in event.request['PATH_INFO']:
        return

    try:
        encoding = response.headers['content-type'].split('charset=')[-1]
    except:
        encoding = "latin-1"

    body = response.body
    if response.headers.get('content-encoding') == 'gzip':
        try:
            body = gzip.GzipFile(fileobj=StringIO(body)).read()
        except BaseException as exc:
            logger.warn(exc)
            return

    try:
        document = body.decode(encoding, 'ignore')
    except UnicodeDecodeError as exc:
        logger.warn(exc)
        return

    hrefs = set()
    for href in iter_links(document):
        # Ignore anchors and javascript.
        if href.startswith('#') or href.startswith('javascript:'):
            continue

        # Internal URLs are stored site-relative.
        if href.startswith(base_url):
            href = "/" + href[len(base_url) + 1:].rstrip("/")

        # Add trailing slash to bare domain.
        if href.startswith('http://') or href.startswith('https://'):
            if href.count('/') == 2:
                href = href.rstrip('/') + '/'

        hrefs.add(href)

    # We want all the hyperlinks in the document to be checked unless
    # it's already in the queue or it has been checked recently.
    now = datetime.datetime.now()
    date = now - datetime.timedelta(days=1)
    yesterday = int(time.mktime(date.timetuple()))

    #referer is nothing else than the actual_url. HTTP_HOST and PATH_INFO
    # give wrong URLs in VirtualHosting

    # Update link database
    tool.register(hrefs, actual_url, yesterday)

    # We always commit the transaction; if no changes were made, this
    # is a NOOP. Note that conflict errors are possible with
#.........这里部分代码省略.........
开发者ID:,项目名称:,代码行数:103,代码来源:


注:本文中的zope.annotation.interfaces.IAnnotations.absolute_url方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。