d2d48280cb
* Add authenticated view to merge two devices * Assign actions of argument device to device * Merge device components * Sloppy implementation to test * Correctly update base device * Correctly append actions
390 lines
12 KiB
Python
390 lines
12 KiB
Python
from typing import Callable, Iterable, Tuple
|
|
|
|
from teal.resource import Converters, Resource
|
|
|
|
from ereuse_devicehub.resources.device import schemas
|
|
from ereuse_devicehub.resources.device.models import Manufacturer
|
|
from ereuse_devicehub.resources.device.views import DeviceView, DeviceMergeView, ManufacturerView
|
|
|
|
|
|
class DeviceDef(Resource):
|
|
SCHEMA = schemas.Device
|
|
VIEW = DeviceView
|
|
ID_CONVERTER = Converters.int
|
|
AUTH = False # We manage this at each view
|
|
|
|
def __init__(self, app,
|
|
import_name=__name__,
|
|
static_folder='static',
|
|
static_url_path=None,
|
|
template_folder='templates',
|
|
url_prefix=None,
|
|
subdomain=None,
|
|
url_defaults=None,
|
|
root_path=None,
|
|
cli_commands: Iterable[Tuple[Callable, str or None]] = tuple()):
|
|
super().__init__(app, import_name, static_folder, static_url_path, template_folder,
|
|
url_prefix, subdomain, url_defaults, root_path, cli_commands)
|
|
|
|
device_merge = DeviceMergeView.as_view('merge-devices', definition=self, auth=app.auth)
|
|
if self.AUTH:
|
|
device_merge = app.auth.requires_auth(device_merge)
|
|
self.add_url_rule('/<{}:{}>/merge/'.format(self.ID_CONVERTER.value, self.ID_NAME),
|
|
view_func=device_merge,
|
|
methods={'POST'})
|
|
|
|
|
|
class ComputerDef(DeviceDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.Computer
|
|
|
|
def __init__(self, app, import_name=__name__, static_folder=None, static_url_path=None,
|
|
template_folder=None, url_prefix=None, subdomain=None, url_defaults=None,
|
|
root_path=None, cli_commands: Iterable[Tuple[Callable, str or None]] = tuple()):
|
|
super().__init__(app, import_name, static_folder, static_url_path, template_folder,
|
|
url_prefix, subdomain, url_defaults, root_path, cli_commands)
|
|
|
|
|
|
class DesktopDef(ComputerDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.Desktop
|
|
|
|
|
|
class LaptopDef(ComputerDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.Laptop
|
|
|
|
|
|
class ServerDef(ComputerDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.Server
|
|
|
|
|
|
class MonitorDef(DeviceDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.Monitor
|
|
|
|
def __init__(self, app, import_name=__name__, static_folder=None, static_url_path=None,
|
|
template_folder=None, url_prefix=None, subdomain=None, url_defaults=None,
|
|
root_path=None, cli_commands: Iterable[Tuple[Callable, str or None]] = tuple()):
|
|
super().__init__(app, import_name, static_folder, static_url_path, template_folder,
|
|
url_prefix, subdomain, url_defaults, root_path, cli_commands)
|
|
|
|
|
|
class ComputerMonitorDef(MonitorDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.ComputerMonitor
|
|
|
|
|
|
class TelevisionSetDef(MonitorDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.TelevisionSet
|
|
|
|
|
|
class MobileDef(DeviceDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.Mobile
|
|
|
|
def __init__(self, app, import_name=__name__, static_folder=None, static_url_path=None,
|
|
template_folder=None, url_prefix=None, subdomain=None, url_defaults=None,
|
|
root_path=None, cli_commands: Iterable[Tuple[Callable, str or None]] = tuple()):
|
|
super().__init__(app, import_name, static_folder, static_url_path, template_folder,
|
|
url_prefix, subdomain, url_defaults, root_path, cli_commands)
|
|
|
|
|
|
class SmartphoneDef(MobileDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.Smartphone
|
|
|
|
|
|
class TabletDef(MobileDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.Tablet
|
|
|
|
|
|
class CellphoneDef(MobileDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.Cellphone
|
|
|
|
|
|
class ComponentDef(DeviceDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.Component
|
|
|
|
def __init__(self, app, import_name=__name__, static_folder=None, static_url_path=None,
|
|
template_folder=None, url_prefix=None, subdomain=None, url_defaults=None,
|
|
root_path=None, cli_commands: Iterable[Tuple[Callable, str or None]] = tuple()):
|
|
super().__init__(app, import_name, static_folder, static_url_path, template_folder,
|
|
url_prefix, subdomain, url_defaults, root_path, cli_commands)
|
|
|
|
|
|
class GraphicCardDef(ComponentDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.GraphicCard
|
|
|
|
|
|
class DataStorageDef(ComponentDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.DataStorage
|
|
|
|
|
|
class HardDriveDef(DataStorageDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.HardDrive
|
|
|
|
|
|
class SolidStateDriveDef(DataStorageDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.SolidStateDrive
|
|
|
|
|
|
class MotherboardDef(ComponentDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.Motherboard
|
|
|
|
|
|
class NetworkAdapterDef(ComponentDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.NetworkAdapter
|
|
|
|
|
|
class RamModuleDef(ComponentDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.RamModule
|
|
|
|
|
|
class ProcessorDef(ComponentDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.Processor
|
|
|
|
|
|
class SoundCardDef(ComponentDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.SoundCard
|
|
|
|
|
|
class DisplayDef(ComponentDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.Display
|
|
|
|
|
|
class BatteryDef(ComponentDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.Battery
|
|
|
|
|
|
class CameraDef(ComponentDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.Camera
|
|
|
|
|
|
class ComputerAccessoryDef(DeviceDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.ComputerAccessory
|
|
|
|
def __init__(self, app, import_name=__name__, static_folder=None, static_url_path=None,
|
|
template_folder=None, url_prefix=None, subdomain=None, url_defaults=None,
|
|
root_path=None, cli_commands: Iterable[Tuple[Callable, str or None]] = tuple()):
|
|
super().__init__(app, import_name, static_folder, static_url_path, template_folder,
|
|
url_prefix, subdomain, url_defaults, root_path, cli_commands)
|
|
|
|
|
|
class MouseDef(ComputerAccessoryDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.Mouse
|
|
|
|
|
|
class KeyboardDef(ComputerAccessoryDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.Keyboard
|
|
|
|
|
|
class SAIDef(ComputerAccessoryDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.SAI
|
|
|
|
|
|
class MemoryCardReaderDef(ComputerAccessoryDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.MemoryCardReader
|
|
|
|
|
|
class NetworkingDef(DeviceDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.Networking
|
|
|
|
def __init__(self, app, import_name=__name__, static_folder=None, static_url_path=None,
|
|
template_folder=None, url_prefix=None, subdomain=None, url_defaults=None,
|
|
root_path=None, cli_commands: Iterable[Tuple[Callable, str or None]] = tuple()):
|
|
super().__init__(app, import_name, static_folder, static_url_path, template_folder,
|
|
url_prefix, subdomain, url_defaults, root_path, cli_commands)
|
|
|
|
|
|
class RouterDef(NetworkingDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.Router
|
|
|
|
|
|
class SwitchDef(NetworkingDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.Switch
|
|
|
|
|
|
class HubDef(NetworkingDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.Hub
|
|
|
|
|
|
class WirelessAccessPointDef(NetworkingDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.WirelessAccessPoint
|
|
|
|
|
|
class PrinterDef(DeviceDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.Printer
|
|
|
|
def __init__(self, app, import_name=__name__, static_folder=None, static_url_path=None,
|
|
template_folder=None, url_prefix=None, subdomain=None, url_defaults=None,
|
|
root_path=None, cli_commands: Iterable[Tuple[Callable, str or None]] = tuple()):
|
|
super().__init__(app, import_name, static_folder, static_url_path, template_folder,
|
|
url_prefix, subdomain, url_defaults, root_path, cli_commands)
|
|
|
|
|
|
class LabelPrinterDef(PrinterDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.LabelPrinter
|
|
|
|
|
|
class SoundDef(DeviceDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.Sound
|
|
|
|
def __init__(self, app, import_name=__name__, static_folder=None, static_url_path=None,
|
|
template_folder=None, url_prefix=None, subdomain=None, url_defaults=None,
|
|
root_path=None, cli_commands: Iterable[Tuple[Callable, str or None]] = tuple()):
|
|
super().__init__(app, import_name, static_folder, static_url_path, template_folder,
|
|
url_prefix, subdomain, url_defaults, root_path, cli_commands)
|
|
|
|
|
|
class MicrophoneDef(SoundDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.Microphone
|
|
|
|
|
|
class VideoDef(DeviceDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.Video
|
|
|
|
def __init__(self, app, import_name=__name__, static_folder=None, static_url_path=None,
|
|
template_folder=None, url_prefix=None, subdomain=None, url_defaults=None,
|
|
root_path=None, cli_commands: Iterable[Tuple[Callable, str or None]] = tuple()):
|
|
super().__init__(app, import_name, static_folder, static_url_path, template_folder,
|
|
url_prefix, subdomain, url_defaults, root_path, cli_commands)
|
|
|
|
|
|
class VideoScalerDef(VideoDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.VideoScaler
|
|
|
|
|
|
class VideoconferenceDef(VideoDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.Videoconference
|
|
|
|
|
|
class CookingDef(DeviceDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.Cooking
|
|
|
|
def __init__(self, app, import_name=__name__, static_folder=None, static_url_path=None,
|
|
template_folder=None, url_prefix=None, subdomain=None, url_defaults=None,
|
|
root_path=None, cli_commands: Iterable[Tuple[Callable, str or None]] = tuple()):
|
|
super().__init__(app, import_name, static_folder, static_url_path, template_folder,
|
|
url_prefix, subdomain, url_defaults, root_path, cli_commands)
|
|
|
|
|
|
class Mixer(CookingDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.Mixer
|
|
|
|
|
|
class DIYAndGardeningDef(DeviceDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.DIYAndGardening
|
|
|
|
def __init__(self, app, import_name=__name__, static_folder=None, static_url_path=None,
|
|
template_folder=None, url_prefix=None, subdomain=None, url_defaults=None,
|
|
root_path=None, cli_commands: Iterable[Tuple[Callable, str or None]] = tuple()):
|
|
super().__init__(app, import_name, static_folder, static_url_path, template_folder,
|
|
url_prefix, subdomain, url_defaults, root_path, cli_commands)
|
|
|
|
|
|
class DrillDef(DIYAndGardeningDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.Drill
|
|
|
|
|
|
class PackOfScrewdriversDef(DIYAndGardeningDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.PackOfScrewdrivers
|
|
|
|
def __init__(self, app, import_name=__name__, static_folder=None, static_url_path=None,
|
|
template_folder=None, url_prefix=None, subdomain=None, url_defaults=None,
|
|
root_path=None, cli_commands: Iterable[Tuple[Callable, str or None]] = tuple()):
|
|
super().__init__(app, import_name, static_folder, static_url_path, template_folder,
|
|
url_prefix, subdomain, url_defaults, root_path, cli_commands)
|
|
|
|
|
|
class HomeDef(DeviceDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.Home
|
|
|
|
def __init__(self, app, import_name=__name__, static_folder=None, static_url_path=None,
|
|
template_folder=None, url_prefix=None, subdomain=None, url_defaults=None,
|
|
root_path=None, cli_commands: Iterable[Tuple[Callable, str or None]] = tuple()):
|
|
super().__init__(app, import_name, static_folder, static_url_path, template_folder,
|
|
url_prefix, subdomain, url_defaults, root_path, cli_commands)
|
|
|
|
|
|
class DehumidifierDef(HomeDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.Dehumidifier
|
|
|
|
|
|
class StairsDef(HomeDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.Stairs
|
|
|
|
|
|
class RecreationDef(DeviceDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.Recreation
|
|
|
|
def __init__(self, app, import_name=__name__, static_folder=None, static_url_path=None,
|
|
template_folder=None, url_prefix=None, subdomain=None, url_defaults=None,
|
|
root_path=None, cli_commands: Iterable[Tuple[Callable, str or None]] = tuple()):
|
|
super().__init__(app, import_name, static_folder, static_url_path, template_folder,
|
|
url_prefix, subdomain, url_defaults, root_path, cli_commands)
|
|
|
|
|
|
class BikeDef(RecreationDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.Bike
|
|
|
|
|
|
class RacketDef(RecreationDef):
|
|
VIEW = None
|
|
SCHEMA = schemas.Racket
|
|
|
|
|
|
class ManufacturerDef(Resource):
|
|
VIEW = ManufacturerView
|
|
SCHEMA = schemas.Manufacturer
|
|
AUTH = True
|
|
|
|
def init_db(self, db: 'db.SQLAlchemy', exclude_schema=None):
|
|
"""Loads the manufacturers to the database."""
|
|
if exclude_schema != 'common':
|
|
Manufacturer.add_all_to_session(db.session)
|