{"id":21770502,"url":"https://github.com/mcpcpc/librehtf","last_synced_at":"2026-05-09T06:11:24.964Z","repository":{"id":65538629,"uuid":"592580181","full_name":"mcpcpc/librehtf","owner":"mcpcpc","description":"An open hardware test framework","archived":false,"fork":false,"pushed_at":"2025-01-26T04:06:00.000Z","size":34,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-07-04T03:05:11.657Z","etag":null,"topics":["flask-application","htf"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mcpcpc.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,"governance":null,"roadmap":null,"authors":null}},"created_at":"2023-01-24T03:12:25.000Z","updated_at":"2025-01-26T04:05:22.000Z","dependencies_parsed_at":"2024-01-15T01:08:23.037Z","dependency_job_id":"2c9b9295-7d1a-47d9-adb3-b0d336b92124","html_url":"https://github.com/mcpcpc/librehtf","commit_stats":{"total_commits":4,"total_committers":1,"mean_commits":4.0,"dds":0.0,"last_synced_commit":"f5b2b9734094ad1dd08179cbe967a604a3619213"},"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/mcpcpc/librehtf","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mcpcpc%2Flibrehtf","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mcpcpc%2Flibrehtf/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mcpcpc%2Flibrehtf/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mcpcpc%2Flibrehtf/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mcpcpc","download_url":"https://codeload.github.com/mcpcpc/librehtf/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mcpcpc%2Flibrehtf/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268035748,"owners_count":24185092,"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-31T02:00:08.723Z","response_time":66,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","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":["flask-application","htf"],"created_at":"2024-11-26T14:12:53.234Z","updated_at":"2026-05-09T06:11:19.944Z","avatar_url":"https://github.com/mcpcpc.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# LibreHTF\n\nAn open hardware test framework.\n\n## Install\n\n### PyPI\n\nInstall and update using pip:\n\n```shell\npip install -U librehtf\n```\n\n### Repository\n\nWhen using git, clone the repository and change your present working directory.\n\n```shell\ngit clone http://github.com/mcpcpc/librehtf\ncd librehtf/\n```\n\nCreate and activate a virtual environment.\n\n```shell\npython3 -m venv venv\nsource venv/bin/activate\n```\n\nInstall LibreHTF to the virtual environment.\n\n```shell\npip install -e .\n```\n\n## Commands\n\n### db-init\n\nThe Sqlite3 database can be initialized or re-initialized with the\nfollowing command.\n\n```shell\nflask --app librehtf init-db\n```\n\n## Deployment\n\nBefore deployment, we *strongly* encourage you to override the\ndefault `SECRET_KEY` variable. This can be done by creating a\n`conf.py` file and placing it in the same root as the instance (i.e. typically where the SQLite database resides).\n\n```python\nSECRET_KEY = “192b9bdd22ab9ed4d12e236c78afcb9a393ec15f71bbf5dc987d54727823bcbf“\n```\n\nThere are a number of ways to generate a secret key value. The\nsimplest would be to use the built-in secrets Python library.\n\n```shell\n$ python -c ‘import secrets; print(secrets.token_hex())’\n‘192b9bdd22ab9ed4d12e236c78afcb9a393ec15f71bbf5dc987d54727823bcbf’\n```\n\n### Waitress\n\nProduction WSGI via waitress.\n\n```shell\npip install waitress\nwaitress-serve --call librehtf:create_app\n```\n\n## Test\n\n```shell\npython3 -m unittest\n```\n\nRun with coverage report.\n\n```shell\ncoverage run -m unittest\ncoverage report\ncoverage html  # open htmlcov/index.html in a browser\n```\n\n## Authorization\n\nOpenHTF provides a simple role-based access control (RBAC) for protecting both APIs and environment configuration. There are three levels of user access controls: administrator, functional and public. Responsibilities range from least restrictive to most restrictive, respectively.\n\n| Function      | Description                                                         | Evaluation | API Access | Management |\n|---------------|---------------------------------------------------------------------|------------|------------|------------|\n| Administrator | An individual for system administration and user management.        | Yes        | Yes        | Yes        |\n| Functional    | A non-human interface, typically for machine integration.           | Yes        | Yes        | Limited    |\n| Public        | Typically an operator or technician responsible for test execution. | Yes        | No         | No         |\n\n## Nomenclature \n\nOpenHTF is architected to allow inherent branching of tests.  At the core, there are three tiers of organization: device, test and task.\n\n### Device\n\nDevices refer to specific to hardware versions or product configurations. These are typically descriptive in nature and are useful when organizing hardware test interfaces that are intended to be used with multiple product offerings. Each device may have one or multiple *test* configurations. \n\n### Test\n\nTests are a collection of similar or related tasks. Thus, executing a test will execute all collected task operators.\n\n### Task\n\nThe smallest unitdiscretized observation for a given test. The result of running a task can either be informative or comparative. When comparing the result of a task, the resulting outcome either yields PASS or FAIL.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmcpcpc%2Flibrehtf","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmcpcpc%2Flibrehtf","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmcpcpc%2Flibrehtf/lists"}