This repository has been archived on 2024-05-31. You can view files and clone it, but cannot push or open issues or pull requests.
devicehub-teal/ereuse_devicehub/resources/device/models.pyi

488 lines
12 KiB
Python
Raw Normal View History

from datetime import date, datetime
from fractions import Fraction
from operator import attrgetter
from typing import Dict, Generator, Iterable, List, Optional, Set, Type, TypeVar
2018-06-10 16:47:49 +00:00
from boltons import urlutils
2018-09-30 17:40:28 +00:00
from boltons.urlutils import URL
2018-06-10 16:47:49 +00:00
from colour import Color
2018-06-20 21:18:15 +00:00
from sqlalchemy import Column, Integer
from sqlalchemy.orm import relationship
2018-09-30 17:40:28 +00:00
from teal.db import Model
from teal.enums import Layouts
2018-06-10 16:47:49 +00:00
from ereuse_devicehub.resources.action import models as e
from ereuse_devicehub.resources.agent.models import Agent
from ereuse_devicehub.resources.device import states
from ereuse_devicehub.resources.enums import BatteryTechnology, CameraFacing, ComputerChassis, \
DataStorageInterface, DisplayTech, PrinterTechnology, RamFormat, RamInterface
from ereuse_devicehub.resources.lot.models import Lot
2018-06-10 16:47:49 +00:00
from ereuse_devicehub.resources.models import Thing
from ereuse_devicehub.resources.tag import Tag
from ereuse_devicehub.resources.tag.model import Tags
2018-06-10 16:47:49 +00:00
E = TypeVar('E', bound=e.Action)
2018-06-10 16:47:49 +00:00
class Device(Thing):
ACTION_SORT_KEY = attrgetter('created')
2018-06-10 16:47:49 +00:00
id = ... # type: Column
type = ... # type: Column
hid = ... # type: Column
model = ... # type: Column
manufacturer = ... # type: Column
serial_number = ... # type: Column
weight = ... # type: Column
width = ... # type: Column
height = ... # type: Column
depth = ... # type: Column
color = ... # type: Column
lots = ... # type: relationship
production_date = ... # type: Column
brand = ... # type: Column
generation = ... # type: Column
version = ... # type: Column
2019-05-08 17:12:05 +00:00
variant = ... # type: Column
sku = ... # type: Column
image = ... #type: Column
2018-06-10 16:47:49 +00:00
def __init__(self, **kwargs) -> None:
super().__init__(**kwargs)
self.id = ... # type: int
self.type = ... # type: str
self.hid = ... # type: Optional[str]
self.model = ... # type: Optional[str]
self.manufacturer = ... # type: Optional[str]
self.serial_number = ... # type: Optional[str]
self.weight = ... # type: Optional[float]
self.width = ... # type:Optional[float]
self.height = ... # type: Optional[float]
self.depth = ... # type: Optional[float]
self.color = ... # type: Optional[Color]
2018-06-10 16:47:49 +00:00
self.physical_properties = ... # type: Dict[str, object or None]
self.actions_multiple = ... # type: Set[e.ActionWithMultipleDevices]
self.actions_one = ... # type: Set[e.ActionWithOneDevice]
self.tags = ... # type: Tags[Tag]
self.lots = ... # type: Set[Lot]
self.production_date = ... # type: Optional[datetime]
self.brand = ... # type: Optional[str]
self.generation = ... # type: Optional[int]
self.version = ... # type: Optional[str]
2019-05-08 17:12:05 +00:00
self.variant = ... # type: Optional[str]
self.sku = ... # type: Optional[str]
self.image = ... # type: Optional[urlutils.URL]
2018-06-10 16:47:49 +00:00
@property
def actions(self) -> List[e.Action]:
pass
@property
def problems(self) -> List[e.Action]:
pass
@property
def url(self) -> urlutils.URL:
pass
2018-06-10 16:47:49 +00:00
@property
def rate(self) -> Optional[e.Rate]:
pass
@property
def price(self) -> Optional[e.Price]:
pass
@property
def trading(self) -> Optional[states.Trading]:
pass
@property
def physical(self) -> Optional[states.Physical]:
pass
@property
def physical_possessor(self) -> Optional[Agent]:
pass
@property
def working(self) -> List[e.Test]:
pass
def last_action_of(self, *types: Type[E]) -> E:
pass
def _warning_actions(self, actions: Iterable[e.Action]) -> Generator[e.Action]:
pass
2018-06-26 13:35:13 +00:00
class DisplayMixin:
technology = ... # type: Column
size = ... # type: Column
resolution_width = ... # type: Column
resolution_height = ... # type: Column
refresh_rate = ... # type: Column
contrast_ratio = ... # type: Column
touchable = ... # type: Column
2018-06-26 13:35:13 +00:00
def __init__(self) -> None:
super().__init__()
self.technology = ... # type: DisplayTech
self.size = ... # type: Integer
self.resolution_width = ... # type: int
self.resolution_height = ... # type: int
self.refresh_rate = ... # type: Optional[int]
self.contrast_ratio = ... # type: Optional[int]
self.touchable = ... # type: Optional[bool]
self.aspect_ratio = ... #type: Fraction
self.widescreen = ... # type: bool
2018-06-26 13:35:13 +00:00
class Computer(DisplayMixin, Device):
components = ... # type: Column
chassis = ... # type: Column
2018-06-10 16:47:49 +00:00
def __init__(self, **kwargs) -> None:
super().__init__(**kwargs)
self.components = ... # type: Set[Component]
self.actions_parent = ... # type: Set[e.Action]
2018-06-26 13:36:21 +00:00
self.chassis = ... # type: ComputerChassis
2018-10-03 12:51:22 +00:00
@property
def actions(self) -> List:
2018-10-03 12:51:22 +00:00
pass
@property
def ram_size(self) -> int:
pass
@property
def data_storage_size(self) -> int:
pass
@property
def processor_model(self) -> str:
pass
@property
def graphic_card_model(self) -> str:
pass
@property
def network_speeds(self) -> List[int]:
pass
2018-06-10 16:47:49 +00:00
@property
def privacy(self) -> Set[e.EraseBasic]:
pass
2018-06-10 16:47:49 +00:00
class Desktop(Computer):
pass
2018-06-26 13:36:21 +00:00
class Laptop(Computer):
layout = ... # type: Column
def __init__(self, **kwargs) -> None:
super().__init__(**kwargs)
self.layout = ... # type: Layouts
2018-06-26 13:35:13 +00:00
2018-06-26 13:36:21 +00:00
class Server(Computer):
2018-06-10 16:47:49 +00:00
pass
2018-06-26 13:36:21 +00:00
class Monitor(DisplayMixin, Device):
2018-06-10 16:47:49 +00:00
pass
2018-06-26 13:36:21 +00:00
class ComputerMonitor(Monitor):
2018-06-10 16:47:49 +00:00
pass
2018-06-26 13:36:21 +00:00
class TelevisionSet(Monitor):
2018-06-10 16:47:49 +00:00
pass
2018-06-26 13:36:21 +00:00
class Mobile(Device):
imei = ... # type: Column
meid = ... # type: Column
2019-05-08 17:12:05 +00:00
ram_size = ... # type: Column
data_storage_size = ... # type: Column
2018-06-20 21:18:15 +00:00
def __init__(self, **kwargs) -> None:
super().__init__(**kwargs)
self.imei = ... # type: Optional[int]
self.meid = ... # type: Optional[str]
2019-05-08 17:12:05 +00:00
self.ram_size = ... # type: Optional[int]
self.data_storage_size = ... # type: Optional[int]
2018-06-26 13:36:21 +00:00
class Smartphone(Mobile):
pass
class Tablet(Mobile):
pass
class Cellphone(Mobile):
pass
2018-06-20 21:18:15 +00:00
2018-06-10 16:47:49 +00:00
class Component(Device):
def __init__(self, **kwargs) -> None:
super().__init__(**kwargs)
self.parent_id = ... # type: int
self.parent = ... # type: Computer
self.actions_components = ... # type: Set[e.Action]
2018-06-10 16:47:49 +00:00
def similar_one(self, parent: Computer, blacklist: Set[int]) -> 'Component':
pass
class GraphicCard(Component):
memory = ... # type: Column
def __init__(self, **kwargs) -> None:
super().__init__(**kwargs)
self.memory = ... # type: int
class DataStorage(Component):
size = ... # type: Column
interface = ... # type: Column
2018-06-10 16:47:49 +00:00
def __init__(self, **kwargs) -> None:
super().__init__(**kwargs)
self.size = ... # type: int
self.interface = ... # type: DataStorageInterface
2018-06-10 16:47:49 +00:00
@property
def privacy(self) -> Optional[e.EraseBasic]:
pass
2018-06-10 16:47:49 +00:00
class HardDrive(DataStorage):
pass
class SolidStateDrive(DataStorage):
pass
class Motherboard(Component):
slots = ... # type: Column
usb = ... # type: Column
firewire = ... # type: Column
serial = ... # type: Column
pcmcia = ... # type: Column
bios_date = ... # type: Column
ram_slots = ... # type: Column
ram_max_size = ... # type: Column
2018-06-10 16:47:49 +00:00
def __init__(self, **kwargs) -> None:
super().__init__(**kwargs)
self.slots = ... # type: int
self.usb = ... # type: int
self.firewire = ... # type: int
self.serial = ... # type: int
self.pcmcia = ... # type: int
self.bios_date = ... # type: Optional[date]
self.ram_slots = ... # type: Optional[int]
self.ram_max_size = ... # type: Optional[int]
2018-06-10 16:47:49 +00:00
class NetworkMixin:
2018-06-10 16:47:49 +00:00
speed = ... # type: Column
wireless = ... # type: Column
2018-06-10 16:47:49 +00:00
def __init__(self, **kwargs) -> None:
super().__init__(**kwargs)
self.speed = ... # type: int
self.wireless = ... # type: bool
class NetworkAdapter(NetworkMixin, Component):
pass
2018-06-10 16:47:49 +00:00
class Processor(Component):
speed = ... # type: Column
cores = ... # type: Column
address = ... # type: Column
threads = ... # type: Column
abi = ... # type: Column
2018-06-10 16:47:49 +00:00
def __init__(self, **kwargs) -> None:
super().__init__(**kwargs)
self.speed = ... # type: Optional[float]
self.cores = ... # type: Optional[int]
self.threads = ... # type: Optional[int]
self.address = ... # type: Optional[int]
self.abi = ... # type: Optional[str]
2018-06-10 16:47:49 +00:00
class RamModule(Component):
size = ... # type: Column
speed = ... # type: Column
interface = ... # type: Column
format = ... # type: Column
2018-06-10 16:47:49 +00:00
def __init__(self, **kwargs) -> None:
super().__init__(**kwargs)
self.size = ... # type: int
self.speed = ... # type: float
self.interface = ... # type: RamInterface
self.format = ... # type: RamFormat
2018-06-26 13:36:21 +00:00
2018-11-21 15:09:56 +00:00
class SoundCard(Component):
pass
2018-06-26 13:36:21 +00:00
class Display(DisplayMixin, Component):
pass
2018-09-30 17:40:28 +00:00
class Battery(Component):
wireless = ... # type: Column
technology = ... # type: Column
size = ... # type: Column
def __init__(self, **kwargs) -> None:
super().__init__(**kwargs)
self.wireless = ... # type: Optional[bool]
self.technology = ... # type: Optional[BatteryTechnology]
self.size = ... # type: bool
class Camera(Component):
focal_length = ... # type: Column
video_height = ... # type: Column
video_width = ... # type: Column
horizontal_view_angle = ... # type: Column
facing = ... # type: Column
vertical_view_angle = ... # type: Column
video_stabilization = ... # type: Column
flash = ... # type: Column
def __init__(self, **kwargs) -> None:
super().__init__(**kwargs)
focal_length = ... # type: Optional[int]
video_height = ... # type: Optional[int]
video_width = ... # type: Optional[int]
horizontal_view_angle = ... # type: Optional[int]
facing = ... # type: Optional[CameraFacing]
vertical_view_angle = ... # type: Optional[int]
video_stabilization = ... # type: Optional[bool]
flash = ... # type: Optional[bool]
class ComputerAccessory(Device):
pass
class SAI(ComputerAccessory):
pass
class Keyboard(ComputerAccessory):
layout = ... # type: Column
def __init__(self, layout: Layouts, **kwargs):
super().__init__(**kwargs)
self.layout = ... # type: Layouts
class Mouse(ComputerAccessory):
pass
class MemoryCardReader(ComputerAccessory):
pass
class Networking(NetworkMixin, Device):
pass
class Router(Networking):
pass
class Switch(Networking):
pass
class Hub(Networking):
pass
class WirelessAccessPoint(Networking):
pass
class Printer(Device):
wireless = ... # type: Column
scanning = ... # type: Column
technology = ... # type: Column
monochrome = ... # type: Column
def __init__(self, **kwargs) -> None:
super().__init__(**kwargs)
self.wireless = ... # type: bool
self.scanning = ... # type: bool
self.technology = ... # type: PrinterTechnology
self.monochrome = ... # type: bool
class LabelPrinter(Printer):
pass
class Sound(Device):
pass
class Microphone(Sound):
pass
class Video(Device):
pass
class VideoScaler(Video):
pass
class Videoconference(Video):
pass
2018-11-12 10:59:49 +00:00
class Cooking(Device):
pass
class Mixer(Cooking):
pass
2018-09-30 17:40:28 +00:00
class Manufacturer(Model):
CUSTOM_MANUFACTURERS = ... # type: set
name = ... # type: Column
url = ... # type: Column
logo = ... # type: Column
def __init__(self, **kwargs) -> None:
super().__init__()
self.name = ... # type: str
self.url = ... # type: URL
self.logo = ... # type: URL
@classmethod
def add_all_to_session(cls, session):
pass