3DS-RPC/api/networks.py
Spotlight f478bd3fc5
Migrate to enum-oriented functions
By migrating information such as the bot's friend codes and database column names, a significant amount of boilerplate can be reduced.
2024-07-21 00:04:30 -05:00

45 lines
1.2 KiB
Python

from enum import IntEnum
from api.public import nintendoBotFC, pretendoBotFC
class InvalidNetworkError(Exception):
pass
class NetworkType(IntEnum):
"""Selectable network types."""
NINTENDO = 0
PRETENDO = 1
def friend_code(self) -> str:
"""Returns the configured friend code for this network type."""
match self:
case self.NINTENDO:
return nintendoBotFC
case self.PRETENDO:
return pretendoBotFC
def column_name(self) -> str:
"""Returns the database column name for this network type."""
match self:
case self.NINTENDO:
return "nintendo_friends"
case self.PRETENDO:
return "pretendo_friends"
def lower_name(self) -> str:
"""Returns a lowercase name of this enum member's name for API compatibility."""
return self.name.lower()
def nameToNetworkType(network_name: str) -> NetworkType:
# Assume Nintendo Network as a fallback.
if network_name is None:
return NetworkType.NINTENDO
try:
# All enum members are uppercase, so ensure we are, too.
return NetworkType[network_name.upper()]
except:
return NetworkType.NINTENDO