Skip to main content

A Python implemenation of the Cubecoders AMP API.

Project description

ampapi-node

This implementation is under active development, please feel free to contribute or create an issue if you've found anything that needs fixing

This API allows you to communicate with AMP installations from within Python.

Documentation for available API calls can be found by appending /API to the URL of any existing AMP installation.

Please Note: This program is directly based on the ampapi-node implementation and is almost verbatim in most aspects.

Installation

pip install ampapi

or

pip install 'ampapi @ git+https://github.com/p0t4t0sandwich/ampapi-python.git'

Async Example

import asyncio
from # The import statement for this

async def start() -> None:
    API = AMPAPIAsync("http://localhost:8080/")

    try:
        # The third parameter is either used for 2FA logins, or if no password is specified to use a remembered token from a previous login, or a service login token.
        loginResult = await API.Core_LoginAsync("admin", "myfancypassword123", "", False)

        if "success" in loginResult.keys() and loginResult["success"]:
            print("Login successful")
            API.sessionId = loginResult["sessionID"]

            # API call parameters are simply in the same order as shown in the documentation.
            await API.Core_SendConsoleMessageAsync("say Hello Everyone, this message was sent from the Python API!")
            currentStatus = await API.Core_GetStatusAsync()
            CPUUsagePercent = currentStatus["Metrics"]["CPU Usage"]["Percent"]
            print(f"Current CPU usage is: {CPUUsagePercent}%")

        else:
            print("Login failed")
            print(loginResult)

    except Exception as err:
        print(err)

asyncio.run(start())

Non-Async Example

from ampapi import AMPAPI

def start() -> None:
    API = AMPAPI("http://localhost:8080/")

    try:
        # Perform first-stage API initialization.
        APIInitOK = API.init()

        if not APIInitOK:
            print("API Init failed")
            return

        # The third parameter is either used for 2FA logins, or if no password is specified to use a remembered token from a previous login, or a service login token.
        loginResult = API.Core.Login("admin", "myfancypassword123", "", False)

        if "success" in loginResult.keys() and loginResult["success"]:
            print("Login successful")
            API.sessionId = loginResult["sessionID"]

            # Perform second-stage API initialization, we only get the full API data once we're logged in.
            APIInitOK = API.init()
            if not APIInitOK:
                print("API Stage 2 Init failed")
                return

            # API call parameters are simply in the same order as shown in the documentation.
            API.Core.SendConsoleMessage("say Hello Everyone, this message was sent from the Python API!")
            currentStatus = API.Core.GetStatus()
            CPUUsagePercent = currentStatus["Metrics"]["CPU Usage"]["Percent"]
            print(f"Current CPU usage is: {CPUUsagePercent}%")

        else:
            print("Login failed")
            print(loginResult)

    except Exception as err:
        print(err)

start()

Additional Notes

As you may have noticed, the async and non-async implementations differ quite a bit. This is due to lambda functions within python being unable to use async methods. Usually this can be solved by manually defining the function, but as that would be cumbersome, I've opted to create a script to grab the API spec from the AMP API and generate all the needed functions (script found under /utils/ampapi_async_gen.py).

Async implementation: API.Core_LoginAsync()

Sync implementation: API.Core.Login()

Additonally, unlike other languages, the "Zen of Python" prevents dot/property notation for dictionaries (Think API.Core.Login). I've used dataclasses and some class properties to bypass this, so in the end: API.Core.Login() == API["Core"]["Login"]().

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

ampapi-1.0.0.tar.gz (3.4 kB view details)

Uploaded Source

Built Distribution

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

ampapi-1.0.0-py3-none-any.whl (3.4 kB view details)

Uploaded Python 3

File details

Details for the file ampapi-1.0.0.tar.gz.

File metadata

  • Download URL: ampapi-1.0.0.tar.gz
  • Upload date:
  • Size: 3.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.6

File hashes

Hashes for ampapi-1.0.0.tar.gz
Algorithm Hash digest
SHA256 0dd79af4521a3765e1a4c8e0f4d1c898aedd7f756d941061ea1b55e03e1c0bd0
MD5 6cc608e52dc6d8771270ea0333ea5a66
BLAKE2b-256 cafbbb26355fe3fd6130efc1184b678819fc6c3ae0c9a1b996f37b68d86cb7ce

See more details on using hashes here.

File details

Details for the file ampapi-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: ampapi-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 3.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.6

File hashes

Hashes for ampapi-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7b0b1831cb5dcab720ebffea4bef4978dbe6856b4decccdf869c14fa8b1d24f6
MD5 be71d2fc5c5401b11df14183b4d1b4a5
BLAKE2b-256 fc656448d8501067524afc6df84bcad2735904ec67f4dba894781ee575cb7ff9

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