semvec/pypi-packages huggingface dataset:
skysniff 1.0.0
Get weather information for a specified address
License: MIT
Requires Python: >=3.12

# skysniff [![Build Status][build-status-link]][build-status-img]

Skysniff pulls weather information from the National Weather Service, and prints it to your terminal.

Basic usage: `skysniff [-a] daily` or `skysniff [-a] hourly`

You can store the [a default address in a config file](#storing-your-address), or pass `-a` to have it ask for an address.

[build-status-link]: https://api.cirrus-ci.com/github/duckinator/skysniff.svg
[build-status-img]: https://cirrus-ci.com/github/duckinator/skysniff

## Installation

```
$ pipx install skysniff
```

## Usage

```console
$ cat ~/.config/skysniff/address.txt
Montello & Centre St, 02302
$ skysniff hourly
12AM 21°F, Mostly Cloudy, winds 5 mph
[...]
11AM 33°F, Mostly Sunny, winds 8 mph

$ skysniff daily -a
Address: Penn Ave & Negley Ave, Pittsburgh, PA
Overnight
---------
Mostly cloudy. Low around 26, with temperatures rising to around 32 overnight. Southwest wind around 6 mph.

[...]
```

### Storing your address

By default, skysniff will try to read your address from the address configuration file.

If the environment variable `$XDG_CONFIG_HOME` is defined, skysniff uses `$XDG_CONFIG_HOME/skysniff/address.txt`. Otherwise, it uses `~/.config/skysniff/address.txt`.

(Usually these are equivalent.)

## Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/duckinator/skysniff. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.

## License

The code for skysniff is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
energy-tracker-api 2.0.0
Async Python client for Energy Tracker API
License: MIT
Requires Python: >=3.14

# Energy Tracker API Client

Async Python client for the [Energy Tracker](https://github.com/energy-tracker) public REST API.

## Installation

```bash
pip install energy-tracker-api
```

## Requirements

- Python 3.14+
- Personal Access Token from Energy Tracker

## Quick Start

```python
import asyncio
from decimal import Decimal
from energy_tracker_api import EnergyTrackerClient, CreateMeterReadingDto

async def main():
    async with EnergyTrackerClient(access_token="your-token") as client:
        # List devices
        devices = await client.devices.list_standard()

        # Create a meter reading
        reading = CreateMeterReadingDto(value=Decimal("12345.67"))
        await client.meter_readings.create(
            device_id="your-device-id",
            meter_reading=reading,
        )

asyncio.run(main())
```

## Resources

The client exposes three resource groups — all endpoints, parameters, and DTOs are documented in the [OpenAPI specification](https://github.com/energy-tracker/public-docs/blob/main/public-api/openapi.yml).

| Resource | Methods |
|---|---|
| `client.devices` | `list_standard()`, `list_virtual()` |
| `client.meter_readings` | `list()`, `create()`, `delete()`, `export()` |
| `client.environments` | `list()`, `get()`, `create()`, `delete()`, `create_entry()`, `delete_entry()` |

## Configuration

```python
client = EnergyTrackerClient(
    access_token="your-token",
    base_url="https://custom-api.example.com",  # Optional
    timeout=30,                                 # Optional, default: 10s
)
```

## Error Handling

All API errors inherit from `EnergyTrackerAPIError` and carry an `api_message` list with details from the server.

```python
from energy_tracker_api import (
    EnergyTrackerAPIError,
    ValidationError,
    AuthenticationError,
    ForbiddenError,
    ResourceNotFoundError,
    ConflictError,
    RateLimitError,
)

try:
    await client.meter_readings.create(device_id, reading)
except RateLimitError as e:
    print(f"Retry after {e.retry_after}s")
except EnergyTrackerAPIError as e:
    print(e.api_message)
```

## Development

```bash
make install-dev  # Install dependencies
make test         # Run tests
make type-check   # mypy
make format       # black + isort
make lint         # Linters
```

## License

MIT