{"id":37687240,"url":"https://github.com/djmoch/py9pfactotum","last_synced_at":"2026-01-20T16:43:05.383Z","repository":{"id":244220428,"uuid":"814588792","full_name":"djmoch/py9pfactotum","owner":"djmoch","description":"Python implementation of the plan9port auth library","archived":false,"fork":false,"pushed_at":"2025-12-06T04:52:29.000Z","size":134,"stargazers_count":0,"open_issues_count":7,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-07T10:37:34.993Z","etag":null,"topics":["factotum","keyring","plan9","python"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"isc","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/djmoch.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,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-06-13T09:54:07.000Z","updated_at":"2025-11-24T21:49:56.000Z","dependencies_parsed_at":"2024-08-19T19:33:18.860Z","dependency_job_id":"64bacbaa-fa22-45d9-9311-d800888eb406","html_url":"https://github.com/djmoch/py9pfactotum","commit_stats":null,"previous_names":["djmoch/py9pfactotum"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/djmoch/py9pfactotum","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/djmoch%2Fpy9pfactotum","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/djmoch%2Fpy9pfactotum/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/djmoch%2Fpy9pfactotum/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/djmoch%2Fpy9pfactotum/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/djmoch","download_url":"https://codeload.github.com/djmoch/py9pfactotum/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/djmoch%2Fpy9pfactotum/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28478684,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T11:59:17.896Z","status":"ssl_error","status_checked_at":"2026-01-16T11:55:55.838Z","response_time":107,"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":["factotum","keyring","plan9","python"],"created_at":"2026-01-16T12:35:54.049Z","updated_at":"2026-01-16T12:35:54.581Z","avatar_url":"https://github.com/djmoch.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"py9pfactotum\n============\n\npy9pfactotum is Python's plan9port Factotum client. It also provides\nthe following extras:\n\n- Helper functions that mirror plan9port's auth(3) library\n- A [Keyring](https://pypi.org/project/keyring/) backend to connect\n  to your running factotum server.\n\nUsage\n-----\n\nIn the current (alpha) state of maturity, the implementation is\nincomplete. Currently enough is implemented to support the Keyring\nbackend (i.e., to read passwords from the running server).\n\nWhen using the FactotumClient directly, arguments are passed as\nkeyword arguments, which are built into a key template internally:\n\n``` python\nfrom py9pfactotum import FactotumClient\n\nc = FactotumClient()\nc.getpass(server='mail.example.org', user='johndoe')\n{ 'user': 'johndoe', 'passwd': 'insecure' }\n```\n\nAs with the example above, the client provides high-level methods\nthat supply the correct 'proto' and 'role' attributes to the key\ntemplate. See factotum(4) for more information.\n\nWhen using the auth(3) functions, the function signatures mirror\ntheir plan9port counterparts, except that structures are replaced\nwith dictionaries.\n\n``` python\nfrom py9pfactotum import auth_getuserpasswd\n\nc = auth_getuserpasswd(server='mail.example.org')\n{ 'user': 'johndoe', 'passwd': 'insecure' }\n```\n\nKeyring\n-------\n\nThe Keyring user interface is transparent, but that library must\nbe explicitly installed on the system (it is not a hard dependency\nof py9pfactotum). Because factotum is not able to persist passwords\n(or password deletions), attempts to use the Keyring to do so will\nthrow an error.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdjmoch%2Fpy9pfactotum","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdjmoch%2Fpy9pfactotum","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdjmoch%2Fpy9pfactotum/lists"}