Initial commit

This commit is contained in:
2024-07-08 19:44:51 +01:00
commit 7dd401c232
9 changed files with 1860 additions and 0 deletions

View File

@@ -0,0 +1,125 @@
"""
SpaceAPI v13
https://github.com/SpaceApi/schema
"""
from typing import List, Optional
from pydantic import BaseModel, HttpUrl
from pydantic_extra_types.coordinate import Latitude, Longitude
from .sensors import (
SpaceAPIv13BarometerSensorModel,
SpaceAPIv13BaseSensorModel,
SpaceAPIv13BeverageSupplySensorModel,
SpaceAPIv13HumiditySensorModel,
SpaceAPIv13TemperatureSensorModel,
SpaceAPIv13NetworkConnectionSensorModel,
SpaceAPIv13PeoplePresentSensorModel,
SpaceAPIv13PowerConsumptionSensorModel,
SpaceAPIv13TotalMemberCountSensorModel,
SpaceAPIv13WindSensorModel,
SpaceAPIv13AccountBalanceSensorModel,
SpaceAPIv13RadiationSensorModel,
)
class SpaceAPIv13LocationModel(BaseModel):
address: Optional[str] = None
lat: Latitude
lon: Longitude
timezone: Optional[str] = None
class SpaceAPIv13SpacefedModel(BaseModel):
spacenet: bool = False
spacesaml: bool = False
spacephone: bool = False
class SpaceAPIv13KeymastersModel(BaseModel):
name: Optional[str] = None
irc_nick: Optional[str] = None
phone: Optional[str] = None
email: Optional[str] = None
twitter: Optional[str] = None
class SpaceAPIv13ContactModel(BaseModel):
phone: Optional[str] = None
sip: Optional[str] = None
keymasters: Optional[List[SpaceAPIv13KeymastersModel]] = None
irc: Optional[str] = None
twitter: Optional[str] = None
identica: Optional[str] = None
foursquare: Optional[str] = None
email: Optional[str] = None
ml: Optional[str] = None
jabber: Optional[str] = None
issue_mail: Optional[str] = None
gopher: Optional[str] = None
class SpaceAPIv13StateIconModel(BaseModel):
open: HttpUrl
closed: HttpUrl
class SpaceAPIv13StateModel(BaseModel):
open: bool = False
lastchange: Optional[int] = None
trigger_persion: Optional[str] = None
message: Optional[str] = None
icon: Optional[SpaceAPIv13StateIconModel] = None
class SpaceAPIv13EventModel(BaseModel):
name: str
type: str
timestamp: int
extra: str
class SpaceAPIv13SensorsModel(BaseModel):
temperature: Optional[List[SpaceAPIv13TemperatureSensorModel]] = None
door_locked: Optional[List[SpaceAPIv13BaseSensorModel]] = None
barometer: Optional[List[SpaceAPIv13BarometerSensorModel]] = None
radiation: Optional[List[SpaceAPIv13RadiationSensorModel]] = None
humidity: Optional[List[SpaceAPIv13HumiditySensorModel]] = None
beverage_supply: Optional[List[SpaceAPIv13BeverageSupplySensorModel]] = None
power_consumption: Optional[List[SpaceAPIv13PowerConsumptionSensorModel]] = None
wind: Optional[List[SpaceAPIv13WindSensorModel]] = None
network_connections: Optional[List[SpaceAPIv13NetworkConnectionSensorModel]] = None
account_balance: Optional[List[SpaceAPIv13AccountBalanceSensorModel]] = None
total_member_count: Optional[List[SpaceAPIv13TotalMemberCountSensorModel]] = None
people_now_present: Optional[List[SpaceAPIv13PeoplePresentSensorModel]] = None
class SpaceAPIv13FeedModel(BaseModel):
type: Optional[str] = None
url: HttpUrl
class SpaceAPIv13FeedsModel(BaseModel):
blog: Optional[SpaceAPIv13FeedModel] = None
wiki: Optional[SpaceAPIv13FeedModel] = None
calendar: Optional[SpaceAPIv13FeedModel] = None
flickr: Optional[SpaceAPIv13FeedModel] = None
class SpaceAPIv13Model(BaseModel):
api: str = "0.13"
space: str
logo: HttpUrl
url: HttpUrl
location: SpaceAPIv13LocationModel
spacefed: Optional[SpaceAPIv13SpacefedModel] = None
cam: Optional[List[HttpUrl]] = None
state: Optional[SpaceAPIv13StateModel] = None
events: Optional[List[SpaceAPIv13EventModel]] = None
contact: SpaceAPIv13ContactModel
issue_report_channels: Optional[List[str]] = None
sensors: Optional[SpaceAPIv13SensorsModel] = None
feeds: Optional[SpaceAPIv13FeedsModel] = None
projects: Optional[List[str]] = None

View File

@@ -0,0 +1,153 @@
from typing import Optional, List
from enum import Enum
from pydantic import BaseModel
from pydantic_extra_types.mac_address import MacAddress
class SpaceAPIv13BaseSensorModel(BaseModel):
value: float
location: Optional[str] = None
name: Optional[str] = None
description: Optional[str] = None
class TemperatureUnitEnum(str, Enum):
celsius = "°C"
fahrenheit = "°F"
kelvin = "K"
delisle = "°De"
newton = "°N"
rankine = "°R"
reaumur = "°Ré"
romer = "°Rø"
class SpaceAPIv13TemperatureSensorModel(SpaceAPIv13BaseSensorModel):
unit: TemperatureUnitEnum
location: str
class PressureUnitEnum(str, Enum):
hectopascal = "hPa"
class SpaceAPIv13BarometerSensorModel(SpaceAPIv13BaseSensorModel):
unit: PressureUnitEnum
location: str
class RadiationUnitEnum(str, Enum):
cpm = "cpm"
rh = "r/h"
usvh = "µSv/h"
msva = "mSv/a"
usva = "µSv/a"
class SpaceAPIv13RadiationTypeSensorModel(SpaceAPIv13BaseSensorModel):
unit: RadiationUnitEnum
dead_time: Optional[float] = None
conversion_factor: Optional[float] = None
class SpaceAPIv13RadiationSensorModel(SpaceAPIv13BaseSensorModel):
alpha: Optional[List[SpaceAPIv13RadiationTypeSensorModel]] = None
beta: Optional[List[SpaceAPIv13RadiationTypeSensorModel]] = None
gamma: Optional[List[SpaceAPIv13RadiationTypeSensorModel]] = None
beta_gamma: Optional[List[SpaceAPIv13RadiationTypeSensorModel]] = None
class HumidityUnitEnum(str, Enum):
relative_humidity = "%"
class SpaceAPIv13HumiditySensorModel(SpaceAPIv13BaseSensorModel):
unit: HumidityUnitEnum
location: str
class BeverageUnitEnum(str, Enum):
bottle = "btl"
crate = "crt"
class SpaceAPIv13BeverageSupplySensorModel(SpaceAPIv13BaseSensorModel):
unit: BeverageUnitEnum
class PowerConsumptionUnitEnum(str, Enum):
millawatt = "mW"
watt = "W"
voltage_amps = "VA"
class SpaceAPIv13PowerConsumptionSensorModel(SpaceAPIv13BaseSensorModel):
unit: PowerConsumptionUnitEnum
class WindSpeedUnitEnum(str, Enum):
meters_second = "m/s"
kilometers_hour = "km/h"
knots = "kn"
class SpaceAPIv13WindSpeedSensorPropertyModel(BaseModel):
value: float
unit: WindSpeedUnitEnum
class WindDirectionUnitEnum(str, Enum):
degrees = "°"
class SpaceAPIv13WindDirectionPropertyModel(BaseModel):
value: float
unit: WindDirectionUnitEnum
class WindElevationUnitEnum(str, Enum):
meters = "m"
class SpaceAPIv13WindElevationPropertyModel(BaseModel):
value: float
unit: WindElevationUnitEnum
class SpaceAPIv13WindSensorPropertiesModel(BaseModel):
speed: SpaceAPIv13WindSpeedSensorPropertyModel
gust: SpaceAPIv13WindSpeedSensorPropertyModel
direction: SpaceAPIv13WindDirectionPropertyModel
elevation: SpaceAPIv13WindElevationPropertyModel
class SpaceAPIv13WindSensorModel(SpaceAPIv13BaseSensorModel):
properties: SpaceAPIv13WindSensorPropertiesModel
class NetworkConnectionTypeEnum(str, Enum):
wifi = "wifi"
cable = "cable"
spacenet = "spacenet"
class SpaceAPIv13MachineModel(BaseModel):
name: Optional[str] = None
mac: MacAddress
class SpaceAPIv13NetworkConnectionSensorModel(SpaceAPIv13BaseSensorModel):
type: NetworkConnectionTypeEnum
machines: Optional[List[SpaceAPIv13MachineModel]] = None
class SpaceAPIv13AccountBalanceSensorModel(SpaceAPIv13BaseSensorModel):
unit: str
class SpaceAPIv13TotalMemberCountSensorModel(SpaceAPIv13BaseSensorModel):
pass
class SpaceAPIv13PeoplePresentSensorModel(SpaceAPIv13BaseSensorModel):
names: Optional[List[str]] = None