{"id":18405761,"url":"https://github.com/pybites-open-source/search","last_synced_at":"2025-07-21T19:34:47.269Z","repository":{"id":145287256,"uuid":"617346228","full_name":"PyBites-Open-Source/search","owner":"PyBites-Open-Source","description":null,"archived":false,"fork":false,"pushed_at":"2024-09-03T09:27:07.000Z","size":76,"stargazers_count":22,"open_issues_count":4,"forks_count":3,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-07-13T19:47:59.318Z","etag":null,"topics":["hacktoberfest"],"latest_commit_sha":null,"homepage":"","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/PyBites-Open-Source.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-03-22T07:43:35.000Z","updated_at":"2025-07-10T11:14:46.000Z","dependencies_parsed_at":"2025-04-07T08:42:21.729Z","dependency_job_id":null,"html_url":"https://github.com/PyBites-Open-Source/search","commit_stats":null,"previous_names":["pybites/search"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/PyBites-Open-Source/search","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PyBites-Open-Source%2Fsearch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PyBites-Open-Source%2Fsearch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PyBites-Open-Source%2Fsearch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PyBites-Open-Source%2Fsearch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PyBites-Open-Source","download_url":"https://codeload.github.com/PyBites-Open-Source/search/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PyBites-Open-Source%2Fsearch/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266366395,"owners_count":23918314,"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","status":"online","status_checked_at":"2025-07-21T11:47:31.412Z","response_time":64,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["hacktoberfest"],"created_at":"2024-11-06T03:04:41.581Z","updated_at":"2025-07-21T19:34:47.224Z","avatar_url":"https://github.com/PyBites-Open-Source.png","language":"Python","readme":"# Pybites Search\n\nA command line tool to easily search across Pybites content.\n\n## Installation\n\n`pybites-search` is hosted on PyPI and you can install it in a virtual environment like this:\n\n```\n$ pip install pybites-search\n```\n\n## How to run it:\n\n```\n$ search --help\n\n Usage: search [OPTIONS] COMMAND [ARGS]...\n\n╭─ Options ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ --install-completion          Install completion for the current shell.                                                                                     │\n│ --show-completion             Show completion for the current shell, to copy it or customize the installation.                                              │\n│ --help                        Show this message and exit.                                                                                                   │\n╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\n╭─ Commands ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ all                                                                                                                                                         │\n│ article                                                                                                                                                     │\n│ bite                                                                                                                                                        │\n│ podcast                                                                                                                                                     │\n│ tip                                                                                                                                                         │\n│ video                                                                                                                                                       │\n╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\n\n$ search article zipfiles\n┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n┃ Title                                        ┃ Url                                   ┃\n┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n│ How to Create and Serve Zipfiles from Django │ https://pybit.es/django-zipfiles.html │\n└──────────────────────────────────────────────┴───────────────────────────────────────┘\n\n$ search bite fastapi\n┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n┃ Title                                             ┃ Url                               ┃\n┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n│ FastAPI Exception handling                        │ https://codechalleng.es/bites/343 │\n│ FastAPI Hello World                               │ https://codechalleng.es/bites/336 │\n│ A little detour: Pydantic                         │ https://codechalleng.es/bites/337 │\n│ Update and delete food objects                    │ https://codechalleng.es/bites/340 │\n│ Food logging CRUD                                 │ https://codechalleng.es/bites/342 │\n│ FastAPI Authentication with JWT (JSON Web Tokens) │ https://codechalleng.es/bites/345 │\n│ Return an HTML response                           │ https://codechalleng.es/bites/344 │\n│ Create food objects                               │ https://codechalleng.es/bites/338 │\n│ Retrieve food objects                             │ https://codechalleng.es/bites/339 │\n│ Pydantic part II                                  │ https://codechalleng.es/bites/341 │\n└───────────────────────────────────────────────────┴───────────────────────────────────┘\n\n$ search podcast layoff\n┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n┃ Title                                          ┃ Url                                                                                        ┃\n┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n│ #101 - Layoff fears, 5 tips to stay in control │ https://www.buzzsprout.com/1501156/12125495-101-layoff-fears-5-tips-to-stay-in-control.mp3 │\n└────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────────────────────┘\n\n$ search tip unpacking\n┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n┃ Title                              ┃ Url                                                             ┃\n┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n│ tuple unpacking                    │ https://codechalleng.es/tips/tuple-unpacking                    │\n│ regex replace                      │ https://codechalleng.es/tips/regex-replace                      │\n│ dictionary unpacking               │ https://codechalleng.es/tips/dictionary-unpacking               │\n│ extract dictionary keys and values │ https://codechalleng.es/tips/extract-dictionary-keys-and-values │\n│ dataclass from dict                │ https://codechalleng.es/tips/dataclass-from-dict                │\n└────────────────────────────────────┴─────────────────────────────────────────────────────────────────┘\n\n$ search video property\n┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n┃ Title                                ┃ Url                                         ┃\n┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n│ Python @property decorator explained │ https://www.youtube.com/watch?v=8BbngXWouzo │\n└──────────────────────────────────────┴─────────────────────────────────────────────┘\n\n# and to search across all content channels:\n\n$ search all decouple\n                                                                           Pybites All Content\n┌────────────────────────────────────────────────────────────────────┬───────────────────────────────────────────────────────────────────────────────────────────────────┐\n│ Pybites Podcast Episodes                                           │ Url                                                                                               │\n├────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────┤\n│ #025 - Building Dreams with Python - The AskAGuru Story            │ https://www.pybitespodcast.com/1501156/8476666-025-building-dreams-with-python-the-askaguru-story │\n├────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────┤\n│ Pybites Python Tips                                                │ Url                                                                                               │\n├────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────┤\n│ configuration variables                                            │ https://codechalleng.es/tips/configuration-variables                                              │\n├────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────┤\n│ Pybites YouTube Videos                                             │ Url                                                                                               │\n├────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────┤\n│ How to manage environment variables in Django with python-decouple │ https://www.youtube.com/watch?v=LkyhTqDrSxA                                                       │\n└────────────────────────────────────────────────────────────────────┴───────────────────────────────────────────────────────────────────────────────────────────────────┘\n```\n\n## Caching\n\nBy default any requests calls to the different Pybites API endpoints are cached for 24 hours, you can change that setting the `CACHE_EXPIRATION_SECONDS` environment variable.\n\n## Changelog\n\nCheck out the changelog [here](CHANGELOG.md)\n\n## Developer setup instructions\n\nTo do dev work on this repo:\n\n1. Check out the repo and make a virtual environment and activate it:\n\n```\n# original repo or make a fork and clone that if you want to contribute\n\n$ git clone git@github.com:PyBites-Open-Source/search.git\n\n$ cd search\n√ search (main) $ python3 -m venv venv \u0026\u0026 source venv/bin/activate\n\n# for Windows this would be something like:\npy -3 -m venv venv \u0026\u0026 venv\\scripts\\activate\n```\n\n2. Install the regular + test + tooling dependencies:\n\n```\n(venv) √ search (main) $ python -m pip install .\n(venv) √ search (main) $ python -m pip install \".[test,tools]\"\n```\n\n3. Use the tool / run the tests\n\n```\n(venv) √ search (main) $ search ...\n...\n\n(venv) √ search (main) $ tox\n...\n...\n  py39: OK (15.89=setup[14.49]+cmd[1.40] seconds)\n  py310: OK (13.22=setup[11.80]+cmd[1.42] seconds)\n  py311: OK (10.42=setup[9.41]+cmd[1.01] seconds)\n  congratulations :) (39.61 seconds)\n```\n\n4. Code, have fun, contribute ... 💪 🙏\n\n\n### When using `pixi` use these instructions\n1. Check out the repo\n```\ngit clone git@github.com:PyBites-Open-Source/search.git\ncd search\n```\n\n2. Run the tool\n```\n# Find fastapi mentions in all pybites content\npixi run all fastapi\n\n# Find fastapi only in the podcasts\npixi run podcast fastapi\n```\n\n3. Test on all python version\n```\n# Installs and runs 3 test environments including different versions of python.\npixi run test\n\n# If you want to test one python version run\npixi run test39\npixi run test310\npixi run test311\n```\n\n4. Code, have fun, contribute ... 💪 🙏\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpybites-open-source%2Fsearch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpybites-open-source%2Fsearch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpybites-open-source%2Fsearch/lists"}