Skip to main content

SAS Atmosphere Interface & Retrieval

Project description

SASAIR (SAS Atmosphere Interface & Retrieval)

Description

SASAIR is a Python package with Python client implementations for some common Air pollution and atmosphere related public API's.

Currently, it supports the following API's:

Installation with pip

To install the package, you can use the following command:

pip install sasair 

Building from Source

You need Conda to build the package from source. Follow these steps:

  1. Clone the repository:
mkdir my-sasair-project
cd my-sasair-project
git clone https://git.vito.be/scm/marvin-atmosys/sasair.git .
  1. Create the Python environment:
conda env create --prefix ./.venv --file conda_env.yml
conda activate ./.venv
  1. Install the package:
poetry install -E "full"

Modules Overview

cams_client

Provides three primary client classes:

  • CAMSMosClient: Downloads observation-site optimized forecasts (mos_optimised) for a given country and pollutant.
  • CAMSEuropeClient: Downloads regional forecast data in NetCDF format for a specific CAMS model and pollutant.
  • CAMSftpClient: Downloads CAMS data from the FTP server.

Common usage CAMSMosClient

from datetime import datetime
from vito.sas.air.utils.cams_utils import Pollutant
from vito.sas.air.cams_client import CAMSMosClient

client = CAMSMosClient(date_start=datetime.now(), pollutant=Pollutant.NO2, country='belgium')
zip_file = client.download(destination_folder="./mos_data", api_key="your_api_key")
print(f"Downloaded MOS data to {zip_file}")

Common usage CAMSEuropeClient

from datetime import datetime
from vito.sas.air.utils.cams_utils import Pollutant
from vito.sas.air.cams_client import CAMSEuropeClient

client = CAMSEuropeClient(date_start=datetime.now(), cams_model_name='ensemble', pollutant=Pollutant.NO2, area=None)  # Default area [52, 2.5, 49, 6.5] will be used.
nc_file = client.download(destination_folder="./cams_data", api_key="your_api_key")
print(f"Downloaded MOS data to {nc_file}")

Notes:

  • Make sure you installed the cdsapi package: pip install cdsapi or pip install sasair[cds]`.
  • You can enter the URL end API KEY in the ~/.cdsapirc file (as described in the CDS API documentation) to avoid passing them as parameters.

Common usage CAMSftpClient

from vito.sas.air.cams_ftp_client import CAMSftpClient
from vito.sas.air.utils.cams_utils import Pollutant, crop_to_extent

client = CAMSftpClient(pollutant=Pollutant.PM25, ftp_host="aux.ecmwf.int", ftp_root="/DATA/CAMS_EUROPE_AIR_QUALITY")
nc_file = client.download(destination_folder="./cams_data", ftp_pw="**********")
print(f"Downloaded CAMS data to {nc_file}")

If you also want to crop the file to a specific extent, you can use the crop_to_extent function from the cams_utils module. This function takes the input NetCDF file and crops it to the specified longitude and latitude bounds.

from vito.sas.air.utils.cams_utils import crop_to_extent

cropped_file = nc_file.parent /  f"{nc_file.stem}_cropped.nc"
crop_to_extent(nc_file, cropped_file, lon_min=2.5, lon_max=6.5, lat_min=49, lat_max=52)

print(f"Cropped CAMS data: {cropped_file}")

Notes:

  • Make sure you installed the xarray and netcdf4 packages: pip install xarray netCDF4 or pip install sasair[xarray]`.
  • You can set the FTP password as the 'CAMS_FTP_PW' environment variable to avoid passing them as parameters. (Same for 'CAMS_FTP_USER', 'CAMS_FTP_HOST' and 'CAMS_FTP_ROOT_DIR' environment variables).

ircel_wfs_client

Provides a IrcelWfsClient to retrieve station metadata from IRCEL’s realtime WFS endpoint.

Usage:

from vito.sas.air.ircel_wfs_client import IrcelWfsClient

client = IrcelWfsClient()
stations = client.get_sos_stations()
for station in stations[:5]:
    print(station)

sos_client

Provides a SOSClient to query air quality observations using the Sensor Observation Service.

Usage:

from vito.sas.air.sos_client import SOSClient
from datetime import datetime, timedelta, timezone

client = SOSClient()
end_time = datetime.now(timezone.utc)
start_time = end_time - timedelta(days=3)

observations = client.get_observations(station_name="40DU07", pollutant="PM10", start_time=start_time, end_time=end_time)
for obs in observations:
    print(obs)

api_client

Implements a generic RESTclient base class that wraps low-level GET/POST/PUT/DELETE methods with retry logic. It is extended by the IRCEL and SOS clients.

date_utils

Utility functions for ISO 8601 datetime conversions:

  • to_utc_iso(datetime) -> str: Convert datetime to UTC ISO string.
  • iso_utc_to_datetime(str) -> datetime: Parse ISO string to UTC datetime.
  • is_valid_iso(str) -> bool: Check if string is valid ISO format.

Full API

The full API documentation is available at http://docs.marvin.vito.local/rma/sasair/.

Contributing

If you want to contribute to spio, please follow the standard contributing guidelines and push your changes to a new branch in https://git.vito.be/projects/MARVIN/repos/sasair

CI/CD

The Jenkins pipeline is set up to automatically build and publish the Master branche to the PyPI server.

The Development and Master branches are automatically built and published to the Vito Artifactory (https://repo.vito.be/artifactory/api/pypi/marvin-projects-pypi-local).

Contact

For questions or issues, please reach out to the project maintainers:

License

This project is licensed under the MIT License. See the LICENSE.md 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

sasair-0.4.3.tar.gz (27.9 kB view details)

Uploaded Source

Built Distribution

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

sasair-0.4.3-py3-none-any.whl (33.0 kB view details)

Uploaded Python 3

File details

Details for the file sasair-0.4.3.tar.gz.

File metadata

  • Download URL: sasair-0.4.3.tar.gz
  • Upload date:
  • Size: 27.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.0 CPython/3.10.20 Linux/6.8.0-106-generic

File hashes

Hashes for sasair-0.4.3.tar.gz
Algorithm Hash digest
SHA256 a9711bf76e002d1a7ecc0c4d3d81769b8f24999ea3928eae949a1c1bbb189f7a
MD5 340145e258ceb573adb02cbdbff8a33a
BLAKE2b-256 e79e13f0bb3bd9f84935f93dcb4880fcf82c8ffe3098bb975e8e8109ad0cfa40

See more details on using hashes here.

File details

Details for the file sasair-0.4.3-py3-none-any.whl.

File metadata

  • Download URL: sasair-0.4.3-py3-none-any.whl
  • Upload date:
  • Size: 33.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.0 CPython/3.10.20 Linux/6.8.0-106-generic

File hashes

Hashes for sasair-0.4.3-py3-none-any.whl
Algorithm Hash digest
SHA256 ab9e6687d481e1ef0d8c130bae04eb9d1ec068d407757513163d1a4d34b04725
MD5 e763880a9af2df45c253d697a3191267
BLAKE2b-256 8b10d763cef2ac2f4cf82289b7aeacc79c852766b14404cc09429e8505cfbc8b

See more details on using hashes here.

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