{"id":13814398,"url":"https://github.com/brunobord/tdaemon","last_synced_at":"2026-03-07T18:31:38.591Z","repository":{"id":455364,"uuid":"79012","full_name":"brunobord/tdaemon","owner":"brunobord","description":"Test daemon in Python","archived":false,"fork":false,"pushed_at":"2015-09-17T21:03:17.000Z","size":340,"stargazers_count":138,"open_issues_count":11,"forks_count":44,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-10T00:18:39.406Z","etag":null,"topics":[],"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/brunobord.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2008-11-21T08:20:58.000Z","updated_at":"2025-01-02T11:09:30.000Z","dependencies_parsed_at":"2022-08-16T10:25:18.605Z","dependency_job_id":null,"html_url":"https://github.com/brunobord/tdaemon","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/brunobord/tdaemon","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brunobord%2Ftdaemon","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brunobord%2Ftdaemon/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brunobord%2Ftdaemon/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brunobord%2Ftdaemon/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/brunobord","download_url":"https://codeload.github.com/brunobord/tdaemon/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brunobord%2Ftdaemon/sbom","scorecard":{"id":255270,"data":{"date":"2025-08-11","repo":{"name":"github.com/brunobord/tdaemon","commit":"733b5bddb4b12bc3db326a192ce5606f28768307"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.3,"checks":[{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":2,"reason":"Found 7/29 approved changesets -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 8 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-17T09:32:58.370Z","repository_id":455364,"created_at":"2025-08-17T09:32:58.370Z","updated_at":"2025-08-17T09:32:58.370Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30226246,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-07T18:12:09.766Z","status":"ssl_error","status_checked_at":"2026-03-07T18:11:58.786Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":[],"created_at":"2024-08-04T04:01:56.119Z","updated_at":"2026-03-07T18:31:38.556Z","avatar_url":"https://github.com/brunobord.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"## Test Daemon\n\nThe test daemon watches the content of files in a directory and if any of them\nchanges (the content is edited), it runs the tests.\n\n### Installation\n\nPut the tdaemon somewhere where it's executable.\n\n### Basic Usage\n\nSimply run this:\n\n    $ python /path/to/tdaemon.py\n\nThe daemon starts watching the current directory and subdirectories. As soon as\none file changes, the daemon runs ``nosetests`` and you may watch the result.\n\n### Advanced usage\n\n#### Change the scanned path\n\nIf you want to run the daemon from another directory than your current\ndirectory, just run:\n\n    $ tdaemon.py /path/to/your/project\n\n\n#### Change the test program\n\nFor example, try out ``py.test``:\n\n    $ tdaemon.py --test-program=py\n\n``Nosetests`` is the default test program, but you may use others.\n\nThe available test programs are:\n\n* [nosetests](http://somethingaboutorange.com/mrl/projects/nose/) (keyword is `nose` or `nosetests`)\n* [django](http://docs.djangoproject.com/en/dev/topics/testing/) (keyword is `django`)\n* [py.test](http://codespeak.net/py/dist/test.html) (keyword is `py`)\n* [symfony](http://www.symfony-project.org/) (keyword is `symfony`)\n* [jelix](http://jelix.org/) (keyword is `jelix`)\n* [phpunit](http://www.phpunit.de/manual/current/en/index.html) (keyword is `phpunit`)\n* [sphinx](http://sphinx.pocoo.org/) (keyword is `sphinx`)\n* [tox](http://codespeak.net/tox/) (keyword is `tox`)\n\nBear in mind that if you want to use one of these program, you **must** install\nthem on your system.\n\n*Note* : When you're using django, the path to the project must be the path where\n`manage.py` lives.\n\n#### Add parameters to your test program\n\nMost test programs allow you to test using specifig arguments, to test a small\npart of your project, or using a specific setting. If you want to append\nspecific arguments to your command line, use the ``--custom-args`` parameter\nlike this::\n\n    $ tdaemon.py --custom-args=\"myapp.MyTestClass\" --test-program=django\n\nThe above command will execute the following command in the current directory:\n\n    $ ./manage.py myapp.MyTestClass\n\nPlease refer to the test program manual / documentation to find out which\nadditional argument you may use here.\n\n**WARNING**: Please note that every time you're going to use this option, it\nwill require your confirmation. You are being warned that any command that\nwould break your system, erase some important data, etc. is\n**YOUR PLAIN FAULT!**. Not mine. So BE CAREFUL. Please.\n\n#### The max filesize\n\nThe ``tdaemon`` first checks the total filesize you want to scan. If the total\nfile size exceeds his quota (which is 25MB by default), the program asks you if\nyou still want to go on with this. You may be informed that scanning large\ndirectories may take some time, and thus alter the daemon performances.\n\nYou can change this quota by using the ``--size-max`` argument. For example:\n\n    $ tdaemon --size-max=100\n\nWith this argument, the programm will only ask for your permission to proceed\nwith a total archive of more than 100MB.\n\n### TODO\n\n    [ ] Extend the test utilities to other languages\n    [ ] Add an \"ignore\" option to ignore other files (logs, sqlite database,\n        image files, etc)\n    [ ] Check other pythonic dependencies (django, py.test). Won't be possible\n        for non-python test-programs, though\n\n### Done\n\n    [X] implements py.test, if possible\n    [X] Fixing bug: when a file vanished, the program fails.\n    [X] I remember I made the first bits of the code after reading an article...\n        [X] Find the link and name of the original author\n        [X] add appropriate credits\n    [X] Bugfix: When doing (e.g.) hg commit, it opens temporary files that are\n        detected as \"changed\", and the daemon starts tests. It should be ignored\n        (ref. ignore-directories)\n    [X] Feature: If the scanned directory size if larger than the option limit,\n    asking for the user to accept processing or not. Default option limit is 25MB\n    [X] OBSOLETE: Add the possibility to run a custom command.\n        (eg. ``python manage.py test myapp.MyTest``)\n    [X] Erase the custom command option. Too dangerous\n    [X] Check the only default dependency: ``nosetests``.\n    [X] Add an \"custom argument\" option. The user may want to run specific\n        commands, but the only way to do so is to send arguments rather than the\n        whole external command. Tests must pass, though (no `\u0026`, for example)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrunobord%2Ftdaemon","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbrunobord%2Ftdaemon","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrunobord%2Ftdaemon/lists"}