{"id":23979374,"url":"https://github.com/helmut-hoffer-von-ankershoffen/brave-search-python-client","last_synced_at":"2025-04-14T03:51:25.939Z","repository":{"id":270523244,"uuid":"910634673","full_name":"helmut-hoffer-von-ankershoffen/brave-search-python-client","owner":"helmut-hoffer-von-ankershoffen","description":"🦁 Brave Search Python Client supporting Web, Image, News and Video Search.","archived":false,"fork":false,"pushed_at":"2025-04-04T05:45:32.000Z","size":24630,"stargazers_count":5,"open_issues_count":7,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-04-04T05:46:18.645Z","etag":null,"topics":["api","async","brave","brave-api","brave-search","bravesearch","bravesearchapi","codecov","docker","oe-python-template","pydantic","python","ruff","search","sonarqube","typer","uv"],"latest_commit_sha":null,"homepage":"https://brave-search-python-client.readthedocs.io/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/helmut-hoffer-von-ankershoffen.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-12-31T22:14:18.000Z","updated_at":"2025-04-04T05:44:35.000Z","dependencies_parsed_at":"2025-03-25T08:28:23.131Z","dependency_job_id":"53650b02-9c0b-4625-8d66-485aa56ec2b2","html_url":"https://github.com/helmut-hoffer-von-ankershoffen/brave-search-python-client","commit_stats":null,"previous_names":["helmut-hoffer-von-ankershoffen/brave-search-python-client"],"tags_count":80,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/helmut-hoffer-von-ankershoffen%2Fbrave-search-python-client","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/helmut-hoffer-von-ankershoffen%2Fbrave-search-python-client/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/helmut-hoffer-von-ankershoffen%2Fbrave-search-python-client/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/helmut-hoffer-von-ankershoffen%2Fbrave-search-python-client/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/helmut-hoffer-von-ankershoffen","download_url":"https://codeload.github.com/helmut-hoffer-von-ankershoffen/brave-search-python-client/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248819352,"owners_count":21166474,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","async","brave","brave-api","brave-search","bravesearch","bravesearchapi","codecov","docker","oe-python-template","pydantic","python","ruff","search","sonarqube","typer","uv"],"created_at":"2025-01-07T09:48:41.989Z","updated_at":"2025-04-14T03:51:25.932Z","avatar_url":"https://github.com/helmut-hoffer-von-ankershoffen.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n[//]: # (README.md generated from docs/partials/README_*.md)\n\n# 🦁 Brave Search Python Client\n\n[![License](https://img.shields.io/github/license/helmut-hoffer-von-ankershoffen/brave-search-python-client?logo=opensourceinitiative\u0026logoColor=3DA639\u0026labelColor=414042\u0026color=A41831)\n](https://github.com/helmut-hoffer-von-ankershoffen/brave-search-python-client/blob/main/LICENSE)\n[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/brave-search-python-client.svg?logo=python\u0026color=204361\u0026labelColor=1E2933)](https://github.com/helmut-hoffer-von-ankershoffen/brave-search-python-client/blob/main/noxfile.py)\n[![CI](https://github.com/helmut-hoffer-von-ankershoffen/brave-search-python-client/actions/workflows/test-and-report.yml/badge.svg)](https://github.com/helmut-hoffer-von-ankershoffen/brave-search-python-client/actions/workflows/test-and-report.yml)\n[![Read the Docs](https://img.shields.io/readthedocs/brave-search-python-client)](https://brave-search-python-client.readthedocs.io/en/latest/)\n[![Quality Gate](https://sonarcloud.io/api/project_badges/measure?project=helmut-hoffer-von-ankershoffen_brave-search-python-client\u0026metric=alert_status)](https://sonarcloud.io/summary/new_code?id=helmut-hoffer-von-ankershoffen_brave-search-python-client)\n[![Security](https://sonarcloud.io/api/project_badges/measure?project=helmut-hoffer-von-ankershoffen_brave-search-python-client\u0026metric=security_rating)](https://sonarcloud.io/summary/new_code?id=helmut-hoffer-von-ankershoffen_brave-search-python-client)\n[![Maintainability](https://sonarcloud.io/api/project_badges/measure?project=helmut-hoffer-von-ankershoffen_brave-search-python-client\u0026metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=helmut-hoffer-von-ankershoffen_brave-search-python-client)\n[![Technical Debt](https://sonarcloud.io/api/project_badges/measure?project=helmut-hoffer-von-ankershoffen_brave-search-python-client\u0026metric=sqale_index)](https://sonarcloud.io/summary/new_code?id=helmut-hoffer-von-ankershoffen_brave-search-python-client)\n[![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=helmut-hoffer-von-ankershoffen_brave-search-python-client\u0026metric=code_smells)](https://sonarcloud.io/summary/new_code?id=helmut-hoffer-von-ankershoffen_brave-search-python-client)\n[![CodeQL](https://github.com/helmut-hoffer-von-ankershoffen/brave-search-python-client/actions/workflows/codeql.yml/badge.svg)](https://github.com/helmut-hoffer-von-ankershoffen/brave-search-python-client/security/code-scanning)\n[![Dependabot](https://img.shields.io/badge/dependabot-active-brightgreen?style=flat-square\u0026logo=dependabot)](https://github.com/helmut-hoffer-von-ankershoffen/brave-search-python-client/security/dependabot)\n[![Renovate enabled](https://img.shields.io/badge/renovate-enabled-brightgreen.svg)](https://github.com/helmut-hoffer-von-ankershoffen/brave-search-python-client/issues?q=is%3Aissue%20state%3Aopen%20Dependency%20Dashboard)\n[![Coverage](https://codecov.io/gh/helmut-hoffer-von-ankershoffen/brave-search-python-client/graph/badge.svg?token=SX34YRP30E)](https://codecov.io/gh/helmut-hoffer-von-ankershoffen/brave-search-python-client)\n[![Ruff](https://img.shields.io/badge/style-Ruff-blue?color=D6FF65)](https://github.com/helmut-hoffer-von-ankershoffen/brave-search-python-client/blob/main/noxfile.py)\n[![MyPy](https://img.shields.io/badge/mypy-checked-blue)](https://github.com/helmut-hoffer-von-ankershoffen/brave-search-python-client/blob/main/noxfile.py)\n[![GitHub - Version](https://img.shields.io/github/v/release/helmut-hoffer-von-ankershoffen/brave-search-python-client?label=GitHub\u0026style=flat\u0026labelColor=1C2C2E\u0026color=blue\u0026logo=GitHub\u0026logoColor=white)](https://github.com/helmut-hoffer-von-ankershoffen/brave-search-python-client/releases)\n[![GitHub - Commits](https://img.shields.io/github/commit-activity/m/helmut-hoffer-von-ankershoffen/brave-search-python-client/main?label=commits\u0026style=flat\u0026labelColor=1C2C2E\u0026color=blue\u0026logo=GitHub\u0026logoColor=white)](https://github.com/helmut-hoffer-von-ankershoffen/brave-search-python-client/commits/main/)\n[![PyPI - Version](https://img.shields.io/pypi/v/brave-search-python-client.svg?label=PyPI\u0026logo=pypi\u0026logoColor=%23FFD243\u0026labelColor=%230073B7\u0026color=FDFDFD)](https://pypi.python.org/pypi/brave-search-python-client)\n[![PyPI - Status](https://img.shields.io/pypi/status/brave-search-python-client?logo=pypi\u0026logoColor=%23FFD243\u0026labelColor=%230073B7\u0026color=FDFDFD)](https://pypi.python.org/pypi/brave-search-python-client)\n[![Docker - Version](https://img.shields.io/docker/v/helmuthva/brave-search-python-client?sort=semver\u0026label=Docker\u0026logo=docker\u0026logoColor=white\u0026labelColor=1354D4\u0026color=10151B)](https://hub.docker.com/r/helmuthva/brave-search-python-client/tags)\n[![Docker - Size](https://img.shields.io/docker/image-size/helmuthva/brave-search-python-client?sort=semver\u0026arch=arm64\u0026label=image\u0026logo=docker\u0026logoColor=white\u0026labelColor=1354D4\u0026color=10151B)](https://hub.docker.com/r/helmuthva/brave-search-python-client/)\n[![Copier](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/copier-org/copier/master/img/badge/badge-grayscale-inverted-border-orange.json)](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template)\n[![Open in Dev Containers](https://img.shields.io/static/v1?label=Dev%20Containers\u0026message=Open\u0026color=blue\u0026logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTE3IDE2VjdsLTYgNU0yIDlWOGwxLTFoMWw0IDMgOC04aDFsNCAyIDEgMXYxNGwtMSAxLTQgMmgtMWwtOC04LTQgM0gzbC0xLTF2LTFsMy0zIi8+PC9zdmc+)](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/helmut-hoffer-von-ankershoffen/brave-search-python-client)\n[![Open in GitHub Codespaces](https://img.shields.io/static/v1?label=GitHub%20Codespaces\u0026message=Open\u0026color=blue\u0026logo=github)](https://github.com/codespaces/new/helmut-hoffer-von-ankershoffen/brave-search-python-client)\n\n\u003c!---\n[![ghcr.io - Version](https://ghcr-badge.egpl.dev/helmut-hoffer-von-ankershoffen/brave-search-python-client/tags?color=%2344cc11\u0026ignore=0.0%2C0%2Clatest\u0026n=3\u0026label=ghcr.io\u0026trim=)](https://github.com/helmut-hoffer-von-ankershoffen/brave-search-python-client/pkgs/container/brave-search-python-client)\n[![ghcr.io - Sze](https://ghcr-badge.egpl.dev/helmut-hoffer-von-ankershoffen/brave-search-python-client/size?color=%2344cc11\u0026tag=latest\u0026label=size\u0026trim=)](https://github.com/helmut-hoffer-von-ankershoffen/brave-search-python-client/pkgs/container/brave-search-python-client)\n--\u003e\n\n\u003e [!TIP]\n\u003e 📚 [Online documentation](https://brave-search-python-client.readthedocs.io/en/latest/) - 📖 [PDF Manual](https://brave-search-python-client.readthedocs.io/_/downloads/en/latest/pdf/)\n\n\u003e [!NOTE]\n\u003e 🧠 This project was scaffolded using the template [oe-python-template](https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template) with [copier](https://copier.readthedocs.io/).\n\n---\n\n\nBrave Search Python Client supporting Web, Image, News and Video search.\n\nUse Cases:\n\n1. Integrate into your Python code to help users find what they're looking for.\n2. Add to your AI applications to give LLMs access to current web information.\n3. Use the built-in CLI in shell scripts to get search results in JSON format.\n\n## Overview\n\nAdding Brave Search Python Client to your project as a dependency is easy.\n\n```shell\nuv add brave-search-python-client             # add dependency to your project\n```\n\nIf you don't have uv installed follow\n[these instructions](https://docs.astral.sh/uv/getting-started/installation/).\nIf you still prefer pip over the modern and fast package manager\n[uv](https://github.com/astral-sh/uv), you can install the library like this:\n\n```shell\npip install brave-search-python-client        # add dependency to your project\n```\n\nObtain your Brave Search API key by\n[signing up here](https://brave.com/search/api/) - the free tier includes 2,000\nrequests per month. For guidance on how to integrate the Brave Search Python\nclient into your code base check out the examples below and explore the\n[reference documentation](https://brave-search-python-client.readthedocs.io/en/latest/lib_reference.html).\nIf you just want to try out the client without having to write code you can use\nthe integrated CLI:\n\n```shell\nexport BRAVE_SEARCH_API_KEY=YOUR_API_KEY         # replace YOUR_API_KEY\nuvx brave-search-python-client web \"hello world\" # search for hello world\n```\n\nAll advanced search options of Brave Search are supported\n[by the client](https://brave-search-python-client.readthedocs.io/en/latest/lib_reference.html#brave_search_python_client.WebSearchRequest)\nand in the CLI:\n\n```shell\n# Find all German content about AI added in the last 24 hours\nuvx brave-search-python-client web --country=DE --search-lang=de --units=metric --freshness=pd ai\n```\n\nThe CLI provides extensive help:\n\n```shell\nuvx brave-search-python-client --help            # all CLI commands\nuvx brave-search-python-client web --help        # all options for web search\nuvx brave-search-python-client images --help     # all options image search\nuvx brave-search-python-client videos --help     # all options video search\nuvx brave-search-python-client news --help       # all options news search\n```\n\n![CLI](https://raw.githubusercontent.com/helmut-hoffer-von-ankershoffen/brave-search-python-client/refs/heads/main/cli-german-ai.png)\n\n## Operational Excellence\n\nThis project is designed with operational excellence in mind, using modern\nPython tooling and practices. It includes:\n\n1. Various examples demonstrating usage: a.\n   [Simple Python script](https://github.com/helmut-hoffer-von-ankershoffen/brave-search-python-client/blob/main/examples/script.py)\n   b.\n   [Streamlit web application](https://brave-search-python-client.streamlit.app/)\n   deployed on [Streamlit Community Cloud](https://streamlit.io/cloud) c.\n   [Jupyter](https://github.com/helmut-hoffer-von-ankershoffen/brave-search-python-client/blob/main/examples/notebook.ipynb)\n   and\n   [Marimo](https://github.com/helmut-hoffer-von-ankershoffen/brave-search-python-client/blob/main/examples/notebook.py)\n   notebook\n2. [Complete reference documentation](https://brave-search-python-client.readthedocs.io/en/latest/lib_reference.html)\n   on Read the Docs\n3. [Transparent test coverage](https://app.codecov.io/gh/helmut-hoffer-von-ankershoffen/brave-search-python-client)\n   including unit and E2E tests (reported on Codecov)\n4. Matrix tested with\n   [multiple python versions](https://github.com/helmut-hoffer-von-ankershoffen/brave-search-python-client/blob/main/noxfile.py)\n   to ensure compatibility (powered by [Nox](https://nox.thea.codes/en/stable/))\n5. Compliant with modern linting and formatting standards (powered by\n   [Ruff](https://github.com/astral-sh/ruff))\n6. Up-to-date dependencies (monitored by\n   [Renovate](https://github.com/renovatebot/renovate) and\n   [Dependabot](https://github.com/helmut-hoffer-von-ankershoffen/brave-search-python-client/security/dependabot))\n7. [A-grade code quality](https://sonarcloud.io/summary/new_code?id=helmut-hoffer-von-ankershoffen_brave-search-python-client)\n   in security, maintainability, and reliability with low technical debt and\n   codesmell (verified by SonarQube)\n8. Additional code security checks using\n   [CodeQL](https://github.com/helmut-hoffer-von-ankershoffen/brave-search-python-client/security/code-scanning)\n9. [Security Policy](SECURITY.md)\n10. [License](LICENSE) compliant with the Open Source Initiative (OSI)\n11. 1-liner for installation and execution of command line interface (CLI) via\n    [uv(x)](https://github.com/astral-sh/uv) or\n    [Docker](https://hub.docker.com/r/helmuthva/brave-search-python-client/tags)\n12. Setup for developing inside a\n    [devcontainer](https://code.visualstudio.com/docs/devcontainers/containers)\n    included (supports VSCode and GitHub Codespaces)\n\n## Usage Examples\n\n### Streamlit App\n\n![Watch it](https://raw.githubusercontent.com/helmut-hoffer-von-ankershoffen/brave-search-python-client/main/examples/streamlit.gif)\n\n[Try it out!](https://brave-search-python-client.streamlit.app) -\n[Show the code](https://github.com/helmut-hoffer-von-ankershoffen/brave-search-python-client/blob/main/examples/streamlit.py)\n\n### Minimal Python Script:\n\n```python\n\"\"\"\nExample script demonstrating the usage of the Brave Search Python Client.\n\nFor web, image, video and news search.\n\"\"\"\n\nimport asyncio\nimport os\n\nfrom dotenv import load_dotenv\nfrom rich.console import Console\n\nfrom brave_search_python_client import (\n    BraveSearch,\n    CountryCode,\n    ImagesSearchRequest,\n    LanguageCode,\n    NewsSearchRequest,\n    VideosSearchRequest,\n    WebSearchRequest,\n)\n\n# Load .env file and get Brave Search API key from environment\nload_dotenv()\napi_key = os.getenv(\"BRAVE_SEARCH_API_KEY\")\nif not api_key:\n    msg = \"BRAVE_SEARCH_API_KEY not found in environment\"\n    raise ValueError(msg)\n\n\nasync def search() -\u003e None:\n    \"\"\"Run various searches using the Brave Search Python Client (see https://brave-search-python-client.readthedocs.io/en/latest/lib_reference.html).\"\"\"\n    # Initialize the Brave Search Python client, using the API key from the environment\n    bs = BraveSearch()\n\n    # Perform a web search\n    response = await bs.web(WebSearchRequest(q=\"jupyter\"))\n\n    # Print results as JSON\n\n    # Iterate over web hits and render links in markdown\n    for _result in response.web.results if response.web else []:\n        pass\n\n    # Advanced search with parameters\n    response = await bs.web(\n        WebSearchRequest(\n            q=\"python programming\",\n            country=CountryCode.DE,\n            search_lang=LanguageCode.DE,\n        ),\n    )\n    for _result in response.web.results if response.web else []:\n        pass\n\n    # Search and render images\n    response = await bs.images(ImagesSearchRequest(q=\"cute cats\"))\n    for _image in response.results or []:\n        pass\n\n    # Search and render videos\n    response = await bs.videos(VideosSearchRequest(q=\"singularity is close\"))\n    for _video in response.results or []:\n        pass\n\n    # Search and render news\n    response = await bs.news(NewsSearchRequest(q=\"AI\"))\n    for _item in response.results or []:\n        pass\n\n\n# Run the async search function\n# Alternatively use await search() from an async function\nasyncio.run(search())\n```\n\n[Show script code](https://github.com/helmut-hoffer-von-ankershoffen/brave-search-python-client/blob/main/examples/script.py) -\n\n[Read the library reference documentation](https://brave-search-python-client.readthedocs.io/en/latest/lib_reference.html#brave_search_python_client.BraveSearch)\nfor an explanation of available classes and methods.\n\n## Jupyter Notebook\n\n![Jupyter Notebook](https://raw.githubusercontent.com/helmut-hoffer-von-ankershoffen/brave-search-python-client/main/examples/notebook.png)\n\n[Show notebook code](https://github.com/helmut-hoffer-von-ankershoffen/brave-search-python-client/blob/main/examples/notebook.ipynb)\n\n## Command Line Interface (CLI)\n\n### Run with [uvx](https://docs.astral.sh/uv/guides/tools/)\n\nAdd Brave Search API key to the environment\n\n```shell\nexport BRAVE_SEARCH_API_KEY=YOUR_API_KEY\n```\n\nShow available commands:\n\n```shell\nuvx brave-search-python-client --help\n```\n\nSearch the web for \"hello world\":\n\n```shell\nuvx brave-search-python-client web \"hello world\"\n```\n\nShow options for web search\n\n```shell\nuvx brave-search-python-client web --help\n```\n\nSearch images:\n\n```shell\nuvx brave-search-python-client images \"hello world\"\n```\n\nShow options for image search\n\n```shell\nuvx brave-search-python-client images --help\n```\n\nSearch videos:\n\n```shell\nuvx brave-search-python-client videos \"hello world\"\n```\n\nShow options for videos search\n\n```shell\nuvx brave-search-python-client videos --help\n```\n\nSearch news:\n\n```shell\nuvx brave-search-python-client news \"hello world\"\n```\n\nShow options for news search\n\n```shell\nuvx brave-search-python-client news --help\n```\n\n[Read the CLI reference documentation](https://brave-search-python-client.readthedocs.io/en/latest/cli_reference.html)\nfor an explanation of all commands and options.\n\n### Run with Docker\n\nNote: Replace YOUR_BRAVE_SEARCH_API_KEY with your API key in the following\nexamples.\n\nShow available commands:\n\n```shell\ndocker run helmuthva/brave-search-python-client --help\n```\n\nSearch the web:\n\n```shell\ndocker run --env BRAVE_SEARCH_API_KEY=YOUR_BRAVE_SEARCH_API_KEY helmuthva/brave-search-python-client web \"hello world\"\n```\n\nShow options for web search\n\n```shell\ndocker run helmuthva/brave-search-python-client web --help\n```\n\nSearch images:\n\n```shell\ndocker run --env BRAVE_SEARCH_API_KEY=YOUR_BRAVE_SEARCH_API_KEY helmuthva/brave-search-python-client images \"hello world\"\n```\n\nShow options for image search\n\n```shell\ndocker run helmuthva/brave-search-python-client images --help\n```\n\nSearch videos:\n\n```shell\ndocker run --env BRAVE_SEARCH_API_KEY=YOUR_BRAVE_SEARCH_API_KEY helmuthva/brave-search-python-client videos \"hello world\"\n```\n\nShow options for video search\n\n```bash\ndocker run helmuthva/brave-search-python-client videos --help\n```\n\nSearch news:\n\n```bash\ndocker run --env BRAVE_SEARCH_API_KEY=YOUR_BRAVE_SEARCH_API_KEY helmuthva/brave-search-python-client news \"hello world\"\n```\n\nShow options for news search\n\n```bash\ndocker run helmuthva/brave-search-python-client news --help\n```\n\nOr use docker compose\n\nFile .env is passed through\n\n```shell\ndocker compose up\ndocker compose run brave-search-python-client --help\n```\n\n\n## Further Reading\n\n* Inspect our [security policy](https://brave-search-python-client.readthedocs.io/en/latest/security.html) with detailed documentation of checks, tools and principles.\n* Check out the [CLI Reference](https://brave-search-python-client.readthedocs.io/en/latest/cli_reference.html) with detailed documentation of all CLI commands and options.\n* Check out the [Library Reference](https://brave-search-python-client.readthedocs.io/en/latest/lib_reference.html) with detailed documentation of public classes and functions.\n* Check out the [API Reference](https://brave-search-python-client.readthedocs.io/en/latest/api_reference_v1.html) with detailed documentation of all API operations and parameters.\n* Our [release notes](https://brave-search-python-client.readthedocs.io/en/latest/release-notes.html) provide a complete log of recent improvements and changes.\n* In case you want to help us improve 🦁 Brave Search Python Client: The [contribution guidelines](https://brave-search-python-client.readthedocs.io/en/latest/contributing.html) explain how to setup your development environment and create pull requests.\n* We gratefully acknowledge the [open source projects](https://brave-search-python-client.readthedocs.io/en/latest/attributions.html) that this project builds upon. Thank you to all these wonderful contributors!\n\n## Star History\n\n\u003ca href=\"https://star-history.com/#helmut-hoffer-von-ankershoffen/brave-search-python-client\"\u003e\n \u003cpicture\u003e\n   \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://api.star-history.com/svg?repos=helmut-hoffer-von-ankershoffen/brave-search-python-client\u0026type=Date\u0026theme=dark\" /\u003e\n   \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://api.star-history.com/svg?repos=helmut-hoffer-von-ankershoffen/brave-search-python-client\u0026type=Date\" /\u003e\n   \u003cimg alt=\"Star History Chart\" src=\"https://api.star-history.com/svg?repos=helmut-hoffer-von-ankershoffen/brave-search-python-client\u0026type=Date\" /\u003e\n \u003c/picture\u003e\n\u003c/a\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhelmut-hoffer-von-ankershoffen%2Fbrave-search-python-client","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhelmut-hoffer-von-ankershoffen%2Fbrave-search-python-client","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhelmut-hoffer-von-ankershoffen%2Fbrave-search-python-client/lists"}