sporestack-python/src/sporestack/api.py

174 lines
3.6 KiB
Python
Raw Normal View History

2022-02-10 21:47:57 +00:00
"""
SporeStack API request/response models
"""
2022-11-02 00:00:00 +00:00
from typing import Dict, List, Optional
2022-02-10 21:47:57 +00:00
from pydantic import BaseModel
2022-06-14 02:40:11 +00:00
from .models import Flavor, NetworkInterface, Payment
2022-02-10 21:47:57 +00:00
class TokenAdd:
url = "/token/{token}/add"
method = "POST"
class Request(BaseModel):
currency: str
dollars: int
2022-04-01 22:56:17 +00:00
affiliate_token: Optional[str] = None
2022-02-10 21:47:57 +00:00
class Response(BaseModel):
token: str
payment: Payment
class TokenBalance:
url = "/token/{token}/balance"
method = "GET"
class Response(BaseModel):
token: str
cents: int
usd: str
class ServerLaunch:
url = "/server/{machine_id}/launch"
method = "POST"
class Request(BaseModel):
days: int
flavor: str
ssh_key: str
operating_system: str
2022-04-01 22:56:17 +00:00
region: Optional[str] = None
2022-06-14 02:40:11 +00:00
"""null is automatic, otherwise a string region slug."""
token: str
2022-06-14 02:40:11 +00:00
"""Token to draw from when launching the server."""
2022-04-01 22:56:17 +00:00
quote: bool = False
"""Don't launch, get a quote on how much it would cost"""
2022-06-14 02:40:11 +00:00
hostname: str = ""
"""Hostname to refer to your server by."""
autorenew: bool = False
"""
Automatically renew the server with the token used, keeping it at 1 week
expiration.
"""
2022-02-10 21:47:57 +00:00
class Response(BaseModel):
payment: Payment
"""Deprecated, not needed when paying with token. Only used for quote."""
2022-04-01 22:56:17 +00:00
expiration: int
2022-02-10 21:47:57 +00:00
machine_id: str
2022-04-01 22:56:17 +00:00
created_at: int = 0
created: bool = False
paid: bool = False
2022-06-14 02:40:11 +00:00
"""Deprecated, not needed when paying with token."""
2022-04-01 22:56:17 +00:00
warning: Optional[str] = None
2022-02-10 21:47:57 +00:00
class ServerTopup:
url = "/server/{machine_id}/topup"
method = "POST"
class Request(BaseModel):
days: int
token: str
2022-02-10 21:47:57 +00:00
class Response(BaseModel):
machine_id: str
expiration: int
paid: bool = True
2022-06-14 02:40:11 +00:00
"""Deprecated, not needed when paying with token."""
2022-04-01 22:56:17 +00:00
warning: Optional[str] = None
2022-02-10 21:47:57 +00:00
class ServerInfo:
url = "/server/{machine_id}/info"
method = "GET"
class Response(BaseModel):
created_at: int
expiration: int
running: bool
machine_id: str
token: str
2022-06-14 02:40:11 +00:00
ipv4: str
ipv6: str
2022-02-10 21:47:57 +00:00
region: str
2022-06-14 02:40:11 +00:00
flavor: Flavor
deleted: bool
network_interfaces: List[NetworkInterface]
"""Deprecated, use ipv4/ipv6 instead."""
operating_system: str
hostname: str
autorenew: bool
2022-02-10 21:47:57 +00:00
class ServerStart:
url = "/server/{machine_id}/start"
method = "POST"
class ServerStop:
url = "/server/{machine_id}/stop"
method = "POST"
class ServerDelete:
url = "/server/{machine_id}/delete"
method = "POST"
class ServerDestroy:
url = "/server/{machine_id}/destroy"
method = "POST"
class ServerForget:
url = "/server/{machine_id}/forget"
method = "POST"
2022-02-10 21:47:57 +00:00
class ServerRebuild:
url = "/server/{machine_id}/rebuild"
method = "POST"
2022-06-14 02:40:11 +00:00
class ServerEnableAutorenew:
url = "/server/{machine_id}/autorenew/enable"
method = "POST"
class ServerDisableAutorenew:
url = "/server/{machine_id}/autorenew/disable"
method = "POST"
2022-06-14 02:40:11 +00:00
class ServersLaunchedFromToken:
url = "/token/{token}/servers"
method = "GET"
class Response(BaseModel):
servers: List[ServerInfo.Response]
class Flavors:
url = "/flavors"
method = "GET"
class Response(BaseModel):
2022-11-02 00:00:00 +00:00
flavors: Dict[str, Flavor]
2022-09-07 23:07:02 +00:00
class OperatingSystems:
url = "/operatingsystems"
method = "GET"
class Response(BaseModel):
operating_systems: List[str]