31 lines
1.5 KiB
Python
31 lines
1.5 KiB
Python
"""Common device responsibility fields and non-video device records."""
|
|
class Inventory:
|
|
def __init__(self, app):
|
|
self.a = app
|
|
|
|
def metadata(self, data, old=None):
|
|
old = old or {}
|
|
result = {k: self.a.clean_text(data.get(k, old.get(k, '')), 80)
|
|
for k in ('ownerName', 'managerName')}
|
|
tags = data.get('tags', old.get('tags', []))
|
|
if not isinstance(tags, list) or len(tags) > 12:
|
|
raise self.a.Problem('自定义标签最多 12 个')
|
|
result['tags'] = sorted({self.a.clean_text(tag, 40, True) for tag in tags})
|
|
return result
|
|
|
|
def save(self, data, user):
|
|
a = self.a
|
|
with a.LOCK:
|
|
family = a.HOUSEHOLDS.prepare(user, 'devices', data, (('sites', 'siteId'),))
|
|
key = a.object_key('devices', data)
|
|
old = a.get_object('devices', key)
|
|
item = {k: a.clean_text(data.get(k, ''), 300 if k == 'note' else 120, k in ('name', 'deviceType'))
|
|
for k in ('name', 'deviceType', 'brand', 'model', 'serial', 'note')}
|
|
if item['deviceType'] in ('摄像头', '摄像机', '录像机'):
|
|
raise a.Problem('视频设备请使用摄像机或录像机档案,以保留取流与通道配置')
|
|
item.update(id=key, familyId=family, siteId=a.clean_text(data.get('siteId', ''), 32),
|
|
**self.metadata(data, old))
|
|
a.save_object('devices', item)
|
|
a.audit('保存设备档案', item['name'])
|
|
return item
|