{"id":28034853,"url":"https://github.com/Pylons/hupper","last_synced_at":"2025-05-11T11:02:37.020Z","repository":{"id":51350676,"uuid":"71216295","full_name":"Pylons/hupper","owner":"Pylons","description":"in-process file monitor / reloader for reloading your code automatically during development","archived":false,"fork":false,"pushed_at":"2024-11-12T17:04:51.000Z","size":347,"stargazers_count":220,"open_issues_count":5,"forks_count":26,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-05-10T10:37:54.773Z","etag":null,"topics":["daemon","file-monitoring","inotify","python","reload","watchdog"],"latest_commit_sha":null,"homepage":"https://docs.pylonsproject.org/projects/hupper/en/latest/","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/Pylons.png","metadata":{"files":{"readme":"README.rst","changelog":"CHANGES.rst","contributing":"CONTRIBUTING.rst","funding":null,"license":"LICENSE.txt","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}},"created_at":"2016-10-18T06:32:45.000Z","updated_at":"2025-05-08T08:12:58.000Z","dependencies_parsed_at":"2024-04-10T02:56:12.213Z","dependency_job_id":"0599523d-09d4-446f-9236-522bd2baca1f","html_url":"https://github.com/Pylons/hupper","commit_stats":{"total_commits":358,"total_committers":14,"mean_commits":"25.571428571428573","dds":0.1005586592178771,"last_synced_commit":"29ab3fbdb16ff4023fe8dd8eb12cac2ca091eb1f"},"previous_names":[],"tags_count":38,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Pylons%2Fhupper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Pylons%2Fhupper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Pylons%2Fhupper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Pylons%2Fhupper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Pylons","download_url":"https://codeload.github.com/Pylons/hupper/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253554071,"owners_count":21926610,"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":["daemon","file-monitoring","inotify","python","reload","watchdog"],"created_at":"2025-05-11T11:02:35.824Z","updated_at":"2025-05-11T11:02:37.001Z","avatar_url":"https://github.com/Pylons.png","language":"Python","funding_links":[],"categories":["Python","Settings"],"sub_categories":[],"readme":"======\nhupper\n======\n\n.. image:: https://img.shields.io/pypi/v/hupper.svg\n    :target: https://pypi.python.org/pypi/hupper\n\n.. image:: https://github.com/Pylons/hupper/actions/workflows/ci-tests.yml/badge.svg?branch=main\n    :target: https://github.com/Pylons/hupper/actions/workflows/ci-tests.yml?query=branch%3Amain\n\n.. image:: https://readthedocs.org/projects/hupper/badge/?version=latest\n    :target: https://readthedocs.org/projects/hupper/?badge=latest\n    :alt: Documentation Status\n\n``hupper`` is an integrated process monitor that will track changes to\nany imported Python files in ``sys.modules`` as well as custom paths. When\nfiles are changed the process is restarted.\n\nCommand-line Usage\n==================\n\nHupper can load any Python code similar to ``python -m \u003cmodule\u003e`` by using the\n``hupper -m \u003cmodule\u003e`` program.\n\n.. code-block:: console\n\n   $ hupper -m myapp\n   Starting monitor for PID 23982.\n\nAPI Usage\n=========\n\nStart by defining an entry point for your process. This must be an importable\npath in string format. For example, ``myapp.scripts.serve.main``.\n\n.. code-block:: python\n\n    # myapp/scripts/serve.py\n\n    import sys\n    import hupper\n    import waitress\n\n\n    def wsgi_app(environ, start_response):\n        start_response('200 OK', [('Content-Type', 'text/plain')])\n        yield b'hello'\n\n\n    def main(args=sys.argv[1:]):\n        if '--reload' in args:\n            # start_reloader will only return in a monitored subprocess\n            reloader = hupper.start_reloader('myapp.scripts.serve.main')\n\n            # monitor an extra file\n            reloader.watch_files(['foo.ini'])\n\n        waitress.serve(wsgi_app)\n\nAcknowledgments\n===============\n\n``hupper`` is inspired by initial work done by Carl J Meyer and David Glick\nduring a Pycon sprint and is built to be a more robust and generic version of\nIan Bicking's excellent PasteScript ``paste serve --reload`` and Pyramid's\n``pserve --reload``.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FPylons%2Fhupper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FPylons%2Fhupper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FPylons%2Fhupper/lists"}