{"id":24448,"library":"python-freeipa","title":"python-freeipa","description":"A lightweight FreeIPA client library for Python. Provides Pythonic access to FreeIPA JSON-RPC API. Current version is 1.0.10, requires Python >=3.10. Release cadence is low (last release in 2023).","status":"active","version":"1.0.10","language":"python","source_language":"en","source_url":"https://github.com/twaugh/python-freeipa","tags":["freeipa","identity-management","ldap","client"],"install":[{"cmd":"pip install python-freeipa","lang":"bash","label":"Install via pip"}],"dependencies":[{"reason":"HTTP client for FreeIPA server communication","package":"requests","optional":false},{"reason":"Date parsing for FreeIPA timestamps","package":"python-dateutil","optional":false}],"imports":[{"note":"Direct import from freeipa package is incorrect; client is a submodule.","wrong":"from freeipa import FreeIPA","symbol":"FreeIPA","correct":"from freeipa.client import FreeIPA"}],"quickstart":{"code":"from freeipa.client import FreeIPA\n\nclient = FreeIPA(\n    host='ipa.example.com',\n    username='admin',\n    password='secret'\n)\nprint(client.user_find('admin'))","lang":"python","description":"Initialize a FreeIPA client and perform a user search. Replace host, username, password with actual credentials."},"warnings":[{"fix":"Use `from freeipa.client import FreeIPA`","message":"In version 1.0.0+, the import path changed from `freeipa` to `freeipa.client`. Old code using `from freeipa import FreeIPA` will break.","severity":"breaking","affected_versions":">=1.0.0"},{"fix":"Access the first element: `users = client.user_find('admin'); user = users[0] if users else None`","message":"The `user_find` and similar methods return a list of dicts, not a single object. Common mistake: treating the result as a single user.","severity":"gotcha","affected_versions":"all"},{"fix":"Pass password when calling methods: `client.user_find('admin', password='secret')`","message":"The `password` parameter in the constructor is deprecated since version 1.0.8. Use `password` as a keyword argument to the individual method calls instead.","severity":"deprecated","affected_versions":">=1.0.8"}],"env_vars":null,"last_verified":"2026-05-01T00:00:00.000Z","next_check":"2026-07-30T00:00:00.000Z","problems":[{"fix":"Verify credentials. For Kerberos, ensure you have a valid TGT (kinit) and pass `remote_user` parameter instead.","cause":"Incorrect username or password, or server requires Kerberos authentication.","error":"freeipa.exceptions.FreeIPAError: 401 Unauthorized"},{"fix":"Import from freeipa.client: `from freeipa.client import FreeIPA`","cause":"Using old import path which changed in version 1.0.0.","error":"ImportError: cannot import name 'FreeIPA' from 'freeipa'"},{"fix":"Check network connectivity, hostname, and SSL certificate. You can disable SSL verification with `verify_ssl=False` (insecure, not recommended).","cause":"FreeIPA server is unreachable or SSL certificate mismatch.","error":"requests.exceptions.ConnectionError: HTTPConnectionPool(host='ipa.example.com', port=443): Max retries exceeded"}],"ecosystem":"pypi","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}