{% extends "base.html" %}
{% block extra_head %}
<script type="application/ld+json">{{ homepage_json_ld | safe }}</script>
{% endblock %}
{% block header %}
<header class="hero">
  <div class="hero-sheen" aria-hidden="true"></div>
  <div class="hero-noise" aria-hidden="true"></div>

  <div class="hero-shell">
    <nav class="hero-topbar" aria-label="Site">
      <span class="hero-brand-mini">Awesome Python</span>
      <div class="hero-topbar-actions">
        <a
          href="https://github.com/vinta/awesome-python/blob/master/CONTRIBUTING.md"
          class="hero-topbar-link hero-topbar-link-strong"
          target="_blank"
          rel="noopener"
          >Submit a project</a
        >
        <a href="/sponsorship/" class="hero-topbar-link">Sponsorship</a>
      </div>
    </nav>

    <div class="hero-grid">
      <div class="hero-copy">
        <p class="hero-kicker">The field guide to the Python ecosystem</p>
        <h1>Awesome Python</h1>
        <p class="hero-sub">
          {{ subtitle }}<br />Maintained by
          <a href="https://github.com/vinta" target="_blank" rel="noopener"
            >@vinta</a
          >
          and
          <a
            href="https://github.com/JinyangWang27"
            target="_blank"
            rel="noopener"
            >@JinyangWang27</a
          >.
        </p>

        <div class="hero-actions">
          <a
            href="#library-index"
            class="hero-action hero-action-primary"
            data-scroll-to="library-index"
            >Browse the List</a
          >
          <a
            href="https://github.com/vinta/awesome-python"
            class="hero-action hero-action-secondary"
            target="_blank"
            rel="noopener"
            >View on GitHub</a
          >
        </div>

        {% if repo_stars or build_date %}
        <p class="hero-proof">
          {% if repo_stars %}{{ repo_stars }}+ stars on GitHub{% endif %} {% if
          repo_stars and build_date %}/{% endif %} {% if build_date %}Updated {{
          build_date }}{% endif %}
        </p>
        {% endif %}
      </div>
    </div>

    <nav class="hero-category-nav" aria-labelledby="hero-category-heading">
      <div class="hero-category-meta">
        <h2 id="hero-category-heading">Browse by category</h2>
      </div>
      <ul class="hero-category-links">
        {% for category in categories %}
        <li>
          <a class="hero-category-link" href="{{ category_urls[category.name] }}"
            >{{ category.name }}</a
          >
        </li>
        {% endfor %}
      </ul>
    </nav>
  </div>
</header>
{% endblock %}
{% block content %}
{% if sponsors %}
<section class="sponsor-band" aria-labelledby="sponsor-heading" data-reveal>
  <div class="section-shell sponsor-shell">
    <header class="sponsor-meta">
      <p class="section-label" id="sponsor-heading">Sponsors</p>
      <a class="sponsor-become" href="/sponsorship/"> Become a sponsor </a>
    </header>
    <ul class="sponsor-list">
      {% for sponsor in sponsors %}
      <li class="sponsor">
        <a
          class="sponsor-link"
          href="{{ sponsor.url }}"
          target="_blank"
          rel="noopener"
        >
          <span class="sponsor-name">{{ sponsor.name }}</span>
        </a>
        <p class="sponsor-desc">{{ sponsor.description | safe }}</p>
      </li>
      {% endfor %}
    </ul>
  </div>
</section>
{% endif %}

<script type="application/json" id="filter-urls">{{ filter_urls_json | safe }}</script>
<section class="results-section" id="library-index">
  <div class="results-intro section-shell" data-reveal>
    <div>
      <h2>Search every project in one place</h2>
    </div>
    <p class="results-note">
      Press <kbd>/</kbd> to search. Tap a tag to filter. Click any row for
      details.
    </p>
  </div>

  <div class="controls section-shell" data-reveal>
    <h2 class="sr-only">Search and filter</h2>
    <div class="search-wrap">
      <svg
        class="search-icon"
        width="16"
        height="16"
        viewBox="0 0 24 24"
        fill="none"
        stroke="currentColor"
        stroke-width="2.5"
        stroke-linecap="round"
        stroke-linejoin="round"
      >
        <circle cx="11" cy="11" r="8" />
        <line x1="21" y1="21" x2="16.65" y2="16.65" />
      </svg>
      <input
        type="search"
        class="search"
        placeholder="Search {{ entries | length }} projects across {{ total_categories }} categories..."
        aria-label="Search projects"
      />
    </div>
    <div class="filter-bar" aria-live="polite">
      <span>Filtering for <strong class="filter-value"></strong></span>
      <button class="filter-clear" aria-label="Clear filter">
        Clear filter
      </button>
    </div>
  </div>

  <h2 class="sr-only">Results</h2>
  <div
    class="table-wrap"
    tabindex="0"
    role="region"
    aria-label="Libraries table"
  >
    <table class="table">
      <thead>
        <tr>
          <th class="col-num"><span class="sr-only">Row number</span></th>
          <th class="col-name" data-sort="name">
            <button type="button" class="sort-btn">Project Name</button>
          </th>
          <th class="col-stars" data-sort="stars">
            <button type="button" class="sort-btn">GitHub Stars</button>
          </th>
          <th class="col-commit" data-sort="commit-time">
            <button type="button" class="sort-btn">Last Commit</button>
          </th>
          <th class="col-cat">Tags</th>
          <th class="col-arrow">
            <button class="back-to-top" aria-label="Back to top">
              Top &uarr;
            </button>
          </th>
        </tr>
      </thead>
      <tbody>
        {% for entry in entries %}
        <tr
          class="row"
          data-tags="{{ entry.categories | join('||') }}{% if entry.subcategories %}||{{ entry.subcategories | map(attribute='value') | join('||') }}{% endif %}||{{ entry.groups | join('||') }}{% if entry.source_type == 'Built-in' %}||Built-in{% endif %}"
          tabindex="0"
          aria-expanded="false"
          aria-controls="expand-{{ loop.index }}"
        >
          <td class="col-num">{{ loop.index }}</td>
          <td class="col-name">
            <a href="{{ entry.url }}" target="_blank" rel="noopener"
              >{{ entry.name }}</a
            >
            <span class="mobile-cat"
              >{% if entry.subcategories %}{{ entry.subcategories[0].name }}{%
              else %}{{ entry.categories[0] }}{% endif %}</span
            >
          </td>
          <td class="col-stars">
            {% if entry.stars is not none %}{{ "{:,}".format(entry.stars) }}{%
            elif entry.source_type %}<span class="source-badge"
              >{{ entry.source_type }}</span
            >{% else %}&mdash;{% endif %}
          </td>
          <td
            class="col-commit"
            {%
            if
            entry.last_commit_at
            %}data-commit="{{ entry.last_commit_at }}"
            {%
            endif
            %}
          >
            {% if entry.last_commit_at %}<time
              datetime="{{ entry.last_commit_at }}"
              >{{ entry.last_commit_at[:10] }}</time
            >{% else %}&mdash;{% endif %}
          </td>
          <td class="col-cat">
            {% for subcat in entry.subcategories %}
            <a class="tag" href="{{ subcat.url }}" data-value="{{ subcat.value }}" data-url="{{ subcat.url }}">
              {{ subcat.name }}
            </a>
            {% endfor %} {% for cat in entry.categories %}
            <a
              class="tag"
              href="{{ category_urls[cat] }}"
              data-value="{{ cat }}"
              data-url="{{ category_urls[cat] }}"
              >{{ cat }}</a
            >
            {% endfor %}
            <a
              class="tag tag-group"
              href="{{ filter_urls[entry.groups[0]] }}"
              data-value="{{ entry.groups[0] }}"
              data-url="{{ filter_urls[entry.groups[0]] }}"
            >
              {{ entry.groups[0] }}
            </a>
            {% if entry.source_type == 'Built-in' %}
            <a
              class="tag tag-source"
              href="/categories/built-in/"
              data-value="Built-in"
              data-url="/categories/built-in/"
            >
              Built-in
            </a>
            {% endif %}
          </td>
          <td class="col-arrow"><span class="arrow">&rarr;</span></td>
        </tr>
        {% if entry.description %}
        <tr class="desc-row" aria-hidden="true" hidden>
          <td class="col-num"></td>
          <td colspan="5">
            <div class="desc-text">{{ entry.description | safe }}</div>
          </td>
        </tr>
        {% endif %}
        <tr class="expand-row" id="expand-{{ loop.index }}">
          <td></td>
          <td colspan="4">
            <div class="expand-content">
              {% if entry.description %}
              <div class="expand-desc">{{ entry.description | safe }}</div>
              {% endif %} {% if entry.also_see %}
              <div class="expand-also-see">
                Also see: {% for see in entry.also_see %}<a
                  href="{{ see.url }}"
                  target="_blank"
                  rel="noopener"
                  >{{ see.name }}</a
                >{% if not loop.last %}, {% endif %}{% endfor %}
              </div>
              {% endif %}
              <div class="expand-meta">
                {% if entry.owner %}<a
                  href="https://github.com/{{ entry.owner }}"
                  target="_blank"
                  rel="noopener"
                  >{{ entry.owner }}</a
                ><span class="expand-sep">/</span>{% endif %}<a
                  href="{{ entry.url }}"
                  target="_blank"
                  rel="noopener"
                  >{{ entry.url | replace("https://", "") }}</a
                >
                {% if entry.last_commit_at %}<span class="expand-commit"
                  ><span class="expand-sep">/</span
                  ><time datetime="{{ entry.last_commit_at }}"
                    >{{ entry.last_commit_at[:10] }}</time
                  ></span
                >{% endif %}
              </div>
            </div>
          </td>
          <td></td>
        </tr>
        {% endfor %}
      </tbody>
    </table>
  </div>

  <div class="no-results" hidden>
    <p>No projects match your search or filter.</p>
    <p class="no-results-hint">
      Try a broader term, or
      <button class="no-results-clear">browse all projects</button>.
    </p>
  </div>
</section>

<section class="final-cta" data-reveal>
  <div class="section-shell">
    <p class="section-label">Contribute</p>
    <h2>Know a project that belongs here?</h2>
    <p>Tell us what it does and why it stands out.</p>
    <div class="final-cta-actions">
      <a
        href="https://github.com/vinta/awesome-python/blob/master/CONTRIBUTING.md"
        class="hero-action hero-action-primary"
        target="_blank"
        rel="noopener"
        >Submit a project</a
      >
      <a
        href="https://github.com/vinta/awesome-python"
        class="hero-action hero-action-secondary"
        target="_blank"
        rel="noopener"
        >Star the repository</a
      >
    </div>
  </div>
</section>
{% endblock %}
