Catalog PyPI
Back to packageRELEASE DETAILS

0.2.0

PyPI

aeonlib

A suite of modules to enable TDA/MMA observations

Published7 May 2026
Direct dependencies11
Transitive dependenciesNot calculated

README

Version 0.2.0 documentation

AEONlib

A suite of modules to enable TDA/MMA observations

code

issues

Configuration

Many of the facilities and services accessed by AEONlib require specific configuration such as api keys, urls, etc. All configuration can be supplied by either supplying a .env file or setting environmental variables in the execution environment.

Example .env file:

AEON_LCO_API_ROOT="https://observe.lco.global/api"
AEON_LCO_TOKEN="my-api-token"

Or set environmental variables via the shell:

export AEON_LCO_API_ROOT="https://observe.lco.global/api"
export AEON_LCO_TOKEN="my-api-token"

All configuration keys are prefixed with AEON_ to prevent conflicts. See the documentation for each service to see which configuration keys are available, or check conf.py

Environmental variables take precedence over .env files. See the pydantic-settings documentation for more details.

Testing

This project uses pytest to run tests:

pytest

Some tests are marked as online. These tests make real http requests in order to test interfaces with various services. To run them:

pytest -m online

A subset of online tests are marked as side_effect. These are tests that change data on remote systems. For example, a test might be testing creating new observation requests, or updating the status of one. You might want to disable these:

pytest -m "not side_effect"

CI does not run tests marked as online.

Viewing logs during tests

Aeonlib turns on the Pytest Live Logging feature. By default any logging calls with a level above WARNING will be displayed to the console during the test run. It may be helpful to display debug logging, especially if debugging remote facilities or services:

pytest -m online --log-cli-level=debug

Linting

All code is formatted via ruff.

Code Generation

Las Cumbres Observatory instrument classes are generated via the generator.py script. This script takes as input the OCS instruments api in order to produce definitions of all instruments currently available on the network.

To update the definitions, first make sure you have installed the codegen dependency group:

uv sync --group codegen  # or poetry install --with codegen

This ensures regular users of the library do not need to install these dependencies.

The generate.py script takes as input JSON as produced by the instruments endpoint:

codegen/lco/generator.py {facility} instruments.json

Or directly from stdin using a pipe:

curl https://observe.lco.global/api/instruments/ | codegen/lco/generator.py {facility}

If the output looks satisfactory, you can redirect the output to overwrite the LCO instruments definition file:

curl https://observe.lco.global/api/instruments/ | codegen/lco/generator.py {facility} > src/aeonlib/ocs/lco/instruments.py

Supported Facilities

This list is a work in progress.

Las Cumbres Observatory (LCO)

Dependency group

Las Cumbres Observatory requires no additional dependency groups to be installed.

Configuration Values

See configuration for instructions on setting these values.

lco_token: str = ""
lco_api_root: str = "https://observe.lco.global/api/"

SOAR

SOAR is functionally the same as LCO, but has its own set of instruments and can be configured separately.

Dependency group

SOAR requires no additional dependency groups to be installed.

Configuration Values

See configuration for instructions on setting these values.

soar_token: str = ""
soar_api_root: str = "https://observe.lco.global/api/"

Note: the soar API token will default to the same value as lco_token, if it is set.

BLANCO

BLANCO is functionally the same as LCO, but has its own set of instruments and can be configured separately.

Dependency group

BLANCO requires no additional dependency groups to be installed.

Configuration Values

See configuration for instructions on setting these values.

blanco_token: str = ""
blanco_api_root: str = "https://observe.lco.global/api/"

Note: the blanco API token will default to the same value as lco_token, if it is set.

ESO (European Southern Observatory)

Full documentation: TODO

Dependency Group

To use the ESO facility, you must install the eso group:

pip install aeonlib[eso]
uv sync --extra eso
poetry install --with eso

Configuration Values

See configuration for instructions on setting these values.

eso_environment: str = "demo"
eso_username: str = ""
eso_password: str = ""

LT (Liverpool Telescope)

Dependency Group

To use the LT facility, you must install the lt group:

pip install aeonlib[lt]
uv sync --extra lt
poetry install --with lt

Configuration Values

See configuration for instructions on setting these values.

lt_username: str = ""
lt_password: str = ""
lt_host: str = ""
lt_port: str = ""

SAAO (South African Astronomical Observatory)

Configuration Values

    saao_token: str = ""
saao_api_root: str = "https://ocsio.saao.ac.za/api/"

SALT (Southern African Large Telescope)

Dependency Group

To use the SALT facility, you must install the salt group:

pip install aeonlib[salt]
uv sync --extra salt
poetry install --with salt

Configuration values

See configuration for instructions on setting these values.

salt_username: str = ""
salt_password = ""

The username and password are those you would use for the SALT Web Manager.

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Declared dependencies 12

Native requirements
11 direct targetsNot calculated transitive count
Package / targetRequirementRelationship
astropy
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.12",
  "evaluation": "NOT_EVALUATED"
}
astropy>=6.0runtime
httpx
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.12",
  "evaluation": "NOT_EVALUATED"
}
httpx>=0.28.1runtime
pydantic-settings
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.12",
  "evaluation": "NOT_EVALUATED"
}
pydantic-settings>=2.9.1runtime
pydantic
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.12",
  "evaluation": "NOT_EVALUATED"
}
pydantic>=2.11.1runtime
p2api
Environment
{
  "extras": "",
  "marker": "extra == \"eso\"",
  "requires_python": ">=3.12",
  "evaluation": "NOT_EVALUATED"
}
p2api>=1.0.10; extra == "eso"runtime
lxml-stubs
Environment
{
  "extras": "",
  "marker": "extra == \"lt\"",
  "requires_python": ">=3.12",
  "evaluation": "NOT_EVALUATED"
}
lxml-stubs>=0.5.1; extra == "lt"runtime
lxml
Environment
{
  "extras": "",
  "marker": "extra == \"lt\"",
  "requires_python": ">=3.12",
  "evaluation": "NOT_EVALUATED"
}
lxml>=5.4.0; extra == "lt"runtime
suds
Environment
{
  "extras": "",
  "marker": "extra == \"lt\"",
  "requires_python": ">=3.12",
  "evaluation": "NOT_EVALUATED"
}
suds>=1.2.0; extra == "lt"runtime
beautifulsoup4
Environment
{
  "extras": "",
  "marker": "extra == \"salt\"",
  "requires_python": ">=3.12",
  "evaluation": "NOT_EVALUATED"
}
beautifulsoup4>=4.14.3; extra == "salt"runtime
jinja2
Environment
{
  "extras": "",
  "marker": "extra == \"salt\"",
  "requires_python": ">=3.12",
  "evaluation": "NOT_EVALUATED"
}
jinja2>=3.1.6; extra == "salt"runtime
lxml
Environment
{
  "extras": "",
  "marker": "extra == \"salt\"",
  "requires_python": ">=3.12",
  "evaluation": "NOT_EVALUATED"
}
lxml>=6.0.1; extra == "salt"runtime
pyastrosalt
Environment
{
  "extras": "",
  "marker": "extra == \"salt\"",
  "requires_python": ">=3.12",
  "evaluation": "NOT_EVALUATED"
}
pyastrosalt>=0.2.2; extra == "salt"runtime

Distribution files

2 collected
aeonlib-0.2.0-py3-none-any.whl

bdist_wheel · 101.2 KB · Python py3

Source file
aeonlib-0.2.0.tar.gz

sdist · 180.16 KB · Python source

Source file

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 20:25 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package_version:2c2340461a0dfa71b2e99270969295308df9daadf5f3f8281ccdba83e10b8f0a

Other collected versions

View all collected versions →