semvec/pypi-packages huggingface dataset:
first-epss 0.1.0
Typed Python client and CLI for FIRST EPSS (Exploit Prediction Scoring System) API
License: MIT
Requires Python: >=3.8
Keywords: EPSS, FIRST, CVE, security, vulnerabilities, api, client

# first-epss

Typed Python client and CLI for the FIRST EPSS (Exploit Prediction Scoring System) API.

## Installation

```bash
pip install first-epss
```

## Quick start

```python
from epss_api import EpssClient

client = EpssClient()
# Single CVE
resp = client.query(cves=["CVE-2022-27225"])  # returns dict with data list
print(resp["data"][0])

# Batch
resp = client.query(cves=["CVE-2022-27225","CVE-2022-27223","CVE-2022-27218"]) 

# Time series (30 days)
resp = client.query(cves=["CVE-2022-25204"], scope="time-series")

# Top N by EPSS
resp = client.query(order="!epss", limit=100)

# Thresholds
resp = client.query(epss_gt=0.95)
resp = client.query(percentile_gt=0.95)

# Historic by date
resp = client.query(cves=["CVE-2022-26332"], date="2022-03-05")
```

### CLI

```bash
# Show first 100 CVEs
epss query --limit 100

# Single CVE
epss get CVE-2022-27225

# Batch
epss batch CVE-2022-27225 CVE-2022-27223 CVE-2022-27218

# Time series for 30 days
epss get CVE-2022-25204 --scope time-series

# Top 100
epss top --limit 100 --order !epss

# Above thresholds
epss query --epss-gt 0.95
epss query --percentile-gt 0.95

# Specific date
epss get CVE-2022-26332 --date 2022-03-05

# Output formats
epss query --limit 5 --format json
epss query --limit 5 --format csv > out.csv
```

## API coverage

This client wraps `https://api.first.org/data/v1/epss` including:
- single and batch CVE queries
- pagination with `offset` and `limit`
- filters: `date`, `scope=time-series`, `order`, `epss-gt`, `percentile-gt`
- optional `envelope` and `pretty`

See the official docs: `https://api.first.org/epss`.

## License

MIT
zafiro-api-provider 0.0.4
Zafiro API Provider
License: MIT
Requires Python: >=3.8

# Zafiro API Provider 🐍

Cliente API moderno y asíncrono para interactuar de forma sencilla e intuitiva con la API de Zafiro, permitiendo construir peticiones de forma fluida y pitónica.

## ✨ Características

- **Interfaz Fluida**: Construye endpoints encadenando atributos (`api.recurso.subrecurso`).
- **Asíncrono**: Basado en [httpx](https://www.python-httpx.org/) para un alto rendimiento.
- **Gestión Automática de Conexiones**: Usa `async with` para manejar el ciclo de vida del cliente.
- **Integrado**: Manejo de errores y autenticación básica listos para usar.

## 📦 Instalación

```bash
pip install zafiro-api-provider
```

## 🚀 Uso Rápido

La forma recomendada de usar el cliente es dentro de un bloque `async with` para gestionar la conexión automáticamente.

```python
import asyncio
from zafiro_api import ZafiroApiProvider  # Cambia esto por el nombre de tu paquete

async def main():
    # Inicializa el cliente con tus credenciales y la URL base de la API
    async with ZafiroApiProvider(
        base_url="https://tu-instancia.zafiro.com/api/v1",
        user="TU_USUARIO",
        password="TU_CONTRASEÑA"
    ) as api:
        try:
            # Listar recursos (GET /transactions/wellParameters.json)
            print("Listando parámetros...")
            params = {"well_id": "pozo-ejemplo-01"}
            all_params = await api.transactions.wellParameters.index(params=params)
            print("Parámetros encontrados:", all_params)

            # Crear un recurso (POST /transactions/wellParameters.json)
            print("\nCreando un nuevo parámetro...")
            new_param_data = {"name": "Presión", "value": 1500}
            created_param = await api.transactions.wellParameters.post(data=new_param_data)
            print("Parámetro creado:", created_param)

        except Exception as e:
            print(f"Ha ocurrido un error: {e}")

if __name__ == "__main__":
    asyncio.run(main())
```

## 📖 API en Resumen

### Inicialización

```python
api = ZafiroApiProvider("URL_BASE", "USUARIO", "CONTRASEÑA")
```

### Peticiones

Las peticiones se forman encadenando los recursos y finalizando con una acción:

```python
await api.recurso.subrecurso.accion(*args)
```

### Acciones Disponibles

- `.index(params: dict = None)`: **GET** a una lista de recursos.
- `.get(resource_id: str)`: **GET** a un recurso específico.
- `.post(data: dict = None)`: **POST** para crear un recurso.
- `.put(resource_id: str, data: dict = None)`: **PUT** para actualizar un recurso.
- `.delete(resource_id: str)`: **DELETE** para eliminar un recurso.