hosts_resolver/README.md

67 lines
1.5 KiB
Markdown

# hosts_resolver
> Zero-dependency Python module to resolve names using /etc/hosts alone
## Rationale
Sometimes we only want to resolve names using /etc/hosts entries without performing DNS requests (thus `socket.getaddrinfo` is out of the equation).
So there are three options :
* manually parse /etc/hosts
* call `getent` program and parse its output
* use this module (which binds libc `gethostent` function) !
## Limitations
- `gethostent` is not reentrant (see GETHOSTBYNAME(3))
- `gethostent` is not thread-safe (see GETHOSTBYNAME(3))
- glibc implementations does not support IPv6 addresses (see GETHOSTBYNAME(3))
- behavior is **undefined** when using multiple context managers simultaneously
## Installation
```bash
pip3 install --index-url https://git.forestier.app/api/packages/HorlogeSkynet/pypi/simple/ hosts-resolver
# or manually download latest Wheel and then :
pip3 install ./hosts_resolver-*-py3-none-any.whl
```
## Usage
### From API
```python
from hosts_resolver.hosts_resolver import get_hosts_resolver
with get_hosts_resolver() as hosts_resolver:
print(hosts_resolver.resolve("localhost"))
# -> IPv4Address('127.0.0.1')
```
### From CLI
> Why bother ?? You should be looking at `getent` !
```bash
hosts_resolver -j localhost
# -> {"localhost": "127.0.0.1"}
```
## Development
```bash
pip3 install -r requirements-dev.txt
pylint src/
mypy src/
isort --check src/
black --check src/
python3 -m build
```
Any patch sent by e-mail to [samuel+dev@forestier.app](mailto:samuel+dev@forestier.app) will get properly reviewed.