1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- # -*- coding: utf-8 -*-
- #!/usr/bin/env python
- import logging
- from typing import TYPE_CHECKING
- from apps.web.core.models import DriverAdapter, DriverEventer
- logger = logging.getLogger(__name__)
- if TYPE_CHECKING:
- from apps.web.device.models import DeviceDict
- from apps.web.core.adapter.base import SmartBox
- from apps.web.eventer import EventBuilder
- def arguments():
- """Returns tuple containing dictionary of calling function's
- named arguments and a list of calling function's unnamed
- positional arguments.
- """
- from inspect import getargvalues, stack
- positional_name, keyword_name, args = getargvalues(stack()[1][0])[-3:]
- positional_args = args.pop(positional_name, [])
- args.update(args.pop(keyword_name, []))
- return args, positional_args
- def named_arguments():
- from inspect import getargvalues, stack
- positional_name, keyword_name, args = getargvalues(stack()[1][0])[-3:]
- args.pop(positional_name, [])
- args.update(args.pop(keyword_name, []))
- return args
- class ActionDeviceBuilder(object):
- @staticmethod
- def create_action_device(dev, typeCode = None):
- from apps.web.device.define import DeviceChannelType
- assert dev.channelType != DeviceChannelType.Channel_BT, u'蓝牙设备不能调用该接口'
- if not typeCode:
- devType = dev.get('devType', None)
- if not devType:
- return None
- typeCode = devType.get('code', None)
- if typeCode is None:
- return None
- is_online = devType.get('online', True)
- else:
- is_online = True
- return DriverAdapter.get_driver_adapter(typeCode, dev, is_online)
- @staticmethod
- def create_eventer(dev, typeCode = None):
- from apps.web.device.define import DeviceChannelType
- assert dev.channelType != DeviceChannelType.Channel_BT, u'蓝牙设备不能调用该接口'
- adapter = ActionDeviceBuilder.create_action_device(dev, typeCode)
- if not typeCode:
- devType = dev.get('devType', None)
- if not devType:
- return None
- typeCode = devType.get('code', None)
- if typeCode is None:
- return None
- is_online = devType.get('online', True)
- else:
- is_online = True
- return DriverEventer.get_driver_eventer(typeCode, adapter, is_online)
- @staticmethod
- def create_eventer_by_adapter(adapter):
- # type: (SmartBox)->EventBuilder
- dev = adapter.device # type: DeviceDict
- devType = dev.get('devType', None)
- if not devType:
- return None
- typeCode = devType.get('code', None)
- if typeCode is None:
- return None
- is_online = devType.get('online', True)
- return DriverEventer.get_driver_eventer(typeCode, adapter, is_online)
|