Skip to main content
  • Home
  • Development
  • Documentation
  • Donate
  • Operational login
  • Browse the archive

swh logo
SoftwareHeritage
Software
Heritage
Archive
Features
  • Search

  • Downloads

  • Save code now

  • Add forge now

  • Help

  • ec325a8
  • /
  • scripts
  • /
  • search_pages.py
Raw File Download

To reference or cite the objects present in the Software Heritage archive, permalinks based on SoftWare Hash IDentifiers (SWHIDs) must be used.
Select below a type of object currently browsed in order to display its associated SWHID and permalink.

  • content
  • directory
content badge
swh:1:cnt:489517af3593c777044ffd0dd6223de924b614ce
directory badge
swh:1:dir:13c996cc896df00c72ea79a948959f08af0c56d5

This interface enables to generate software citations, provided that the root directory of browsed objects contains a citation.cff or codemeta.json file.
Select below a type of object currently browsed in order to generate citations for them.

  • content
  • directory
Generate software citation in BibTex format (requires biblatex-software package)
Generating citation ...
Generate software citation in BibTex format (requires biblatex-software package)
Generating citation ...
search_pages.py
"""Search in (the latest versions of) pages.

:Copyright: 2014-2025 Jochen Kupperschmidt
:License: Revised BSD (see `LICENSE` file for details)
"""

import click

from byceps.services.page import page_service
from byceps.services.site.models import Site

from _util import call_with_app_context
from _validators import validate_site


def validate_site_if_given(ctx, param, site_id_value: str) -> Site:
    if site_id_value is None:
        return None

    return validate_site(ctx, param, site_id_value)


@click.command()
@click.pass_context
@click.argument('search_term')
@click.option('--site', callback=validate_site_if_given)
@click.option('-v', '--verbose', is_flag=True)
def execute(ctx, search_term, site, verbose) -> None:
    site_id = site.id if site else None

    matches = page_service.search_pages(search_term, site_id=site_id)

    if not matches:
        if verbose:
            click.secho(
                'No matching pages for '
                + (f'site ID {site_id} and ' if site_id else '')
                + f'search term "{search_term}".',
                fg='yellow',
            )
        return

    for page in matches:
        click.secho(f'{page.site_id}/{page.name}')

    if verbose:
        click.secho(
            f'\n{len(matches):d} matching page(s) for '
            + (f'site ID {site_id} and ' if site_id else '')
            + f'search term "{search_term}".',
            fg='green',
        )


if __name__ == '__main__':
    call_with_app_context(execute)

back to top

Software Heritage — Copyright (C) 2015–2026, The Software Heritage developers. License: GNU AGPLv3+.
The source code of Software Heritage itself is available on our development forge.
The source code files archived by Software Heritage are available under their own copyright and licenses.
Terms of use: Archive access, API— Content policy— Contact— JavaScript license information— Web API