"""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