# blood-hound-api-client
A client library for accessing BloodHound API
## Usage
For HMAC authentication, create and copy your API Token id and key.
Create an HMACAuthenticationClient using your API Token id and key::
```python
import auth
from auth.hmac_authenticated_client import HMACAuthenticatedClient
token_key = "CAuAwLgPag3xpjfx5gYt3mEpRpK5DXkL1LGVK+utqMLTnlakVmjeZw=="
token_id = "5f538a38-fd90-4228-b17b-ee09056c6ade"
get_version("http://bloodhound.localhost", token_key, token_id)
client = HMACAuthenticatedClient(base_url=base_url, token_key=token_key, token_id=token_id)
```
Now you can call your endpoint and use the model objects
Now call your endpoint and use your models:
```python
from blood_hound_api_client import AuthenticatedClient
from blood_hound_api_client.api.api_info import get_api_version
from blood_hound_api_client.models import GetApiVersionResponse200
with client as client::
version: GetApiVersionResponse200 = get_api_version.sync(client=client)
response: GetApiVersionResponse200 = get_api_version.sync_detailed(client=client)
print(response.data.api)
```
Or do the same thing with an async version:
```python
from blood_hound_api_client import AuthenticatedClient
from blood_hound_api_client.api.api_info import get_api_version
from blood_hound_api_client.models import GetApiVersionResponse200
async with client as client:
version:: GetApiVersionResponse200 = await get_api_version.asyncio(client=client)
response: Response[GetApiVersionResponse200] = await get_api_version.asyncio_detailed(client=client)
print(response.data.api)
```
Things to know:
1. Every path/method combo becomes a Python module with four functions:
1. `sync`: Blocking request that returns parsed data (if successful) or `None`
1. `sync_detailed`: Blocking request that always returns a `Request`, optionally with `parsed` set if the request was successful.
1. `asyncio`: Like `sync` but async instead of blocking
1. `asyncio_detailed`: Like `sync_detailed` but async instead of blocking
1. All path/query params, and bodies become method arguments.
1. If your endpoint had any tags on it, the first tag will be used as a module name for the function (my_tag above)
1. Any endpoint which did not have a tag will be in `blood_hound_api_client.api.default`
## Advanced customizations
There are more settings on the generated `Client` class which let you control more runtime behavior, check out the docstring on that class for more info. You can also customize the underlying `httpx.Client` or `httpx.AsyncClient` (depending on your use-case):
# Or get the underlying httpx client to modify directly with client.get_httpx_client() or client.get_async_httpx_client()
```
You can even set the httpx client directly, but beware that this will override any existing settings (e.g., base_url):
## Building / publishing this package
This project uses [Poetry](https://python-poetry.org/) to manage dependencies and packaging. Here are the basics:
1. Update the metadata in pyproject.toml (e.g. authors, version)
1. If you're using a private repository, configure it with Poetry
1. `poetry config repositories.<your-repository-name> <url-to-your-repository>`
1. `poetry config http-basic.<your-repository-name> <username> <password>`
1. Publish the client with `poetry publish --build -r <your-repository-name>` or, if for public PyPI, just `poetry publish --build`
If you want to install this client into another project without publishing it (e.g. for development) then:
1. If that project **is using Poetry**, you can simply do `poetry add <path-to-this-client>` from that project
1. If that project is not using Poetry:
1. Build a wheel with `poetry build -f wheel`
1. Install that wheel from the other project `pip install <path-to-wheel>`
Raw data
{
"_id": null,
"home_page": "https://github.com/SpecterOps/bloodhound-python-sdk",
"name": "blood-hound-python-client",
"maintainer": null,
"docs_url": null,
"requires_python": "<4.0,>=3.8",
"maintainer_email": null,
"keywords": "bloodhound, api, sdk, client",
"author": "SpecterOps",
"author_email": "info@specterops.io",
"download_url": "https://files.pythonhosted.org/packages/bd/91/7625bd5643d9a637a410b86dfc858bfc5468709a8fff5e92ae22d23de182/blood_hound_python_client-2.0.0.tar.gz",
"platform": null,
"description": "# blood-hound-api-client\nA client library for accessing BloodHound API\n\n## Usage\nFor HMAC authentication, create and copy your API Token id and key.\n\nCreate an HMACAuthenticationClient using your API Token id and key::\n\n```python\nimport auth\nfrom auth.hmac_authenticated_client import HMACAuthenticatedClient\n\ntoken_key = \"CAuAwLgPag3xpjfx5gYt3mEpRpK5DXkL1LGVK+utqMLTnlakVmjeZw==\"\ntoken_id = \"5f538a38-fd90-4228-b17b-ee09056c6ade\"\nget_version(\"http://bloodhound.localhost\", token_key, token_id)\nclient = HMACAuthenticatedClient(base_url=base_url, token_key=token_key, token_id=token_id)\n\n```\n\nNow you can call your endpoint and use the model objects\n\nNow call your endpoint and use your models:\n\n```python\n\nfrom blood_hound_api_client import AuthenticatedClient\nfrom blood_hound_api_client.api.api_info import get_api_version\nfrom blood_hound_api_client.models import GetApiVersionResponse200\n\nwith client as client::\n version: GetApiVersionResponse200 = get_api_version.sync(client=client)\n response: GetApiVersionResponse200 = get_api_version.sync_detailed(client=client)\n print(response.data.api)\n```\n\nOr do the same thing with an async version:\n\n```python\nfrom blood_hound_api_client import AuthenticatedClient\nfrom blood_hound_api_client.api.api_info import get_api_version\nfrom blood_hound_api_client.models import GetApiVersionResponse200\n\nasync with client as client:\n version:: GetApiVersionResponse200 = await get_api_version.asyncio(client=client)\n response: Response[GetApiVersionResponse200] = await get_api_version.asyncio_detailed(client=client)\n print(response.data.api)\n\n```\n\nThings to know:\n1. Every path/method combo becomes a Python module with four functions:\n 1. `sync`: Blocking request that returns parsed data (if successful) or `None`\n 1. `sync_detailed`: Blocking request that always returns a `Request`, optionally with `parsed` set if the request was successful.\n 1. `asyncio`: Like `sync` but async instead of blocking\n 1. `asyncio_detailed`: Like `sync_detailed` but async instead of blocking\n\n1. All path/query params, and bodies become method arguments.\n1. If your endpoint had any tags on it, the first tag will be used as a module name for the function (my_tag above)\n1. Any endpoint which did not have a tag will be in `blood_hound_api_client.api.default`\n\n## Advanced customizations\n\nThere are more settings on the generated `Client` class which let you control more runtime behavior, check out the docstring on that class for more info. You can also customize the underlying `httpx.Client` or `httpx.AsyncClient` (depending on your use-case):\n\n\n# Or get the underlying httpx client to modify directly with client.get_httpx_client() or client.get_async_httpx_client()\n```\n\nYou can even set the httpx client directly, but beware that this will override any existing settings (e.g., base_url):\n\n## Building / publishing this package\n\n\nThis project uses [Poetry](https://python-poetry.org/) to manage dependencies and packaging. Here are the basics:\n1. Update the metadata in pyproject.toml (e.g. authors, version)\n1. If you're using a private repository, configure it with Poetry\n 1. `poetry config repositories.<your-repository-name> <url-to-your-repository>`\n 1. `poetry config http-basic.<your-repository-name> <username> <password>`\n1. Publish the client with `poetry publish --build -r <your-repository-name>` or, if for public PyPI, just `poetry publish --build`\n\nIf you want to install this client into another project without publishing it (e.g. for development) then:\n1. If that project **is using Poetry**, you can simply do `poetry add <path-to-this-client>` from that project\n1. If that project is not using Poetry:\n 1. Build a wheel with `poetry build -f wheel`\n 1. Install that wheel from the other project `pip install <path-to-wheel>`\n\n",
"bugtrack_url": null,
"license": "APACHE",
"summary": "A client library for accessing BloodHound API",
"version": "2.0.0",
"project_urls": {
"Homepage": "https://github.com/SpecterOps/bloodhound-python-sdk",
"Repository": "https://github.com/SpecterOps/bloodhound-python-sdk"
},
"split_keywords": [
"bloodhound",
" api",
" sdk",
" client"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "cd720240c0694c69b3af5ca584f1e6b189b808414abe43f9cf829d8fd714d93e",
"md5": "25ee35b0d2fb5fb75e0ae566c04a3f55",
"sha256": "b4823ab35eed5b30ca033f37081cca0732d5d1cad128552626cc8691ca48c667"
},
"downloads": -1,
"filename": "blood_hound_python_client-2.0.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "25ee35b0d2fb5fb75e0ae566c04a3f55",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<4.0,>=3.8",
"size": 604426,
"upload_time": "2024-10-01T16:12:21",
"upload_time_iso_8601": "2024-10-01T16:12:21.020311Z",
"url": "https://files.pythonhosted.org/packages/cd/72/0240c0694c69b3af5ca584f1e6b189b808414abe43f9cf829d8fd714d93e/blood_hound_python_client-2.0.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "bd917625bd5643d9a637a410b86dfc858bfc5468709a8fff5e92ae22d23de182",
"md5": "ec9e32a46b4756b2307be9a7be740187",
"sha256": "de6fd5c44d012539c5edb97f69c227b202c75f107e6608a47ad43c12b2e40e8e"
},
"downloads": -1,
"filename": "blood_hound_python_client-2.0.0.tar.gz",
"has_sig": false,
"md5_digest": "ec9e32a46b4756b2307be9a7be740187",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<4.0,>=3.8",
"size": 147861,
"upload_time": "2024-10-01T16:12:23",
"upload_time_iso_8601": "2024-10-01T16:12:23.343525Z",
"url": "https://files.pythonhosted.org/packages/bd/91/7625bd5643d9a637a410b86dfc858bfc5468709a8fff5e92ae22d23de182/blood_hound_python_client-2.0.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-10-01 16:12:23",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "SpecterOps",
"github_project": "bloodhound-python-sdk",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "blood-hound-python-client"
}