Skip to main content

Python library for the ista calista service

Project description

PyCalista-ista

PyPI version Downloads GitHub issues GitHub forks GitHub stars GitHub license GitHub Release Date codecov OpenSSF Best Practices


Unofficial async Python library for the Ista Calista service API. This library allows you to interact with your Ista Calista account to retrieve consumption data from heating and water meters using asyncio and aiohttp.

This project is based on ecotrend-ista and adapted for the Calista portal and asynchronous operation.

Features

  • Asynchronous: Uses asyncio and aiohttp for non-blocking I/O.
  • Login and session management with automatic cookie handling.
  • Retrieve consumption data for heating and water meters.
  • Parse Excel reports (.xls, .xlsx) from Ista Calista using pandas and openpyxl.
  • Support for different meter types (heating, hot water, cold water).
  • Automatic handling of session expiration and relogin attempts.
  • Data interpolation for missing readings.
  • Configurable retries for network requests.

Installation

Requires Python 3.12+

pip install pycalista-ista

This will install the library along with its dependencies (aiohttp, pandas, openpyxl, unidecode, yarl).

Usage

import asyncio
from datetime import date
import aiohttp

from pycalista_ista import PyCalistaIsta, IstaLoginError, IstaConnectionError

async def main():
    # It's recommended to reuse aiohttp ClientSession
    async with aiohttp.ClientSession() as session:
        # Initialize the client, optionally passing the session
        client = PyCalistaIsta("your@email.com", "your_password", session=session)

        try:
            # Login to the service (async)
            await client.login()
            print("Login successful!")

            # Get device history for a date range (async)
            start_date = date(2025, 1, 1)
            end_date = date(2025, 1, 31)
            devices = await client.get_devices_history(start_date, end_date)
            print(f"Retrieved data for {len(devices)} devices.")

            # Access device data
            for serial, device in devices.items():
                print("-" * 20)
                print(f"Device Serial: {serial}")
                print(f"Type: {device.__class__.__name__}")
                print(f"Location: {device.location}")
                if device.last_reading:
                    print(f"Last Reading: {device.last_reading.reading} on {device.last_reading.date.date()}")
                else:
                    print("Last Reading: N/A")
                # Access full history if needed: device.history

        except IstaLoginError as err:
            print(f"Login failed: {err}")
        except IstaConnectionError as err:
            print(f"Connection error: {err}")
        except Exception as err:
            print(f"An unexpected error occurred: {err}")

        # No need to explicitly call client.close() if session is managed externally
        # If client created its own session, call await client.close()

if __name__ == "__main__":
    asyncio.run(main())

Development

Setup Development Environment

  1. Clone the repository:

    git clone [https://github.com/herruzo99/pycalista-ista.git](https://github.com/herruzo99/pycalista-ista.git)
    cd pycalista-ista
    
  2. Create and activate a virtual environment (recommended):

    python -m venv .venv
    source .venv/bin/activate # or .venv\Scripts\activate on Windows
    
  3. Install development dependencies:

    pip install -e ".[dev]"
    

    This installs the package in editable mode plus dev tools like pytest, pytest-asyncio, aresponses, black, isort, mypy, ruff.

  4. Set up pre-commit hooks (optional but recommended):

    pre-commit install
    

Running Tests

The project uses pytest and pytest-asyncio.

# Run all tests
pytest

# Run with coverage report
pytest --cov=pycalista_ista

# Run specific test file
pytest tests/test_virtual_api.py

Tests require mocking external requests, which is handled using aresponses.

Code Style and Linting

  • Code is formatted using black.
  • Imports are sorted using isort.
  • Linting is done using ruff.
  • Type checking is done using mypy.

Run checks manually:

black . --check
isort . --check-only
ruff check .
mypy pycalista_ista tests

Or run pre-commit hooks: pre-commit run --all-files

Contributing

Contributions are welcome! Please follow the guidelines in CONTRIBUTING.md.

  1. Fork the repository.
  2. Create your feature branch (git checkout -b feature/amazing-feature).
  3. Make your changes, ensuring tests pass and coverage is maintained.
  4. Update documentation if necessary.
  5. Commit your changes following Conventional Commits.
  6. Push to the branch (git push origin feature/amazing-feature).
  7. Open a Pull Request.

Interact with the Project

Get the Software

  1. Install from PyPI:
    pip install pycalista-ista
    
  2. Clone the repository:
    git clone [https://github.com/herruzo99/pycalista-ista.git](https://github.com/herruzo99/pycalista-ista.git)
    

Provide Feedback

Use GitHub Issues and Discussions:

  1. Bug Reports: Open an issue
  2. Feature Requests: Submit an enhancement
  3. Questions: Start a discussion

License

This project is licensed under the MIT License - see the LICENSE file for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pycalista_ista-0.4.0.tar.gz (26.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pycalista_ista-0.4.0-py3-none-any.whl (28.3 kB view details)

Uploaded Python 3

File details

Details for the file pycalista_ista-0.4.0.tar.gz.

File metadata

  • Download URL: pycalista_ista-0.4.0.tar.gz
  • Upload date:
  • Size: 26.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pycalista_ista-0.4.0.tar.gz
Algorithm Hash digest
SHA256 083f4c44981ca64a5b0b0d0ae60fe5c1e7487b8eb871201e010b818d72f80fb7
MD5 d47d122157dda573eecd9deb3011cdb4
BLAKE2b-256 671d04536da97742200756e7b4fa89a26b397fa19aab28ef52af703f6f87372d

See more details on using hashes here.

Provenance

The following attestation bundles were made for pycalista_ista-0.4.0.tar.gz:

Publisher: python-publish.yml on herruzo99/pycalista-ista

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pycalista_ista-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: pycalista_ista-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 28.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pycalista_ista-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d182457156f00290685cc04f30803d63d6ac62355494b0751ec38199bee2d618
MD5 7c66827ddc19c36a6a21ffdfb6333894
BLAKE2b-256 ab3b0584b2bfb568c4f1953317f6bbfce19903eea562f124f0fb4c44e007dcfc

See more details on using hashes here.

Provenance

The following attestation bundles were made for pycalista_ista-0.4.0-py3-none-any.whl:

Publisher: python-publish.yml on herruzo99/pycalista-ista

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page