from typing import Optional import textwrap from repo_autoindex import autoindex from repo_autoindex._impl.base import GeneratedIndex REPOMD_XML = textwrap.dedent( """ 1657165688 d4888f04f95ac067af4d997d35c6d345cbe398563d777d017a3634c9ed6148cf 6fc4eddd4e9de89246efba3815b8a9dec9dfe168e4fd3104cc792dff908a0f62 1657165688 2932 16585 284769ec79daa9e0a3b0129bb6260cc6271c90c4fe02b43dfa7cdf7635fb803f 72f89223c8b0f6c7a2ee6ed7fbd16ee0bb395ca68260038bb3895265af84c29f 1657165688 4621 36911 36c2195bbee0c39ee080969abc6fd59d943c3471114cfd43c6e776ac20d7ed21 39f52cf295db14e863abcd7b2eede8e6c5e39ac9b2f194349459d29cd492c90f 1657165688 1408 8432 55e6bfd00e889c5c1f9a3c9fb35a660158bc5d975ae082d434f3cf81cc2c0c21 b2692c49d1d98d68e764e29108d8a81a3dfd9e04fa7665115853a029396d118d 1657165688 7609 114688 10 de63a509812c37f7736fcef0b79e9c55dfe67a2d77006f74fdc442935103e9e6 40eb5d53fe547c98d470813256c9bfc8a239b13697d8eb824a1485c9e186a0e3 1657165688 10323 65536 10 9aa39b62df200cb3784dea24092d0c1c686afff0cd0990c2ec7a61afe8896e1c 3e5cefb10ce805b827e12ca3b4839bba873dc9403fd92b60a364bf6f312bd972 1657165688 2758 32768 10 """ ).strip() PRIMARY_XML = textwrap.dedent( """ wireplumber x86_64 539a773f3f39a7b2b5f971bdd0063f7d4201aab00920f380962e935356dc4d3a A modular session/policy manager for PipeWire WirePlumber is a modular session/policy manager for PipeWire and a GObject-based high-level library that wraps PipeWire's API, providing convenience for writing the daemon's modules as well as external tools for managing PipeWire. Fedora Project https://pipewire.pages.freedesktop.org/wireplumber/ wireplumber-libs x86_64 1f0d373bd1b8af6b4b7baab1c89e4820aa8cd8691f51fca4fccac9785fe715ea Libraries for WirePlumber clients This package contains the runtime libraries for any application that wishes to interface with WirePlumber. Fedora Project https://pipewire.pages.freedesktop.org/wireplumber/ xfce4-panel x86_64 1eecad127499d557f9d97562a1c65d9c881f3f63431546007a9ed714997b909c Next generation panel for Xfce This package includes the panel for the Xfce desktop environment. Fedora Project http://www.xfce.org/ xfce4-power-manager x86_64 48697b6e83646e702d83523acd4a25df546129a1a11f3fbb81724c30d58e9c21 Power management for the Xfce desktop environment Xfce Power Manager uses the information and facilities provided by HAL to display icons and handle user callbacks in an interactive Xfce session. Xfce Power Preferences allows authorised users to set policy and change preferences. Fedora Project http://goodies.xfce.org/projects/applications/xfce4-power-manager xfce4-terminal x86_64 6b6d0d941c16988b4c68ae473f1af141dedafe691922c0c88f6f3ef82baeef79 Terminal Emulator for the Xfce Desktop environment Xfce4-terminal is a lightweight and easy to use terminal emulator application with many advanced features including drop down, tabs, unlimited scrolling, full colors, fonts, transparent backgrounds, and more. Fedora Project http://docs.xfce.org/apps/terminal/start """ ).strip() class StaticFetcher: def __init__(self): self.content: dict[str, str] = {} async def __call__(self, url: str) -> Optional[str]: return self.content.get(url) async def test_typical_index(): fetcher = StaticFetcher() fetcher.content["https://example.com/repodata/repomd.xml"] = REPOMD_XML fetcher.content[ "https://example.com/repodata/d4888f04f95ac067af4d997d35c6d345cbe398563d777d017a3634c9ed6148cf-primary.xml.gz" ] = PRIMARY_XML entries: list[GeneratedIndex] = [] async for entry in autoindex("https://example.com", fetcher=fetcher): entries.append(entry) # It should generate some entries assert entries entries.sort(key=lambda e: e.relative_dir) # First check that the directory structure was reproduced. assert [e.relative_dir for e in entries] == [ "", "packages", "packages/w", "packages/x", "repodata", ] by_relative_dir: dict[str, GeneratedIndex] = {} for entry in entries: by_relative_dir[entry.relative_dir] = entry # Sanity check a few links expected to appear in each. assert '' in by_relative_dir[""].content assert '' in by_relative_dir[""].content assert '' in by_relative_dir["packages"].content assert '' in by_relative_dir["packages"].content assert ( '' in by_relative_dir["repodata"].content ) assert ( '' in by_relative_dir["packages/w"].content ) assert ( '' in by_relative_dir["packages/x"].content )