{% extends "!layout.html" %}

{% block header %}
{%- if outdated %}
<div id="outdated-warning" style="padding: .5em; text-align: center; background-color: #FFBABA; color: #6A0E0E;">
    {% trans %}This document is for an old version of Python that is no longer supported.
    You should upgrade, and read the{% endtrans %}
    <a href="/3/{{ pagename }}{{ file_suffix }}">{% trans %}Python documentation for the current stable release{% endtrans %}</a>.
</div>
{%- endif %}

{%- if is_deployment_preview %}
<div id="deployment-preview-warning" style="padding: .5em; text-align: center; background-color: #fff2ba; color: #6a580e;">
  {% trans %}This is a deploy preview created from a <a href="{{ repository_url }}/pull/{{ pr_id }}">pull request</a>.
  For authoritative documentation, see{% endtrans %}
  <a href="https://docs.python.org/3/{{ pagename }}{{ file_suffix }}">{% trans %}the current stable release{% endtrans %}</a>.
</div>
{%- endif %}
{% endblock %}

{% block rootrellink %}
{{ super() }}
    <li id="cpython-language-and-version">
      <a href="{{ pathto('index') }}">{{ shorttitle }}</a>{{ reldelim1 }}
    </li>
{% endblock %}

{% block extrahead %}
    <link rel="canonical" href="https://docs.python.org/3/{{pagename}}.html" />
    {% if builder != "htmlhelp" %}
      {% if pagename == 'whatsnew/changelog' and not embedded %}
      <script type="text/javascript" src="{{ pathto('_static/changelog_search.js', 1) }}"></script>{% endif %}
    {% endif %}

    {# custom CSS; used in asyncio docs! #}
    <style>
      @media only screen {{ "{" }}
        table.full-width-table {{ "{" }}
            width: 100%;
        {{ "}" }}
      {{ "}" }}
    </style>
{{ super() }}
{% endblock %}
