not required chassis in all system
This commit is contained in:
parent
aef220a5dc
commit
5241c73a98
|
@ -430,9 +430,12 @@ class Computer(Device):
|
||||||
receiver = db.relationship(User, primaryjoin=receiver_id == User.id)
|
receiver = db.relationship(User, primaryjoin=receiver_id == User.id)
|
||||||
deliverynote_address = db.Column(CIText(), nullable=True)
|
deliverynote_address = db.Column(CIText(), nullable=True)
|
||||||
|
|
||||||
def __init__(self, chassis, **kwargs) -> None:
|
def __init__(self, *args, **kwargs) -> None:
|
||||||
chassis = ComputerChassis(chassis)
|
if args:
|
||||||
super().__init__(chassis=chassis, **kwargs)
|
chassis = ComputerChassis(args[0])
|
||||||
|
super().__init__(chassis=chassis, **kwargs)
|
||||||
|
else:
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def actions(self) -> list:
|
def actions(self) -> list:
|
||||||
|
|
|
@ -101,7 +101,6 @@ class Computer(Device):
|
||||||
collection_class=OrderedSet,
|
collection_class=OrderedSet,
|
||||||
description='The components that are inside this computer.')
|
description='The components that are inside this computer.')
|
||||||
chassis = EnumField(enums.ComputerChassis,
|
chassis = EnumField(enums.ComputerChassis,
|
||||||
required=True,
|
|
||||||
description=m.Computer.chassis.comment)
|
description=m.Computer.chassis.comment)
|
||||||
ram_size = Integer(dump_only=True,
|
ram_size = Integer(dump_only=True,
|
||||||
data_key='ramSize',
|
data_key='ramSize',
|
||||||
|
|
|
@ -112,16 +112,27 @@ class DeviceSearch(db.Model):
|
||||||
if isinstance(device, Computer):
|
if isinstance(device, Computer):
|
||||||
# Aggregate the values of all the components of pc
|
# Aggregate the values of all the components of pc
|
||||||
Comp = aliased(Component)
|
Comp = aliased(Component)
|
||||||
tokens.extend((
|
if device.chassis:
|
||||||
(db.func.string_agg(db.cast(Comp.id, db.TEXT), ' '), search.Weight.D),
|
tokens.extend((
|
||||||
(db.func.string_agg(Comp.model, ' '), search.Weight.C),
|
(db.func.string_agg(db.cast(Comp.id, db.TEXT), ' '), search.Weight.D),
|
||||||
(db.func.string_agg(Comp.manufacturer, ' '), search.Weight.D),
|
(db.func.string_agg(Comp.model, ' '), search.Weight.C),
|
||||||
(db.func.string_agg(Comp.serial_number, ' '), search.Weight.B),
|
(db.func.string_agg(Comp.manufacturer, ' '), search.Weight.D),
|
||||||
(db.func.string_agg(Comp.type, ' '), search.Weight.B),
|
(db.func.string_agg(Comp.serial_number, ' '), search.Weight.B),
|
||||||
('Computer', search.Weight.C),
|
(db.func.string_agg(Comp.type, ' '), search.Weight.B),
|
||||||
('PC', search.Weight.C),
|
('Computer', search.Weight.C),
|
||||||
(inflection.humanize(device.chassis.name), search.Weight.B),
|
('PC', search.Weight.C),
|
||||||
))
|
(inflection.humanize(device.chassis.name), search.Weight.B),
|
||||||
|
))
|
||||||
|
else:
|
||||||
|
tokens.extend((
|
||||||
|
(db.func.string_agg(db.cast(Comp.id, db.TEXT), ' '), search.Weight.D),
|
||||||
|
(db.func.string_agg(Comp.model, ' '), search.Weight.C),
|
||||||
|
(db.func.string_agg(Comp.manufacturer, ' '), search.Weight.D),
|
||||||
|
(db.func.string_agg(Comp.serial_number, ' '), search.Weight.B),
|
||||||
|
(db.func.string_agg(Comp.type, ' '), search.Weight.B),
|
||||||
|
('Computer', search.Weight.C),
|
||||||
|
('PC', search.Weight.C),
|
||||||
|
))
|
||||||
|
|
||||||
properties = session \
|
properties = session \
|
||||||
.query(search.Search.vectorize(*tokens)) \
|
.query(search.Search.vectorize(*tokens)) \
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
from contextlib import suppress
|
from contextlib import suppress
|
||||||
from enum import Enum, IntEnum, unique, EnumMeta
|
from enum import Enum, IntEnum, unique
|
||||||
from typing import Set, Union
|
from typing import Set, Union
|
||||||
|
|
||||||
import inflection
|
import inflection
|
||||||
|
@ -207,20 +207,9 @@ class DisplayTech(Enum):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
|
||||||
class DefaultEnumMeta(EnumMeta):
|
|
||||||
default = object()
|
|
||||||
|
|
||||||
def __call__(cls, value=default, *args, **kwargs):
|
|
||||||
# import pdb; pdb.set_trace()
|
|
||||||
if value is DefaultEnumMeta.default:
|
|
||||||
# Assume the first enum is default
|
|
||||||
return next(iter(cls))
|
|
||||||
return super().__call__(value, *args, **kwargs)
|
|
||||||
|
|
||||||
@unique
|
@unique
|
||||||
class ComputerChassis(Enum, metaclass=DefaultEnumMeta):
|
class ComputerChassis(Enum):
|
||||||
"""The chassis of a computer."""
|
"""The chassis of a computer."""
|
||||||
Nothing = None
|
|
||||||
Tower = 'Tower'
|
Tower = 'Tower'
|
||||||
Docking = 'Docking'
|
Docking = 'Docking'
|
||||||
AllInOne = 'All in one'
|
AllInOne = 'All in one'
|
||||||
|
|
|
@ -684,7 +684,7 @@ def test_snapshot_not_failed_null_chassis(app: Devicehub, user: UserClient):
|
||||||
tmp_snapshots = app.config['TMP_SNAPSHOTS']
|
tmp_snapshots = app.config['TMP_SNAPSHOTS']
|
||||||
path_dir_base = os.path.join(tmp_snapshots, user.user['email'], 'errors')
|
path_dir_base = os.path.join(tmp_snapshots, user.user['email'], 'errors')
|
||||||
snapshot_error = file('desktop-9644w8n-lenovo-0169622.snapshot')
|
snapshot_error = file('desktop-9644w8n-lenovo-0169622.snapshot')
|
||||||
snapshot_error['device']['chassis'] = 'Nothing'
|
snapshot_error['device']['chassis'] = None
|
||||||
uuid = snapshot_error['uuid']
|
uuid = snapshot_error['uuid']
|
||||||
|
|
||||||
snapshot, res = user.post(res=Snapshot, data=snapshot_error)
|
snapshot, res = user.post(res=Snapshot, data=snapshot_error)
|
||||||
|
|
Reference in New Issue