feat: add scoped device catalog and unlimited custom area hierarchy
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
"""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
|
||||
Reference in New Issue
Block a user