Skip to content

Commit

Permalink
Improvement: make service informations a 'namedtuple'
Browse files Browse the repository at this point in the history
  • Loading branch information
Samuel Bovée committed Mar 5, 2020
1 parent 1729ded commit 9f212d6
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 30 deletions.
16 changes: 7 additions & 9 deletions onvif/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -221,9 +221,9 @@ async def update_xaddrs(self):
for name in capabilities:
capability = capabilities[name]
try:
if name.lower() in SERVICES and capability is not None:
ns = SERVICES[name.lower()]['ns']
self.xaddrs[ns] = capability['XAddr']
serviceInfo = SERVICES.get(name.lower())
if serviceInfo is not None and capability is not None:
self.xaddrs[serviceInfo.ns] = capability['XAddr']
except Exception:
logger.exception('Unexpected service type')

Expand Down Expand Up @@ -265,14 +265,12 @@ def get_service(self, name, create=True):
def get_definition(self, name, portType=None):
"""Returns xaddr and wsdl of specified service
"""
# Check if the service is supported
if name not in SERVICES:
serviceInfo = SERVICES.get(name)
if serviceInfo is None:
raise ONVIFError('Unknown service %s' % name)
wsdlFilename = SERVICES[name]['wsdl']
ns = SERVICES[name]['ns']

bindingName = '{%s}%s' % (ns, SERVICES[name]['binding'])

ns, wsdlFilename, binding = serviceInfo
bindingName = '{%s}%s' % (ns, binding)
if portType:
ns += '/' + portType

Expand Down
47 changes: 26 additions & 21 deletions onvif/definition.py
Original file line number Diff line number Diff line change
@@ -1,22 +1,27 @@
SERVICES = {
# Name namespace wsdl file binding name
'devicemgmt' : {'ns': 'http://www.onvif.org/ver10/device/wsdl', 'wsdl': 'devicemgmt.wsdl', 'binding' : 'DeviceBinding'},
'media' : {'ns': 'http://www.onvif.org/ver10/media/wsdl', 'wsdl': 'media.wsdl', 'binding' : 'MediaBinding'},
'ptz' : {'ns': 'http://www.onvif.org/ver20/ptz/wsdl', 'wsdl': 'ptz.wsdl', 'binding' : 'PTZBinding'},
'imaging' : {'ns': 'http://www.onvif.org/ver20/imaging/wsdl', 'wsdl': 'imaging.wsdl', 'binding' : 'ImagingBinding'},
'deviceio' : {'ns': 'http://www.onvif.org/ver10/deviceIO/wsdl', 'wsdl': 'deviceio.wsdl', 'binding' : 'DeviceIOBinding'},
'events' : {'ns': 'http://www.onvif.org/ver10/events/wsdl', 'wsdl': 'events.wsdl', 'binding' : 'EventBinding'},
'pullpoint' : {'ns': 'http://www.onvif.org/ver10/events/wsdl', 'wsdl': 'events.wsdl', 'binding' : 'PullPointSubscriptionBinding'},
'notification' : {'ns': 'http://www.onvif.org/ver10/events/wsdl', 'wsdl': 'events.wsdl', 'binding' : 'NotificationProducerBinding'},
'subscription' : {'ns': 'http://www.onvif.org/ver10/events/wsdl', 'wsdl': 'events.wsdl', 'binding' : 'SubscriptionManagerBinding'},
'analytics' : {'ns': 'http://www.onvif.org/ver20/analytics/wsdl', 'wsdl': 'analytics.wsdl', 'binding' : 'AnalyticsEngineBinding'},
'recording' : {'ns': 'http://www.onvif.org/ver10/recording/wsdl', 'wsdl': 'recording.wsdl', 'binding' : 'RecordingBinding'},
'search' : {'ns': 'http://www.onvif.org/ver10/search/wsdl', 'wsdl': 'search.wsdl', 'binding' : 'SearchBinding'},
'replay' : {'ns': 'http://www.onvif.org/ver10/replay/wsdl', 'wsdl': 'replay.wsdl', 'binding' : 'ReplayBinding'},
'receiver' : {'ns': 'http://www.onvif.org/ver10/receiver/wsdl', 'wsdl': 'receiver.wsdl', 'binding' : 'ReceiverBinding'},
}
""" definition file
"""
from collections import namedtuple

NS = 'http://www.onvif.org/'
SI = namedtuple('ServiceInfo', ('ns', 'wsdl', 'binding'))

#
#NSMAP = { }
#for name, item in SERVICES.items():
# NSMAP[item['ns']] = name
SERVICES = {
'devicemgmt' : SI(NS+'ver10/device/wsdl', 'devicemgmt.wsdl', 'DeviceBinding'),
'media' : SI(NS+'ver10/media/wsdl', 'media.wsdl', 'MediaBinding'),
'ptz' : SI(NS+'ver20/ptz/wsdl', 'ptz.wsdl', 'PTZBinding'),
'imaging' : SI(NS+'ver20/imaging/wsdl', 'imaging.wsdl', 'ImagingBinding'),
'deviceio' : SI(NS+'ver10/deviceIO/wsdl', 'deviceio.wsdl', 'DeviceIOBinding'),
'events' : SI(NS+'ver10/events/wsdl', 'events.wsdl', 'EventBinding'),
'pullpoint' : SI(NS+'ver10/events/wsdl', 'events.wsdl',
'PullPointSubscriptionBinding'),
'notification' : SI(NS+'ver10/events/wsdl', 'events.wsdl',
'NotificationProducerBinding'),
'subscription' : SI(NS+'ver10/events/wsdl', 'events.wsdl',
'SubscriptionManagerBinding'),
'analytics' : SI(NS+'ver20/analytics/wsdl', 'analytics.wsdl',
'AnalyticsEngineBinding'),
'recording' : SI(NS+'ver10/recording/wsdl', 'recording.wsdl', 'RecordingBinding'),
'search' : SI(NS+'ver10/search/wsdl', 'search.wsdl', 'SearchBinding'),
'replay' : SI(NS+'ver10/replay/wsdl', 'replay.wsdl', 'ReplayBinding'),
'receiver' : SI(NS+'ver10/receiver/wsdl', 'receiver.wsdl', 'ReceiverBinding'),
}

0 comments on commit 9f212d6

Please sign in to comment.