fixed Wi-Fi measurements editor
This commit is contained in:
parent
30d16c4cc9
commit
ca03ea78fd
2 changed files with 29 additions and 15 deletions
|
@ -16,6 +16,7 @@ from django.forms.widgets import HiddenInput
|
|||
from django.utils.translation import get_language
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from shapely.geometry.geo import mapping
|
||||
from pydantic import ValidationError as PydanticValidationError
|
||||
|
||||
from c3nav.editor.models import ChangeSet, ChangeSetUpdate
|
||||
from c3nav.mapdata.fields import GeometryField
|
||||
|
@ -221,9 +222,6 @@ class EditorFormBase(I18nModelFormMixin, ModelForm):
|
|||
if 'to_node' in self.fields:
|
||||
self.fields['to_node'].widget = HiddenInput()
|
||||
|
||||
if 'data' in self.fields and 'data' in self.initial:
|
||||
self.initial['data'] = json.dumps(self.initial['data'])
|
||||
|
||||
self.is_json = is_json
|
||||
self.missing_fields = tuple((name, field) for name, field in self.fields.items()
|
||||
if name not in self.data and not field.required)
|
||||
|
@ -260,17 +258,28 @@ class EditorFormBase(I18nModelFormMixin, ModelForm):
|
|||
)
|
||||
|
||||
def clean_data(self):
|
||||
try:
|
||||
data = json.loads(self.cleaned_data['data'])
|
||||
except json.JSONDecodeError:
|
||||
raise ValidationError(_('Invalid JSON.'))
|
||||
|
||||
if not isinstance(data, list):
|
||||
if not isinstance(self.cleaned_data['data'], list):
|
||||
raise ValidationError(_('Scan data is not a list.'))
|
||||
|
||||
for item in data:
|
||||
# todo: catch pydantic validation error
|
||||
LocateRequestPeerSchema.model_validate(item)
|
||||
data = list()
|
||||
for scan in self.cleaned_data['data']:
|
||||
scan: list[dict]
|
||||
scan_data = list()
|
||||
for item in scan:
|
||||
# The app might return results without an SSID, we ignore those
|
||||
if not item.get('ssid', ''):
|
||||
continue
|
||||
# App version < 4.2.4 use level instead fo rssi
|
||||
if 'level' in item:
|
||||
item['rssi'] = item['level']
|
||||
del item['level']
|
||||
try:
|
||||
LocateRequestPeerSchema.model_validate(item)
|
||||
except PydanticValidationError as e:
|
||||
raise ValidationError(str(e))
|
||||
scan_data.append(item)
|
||||
data.append(scan_data)
|
||||
|
||||
return data
|
||||
|
||||
def clean(self):
|
||||
|
|
|
@ -1299,17 +1299,22 @@ editor = {
|
|||
$table.find('tr').addClass('old');
|
||||
for (i=0; i < data.length; i++) {
|
||||
item = data[i];
|
||||
// App version < 4.2.4 use level instead fo rssi
|
||||
if (item.level !== undefined) {
|
||||
item.rssi = item.level;
|
||||
delete item.level
|
||||
}
|
||||
apid = 'ap-'+item.bssid.replace(/:/g, '-');
|
||||
line = $table.find('tr.'+apid);
|
||||
color = Math.max(0, Math.min(50, item.level+80));
|
||||
color = Math.max(0, Math.min(50, item.rssi+80));
|
||||
color = 'rgb('+String(250-color*5)+', '+String(color*4)+', 0)';
|
||||
if (line.length) {
|
||||
line.removeClass('old').find(':last-child').text(item.level).css('color', color);
|
||||
line.removeClass('old').find(':last-child').text(item.rssi).css('color', color);
|
||||
} else {
|
||||
line = $('<tr>').addClass(apid);
|
||||
line.append($('<td>').text(item.bssid));
|
||||
line.append($('<td>').text(item.ssid));
|
||||
line.append($('<td>').text(item.level).css('color', color));
|
||||
line.append($('<td>').text(item.rssi).css('color', color));
|
||||
$table.append(line);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue