Skip to main content

Cisco Unified Call Manager AXL Methods Collection.

Project description


tinyCUCM

Cisco Unified Call Manager AXL Methods Collection.


Table of Contents
  1. About The Project
  2. Installation
  3. Usage
  4. License
  5. Contact

About The Project

This project is for informational purposes only and is intended to study the capabilities of the Cisco Unified Call Manager's API. Methods have been tested on CUCM ver. 11.5.
Cisco UCM AXL Schemas & SQL Data Dictionaries Documentation

(back to top)

Installation

Installation is as simple as:

pip install tinyCUCM

(back to top)

Usage

Cisco UCM WSDL Services:

WSDL File Path
SOAPMonitorService https://x.x.x.x:8443/realtimeservice/services/SOAPMonitorService?wsdl
RisPort https://x.x.x.x:8443/realtimeservice/services/RisPort?wsdl
RisPort70 https://x.x.x.x:8443/realtimeservice/services/RisPort70?wsdl
RisService70 https://x.x.x.x:8443/realtimeservice2/services/RISService70?wsdl
PerfmonPort https://x.x.x.x:8443/perfmonservice/services/PerfmonPort?wsdl
ControlCenterServices https://x.x.x.x:8443/controlcenterservice/services/ControlCenterServicesPort?wsdl
LogCollectionService https://x.x.x.x:8443/logcollectionservice/services/LogCollectionPort?wsdl
CDRonDemand https://x.x.x.x:8443/CDRonDemandService/services/CDRonDemand?wsdl
DimeGetFile https://x.x.x.x:8443/logcollectionservice/services/DimeGetFileService?wsdl

Download Cisco AXL Toolkit from the station (Application -> Plugins) and put it into the folder with your project.
Copy RISService70 and create RISService70.xml file, put file it into axlsqltoolkit folder.
Create an Cisco UCM application account or local end user with Standard CCM Super Users privileges (Assign access control group to Your-CUCM-Account).

Instance Create

Create a new instance of the CucmAxlClient class and assigns this object to the local variable cucm.

Don't store sensitive information in source code. For example use ".env" file.

Code Example:
from pathlib import Path
from tinyCUCM import CucmClient


BASE_DIR = Path(__file__).resolve().parent
settings = {
    "pub_fqdn": "cucm.example.com",
    "pub_version": "11.5",
    "user_login": "Your-CUCM-Account",
    "user_password": "You%wILL#&neVeR!gUEss",
    "toolkit_path": BASE_DIR / "axlsqltoolkit",
    "cert_path": BASE_DIR / "cucm.crt",
    "session_verify": False,
    "session_timeout": 15,
    "ccs_wsdl_filename": "wsdlControlCenterServices_test.xml",
    "ris_wsdl_filename": "wsdlRISService70_test.xml",
}

if __name__ == "__main__":
    cucm = CucmClient(**settings)
    # Get All AXL Method Names
    print("Result:", cucm.axlAllMethods())
    # Result: (
    #     'addAarGroup', 
    #     'addAdvertisedPatterns', 
    #     'addAnnouncement', 
    #     'addAppServerInfo', 
    #     'addAppUser', 
    #     ...,
    #     'updateWifiHotspot', 
    #     'updateWirelessAccessPointControllers', 
    #     'updateWlanProfileGroup', 
    #     'wipePhone'
    # )

(back to top)

AXL Collection

Add Methods

  • axlAddCallPickupGroup

    keywords args
    • required:
      • callPickupGroup
      • name
      • pattern
    • expected:
      • description
      • routePartitionName
      • members
      • pickupNotification
      • pickupNotificationTimer
      • callInfoForPickupNotification
  • axlAddDeviceProfile

    keywords args
    • required:
      • deviceProfile
      • name
      • product
      • class
      • protocol
      • protocolSide
      • phoneTemplateName
    • expected:
      • name
      • description
      • userHoldMohAudioSourceId
      • vendorConfig
      • traceFlag
      • mlppDomainId
      • mlppIndicationStatus
      • preemption
      • lines
        • line - collection of:
          • required:
            • index
            • dirn
              • pattern
              • routePartitionName
          • expected:
            • label
            • display
            • ringSetting
            • consecutiveRingSetting
            • ringSettingIdlePickupAlert
            • ringSettingActivePickupAlert
            • displayAscii
            • e164Mask
            • mwlPolicy
            • maxNumCalls
            • busyTrigger
            • callInfoDisplay
            • recordingProfileName
            • monitoringCssName
            • recordingFlag
            • audibleMwi
            • speedDial
            • partitionUsage
            • associatedEndusers
            • missedCallLogging
            • recordingMediaSource
      • speeddials
      • busyLampFields
      • blfDirectedCallParks
      • addOnModules
      • userLocale
      • singleButtonBarge
      • joinAcrossLines
      • loginUserId
      • ignorePresentationIndicators
      • dndOption
      • dndRingSetting
      • dndStatus
      • emccCallingSearchSpace
      • alwaysUsePrimeLine
      • alwaysUsePrimeLineForVoiceMessage
      • softkeyTemplateName
      • callInfoPrivacyStatus
      • services
      • featureControlPolicy
  • axlAddLine

    keywords args
    • required:
      • line
      • pattern
      • usage
    • expected:
      • description
      • routePartitionName
      • aarNeighborhoodName
      • aarDestinationMask
      • aarKeepCallHistory
      • aarVoiceMailEnabled
      • callForwardAll
      • callForwardBusy
      • callForwardBusyInt
      • callForwardNoAnswer
      • callForwardNoAnswerInt
      • callForwardNoCoverage
      • callForwardNoCoverageInt
      • callForwardOnFailure
      • callForwardAlternateParty
      • callForwardNotRegistered
      • callForwardNotRegisteredInt
      • callPickupGroupName
      • autoAnswer
      • networkHoldMohAudioSourceId
      • userHoldMohAudioSourceId
      • alertingName
      • asciiAlertingName
      • presenceGroupName
      • shareLineAppearanceCssName
      • voiceMailProfileName
      • patternPrecedence
      • releaseClause
      • hrDuration
      • hrInterval
      • cfaCssPolicy
      • defaultActivatedDeviceName
      • parkMonForwardNoRetrieveDn
      • parkMonForwardNoRetrieveIntDn
      • parkMonForwardNoRetrieveVmEnabled
      • parkMonForwardNoRetrieveIntVmEnabled
      • parkMonForwardNoRetrieveCssName
      • parkMonForwardNoRetrieveIntCssName
      • parkMonReversionTimer
      • partyEntranceTone
      • directoryURIs
      • allowCtiControlFlag
      • rejectAnonymousCall
      • patternUrgency
      • confidentialAccess
      • externalCallControlProfile
      • enterpriseAltNum
      • e164AltNum
      • pstnFailover
      • callControlAgentProfile
      • useEnterpriseAltNum
      • useE164AltNum
      • active
  • axlAddLineGroup

    keywords args
    • required:
      • lineGroup
      • name
      • distributionAlgorithm
      • rnaReversionTimeOut
      • huntAlgorithmNoAnswer
      • huntAlgorithmBusy
      • huntAlgorithmNotAvailable
    • expected:
      • members
      • autoLogOffHunt
  • axlAddPhone

    keywords args
    • required:
      • phone
      • name
      • product
      • class
      • protocol
      • protocolSide
      • devicePoolName
      • commonPhoneConfigName
      • locationName
      • useTrustedRelayPoint
      • phoneTemplateName
      • primaryPhoneName
      • builtInBridgeStatus
      • packetCaptureMode
      • certificateOperation
      • deviceMobilityMode
    • expected:
      • description
      • callingSearchSpaceName
      • commonDeviceConfigName
      • networkLocation
      • mediaResourceListName
      • networkHoldMohAudioSourceId
      • userHoldMohAudioSourceId
      • automatedAlternateRoutingCssName
      • aarNeighborhoodName
      • loadInformation
      • vendorConfig
      • versionStamp
      • traceFlag
      • mlppDomainId
      • mlppIndicationStatus
      • preemption
      • retryVideoCallAsAudio
      • securityProfileName
      • sipProfileName
      • cgpnTransformationCssName
      • useDevicePoolCgpnTransformCss
      • geoLocationName
      • geoLocationFilterName
      • sendGeoLocation
      • lines
        • line - collection of:
          • required:
            • index
            • dirn
              • pattern
              • routePartitionName
          • expected:
            • label
            • display
            • ringSetting
            • consecutiveRingSetting
            • ringSettingIdlePickupAlert
            • ringSettingActivePickupAlert
            • displayAscii
            • e164Mask
            • mwlPolicy
            • maxNumCalls
            • busyTrigger
            • callInfoDisplay
            • recordingProfileName
            • monitoringCssName
            • recordingFlag
            • audibleMwi
            • speedDial
            • partitionUsage
            • associatedEndusers
            • missedCallLogging
            • recordingMediaSource
      • speeddials
      • busyLampFields
      • ringSettingIdleBlfAudibleAlert
      • ringSettingBusyBlfAudibleAlert
      • blfDirectedCallParks
      • addOnModules
      • userLocale
      • networkLocale
      • idleTimeout
      • authenticationUrl
      • directoryUrl
      • idleUrl
      • informationUrl
      • messagesUrl
      • proxyServerUrl
      • servicesUrl
      • services
      • softkeyTemplateName
      • defaultProfileName
      • enableExtensionMobility
      • singleButtonBarge
      • joinAcrossLines
      • callInfoPrivacyStatus
      • hlogStatus
      • ownerUserName
      • ignorePresentationIndicators
      • packetCaptureDuration
      • subscribeCallingSearchSpaceName
      • rerouteCallingSearchSpaceName
      • allowCtiControlFlag
      • presenceGroupName
      • unattendedPort
      • requireDtmfReception
      • rfc2833Disabled
      • authenticationMode
      • keySize
      • keyOrder
      • ecKeySize
      • authenticationString
      • upgradeFinishTime
      • remoteDevice
      • dndOption
      • dndRingSetting
      • dndStatus
      • isActive
      • isDualMode
      • mobilityUserIdName
      • phoneSuite
      • phoneServiceDisplay
      • isProtected
      • mtpRequired
      • mtpPreferedCodec
      • dialRulesName
      • sshUserId
      • sshPwd
      • digestUser
      • outboundCallRollover
      • hotlineDevice
      • secureInformationUrl
      • secureDirectoryUrl
      • secureMessageUrl
      • secureServicesUrl
      • secureAuthenticationUrl
      • secureIdleUrl
      • alwaysUsePrimeLine
      • alwaysUsePrimeLineForVoiceMessage
      • featureControlPolicy
      • deviceTrustMode
      • earlyOfferSupportForVoiceCall
      • requireThirdPartyRegistration
      • blockIncomingCallsWhenRoaming
      • homeNetworkId
      • AllowPresentationSharingUsingBfcp
      • confidentialAccess
      • requireOffPremiseLocation
      • allowiXApplicableMedia
      • cgpnIngressDN
      • useDevicePoolCgpnIngressDN
      • msisdn
      • enableCallRoutingToRdWhenNoneIsActive
      • wifiHotspotProfile
      • wirelessLanProfileGroup
      • elinGroup
  • axlAddeRemoteDestination

    keywords args
    • required:
      • remoteDestination
      • destination
      • answerTooSoonTimer
      • answerTooLateTimer
      • delayBeforeRingingCell
      • ownerUserId
      • remoteDestinationProfileName
    • expected:
      • name
      • enableUnifiedMobility
      • enableExtendAndConnect
      • ctiRemoteDeviceName
      • dualModeDeviceName
      • isMobilePhone
      • enableMobileConnect
      • lineAssociations
      • timeZone
      • todAccessName
      • mobileSmartClientName
      • mobilityProfileName
      • singleNumberReachVoicemail
      • dialViaOfficeReverseVoicemail
      • ringSchedule
      • accessListName
  • axlAddRemoteDestinationProfile

    keywords args
    • required:
      • remoteDestinationProfile
      • name
      • product
      • class
      • protocol
      • protocolSide
      • devicePoolName
      • callInfoPrivacyStatus
      • userId
    • expected:
      • description
      • callingSearchSpaceName
      • networkHoldMohAudioSourceId
      • userHoldMohAudioSourceId
      • lines
        • line - collection of:
          • required:
            • index
            • dirn
              • pattern
              • routePartitionName
          • expected:
            • label
            • display
            • ringSetting
            • consecutiveRingSetting
            • ringSettingIdlePickupAlert
            • ringSettingActivePickupAlert
            • displayAscii
            • e164Mask
            • mwlPolicy
            • maxNumCalls
            • busyTrigger
            • callInfoDisplay
            • recordingProfileName
            • monitoringCssName
            • recordingFlag
            • audibleMwi
            • speedDial
            • partitionUsage
            • associatedEndusers
            • missedCallLogging
            • recordingMediaSource
      • ignorePresentationIndicators
      • rerouteCallingSearchSpaceName
      • cgpnTransformationCssName
      • automatedAlternateRoutingCssName
      • useDevicePoolCgpnTransformCss
      • userLocale
      • networkLocale
      • primaryPhoneName
      • dndOption
      • dndStatus
      • mobileSmartClientProfileName
  • axlAddTranslationPattern

    keywords args
    • required:
      • transPattern
      • pattern
      • routePartitionName
      • usage
    • expected:
      • description
      • blockEnable
      • calledPartyTransformationMask
      • callingPartyTransformationMask
      • useCallingPartyPhoneMask
      • callingPartyPrefixDigits
      • dialPlanName
      • digitDiscardInstructionName
      • patternUrgency
      • prefixDigitsOut
      • routeFilterName
      • callingLinePresentationBit
      • callingNamePresentationBit
      • connectedLinePresentationBit
      • connectedNamePresentationBit
      • patternPrecedence
      • provideOutsideDialtone
      • callingPartyNumberingPlan
      • callingPartyNumberType
      • calledPartyNumberingPlan
      • calledPartyNumberType
      • callingSearchSpaceName
      • resourcePriorityNamespaceName
      • routeNextHopByCgpn
      • routeClass
      • callInterceptProfileName
      • releaseClause
      • useOriginatorCss
      • dontWaitForIDTOnSubsequentHops
      • isEmergencyServiceNumber
  • axlAddUser

    keywords args
    • required:
      • user
      • userid
      • lastName
      • presenceGroupName
    • expected:
      • firstName
      • displayName
      • middleName
      • password
      • pin
      • mailid
      • department
      • manager
      • userLocale
      • associatedDevices
      • primaryExtension
      • associatedPc
      • associatedGroups
      • enableCti
      • digestCredentials
      • phoneProfiles
      • defaultProfile
      • subscribeCallingSearchSpaceName
      • enableMobility
      • enableMobileVoiceAccess
      • maxDeskPickupWaitTime
      • remoteDestinationLimit
      • passwordCredentials
      • pinCredentials
      • enableEmcc
      • ctiControlledDeviceProfiles
      • patternPrecedence
      • numericUserId
      • mlppPassword
      • customUserFields
      • homeCluster
      • imAndPresenceEnable
      • serviceProfile
      • lineAppearanceAssociationForPresences
      • directoryUri
      • telephoneNumber
      • title
      • mobileNumber
      • homeNumber
      • pagerNumber
      • extensionsInfo
      • selfService
      • userProfile
      • calendarPresence
      • ldapDirectoryName
      • userIdentity
      • nameDialing
      • ipccExtension
      • convertUserAccount
      • accountType
      • authenticationType
      • enableUserToHostConferenceNow
      • attendeesAccessCode
      • zeroHop
Code Example:
cucm = ...
print("Result:", cucm.axlAddCallPickupGroup(**{"callPickupGroup": {"name": "...", "pattern": "..."}}))
# Result: {'return': '{........-....-....-....-............}', 'sequence': None}

print("Result:", cucm.axlAddLine(**{"line": {"pattern": "...", "usage": "Device"}}))
# Result: {'return': '{........-....-....-....-............}', 'sequence': None}

print("Result:", cucm.axlAddLineGroup(**{
    "lineGroup": {
        "name": "...",
        "distributionAlgorithm": "Broadcast",
        "rnaReversionTimeOut": 10,
        "huntAlgorithmNoAnswer": "Try next member; then, try next group in Hunt List",
        "huntAlgorithmBusy": "Try next member; then, try next group in Hunt List",
        "huntAlgorithmNotAvailable": "Try next member; then, try next group in Hunt List",
    }
}))
# Result: {'return': '{........-....-....-....-............}', 'sequence': None}

print("Result:", cucm.axlAddPhone(**{
    "phone": {
        "name": "...",
        "product": "Cisco 7821",
        "class": "Phone",
        "protocol": "SIP",
        "protocolSide": "User",
        "devicePoolName": "Default",
        "commonPhoneConfigName": "Standard Common Phone Profile",
        "locationName": "Hub_None",
        "useTrustedRelayPoint": "Default",
        "phoneTemplateName": "Standard 7821 SIP",
        "primaryPhoneName": None,
        "builtInBridgeStatus": "Default",
        "packetCaptureMode": "None",
        "certificateOperation": "No Pending Operation",
        "deviceMobilityMode": "Default"
    }
}))
# Result: {'return': '{........-....-....-....-............}', 'sequence': None}

print("Result:", cucm.axlAddRemoteDestination(**{
    "remoteDestination": {
        "destination": "...",
        "answerTooSoonTimer": 1500,
        "answerTooLateTimer": 19000,
        "delayBeforeRingingCell": 4000,
        "ownerUserId": "...",
        "remoteDestinationProfileName": "..."
    }
}))
# Result: <Response [200]>

print("Result:", cucm.axlAddRemoteDestinationProfile(**{
    "remoteDestinationProfile": {
        "name": "...",
        "product": "Remote Destination Profile",
        "class": "Remote Destination Profile",
        "protocol": "Remote Destination",
        "protocolSide": "User",
        "devicePoolName": "...",
        "callInfoPrivacyStatus": "Default",
        "userId": "..."
    }
}))
# Result: {'return': '{........-....-....-....-............}', 'sequence': None}

# Pattern without `routePartitionName`
print("Result:", cucm.axlAddTranslationPattern(**{
        "transPattern": {"pattern": "...", "routePartitionName": "", "usage": "Translation"}
}))
# Result: {'return': '{........-....-....-....-............}', 'sequence': None}

print("Result:", cucm.axlAddUser(**{
  "user": {"userid": "...", "lastName": "...", "presenceGroupName": "Standard Presence group"}
}))
# Result: {'return': '{........-....-....-....-............}', 'sequence': None}

(back to top)

Do Methods

  • axlDoAuthenticateUser

    keywords args
    • required:
      • userid
      • password or pin
  • axlDoDeviceLogin

    keywords args
    • required:
      • deviceName
      • loginDuration
        • "0" - Logout disabled
        • "36000" - Logout after 10h (or any other positive value in milliseconds)
      • profileName
      • userId
  • axlDoDeviceLogout

    keywords args
    • required:
      • deviceName
  • axlDoLdapSync

    keywords args
    • required:
      • uuid or name
      • sync
        • True - Start Synchronization
        • False - Cancel the Synchronization which is currently under process
Code Example:
cucm = ...
print("Result:", cucm.axlDoAuthenticateUser(userid="...", pin= "..."))
print("Result:", cucm.axlDoAuthenticateUser(**{"userid": "...", "password": "..."}))
# Result: {'return': {'userAuthenticated': 'true', 'code': 0, 'daysToExpiry': 0, 'isWarningNeeded': 'false'}, 'sequence': None}
# Result: {'return': {'userAuthenticated': 'false', 'code': 1, 'daysToExpiry': 0, 'isWarningNeeded': 'false'}, 'sequence': None}

print("Result:", cucm.axlDoDeviceLogin(**{"deviceName": "SEP...", "loginDuration": "...", "profileName":"...", "userid": "..."}))
# Result: {'return': '{........-....-....-....-............}', 'sequence': None}

print("Result:", cucm.axlDoDeviceLogout(**{"deviceName": "SEP..."}))
# Result: {'return': '{........-....-....-....-............}', 'sequence': None}

print("Result:", cucm.axlDoLdapSync(**{"uuid": "........-....-....-....-............", "sync": True}))
# Result: {'return': 'Sync initiated successfully', 'sequence': None}

(back to top)

Get Methods

  • axlGetAny

    keywords args
    • required:
      • method and uuid or name or any other key for getting cucm object
  • axlGetCallPickupGroup

    keywords args
    • required:
      • uuid or name or pattern or (pattern, routePartitionName)
  • axlGetDeviceProfile

    keywords args
    • required:
      • uuid or name
  • axlGetLine

    keywords args
    • required:
      • uuid or pattern or (pattern, routePartitionName)
  • axlGetLineGroup

    keywords args
    • required:
      • uuid or name
  • axlGetPhone

    keywords args
    • required:
      • uuid or name
  • axlGetRemoteDestination

    keywords args
    • required:
      • uuid or destination
  • axlGetRemoteDestinationProfile

    keywords args
    • required:
      • uuid or name
  • axlGetTranslationPattern

    keywords args
    • required:
      • uuid or pattern or (pattern, routePartitionName)
  • axlGetUser

    keywords args
    • required:
      • uuid or userid
Code Example:
cucm = ...
print("Result:", cucm.axlGetAny(method="getPhone", name="SEP..."))
print("Result:", cucm.axlGetPhone(name="SEP..."))
print("Result:", cucm.axlGetPhone(**{"uuid": "........-....-....-....-............"}))
# Result: {
#     'name': '...',
#     ...,  
#     'lines': {
#         'line': [
#             {
#                 'index': 1,
#                  ...,
#                 'dirn': {
#                     'pattern': '...',
#                     'routePartitionName': {'_value_1': '...', 'uuid': '{........-....-....-....-............}'},
#                     'uuid': '{........-....-....-....-............}'
#                 },
#                 'uuid': '{........-....-....-....-............'
#             }
#         ], 
#         'lineIdentifier': None
#     }, 
#     'uuid': '{........-....-....-....-............}'
# }

(back to top)

Remove Methods

  • axlRemoveCallPickupGroup

    keywords args
    • required:
      • uuid or name or pattern or (pattern, routePartitionName)
  • axlRemoveDeviceProfile

    keywords args
    • required:
      • uuid or name
  • axlRemoveLine

    keywords args
    • required:
      • uuid or pattern or (pattern, routePartitionName)
  • axlRemoveLineGroup

    keywords args
    • required:
      • uuid or name
  • axlRemovePhone

    keywords args
    • required:
      • uuid or name
  • axlRemoveRemoteDestination

    keywords args
    • required:
      • uuid or destination
  • axlRemoveRemoteDestinationProfile

    keywords args
    • required:
      • uuid or name
  • axlRemoveTranslationPattern

    keywords args
    • required:
      • uuid or pattern or (pattern, routePartitionName)
  • axlRemoveUser

    keywords args
    • required:
      • uuid or userid
Code Example:
cucm = ...
print("Result:", cucm.axlRemovePhone(name= "SEP..."))
print("Result:", cucm.axlRemovePhone(**{"uuid": "........-....-....-....-............"}))
# Result: {'return': '{........-....-....-....-............}', 'sequence': None}

(back to top)

Reset Methods

  • axlResetPhone

    keywords args
    • required:
      • uuid or name
Code Example:
cucm = ...
print("Result:", cucm.axlResetPhone(name="SEP..."))
print("Result:", cucm.axlResetPhone(**{"uuid": "........-....-....-....-............"}))
# Result: {'return': '{........-....-....-....-............}', 'sequence': None}

(back to top)

Restart Methods

  • axlRestartPhone

    keywords args
    • required:
      • uuid or name
Code Example:
cucm = ...
print("Result:", cucm.axlRestartPhone(name="SEP..."))
print("Result:", cucm.axlRestartPhone(**{"uuid": "........-....-....-....-............"}))
# Result: {'return': '{........-....-....-....-............}', 'sequence': None}

(back to top)

Update Methods

  • axlUpdateCallPickupGroup

    keywords args
    • required:
      • uuid or name or pattern or (pattern, routePartitionName)
    • expected:
      • newPattern
      • description
      • newRoutePartitionName
      • removeMembers
      • addMembers
      • members
      • pickupNotification
      • pickupNotificationTimer
      • callInfoForPickupNotification
      • newName
  • axlUpdateDeviceProfile

    keywords args
    • required:
      • uuid or name
    • expected:
      • newName
      • description
      • userHoldMohAudioSourceId
      • vendorConfig
      • mlppDomainId
      • mlppIndicationStatus
      • preemption
      • lines
        • line - collection of:
          • required:
            • index
            • dirn
              • pattern
              • routePartitionName
          • expected:
            • label
            • display
            • ringSetting
            • consecutiveRingSetting
            • ringSettingIdlePickupAlert
            • ringSettingActivePickupAlert
            • displayAscii
            • e164Mask
            • mwlPolicy
            • maxNumCalls
            • busyTrigger
            • callInfoDisplay
            • recordingProfileName
            • monitoringCssName
            • recordingFlag
            • audibleMwi
            • speedDial
            • partitionUsage
            • associatedEndusers
            • missedCallLogging
            • recordingMediaSource
      • phoneTemplateName
      • speeddials
      • busyLampFields
      • blfDirectedCallParks
      • addOnModules
      • userLocale
      • singleButtonBarge
      • joinAcrossLines
      • loginUserId
      • ignorePresentationIndicators
      • dndOption
      • dndRingSetting
      • dndStatus
      • emccCallingSearchSpace
      • alwaysUsePrimeLine
      • alwaysUsePrimeLineForVoiceMessage
      • softkeyTemplateName
      • callInfoPrivacyStatus
      • services
      • featureControlPolicy
  • `axlUpdateLine

    keywords args
    • required:
      • uuid or pattern or (pattern, routePartitionName)
    • expected:
      • newPattern
      • description
      • newRoutePartitionName
      • aarNeighborhoodName
      • aarDestinationMask
      • aarKeepCallHistory
      • aarVoiceMailEnabled
      • callForwardAll
      • callForwardBusy
      • callForwardBusyInt
      • callForwardNoAnswer
      • callForwardNoAnswerInt
      • callForwardNoCoverage
      • callForwardNoCoverageInt
      • callForwardOnFailure
      • callForwardAlternateParty
      • callForwardNotRegistered
      • callForwardNotRegisteredInt
      • callPickupGroupName
      • autoAnswer
      • networkHoldMohAudioSourceId
      • userHoldMohAudioSourceId
      • alertingName
      • asciiAlertingName
      • presenceGroupName
      • shareLineAppearanceCssName
      • voiceMailProfileName
      • patternPrecedence
      • releaseClause
      • hrDuration
      • hrInterval
      • cfaCssPolicy
      • defaultActivatedDeviceName
      • parkMonForwardNoRetrieveDn
      • parkMonForwardNoRetrieveIntDn
      • parkMonForwardNoRetrieveVmEnabled
      • parkMonForwardNoRetrieveIntVmEnabled
      • parkMonForwardNoRetrieveCssName
      • parkMonForwardNoRetrieveIntCssName
      • parkMonReversionTimer
      • partyEntranceTone
      • directoryURIs
      • allowCtiControlFlag
      • rejectAnonymousCall
      • patternUrgency
      • confidentialAccess
      • externalCallControlProfile
      • enterpriseAltNum
      • e164AltNum
      • pstnFailover
      • callControlAgentProfile
      • useEnterpriseAltNum
      • useE164AltNum
      • active
  • axlUpdateLineGroup

    keywords args
    • required:
      • uuid or name
    • expected:
      • distributionAlgorithm
      • rnaReversionTimeOut
      • huntAlgorithmNoAnswer
      • huntAlgorithmBusy
      • huntAlgorithmNotAvailable
      • removeMembers
      • addMembers
      • members
      • newName
      • autoLogOffHunt
  • axlUpdatePhone

    keywords args
    • required:
      • uuid or name
    • expected:
      • newName
      • description
      • callingSearchSpaceName
      • devicePoolName
      • commonDeviceConfigName
      • commonPhoneConfigName
      • networkLocation
      • locationName
      • mediaResourceListName
      • networkHoldMohAudioSourceId
      • userHoldMohAudioSourceId
      • automatedAlternateRoutingCssName
      • aarNeighborhoodName
      • loadInformation
      • vendorConfig
      • versionStamp
      • traceFlag
      • mlppDomainId
      • mlppIndicationStatus
      • preemption
      • useTrustedRelayPoint
      • retryVideoCallAsAudio
      • securityProfileName
      • sipProfileName
      • cgpnTransformationCssName
      • useDevicePoolCgpnTransformCss
      • geoLocationName
      • geoLocationFilterName
      • sendGeoLocation
      • removeLines
      • addLines
      • lines
        • line - collection of:
          • required:
            • index
            • dirn
              • pattern
              • routePartitionName
          • expected:
            • label
            • display
            • ringSetting
            • consecutiveRingSetting
            • ringSettingIdlePickupAlert
            • ringSettingActivePickupAlert
            • displayAscii
            • e164Mask
            • mwlPolicy
            • maxNumCalls
            • busyTrigger
            • callInfoDisplay
            • recordingProfileName
            • monitoringCssName
            • recordingFlag
            • audibleMwi
            • speedDial
            • partitionUsage
            • associatedEndusers
            • missedCallLogging
            • recordingMediaSource
      • phoneTemplateName
      • speeddials
      • busyLampFields
      • primaryPhoneName
      • ringSettingIdleBlfAudibleAlert
      • ringSettingBusyBlfAudibleAlert
      • blfDirectedCallParks
      • addOnModules
      • userLocale
      • networkLocale
      • idleTimeout
      • authenticationUrl
      • directoryUrl
      • idleUrl
      • informationUrl
      • messagesUrl
      • proxyServerUrl
      • servicesUrl
      • services
      • softkeyTemplateName
      • defaultProfileName
      • enableExtensionMobility
      • singleButtonBarge
      • joinAcrossLines
      • builtInBridgeStatus
      • callInfoPrivacyStatus
      • hlogStatus
      • ownerUserName
      • ignorePresentationIndicators
      • packetCaptureMode
      • packetCaptureDuration
      • subscribeCallingSearchSpaceName
      • rerouteCallingSearchSpaceName
      • allowCtiControlFlag
      • presenceGroupName
      • unattendedPort
      • requireDtmfReception
      • rfc2833Disabled
      • certificateOperation
      • authenticationMode
      • keySize
      • keyOrder
      • ecKeySize
      • authenticationString
      • upgradeFinishTime
      • deviceMobilityMode
      • remoteDevice
      • dndOption
      • dndRingSetting
      • dndStatus
      • isActive
      • mobilityUserIdName
      • phoneSuite
      • phoneServiceDisplay
      • isProtected
      • mtpRequired
      • mtpPreferedCodec
      • dialRulesName
      • sshUserId
      • sshPwd
      • digestUser
      • outboundCallRollover
      • hotlineDevice
      • secureInformationUrl
      • secureDirectoryUrl
      • secureMessageUrl
      • secureServicesUrl
      • secureAuthenticationUrl
      • secureIdleUrl
      • alwaysUsePrimeLine
      • alwaysUsePrimeLineForVoiceMessage
      • featureControlPolicy
      • deviceTrustMode
      • earlyOfferSupportForVoiceCall
      • requireThirdPartyRegistration
      • blockIncomingCallsWhenRoaming
      • homeNetworkId
      • AllowPresentationSharingUsingBfcp
      • confidentialAccess
      • requireOffPremiseLocation
      • allowiXApplicableMedia
      • cgpnIngressDN
      • useDevicePoolCgpnIngressDN
      • msisdn
      • enableCallRoutingToRdWhenNoneIsActive
      • wifiHotspotProfile
      • wirelessLanProfileGroup
      • elinGroup
  • axlUpdateRemoteDestination

    keywords args
    • required:
      • uuid or destination
    • expected:
      • newName
      • newDestination
      • answerTooSoonTimer
      • answerTooLateTimer
      • delayBeforeRingingCell
      • ownerUserId
      • enableUnifiedMobility
      • remoteDestinationProfileName
      • enableExtendAndConnect
      • ctiRemoteDeviceName
      • dualModeDeviceName
      • isMobilePhone
      • enableMobileConnect
      • lineAssociations
      • timeZone
      • todAccessName
      • mobileSmartClientName
      • mobilityProfileName
      • singleNumberReachVoicemail
      • dialViaOfficeReverseVoicemail
      • removeRingSchedule
      • addRingSchedule
      • ringSchedule
      • accessListName
  • axlUpdateRemoteDestinationProfile

    keywords args
    • required:
      • uuid or name
    • expected:
      • newName
      • description
      • callingSearchSpaceName
      • devicePoolName
      • networkHoldMohAudioSourceId
      • userHoldMohAudioSourceId
      • lines
        • line - collection of:
          • required:
            • index
            • dirn
              • pattern
              • routePartitionName
          • expected:
            • label
            • display
            • ringSetting
            • consecutiveRingSetting
            • ringSettingIdlePickupAlert
            • ringSettingActivePickupAlert
            • displayAscii
            • e164Mask
            • mwlPolicy
            • maxNumCalls
            • busyTrigger
            • callInfoDisplay
            • recordingProfileName
            • monitoringCssName
            • recordingFlag
            • audibleMwi
            • speedDial
            • partitionUsage
            • associatedEndusers
            • missedCallLogging
            • recordingMediaSource
      • callInfoPrivacyStatus
      • userId
      • ignorePresentationIndicators
      • rerouteCallingSearchSpaceName
      • cgpnTransformationCssName
      • automatedAlternateRoutingCssName
      • useDevicePoolCgpnTransformCss
      • userLocale
      • networkLocale
      • primaryPhoneName
      • dndOption
      • dndStatus
      • mobileSmartClientProfileName
  • axlUpdateTranslationPattern

    keywords args
    • required:
      • uuid or pattern or (pattern, routePartitionName)
    • expected:
      • dialPlanName
      • routeFilterName
      • newPattern
      • description
      • newRoutePartitionName
      • blockEnable
      • calledPartyTransformationMask
      • callingPartyTransformationMask
      • useCallingPartyPhoneMask
      • callingPartyPrefixDigits
      • newDialPlanName
      • digitDiscardInstructionName
      • patternUrgency
      • prefixDigitsOut
      • newRouteFilterName
      • callingLinePresentationBit
      • callingNamePresentationBit
      • connectedLinePresentationBit
      • connectedNamePresentationBit
      • patternPrecedence
      • provideOutsideDialtone
      • callingPartyNumberingPlan
      • callingPartyNumberType
      • calledPartyNumberingPlan
      • calledPartyNumberType
      • callingSearchSpaceName
      • resourcePriorityNamespaceName
      • routeNextHopByCgpn
      • routeClass
      • callInterceptProfileName
      • releaseClause
      • useOriginatorCss
      • dontWaitForIDTOnSubsequentHops
      • isEmergencyServiceNumber
  • axlUpdateUser

    keywords args
    • required:
      • uuid or userid
    • expected:
      • firstName
      • displayName
      • middleName
      • lastName
      • newUserid
      • password
      • pin
      • mailid
      • department
      • manager
      • userLocale
      • associatedDevices
      • primaryExtension
      • associatedPc
      • associatedGroups
      • enableCti
      • digestCredentials
      • phoneProfiles
      • defaultProfile
      • presenceGroupName
      • subscribeCallingSearchSpaceName
      • enableMobility
      • enableMobileVoiceAccess
      • maxDeskPickupWaitTime
      • remoteDestinationLimit
      • passwordCredentials
      • pinCredentials
      • enableEmcc
      • ctiControlledDeviceProfiles
      • patternPrecedence
      • numericUserId
      • mlppPassword
      • customUserFields
      • homeCluster
      • imAndPresenceEnable
      • serviceProfile
      • lineAppearanceAssociationForPresences
      • directoryUri
      • telephoneNumber
      • title
      • mobileNumber
      • homeNumber
      • pagerNumber
      • removeExtensionsInfo
      • addExtensionsInfo
      • extensionsInfo
      • selfService
      • userProfile
      • calendarPresence
      • ldapDirectoryName
      • userIdentity
      • nameDialing
      • ipccExtension
      • convertUserAccount
      • accountType
      • authenticationType
      • enableUserToHostConferenceNow
      • attendeesAccessCode
      • zeroHop
Code Example:
cucm = ...
print("Result:", cucm.axlUpdatePhone(name="SEP", description="New Description"))
print("Result:", cucm.axlUpdatePhone(**{"uuid": "........-....-....-....-............", "description": "New Description"}))
# Result: {'return': '{........-....-....-....-............}', 'sequence': None}

(back to top)

CCS Methods

CCS - Control Center Services provides an API Methods used to view status, to restart, to start and stop Cisco CallManager services for a particular server.

  • ccsDoControlServices

    keywords args
    • required:
      • control_command - Control Command: Restart, Start or Stop
      • service_names - Service Names Collection
    • optional
      • node_fqdn - Specify a node other than the publisher
  • ccsDoServiceDeployment

    keywords args
    • required:
      • deploy_command - Deploy Command: Deploy or UnDeploy
      • service_names - Service Names Collection
    • optional
      • node_fqdn - Specify a node other than the publisher
  • ccsGetProductInfoList

    keywords args
    • optional
      • node_fqdn - Specify a node other than the publisher
  • ccsGetServiceStatus

    keywords args
    • optional
      • service_name - Specify a specific service name
      • node_fqdn - Specify a node other than the publisher
  • ccsGetStaticServiceList

    keywords args
    • optional
      • node_fqdn - Specify a node other than the publisher
Code Example:
cucm = ...
print("Result:", cucm.ccsDoControlServices(control_command="Restart", service_names=["Cisco License Manager", "Cisco Tftp"]))
# Result: (
#   {'ServiceName': 'Cisco License Manager', 'ServiceStatus': 'Starting', 'ReasonCode': -1, 'ReasonCodeString': ' ', 'StartTime': None, 'UpTime': -1}, 
#   {'ServiceName': 'Cisco Tftp', 'ServiceStatus': 'Started', 'ReasonCode': -1, 'ReasonCodeString': ' ', 'StartTime': 'Tue Mar  5 15:53:19 2024', 'UpTime': 4}
# )

print("Result:", cucm.ccsDoServiceDeployment(deploy_command="Deploy", service_names=["Cisco Tftp"]))
# Result: (
#   {'ServiceName': 'Cisco Tftp', 'ServiceStatus': 'Started', 'ReasonCode': -1, 'ReasonCodeString': ' ', 'StartTime': 'Wed Mar  6 13:37:59 2024', 'UpTime': 17},
# )

print("Result:", cucm.ccsGetServiceStatus())
# Result: (
#   {'ServiceName': 'A Cisco DB', 'ServiceStatus': 'Started', 'ReasonCode': -1, 'ReasonCodeString': ' ', 'StartTime': 'Tue Mar  5 13:01:39 2024', 'UpTime': 10012}, 
#   ...,
#   {'ServiceName': 'Cisco Wireless Controller Synchronization Service', 'ServiceStatus': 'Stopped', 'ReasonCode': -1068, 'ReasonCodeString': 'Service Not Activated ', 'StartTime': None, 'UpTime': -1}
# )

(back to top)

RIS Methods

RIS - Real-time Information Server retrieve information stored in all RIS nodes in the cluster. https://developer.cisco.com/docs/sxml/#!risport70-api

  • risGetCti

    keywords args
    • required:
      • collection_name - values: DevNames or DirNumbers
      • items_collection - Collection of Dictionaries. Depending on the type of collection, dictionaries should contain the key name for DevNames or the key pattern for DirNumbers
      • cti_mgr_class - values: Provider or Device or Line
  • risGetPhone

    keywords args
    • required:
      • phone_name
  • risGetPhones

    keywords args
    • required:
      • devices_collection - Collection of Dictionaries. Dictionaries should contain the key name
Code Example:
cucm = ...
print("Result:", cucm.risGetCti(
    collection_name="DirNumbers",
    items_collection=({"pattern": "..."}, {"pattern": "..."}, ...),
    cti_mgr_class="Line"
))
# Result: {
#     'SelectCtiItemResult': {
#         'TotalItemsFound': 6,
#         'CtiNodes': {...}
#     },
#     'StateInfo': '<StateInfo><Node Name="cucm.example.com" ...'
# } 

print("Result:", cucm.risGetPhone(phone_name="CSF...", is_raw_resp=False))
# Result: {
#     'DeviceName': 'CSF...',
#     'Status': 'Registered',
#     'Model': 503,
#     'Product': 390,
#     'IP': 'xxx.xxx.xxx.xxx',
#     'NodeName': 'cucm.example.com',
#     'ActiveLoadID': '...',
#     'InactiveLoadID': '...'
# }

print("Result:", cucm.risGetPhones(devices_collection=({"name": "TCT..."}, {"name": "CSF..."}, ...), is_raw_resp=False))
# Result = (
#     {
#         'name': 'TCT...',
#         'ris': {
#             'DeviceName': 'TCT...',
#             'Status': 'UnRegistered',
#             'Model': 562,
#             'Product': 449,
#             'IP': 'xxx.xxx.xxx.xxx',
#             'NodeName': 'cucm.example.com',
#             'ActiveLoadID': '...',
#             'InactiveLoadID': '...'
#         }
#     },
#     {
#         'name': 'CSF...',
#         'ris': {
#             'DeviceName': 'CSF...',
#             'Status': 'Registered',
#             'Model': 503,
#             'Product': 390,
#             'IP': 'xxx.xxx.xxx.xxx',
#             'NodeName': 'cucm.example.com',
#             'ActiveLoadID': '...',
#             'InactiveLoadID': '...'
#         }
#     },
#     {
#         'name': 'SEP...',
#         'ris': {'DeviceName': None, 'Status': None, ...}
#     },
#     {
#         'name': 'RDP...',
#         'ris': {'DeviceName': None, 'Status': None, ...}
#     },
#     {
#         'name': 'UDP...',
#         'ris': {'DeviceName': None, 'Status': None, ...}
#     }
# )

(back to top)

SQL Collection

Execute Query

Code Example:
cucm = ...
sql_query = """
    SELECT d.pkid, d.name, d.description
    FROM device d
    WHERE d.name LIKE '%value%'
"""
print("Result:", cucm.sqlExecuteQuery(sql_query=sql_query))
# Result: (
#     {'pkid': '........-....-....-....-............', 'name': 'SEP...', 'description': '...'},
#     {'pkid': '........-....-....-....-............', 'name': 'RDP...', 'description': '...'}, 
#     {'pkid': '........-....-....-....-............', 'name': 'UDP...', 'description': '...'},
#     {'pkid': '........-....-....-....-............', 'name': 'TCT...', 'description': '...'},
#     {'pkid': '........-....-....-....-............', 'name': 'BOT...', 'description': '...'},
#     {'pkid': '........-....-....-....-............', 'name': 'CSF...', 'description': '...'},
#     {'pkid': '........-....-....-....-............', 'name': 'TAB...', 'description': '...'},
#     {'pkid': '........-....-....-....-............', 'name': 'CIPC...', 'description': '...'},
# )

(back to top)

Update Query

Code Example:
cucm = ...
sql_query = """
    UPDATE device d 
    SET d.description = 'New Description via SQL' 
    WHERE d.name LIKE '%value%'
"""
print("Result:", cucm.sqlUpdateQuery(sql_query=sql_query))
# Result: {
#     'return': {
#         'rowsUpdated': 1
#     },
#     'sequence': None
# }

(back to top)

Predefined Queries

  • Get Methods:
    • sqlGetDeviceEndUsersRelations
    • sqlGetDeviceServicesSubscription
    • sqlGetEMSession
    • sqlGetEndUserDefaultDeviceProfile
    • sqlGetEndUserDevicesRelations
    • sqlGetLineForwardDestinations
    • sqlGetLineGroupStatus - Deprecated
    • sqlGetLineGroupMemberStatuses
    • sqlGetRemoteDestination
  • List Methods:
    • sqlListCallingSearchSpace
    • sqlListCredentialPolicy
    • sqlListDevicePool
    • sqlListDirGroup
    • sqlListMediaResourceGroup
    • sqlListMediaResourceList
    • sqlListPhoneTemplate
    • sqlListProcessNode
    • sqlListRecordingProfile
    • sqlListRegion
    • sqlListRoutePartition
    • sqlListSoftkeyTemplate
    • sqlListTelecasterService
    • sqlListTypeClass
    • sqlListTypeCountry
    • sqlListTypeModel
    • sqlListTypeUserLocale
    • sqlListUcServiceProfile
    • sqlListUcUserProfile
  • Search Methods:
    • sqlSearchCallPickupGroups - required keywords args: criterion, value
      • criterion enum: Name, Description, Pattern, Line Number, Line Description
      • value: str | None
    • sqlSearchDevices - required keywords args: criterion, value
      • criterion enum: Name, Description, Line Number, Line Description, User ID, Device Pool, Device Type
      • value: str | None
    • sqlSearchEndUsers - required keywords args: criterion, value
      • criterion enum: User ID, Display Name, Last Name, First Name, Phone Number, Mobile Number, Email, Directory URI
      • value: str | None
    • sqlSearchLineForwards - required keywords args: criterion, value
      • criterion enum: Line Number, Line Description, Forward Destination
      • value: str | None
    • sqlSearchLineGroups - required keywords args: criterion, value
      • criterion enum: Name, Line Number, Line Description
      • value: str | None
    • sqlSearchLineNumbers - required keywords args: criterion, value
      • criterion enum: Line Number, Line Description, Partition, Calling Search Space, Alerting Name, Alerting Name ASCII
      • value: str | None
    • sqlSearchPatterns - required keywords args: criterion, value
      • criterion enum: Pattern, Description, Partition, Calling Search Space, Pattern Usage
      • value: str | None
    • sqlSearchRemoteDestinations - required keywords args: criterion, value
      • criterion enum: Name, Remote Destination
      • value: str | None
    • sqlSearchTranslationPatterns - required keywords args: criterion, value
      • criterion enum: Pattern, Description, Partition, Calling Search Space, Called Party Transform Mask, Prefix Digits Out
      • value: str | None
    • sqlSearchUnassignedNumbers - required keywords args: criterion, value
      • criterion enum: Line Number, Line Description, Partition, Calling Search Space, Alerting Name, Alerting Name ASCII
      • value: str | None
  • Validate Methods:
    • sqlValidateDevice - required keywords kwargs: name or pkid
    • sqlValidateEndUser - required keywords kwargs: userid or pkid
    • sqlValidateLine - required keywords kwargs: dnorpattern or pkid (Type Pattern Usage: Device Only)
    • sqlValidateLineDevices - required keywords kwargs: dnorpattern or pkid (Type Pattern Usage: Device Only)
    • sqlValidatePattern - required keywords kwargs: dnorpattern or pkid (Type Pattern Usage: Any)

(back to top)

Create Your Own Methods

Don't store sensitive information in source code. For example use ".env" file.

Code Example:
from pathlib import Path
from typing import Union
from tinyCUCM import CucmClient, cucm_logging


BASE_DIR = Path(__file__).resolve().parent
settings = {
    "pub_fqdn": "cucm.example.com",
    "pub_version": "11.5",
    "user_login": "Your-CUCM-Account",
    "user_password": "You%wILL#&neVeR!gUEss",
    "toolkit_path": BASE_DIR / "axlsqltoolkit",
    "cert_path": BASE_DIR / "cucm.crt",
    "session_verify": False,
    "session_timeout": 15,
    "ris_wsdl_filename": "wsdlRISService70_test.xml", 
}


class CucmAxlCustom(CucmClient):
        
    @cucm_logging
    def axlYourOwnGetMethod(self, **kwargs: Union[dict, ...]) -> dict:

        """
        AXL Your Own `Get` or Any Other Method.
        :param kwargs:      Required Fields:
                            `kwargs = {"uuid": "uuid"}`
                            or
                            `kwargs = {"name": "name"}`
        :return:
        """

        return self._axl.getCallManager(**kwargs)["return"]

if __name__ == "__main__":
    cucm = CucmAxlCustom(**settings)
    print("Result:", cucm.axlYourOwnGetMethod(**{"uuid": "........-....-....-....-............"}))
    # Result: {
    #     'callManager': {
    #         'name': 'CM_...',
    #         'description': '...',
    #         'autoRegistration': {...},
    #         'ports': {...},
    #         'processNodeName': {...},
    #         'lbmGroup': {...},
    #         'ctiid': ...,
    #         'uuid': '{........-....-....-....-............}'
    #     }
    # }

(back to top)

License

Distributed under the MIT License. See LICENSE for more information.

(back to top)

Contact

Luarvick - lu.luarvick@gmail.com

Project Link: https://github.com/luarvick/tinyCUCM

(back to top)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tinycucm-0.2.960.tar.gz (47.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tinycucm-0.2.960-py3-none-any.whl (34.0 kB view details)

Uploaded Python 3

File details

Details for the file tinycucm-0.2.960.tar.gz.

File metadata

  • Download URL: tinycucm-0.2.960.tar.gz
  • Upload date:
  • Size: 47.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.12

File hashes

Hashes for tinycucm-0.2.960.tar.gz
Algorithm Hash digest
SHA256 733a0613cd36314a1bd6dd4e7d0af7c7ad09e254ec09d321f0e561c3a3c29b08
MD5 338daff8785b71747362ec585dc63ddd
BLAKE2b-256 ce218b65ee9eb2a5b0b22fc8f487a988c30ab8a13187e3e30ec9366631e31af6

See more details on using hashes here.

File details

Details for the file tinycucm-0.2.960-py3-none-any.whl.

File metadata

  • Download URL: tinycucm-0.2.960-py3-none-any.whl
  • Upload date:
  • Size: 34.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.12

File hashes

Hashes for tinycucm-0.2.960-py3-none-any.whl
Algorithm Hash digest
SHA256 5f14be17ff97b89c041cd4a543d4acffa3c38d805af6c8253c38b1f6a2adfb60
MD5 bf75d538b233a43c369db7e1bd060879
BLAKE2b-256 f89786034485f505b4e82c71c3d02caa982be0bbeb77cf9d1cb52f38dcc8fb94

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page