def get_call_forwarding(self, forward_type="always"): """Get call forwarding status for given forward type. Returns dict with keys 'active' (bool) and 'number' (str) """ tree = self.xsi_get("services/callforwarding%s" % forward_type) active, number = [ utils.node_value(tree, x) for x in ("active", "forwardToPhoneNumber") ] res = {"active": utils.str_to_bool(active), "number": number or ""} if forward_type == "always": splash = utils.node_value(tree, "ringSplash") res["ringSplash"] = utils.str_to_bool(splash) return res
def get_remote_office(self): """Get Remote Office call setting """ tree = self.xsi_get("services/remoteoffice") active, number = [ utils.node_value(tree, x) for x in ("active", "remoteOfficeNumber") ] return {"active": utils.str_to_bool(active), "number": number or ""}
def get_dnd(self): tree = self.xsi_get("services/donotdisturb") active, splash = [ utils.node_value(tree, x) for x in ("active", "ringSplash") ] return { "active": utils.str_to_bool(active), "ringSplash": utils.str_to_bool(splash) }
def get_pn_registrations(self): tree = self.xsi_get("profile/PushNotificationRegistrations") res = [] for e in tree.findall(utils.ns_escape("pushNotificationRegistration")): item = utils.node_list(e) item["token"] = utils.node_value( e, "deviceTokenList" "/deviceToken/token") res.append(item) return res
def get_directory_data(self): tree = self.xsi_get("directories/enterprise?userId=%s" % self.username) ret = {} for field in [ "firstName", "lastName", "number", "extension", "displayName", "emailAddress", "additionalDetails/impId", "bridgeId", "roomId", "groupId", "addressLine1", "city", "zip", "country" ]: ret[field[field.find("/") + 1:]] = utils.node_value( tree, "enterpriseDirectory/directoryDetails/%s" % field) ret["jid"] = ret["impId"] return ret
def fetch_server_data_for_account(server, account, ucaas=False): xsi = create_xsi_tool_for_account(server, account) utils.update_dict(account, xsi.get_directory_data()) kwargs = {"ucaas": ucaas} account["dm_config"] = xsi.get_dm_config(**kwargs) if not ucaas: for x in ["username", "password"]: account["xmpp_" + x] = utils.node_value(account["dm_config"], "protocols/xmpp/" "credentials/%s" % x) xmpp = create_xmpp_tool_for_account(account) utils.update_dict(account, xmpp.get_xmpp_data())
def get_broadworks_mobility(self): """Get BroadWorks Mobility call setting. Returns active state and primary mobile number only. """ tree = self.xsi_get("services/broadworksmobility") active = utils.node_value(tree, "active") # xpath looks more complex because can't specify default # namespece (without prefix) in xpath function arguments number = tree.xpath("/*[name()='BroadWorksMobility']" "/*[name()='mobileIdentity']" "/*[name()='primary'][text() = 'true']" "/parent::*" "/*[name()='mobileNumber']/text()") phone = number[0] if number else "" return {"active": utils.str_to_bool(active), "mobileNumber": phone}
def get_simultaneous_ring(self, **kwargs): """Get Simultaneous Ring call setting. """ tree = self.xsi_get("services/simultaneousringpersonal") active, ring = [ utils.node_value(tree, x) for x in ("active", "incomingCalls") ] return { "active": utils.str_to_bool(active), "incomingCalls": (ring == "Do not Ring if on a Call"), "simRingLocations": map( lambda elem: utils.node_list(elem), tree.findall( utils.ns_escape("simRingLocations/simRingLocation"))) }
def get_broadworks_anywhere(self): """Get BroadWorks Anywhere call setting. """ tree = self.xsi_get("services/broadworksanywhere") dial, paging = [ utils.node_value(tree, x) for x in ("alertAllLocationsForClickToDialCalls", "alertAllLocationsForGroupPagingCalls") ] return { "alertAllLocationsForClickToDialCalls": utils.str_to_bool(dial), "alertAllLocationsForGroupPagingCalls": utils.str_to_bool(paging), "locations": map(lambda elem: utils.node_list(elem), tree.findall(utils.ns_escape("locations/location"))) }
def delete_pn_registrations(self): tree = self.xsi_get("profile/PushNotificationRegistrations") for e in tree.findall(utils.ns_escape("pushNotificationRegistration")): self.delete_pn_registration( utils.node_value(e, "registrationId"), utils.node_value(e, "deviceTokenList/deviceToken/token"))
def _get_element_value(self, api_endpoint, element_name): tree = self.xsi_get(api_endpoint) return utils.node_value(tree, element_name)
def _get_active_state(self, api_endpoint): tree = self.xsi_get(api_endpoint) return utils.is_truthy(utils.node_value(tree, "active"))
def get_vcard_data(vcard_xml_tree): """Extract base64 encoded values from given VCard data. """ return {key: base64.b64decode(utils.node_value(vcard_xml_tree, path)) for path, key in (("CATEGORIES/CONF/CALL", "conf-call-number"), ("CATEGORIES/CONF/CHAT", "myroom-uri"))}