Merge pull request #328 from eReuse/feature/exports-placeholder

Feature/exports placeholder
This commit is contained in:
cayop 2022-08-10 10:48:23 +02:00 committed by GitHub
commit 1988260c05
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 268 additions and 110 deletions

View File

@ -4,18 +4,13 @@ from collections import OrderedDict
from flask import url_for from flask import url_for
from ereuse_devicehub.resources.action import models as da from ereuse_devicehub.resources.action.models import RateComputer
from ereuse_devicehub.resources.action.models import (
BenchmarkDataStorage,
RateComputer,
TestDataStorage,
)
from ereuse_devicehub.resources.device import models as d from ereuse_devicehub.resources.device import models as d
from ereuse_devicehub.resources.device import states from ereuse_devicehub.resources.device import states
from ereuse_devicehub.resources.enums import Severity from ereuse_devicehub.resources.enums import Severity
class DeviceRow(OrderedDict): class BaseDeviceRow(OrderedDict):
NUMS = { NUMS = {
d.Display.t: 1, d.Display.t: 1,
d.Processor.t: 2, d.Processor.t: 2,
@ -37,9 +32,242 @@ class DeviceRow(OrderedDict):
d.SoundCard.t, d.SoundCard.t,
] ]
def __init__(self) -> None:
super().__init__()
self['DHID'] = ''
self['DocumentID'] = ''
self['Public Link'] = ''
self['Lots'] = ''
self['Tag 1 Type'] = ''
self['Tag 1 ID'] = ''
self['Tag 1 Organization'] = ''
self['Tag 2 Type'] = ''
self['Tag 2 ID'] = ''
self['Tag 2 Organization'] = ''
self['Tag 3 Type'] = ''
self['Tag 3 ID'] = ''
self['Tag 3 Organization'] = ''
self['Device Hardware ID'] = ''
self['Device Type'] = ''
self['Device Chassis'] = ''
self['Device Serial Number'] = ''
self['Device Model'] = ''
self['Device Manufacturer'] = ''
self['Registered in'] = ''
self['Registered (process)'] = ''
self['Updated in (software)'] = ''
self['Updated in (web)'] = ''
self['Physical state'] = ''
self['Allocate state'] = ''
self['Lifecycle state'] = ''
self['Processor'] = ''
self['RAM (MB)'] = ''
self['Data Storage Size (MB)'] = ''
self['Processor 1'] = ''
self['Processor 1 Manufacturer'] = ''
self['Processor 1 Model'] = ''
self['Processor 1 Serial Number'] = ''
self['Processor 1 Number of cores'] = ''
self['Processor 1 Speed (GHz)'] = ''
self['Benchmark Processor 1 (points)'] = ''
self['Benchmark ProcessorSysbench Processor 1 (points)'] = ''
self['Processor 2'] = ''
self['Processor 2 Manufacturer'] = ''
self['Processor 2 Model'] = ''
self['Processor 2 Serial Number'] = ''
self['Processor 2 Number of cores'] = ''
self['Processor 2 Speed (GHz)'] = ''
self['Benchmark Processor 2 (points)'] = ''
self['Benchmark ProcessorSysbench Processor 2 (points)'] = ''
self['RamModule 1'] = ''
self['RamModule 1 Manufacturer'] = ''
self['RamModule 1 Model'] = ''
self['RamModule 1 Serial Number'] = ''
self['RamModule 1 Size (MB)'] = ''
self['RamModule 1 Speed (MHz)'] = ''
self['RamModule 2'] = ''
self['RamModule 2 Manufacturer'] = ''
self['RamModule 2 Model'] = ''
self['RamModule 2 Serial Number'] = ''
self['RamModule 2 Size (MB)'] = ''
self['RamModule 2 Speed (MHz)'] = ''
self['RamModule 3'] = ''
self['RamModule 3 Manufacturer'] = ''
self['RamModule 3 Model'] = ''
self['RamModule 3 Serial Number'] = ''
self['RamModule 3 Size (MB)'] = ''
self['RamModule 3 Speed (MHz)'] = ''
self['RamModule 4'] = ''
self['RamModule 4 Manufacturer'] = ''
self['RamModule 4 Model'] = ''
self['RamModule 4 Serial Number'] = ''
self['RamModule 4 Size (MB)'] = ''
self['RamModule 4 Speed (MHz)'] = ''
self['DataStorage 1'] = ''
self['DataStorage 1 Manufacturer'] = ''
self['DataStorage 1 Model'] = ''
self['DataStorage 1 Serial Number'] = ''
self['DataStorage 1 Size (MB)'] = ''
self['Erasure DataStorage 1'] = ''
self['Erasure DataStorage 1 Serial Number'] = ''
self['Erasure DataStorage 1 Size (MB)'] = ''
self['Erasure DataStorage 1 Software'] = ''
self['Erasure DataStorage 1 Result'] = ''
self['Erasure DataStorage 1 Certificate URL'] = ''
self['Erasure DataStorage 1 Type'] = ''
self['Erasure DataStorage 1 Method'] = ''
self['Erasure DataStorage 1 Elapsed (hours)'] = ''
self['Erasure DataStorage 1 Date'] = ''
self['Erasure DataStorage 1 Steps'] = ''
self['Erasure DataStorage 1 Steps Start Time'] = ''
self['Erasure DataStorage 1 Steps End Time'] = ''
self['Benchmark DataStorage 1 Read Speed (MB/s)'] = ''
self['Benchmark DataStorage 1 Writing speed (MB/s)'] = ''
self['Test DataStorage 1 Software'] = ''
self['Test DataStorage 1 Type'] = ''
self['Test DataStorage 1 Result'] = ''
self['Test DataStorage 1 Power cycle count'] = ''
self['Test DataStorage 1 Lifetime (days)'] = ''
self['Test DataStorage 1 Power on hours'] = ''
self['DataStorage 2'] = ''
self['DataStorage 2 Manufacturer'] = ''
self['DataStorage 2 Model'] = ''
self['DataStorage 2 Serial Number'] = ''
self['DataStorage 2 Size (MB)'] = ''
self['Erasure DataStorage 2'] = ''
self['Erasure DataStorage 2 Serial Number'] = ''
self['Erasure DataStorage 2 Size (MB)'] = ''
self['Erasure DataStorage 2 Software'] = ''
self['Erasure DataStorage 2 Result'] = ''
self['Erasure DataStorage 2 Certificate URL'] = ''
self['Erasure DataStorage 2 Type'] = ''
self['Erasure DataStorage 2 Method'] = ''
self['Erasure DataStorage 2 Elapsed (hours)'] = ''
self['Erasure DataStorage 2 Date'] = ''
self['Erasure DataStorage 2 Steps'] = ''
self['Erasure DataStorage 2 Steps Start Time'] = ''
self['Erasure DataStorage 2 Steps End Time'] = ''
self['Benchmark DataStorage 2 Read Speed (MB/s)'] = ''
self['Benchmark DataStorage 2 Writing speed (MB/s)'] = ''
self['Test DataStorage 2 Software'] = ''
self['Test DataStorage 2 Type'] = ''
self['Test DataStorage 2 Result'] = ''
self['Test DataStorage 2 Power cycle count'] = ''
self['Test DataStorage 2 Lifetime (days)'] = ''
self['Test DataStorage 2 Power on hours'] = ''
self['DataStorage 3'] = ''
self['DataStorage 3 Manufacturer'] = ''
self['DataStorage 3 Model'] = ''
self['DataStorage 3 Serial Number'] = ''
self['DataStorage 3 Size (MB)'] = ''
self['Erasure DataStorage 3'] = ''
self['Erasure DataStorage 3 Serial Number'] = ''
self['Erasure DataStorage 3 Size (MB)'] = ''
self['Erasure DataStorage 3 Software'] = ''
self['Erasure DataStorage 3 Result'] = ''
self['Erasure DataStorage 3 Certificate URL'] = ''
self['Erasure DataStorage 3 Type'] = ''
self['Erasure DataStorage 3 Method'] = ''
self['Erasure DataStorage 3 Elapsed (hours)'] = ''
self['Erasure DataStorage 3 Date'] = ''
self['Erasure DataStorage 3 Steps'] = ''
self['Erasure DataStorage 3 Steps Start Time'] = ''
self['Erasure DataStorage 3 Steps End Time'] = ''
self['Benchmark DataStorage 3 Read Speed (MB/s)'] = ''
self['Benchmark DataStorage 3 Writing speed (MB/s)'] = ''
self['Test DataStorage 3 Software'] = ''
self['Test DataStorage 3 Type'] = ''
self['Test DataStorage 3 Result'] = ''
self['Test DataStorage 3 Power cycle count'] = ''
self['Test DataStorage 3 Lifetime (days)'] = ''
self['Test DataStorage 3 Power on hours'] = ''
self['DataStorage 4'] = ''
self['DataStorage 4 Manufacturer'] = ''
self['DataStorage 4 Model'] = ''
self['DataStorage 4 Serial Number'] = ''
self['DataStorage 4 Size (MB)'] = ''
self['Erasure DataStorage 4'] = ''
self['Erasure DataStorage 4 Serial Number'] = ''
self['Erasure DataStorage 4 Size (MB)'] = ''
self['Erasure DataStorage 4 Software'] = ''
self['Erasure DataStorage 4 Result'] = ''
self['Erasure DataStorage 4 Certificate URL'] = ''
self['Erasure DataStorage 4 Type'] = ''
self['Erasure DataStorage 4 Method'] = ''
self['Erasure DataStorage 4 Elapsed (hours)'] = ''
self['Erasure DataStorage 4 Date'] = ''
self['Erasure DataStorage 4 Steps'] = ''
self['Erasure DataStorage 4 Steps Start Time'] = ''
self['Erasure DataStorage 4 Steps End Time'] = ''
self['Benchmark DataStorage 4 Read Speed (MB/s)'] = ''
self['Benchmark DataStorage 4 Writing speed (MB/s)'] = ''
self['Test DataStorage 4 Software'] = ''
self['Test DataStorage 4 Type'] = ''
self['Test DataStorage 4 Result'] = ''
self['Test DataStorage 4 Power cycle count'] = ''
self['Test DataStorage 4 Lifetime (days)'] = ''
self['Test DataStorage 4 Power on hours'] = ''
self['Motherboard 1'] = ''
self['Motherboard 1 Manufacturer'] = ''
self['Motherboard 1 Model'] = ''
self['Motherboard 1 Serial Number'] = ''
self['Display 1'] = ''
self['Display 1 Manufacturer'] = ''
self['Display 1 Model'] = ''
self['Display 1 Serial Number'] = ''
self['GraphicCard 1'] = ''
self['GraphicCard 1 Manufacturer'] = ''
self['GraphicCard 1 Model'] = ''
self['GraphicCard 1 Serial Number'] = ''
self['GraphicCard 1 Memory (MB)'] = ''
self['GraphicCard 2'] = ''
self['GraphicCard 2 Manufacturer'] = ''
self['GraphicCard 2 Model'] = ''
self['GraphicCard 2 Serial Number'] = ''
self['GraphicCard 2 Memory (MB)'] = ''
self['NetworkAdapter 1'] = ''
self['NetworkAdapter 1 Manufacturer'] = ''
self['NetworkAdapter 1 Model'] = ''
self['NetworkAdapter 1 Serial Number'] = ''
self['NetworkAdapter 2'] = ''
self['NetworkAdapter 2 Manufacturer'] = ''
self['NetworkAdapter 2 Model'] = ''
self['NetworkAdapter 2 Serial Number'] = ''
self['SoundCard 1'] = ''
self['SoundCard 1 Manufacturer'] = ''
self['SoundCard 1 Model'] = ''
self['SoundCard 1 Serial Number'] = ''
self['SoundCard 2'] = ''
self['SoundCard 2 Manufacturer'] = ''
self['SoundCard 2 Model'] = ''
self['SoundCard 2 Serial Number'] = ''
self['Device Rate'] = ''
self['Device Range'] = ''
self['Processor Rate'] = ''
self['Processor Range'] = ''
self['RAM Rate'] = ''
self['RAM Range'] = ''
self['Data Storage Rate'] = ''
self['Data Storage Range'] = ''
self['Benchmark RamSysbench (points)'] = ''
# Placeholder
self['PHID'] = ''
self['Is Abstract'] = ''
self['Pallet'] = ''
self['id Supplier'] = ''
self['Real Info'] = ''
self['Real Components'] = ''
self['Real Type'] = ''
self['Real Serial Number'] = ''
self['Real Model'] = ''
self['Real Manufacturer'] = ''
class DeviceRow(BaseDeviceRow):
def __init__(self, device: d.Device, document_ids: dict) -> None: def __init__(self, device: d.Device, document_ids: dict) -> None:
super().__init__() super().__init__()
self.device = device self.placeholder = device.binding or device.placeholder
self.device = self.placeholder.binding or self.placeholder.device
self.document_id = document_ids.get(device.id, '') self.document_id = document_ids.get(device.id, '')
snapshot = get_action(device, 'Snapshot') snapshot = get_action(device, 'Snapshot')
software = '' software = ''
@ -54,9 +282,6 @@ class DeviceRow(OrderedDict):
url=url_for('Device.main', _external=True), id=device.devicehub_id url=url_for('Device.main', _external=True), id=device.devicehub_id
) )
self['Lots'] = ', '.join([x.name for x in self.device.lots]) self['Lots'] = ', '.join([x.name for x in self.device.lots])
self['Tag 1 Type'] = self['Tag 1 ID'] = self['Tag 1 Organization'] = ''
self['Tag 2 Type'] = self['Tag 2 ID'] = self['Tag 2 Organization'] = ''
self['Tag 3 Type'] = self['Tag 3 ID'] = self['Tag 3 Organization'] = ''
for i, tag in zip(range(1, 3), device.tags): for i, tag in zip(range(1, 3), device.tags):
self['Tag {} Type'.format(i)] = 'unamed' if tag.provider else 'named' self['Tag {} Type'.format(i)] = 'unamed' if tag.provider else 'named'
self['Tag {} ID'.format(i)] = tag.id self['Tag {} ID'.format(i)] = tag.id
@ -64,7 +289,6 @@ class DeviceRow(OrderedDict):
self['Device Hardware ID'] = device.hid self['Device Hardware ID'] = device.hid
self['Device Type'] = device.t self['Device Type'] = device.t
self['Device Chassis'] = ''
if isinstance(device, d.Computer) and not device.placeholder: if isinstance(device, d.Computer) and not device.placeholder:
self['Device Chassis'] = device.chassis.name self['Device Chassis'] = device.chassis.name
self['Device Serial Number'] = none2str(device.serial_number) self['Device Serial Number'] = none2str(device.serial_number)
@ -73,20 +297,18 @@ class DeviceRow(OrderedDict):
self['Registered in'] = format(device.created, '%c') self['Registered in'] = format(device.created, '%c')
self['Registered (process)'] = software self['Registered (process)'] = software
self['Updated in (software)'] = device.updated self['Updated in (software)'] = device.updated
self['Updated in (web)'] = ''
self['Physical state'] = ''
if device.physical_status: if device.physical_status:
self['Physical state'] = device.physical_status.type self['Physical state'] = device.physical_status.type
self['Allocate state'] = ''
if device.allocated_status: if device.allocated_status:
self['Allocate state'] = device.allocated_status.type self['Allocate state'] = device.allocated_status.type
try: try:
self['Lifecycle state'] = device.last_action_of(*states.Status.actions()).t self['Lifecycle state'] = device.last_action_of(*states.Status.actions()).t
except LookupError: except LookupError:
self['Lifecycle state'] = '' pass
if isinstance(device, d.Computer): if isinstance(device, d.Computer):
self['Processor'] = none2str(device.processor_model) self['Processor'] = none2str(device.processor_model)
self['RAM (MB)'] = none2str(device.ram_size) self['RAM (MB)'] = none2str(device.ram_size)
@ -109,21 +331,12 @@ class DeviceRow(OrderedDict):
self['RAM Range'] = rate.ram_range.name self['RAM Range'] = rate.ram_range.name
self['Data Storage Rate'] = rate.data_storage self['Data Storage Rate'] = rate.data_storage
self['Data Storage Range'] = rate.data_storage_range.name self['Data Storage Range'] = rate.data_storage_range.name
else:
self['Device Rate'] = ''
self['Device Range'] = ''
self['Processor Rate'] = ''
self['Processor Range'] = ''
self['RAM Rate'] = ''
self['RAM Range'] = ''
self['Data Storage Rate'] = ''
self['Data Storage Range'] = ''
benchram = get_action(device, 'BenchmarkRamSysbench') benchram = get_action(device, 'BenchmarkRamSysbench')
if benchram: if benchram:
self['Benchmark RamSysbench (points)'] = none2str(benchram.rate) self['Benchmark RamSysbench (points)'] = none2str(benchram.rate)
else:
self['Benchmark RamSysbench (points)'] = '' self.get_placeholder_datas()
def components(self): def components(self):
"""Function to get all components information of a device.""" """Function to get all components information of a device."""
@ -151,11 +364,7 @@ class DeviceRow(OrderedDict):
""" """
# Basic fields for all components # Basic fields for all components
self['{} {}'.format(ctype, i)] = format(component) if component else '' self['{} {}'.format(ctype, i)] = format(component) if component else ''
if component is None: if component:
self['{} {} Manufacturer'.format(ctype, i)] = ''
self['{} {} Model'.format(ctype, i)] = ''
self['{} {} Serial Number'.format(ctype, i)] = ''
else:
self['{} {} Manufacturer'.format(ctype, i)] = none2str( self['{} {} Manufacturer'.format(ctype, i)] = none2str(
component.manufacturer component.manufacturer
) )
@ -179,25 +388,17 @@ class DeviceRow(OrderedDict):
def get_processor(self, ctype, i, component): def get_processor(self, ctype, i, component):
"""Particular fields for component Processor.""" """Particular fields for component Processor."""
if component is None: if component is None:
self['{} {} Number of cores'.format(ctype, i)] = ''
self['{} {} Speed (GHz)'.format(ctype, i)] = ''
self['Benchmark {} {} (points)'.format(ctype, i)] = ''
self['Benchmark ProcessorSysbench {} {} (points)'.format(ctype, i)] = ''
return return
self['{} {} Number of cores'.format(ctype, i)] = none2str(component.cores) self['{} {} Number of cores'.format(ctype, i)] = none2str(component.cores)
self['{} {} Speed (GHz)'.format(ctype, i)] = none2str(component.speed) self['{} {} Speed (GHz)'.format(ctype, i)] = none2str(component.speed)
benchmark = get_action(component, 'BenchmarkProcessor') benchmark = get_action(component, 'BenchmarkProcessor')
if not benchmark: if benchmark:
self['Benchmark {} {} (points)'.format(ctype, i)] = ''
else:
self['Benchmark {} {} (points)'.format(ctype, i)] = benchmark.rate self['Benchmark {} {} (points)'.format(ctype, i)] = benchmark.rate
sysbench = get_action(component, 'BenchmarkProcessorSysbench') sysbench = get_action(component, 'BenchmarkProcessorSysbench')
if not sysbench: if sysbench:
self['Benchmark ProcessorSysbench {} {} (points)'.format(ctype, i)] = ''
return
self[ self[
'Benchmark ProcessorSysbench {} {} (points)'.format(ctype, i) 'Benchmark ProcessorSysbench {} {} (points)'.format(ctype, i)
] = sysbench.rate ] = sysbench.rate
@ -205,8 +406,6 @@ class DeviceRow(OrderedDict):
def get_ram(self, ctype, i, component): def get_ram(self, ctype, i, component):
"""Particular fields for component Ram Module.""" """Particular fields for component Ram Module."""
if component is None: if component is None:
self['{} {} Size (MB)'.format(ctype, i)] = ''
self['{} {} Speed (MHz)'.format(ctype, i)] = ''
return return
self['{} {} Size (MB)'.format(ctype, i)] = none2str(component.size) self['{} {} Size (MB)'.format(ctype, i)] = none2str(component.size)
@ -218,32 +417,9 @@ class DeviceRow(OrderedDict):
""" """
if component is None: if component is None:
self['{} {} Size (MB)'.format(ctype, i)] = ''
self['Erasure {} {}'.format(ctype, i)] = ''
self['Erasure {} {} Serial Number'.format(ctype, i)] = ''
self['Erasure {} {} Size (MB)'.format(ctype, i)] = ''
self['Erasure {} {} Software'.format(ctype, i)] = ''
self['Erasure {} {} Result'.format(ctype, i)] = ''
self['Erasure {} {} Certificate URL'.format(ctype, i)] = ''
self['Erasure {} {} Type'.format(ctype, i)] = ''
self['Erasure {} {} Method'.format(ctype, i)] = ''
self['Erasure {} {} Elapsed (hours)'.format(ctype, i)] = ''
self['Erasure {} {} Date'.format(ctype, i)] = ''
self['Erasure {} {} Steps'.format(ctype, i)] = ''
self['Erasure {} {} Steps Start Time'.format(ctype, i)] = ''
self['Erasure {} {} Steps End Time'.format(ctype, i)] = ''
self['Benchmark {} {} Read Speed (MB/s)'.format(ctype, i)] = ''
self['Benchmark {} {} Writing speed (MB/s)'.format(ctype, i)] = ''
self['Test {} {} Software'.format(ctype, i)] = ''
self['Test {} {} Type'.format(ctype, i)] = ''
self['Test {} {} Result'.format(ctype, i)] = ''
self['Test {} {} Power cycle count'.format(ctype, i)] = ''
self['Test {} {} Lifetime (days)'.format(ctype, i)] = ''
self['Test {} {} Power on hours'.format(ctype, i)] = ''
return return
snapshot = get_action(component, 'Snapshot') snapshot = get_action(component, 'Snapshot')
software = ''
if snapshot: if snapshot:
software = "{software} {version}".format( software = "{software} {version}".format(
software=snapshot.software.name, version=snapshot.version software=snapshot.software.name, version=snapshot.version
@ -263,16 +439,6 @@ class DeviceRow(OrderedDict):
serial_number = none2str(component.serial_number) serial_number = none2str(component.serial_number)
self['Erasure {} {} Serial Number'.format(ctype, i)] = serial_number self['Erasure {} {} Serial Number'.format(ctype, i)] = serial_number
self['Erasure {} {} Size (MB)'.format(ctype, i)] = none2str(component.size) self['Erasure {} {} Size (MB)'.format(ctype, i)] = none2str(component.size)
self['Erasure {} {} Software'.format(ctype, i)] = ''
self['Erasure {} {} Result'.format(ctype, i)] = ''
self['Erasure {} {} Certificate URL'.format(ctype, i)] = ''
self['Erasure {} {} Type'.format(ctype, i)] = ''
self['Erasure {} {} Method'.format(ctype, i)] = ''
self['Erasure {} {} Elapsed (hours)'.format(ctype, i)] = ''
self['Erasure {} {} Date'.format(ctype, i)] = ''
self['Erasure {} {} Steps'.format(ctype, i)] = ''
self['Erasure {} {} Steps Start Time'.format(ctype, i)] = ''
self['Erasure {} {} Steps End Time'.format(ctype, i)] = ''
elif hasattr(erasure, 'type') and erasure.type == 'DataWipe': elif hasattr(erasure, 'type') and erasure.type == 'DataWipe':
self['Erasure {} {}'.format(ctype, i)] = none2str(component.hid) self['Erasure {} {}'.format(ctype, i)] = none2str(component.hid)
serial_number = none2str(component.serial_number) serial_number = none2str(component.serial_number)
@ -283,13 +449,6 @@ class DeviceRow(OrderedDict):
self['Erasure {} {} Certificate URL'.format(ctype, i)] = ( self['Erasure {} {} Certificate URL'.format(ctype, i)] = (
erasure.document.url and erasure.document.url.to_text() or '' erasure.document.url and erasure.document.url.to_text() or ''
) )
self['Erasure {} {} Type'.format(ctype, i)] = ''
self['Erasure {} {} Method'.format(ctype, i)] = ''
self['Erasure {} {} Elapsed (hours)'.format(ctype, i)] = ''
self['Erasure {} {} Date'.format(ctype, i)] = ''
self['Erasure {} {} Steps'.format(ctype, i)] = ''
self['Erasure {} {} Steps Start Time'.format(ctype, i)] = ''
self['Erasure {} {} Steps End Time'.format(ctype, i)] = ''
else: else:
self['Erasure {} {}'.format(ctype, i)] = none2str(component.hid) self['Erasure {} {}'.format(ctype, i)] = none2str(component.hid)
serial_number = none2str(component.serial_number) serial_number = none2str(component.serial_number)
@ -299,7 +458,6 @@ class DeviceRow(OrderedDict):
result = get_result(erasure) result = get_result(erasure)
self['Erasure {} {} Result'.format(ctype, i)] = result self['Erasure {} {} Result'.format(ctype, i)] = result
self['Erasure {} {} Certificate URL'.format(ctype, i)] = ''
self['Erasure {} {} Type'.format(ctype, i)] = erasure.type self['Erasure {} {} Type'.format(ctype, i)] = erasure.type
self['Erasure {} {} Method'.format(ctype, i)] = erasure.method self['Erasure {} {} Method'.format(ctype, i)] = erasure.method
self['Erasure {} {} Elapsed (hours)'.format(ctype, i)] = format( self['Erasure {} {} Elapsed (hours)'.format(ctype, i)] = format(
@ -314,10 +472,7 @@ class DeviceRow(OrderedDict):
self['Erasure {} {} Steps End Time'.format(ctype, i)] = steps_end_time self['Erasure {} {} Steps End Time'.format(ctype, i)] = steps_end_time
benchmark = get_action(component, 'BenchmarkDataStorage') benchmark = get_action(component, 'BenchmarkDataStorage')
if not benchmark: if benchmark:
self['Benchmark {} {} Read Speed (MB/s)'.format(ctype, i)] = ''
self['Benchmark {} {} Writing speed (MB/s)'.format(ctype, i)] = ''
else:
self['Benchmark {} {} Read Speed (MB/s)'.format(ctype, i)] = none2str( self['Benchmark {} {} Read Speed (MB/s)'.format(ctype, i)] = none2str(
benchmark.read_speed benchmark.read_speed
) )
@ -327,12 +482,6 @@ class DeviceRow(OrderedDict):
test_storage = get_action(component, 'TestDataStorage') test_storage = get_action(component, 'TestDataStorage')
if not test_storage: if not test_storage:
self['Test {} {} Software'.format(ctype, i)] = ''
self['Test {} {} Type'.format(ctype, i)] = ''
self['Test {} {} Result'.format(ctype, i)] = ''
self['Test {} {} Power cycle count'.format(ctype, i)] = ''
self['Test {} {} Lifetime (days)'.format(ctype, i)] = ''
self['Test {} {} Power on hours'.format(ctype, i)] = ''
return return
self['Test {} {} Software'.format(ctype, i)] = software self['Test {} {} Software'.format(ctype, i)] = software
@ -350,12 +499,22 @@ class DeviceRow(OrderedDict):
def get_graphic_card(self, ctype, i, component): def get_graphic_card(self, ctype, i, component):
"""Particular fields for component GraphicCard.""" """Particular fields for component GraphicCard."""
if component is None: if component:
self['{} {} Memory (MB)'.format(ctype, i)] = ''
return
self['{} {} Memory (MB)'.format(ctype, i)] = none2str(component.memory) self['{} {} Memory (MB)'.format(ctype, i)] = none2str(component.memory)
def get_placeholder_datas(self):
# Placeholder
self['PHID'] = none2str(self.placeholder.phid)
self['Is Abstract'] = none2str(self.device.is_abstract())
self['Pallet'] = none2str(self.placeholder.pallet)
self['id Supplier'] = none2str(self.placeholder.id_device_supplier)
self['Real Info'] = none2str(self.placeholder.info)
self['Real Components'] = none2str(self.placeholder.components)
self['Real Type'] = none2str(self.placeholder.device.type)
self['Real Manufacturer'] = none2str(self.placeholder.device.manufacturer)
self['Real Model'] = none2str(self.placeholder.device.model)
self['Real Serial Number'] = none2str(self.placeholder.device.serial_number)
class StockRow(OrderedDict): class StockRow(OrderedDict):
def __init__(self, device: d.Device) -> None: def __init__(self, device: d.Device) -> None:
@ -535,4 +694,3 @@ class InternalStatsRow(OrderedDict):
12: 'Q4', 12: 'Q4',
} }
return q[int(month)] return q[int(month)]

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long