From 5f20478a2964c0a5bf38e3345c59a98264e4e6ce Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 5 Aug 2026 14:54:08 +0000 Subject: [PATCH] Auto-generated library v4.4.0b0 for API v1.73.0-beta.0. --- docs/generation-report.md | 6 ++++ meraki/__init__.py | 2 +- meraki/_version.py | 2 +- meraki/aio/api/administered.py | 39 ++++++++++++++++++++++++ meraki/aio/api/appliance.py | 8 +++-- meraki/aio/api/assistant.py | 18 ++++++++++- meraki/aio/api/nac.py | 53 ++++++++++++++++++++++++++------- meraki/aio/api/networks.py | 12 ++++++-- meraki/aio/api/organizations.py | 37 +++++++++++++++++++++++ meraki/aio/api/secureConnect.py | 4 --- meraki/aio/api/switch.py | 4 +-- meraki/aio/api/wireless.py | 12 ++++++-- meraki/api/administered.py | 39 ++++++++++++++++++++++++ meraki/api/appliance.py | 8 +++-- meraki/api/assistant.py | 18 ++++++++++- meraki/api/batch/appliance.py | 4 +-- meraki/api/batch/nac.py | 47 +++++++++++++++++++++-------- meraki/api/batch/networks.py | 8 +++-- meraki/api/batch/switch.py | 4 +-- meraki/api/batch/wireless.py | 3 +- meraki/api/nac.py | 53 ++++++++++++++++++++++++++------- meraki/api/networks.py | 12 ++++++-- meraki/api/organizations.py | 37 +++++++++++++++++++++++ meraki/api/secureConnect.py | 4 --- meraki/api/switch.py | 4 +-- meraki/api/wireless.py | 12 ++++++-- pyproject.toml | 2 +- uv.lock | 2 +- 28 files changed, 376 insertions(+), 78 deletions(-) diff --git a/docs/generation-report.md b/docs/generation-report.md index 247853bd..bb4f3d41 100644 --- a/docs/generation-report.md +++ b/docs/generation-report.md @@ -1,5 +1,11 @@ # Generation Report +## 2026-08-05 | Library v4.4.0b0 | API 1.73.0-beta.0 + + +No Python keyword parameter conflicts detected. + + ## 2026-07-29 | Library v4.3.0b4 | API 1.72.0-beta.4 diff --git a/meraki/__init__.py b/meraki/__init__.py index 8e2f3b49..10c9eed5 100644 --- a/meraki/__init__.py +++ b/meraki/__init__.py @@ -52,7 +52,7 @@ from meraki.exceptions import APIError, APIKeyError, APIResponseError, AsyncAPIError from meraki.rest_session import RestSession -__api_version__ = "1.72.0-beta.4" +__api_version__ = "1.73.0-beta.0" __all__ = [ "APIError", diff --git a/meraki/_version.py b/meraki/_version.py index 10d2475c..e0dd069d 100644 --- a/meraki/_version.py +++ b/meraki/_version.py @@ -1 +1 @@ -__version__ = "4.3.0b4" +__version__ = "4.4.0b0" diff --git a/meraki/aio/api/administered.py b/meraki/aio/api/administered.py index 05b1663a..52364b5f 100644 --- a/meraki/aio/api/administered.py +++ b/meraki/aio/api/administered.py @@ -68,6 +68,45 @@ def revokeAdministeredIdentitiesMeApiKeys(self, suffix: str): return self._session.post(metadata, resource) + def resolveAdministeredOrganizationsPermissions(self, organizationIds: list, total_pages=1, direction="next", **kwargs): + """ + **Resolve the authenticated caller admin's permissions across multiple organizations** + https://developer.cisco.com/meraki/api-v1/#!resolve-administered-organizations-permissions + + - organizationIds (array): Organization IDs to resolve. Maximum 300 values. + - total_pages (integer or string): use with perPage to get total results up to total_pages*perPage; -1 or "all" for all pages + - direction (string): direction to paginate, either "next" (default) or "prev" page + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 300. Default is 100. + - startingAfter (string): A token used by the server to indicate the start of the page. Often this is a timestamp or an ID but it is not limited to those. This parameter should not be defined by client applications. The link for the first, last, prev, or next page in the HTTP Link header should define it. + - endingBefore (string): A token used by the server to indicate the end of the page. Often this is a timestamp or an ID but it is not limited to those. This parameter should not be defined by client applications. The link for the first, last, prev, or next page in the HTTP Link header should define it. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["administered", "configure", "permissions"], + "operation": "resolveAdministeredOrganizationsPermissions", + } + resource = "/administered/organizations/permissions/resolve" + + body_params = [ + "perPage", + "startingAfter", + "endingBefore", + "organizationIds", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + + if self._session._validate_kwargs: + all_params = [] + body_params + invalid = [k for k in kwargs if k.strip() not in all_params and k != "self"] + if invalid and self._session._logger: + self._session._logger.warning( + f"resolveAdministeredOrganizationsPermissions: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + def getAdministeredSearchLive(self, query: str, organizationId: str, networkId: str, **kwargs): """ **List the appropriate results for a given global search utilizing live_search_react** diff --git a/meraki/aio/api/appliance.py b/meraki/aio/api/appliance.py index 730ab3f6..72ddb92f 100644 --- a/meraki/aio/api/appliance.py +++ b/meraki/aio/api/appliance.py @@ -2139,6 +2139,7 @@ def createNetworkApplianceStaticRoute(self, networkId: str, name: str, subnet: s - subnet (string): Subnet of the route - gatewayIp (string): Gateway IP address (next hop) - gatewayVlanId (integer): Gateway VLAN ID + - enabled (boolean): Enable/disable the static route - vrf (object): VRF settings for the static route. """ @@ -2156,6 +2157,7 @@ def createNetworkApplianceStaticRoute(self, networkId: str, name: str, subnet: s "subnet", "gatewayIp", "gatewayVlanId", + "enabled", "vrf", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -3266,7 +3268,7 @@ def updateNetworkApplianceVpnBgp(self, networkId: str, enabled: bool, **kwargs): - ibgpHoldTimer (integer): The iBGP holdtimer in seconds. The iBGP holdtimer must be an integer between 12 and 240. When absent, this field is not updated. If no value exists then it defaults to 240. - ipv6 (object): Settings for IPv6 configurations on the organization. - tunnelDownTermination (object): Settings for tunnel down termination on the organization. - - vpnAsNumber (integer): Network specific number of the Autonomous System to which the appliance belongs. This field is only configurable for Independent BGP networks. + - localAsNumber (integer): Network-specific local Autonomous System Number (ASN) to which the appliance belongs. This field is only configurable for Independent BGP networks. - priorityRoute (string): Sets the priority route between eBGP and Auto VPN. - routerId (string): The router ID of the appliance - neighbors (array): List of BGP neighbors. This list replaces the existing set of neighbors. When absent, this field is not updated. @@ -3293,7 +3295,7 @@ def updateNetworkApplianceVpnBgp(self, networkId: str, enabled: bool, **kwargs): "ibgpHoldTimer", "ipv6", "tunnelDownTermination", - "vpnAsNumber", + "localAsNumber", "priorityRoute", "routerId", "neighbors", @@ -6215,7 +6217,7 @@ def updateOrganizationApplianceVpnSiteToSiteIpsecPeersSlas(self, organizationId: def getOrganizationApplianceVpnStats(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ - **Show VPN history stat for networks in an organization** + **Show VPN history stats for networks in an organization** https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-vpn-stats - organizationId (string): Organization ID diff --git a/meraki/aio/api/assistant.py b/meraki/aio/api/assistant.py index ab6c50d0..6c717590 100644 --- a/meraki/aio/api/assistant.py +++ b/meraki/aio/api/assistant.py @@ -249,9 +249,16 @@ def createAdministeredAssistantChatThreadMessage(self, threadId: str, content: l - threadId (string): Thread ID - content (array): List of message content parts. Supports text, image, audio, and file types. Maximum 8 parts. + - platform (string): Platform identifier. Defaults to MERAKI when omitted. Case-insensitive. """ - kwargs = locals() + kwargs.update(locals()) + + if "platform" in kwargs: + options = ["DIGITAL_TWIN", "DNAC", "MERAKI", "digital_twin", "dnac", "meraki"] + assert kwargs["platform"] in options, ( + f'''"platform" cannot be "{kwargs["platform"]}", & must be set to one of: {options}''' + ) metadata = { "tags": ["assistant", "configure", "chat", "threads", "messages"], @@ -262,6 +269,7 @@ def createAdministeredAssistantChatThreadMessage(self, threadId: str, content: l body_params = [ "content", + "platform", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -575,10 +583,17 @@ def createOrganizationAssistantChatThreadMessage(self, organizationId: str, thre - content (array): List of message content parts. Supports text, image, audio, and file types. Maximum 8 parts. - networkName (string): Name of the target network. - networkId (string): Optional Meraki network ID for thread context. + - platform (string): Platform identifier. Defaults to MERAKI when omitted. Case-insensitive. """ kwargs.update(locals()) + if "platform" in kwargs: + options = ["DIGITAL_TWIN", "DNAC", "MERAKI", "digital_twin", "dnac", "meraki"] + assert kwargs["platform"] in options, ( + f'''"platform" cannot be "{kwargs["platform"]}", & must be set to one of: {options}''' + ) + metadata = { "tags": ["assistant", "configure", "chat", "threads", "messages"], "operation": "createOrganizationAssistantChatThreadMessage", @@ -591,6 +606,7 @@ def createOrganizationAssistantChatThreadMessage(self, organizationId: str, thre "content", "networkName", "networkId", + "platform", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} diff --git a/meraki/aio/api/nac.py b/meraki/aio/api/nac.py index fdaef7ce..319f92b0 100644 --- a/meraki/aio/api/nac.py +++ b/meraki/aio/api/nac.py @@ -275,20 +275,18 @@ def getOrganizationNacCertificatesAuthoritiesCrls(self, organizationId: str, tot return self._session.get_pages(metadata, resource, params, total_pages, direction) - def createOrganizationNacCertificatesAuthoritiesCrl( - self, organizationId: str, caId: str, content: str, isDelta: bool, **kwargs - ): + def createOrganizationNacCertificatesAuthoritiesCrl(self, organizationId: str, **kwargs): """ - **Create a new CRL (either base or delta) for an existing CA** + **Upload a CRL through Certificate Validation** https://developer.cisco.com/meraki/api-v1/#!create-organization-nac-certificates-authorities-crl - organizationId (string): Organization ID - - caId (string): ID of the CRL issuer - - content (string): CRL content in PEM format - - isDelta (boolean): Whether it's a delta CRL or not + - trustedCertificateId (string): ID of the CRL issuer + - crlBody (string): CRL content in PEM format or base64-encoded DER. Required when the access-manager-crl-ui flag is enabled. + - fileName (string): Original filename supplied by the browser """ - kwargs = locals() + kwargs.update(locals()) metadata = { "tags": ["nac", "configure", "certificates", "authorities", "crls"], @@ -298,9 +296,9 @@ def createOrganizationNacCertificatesAuthoritiesCrl( resource = f"/organizations/{organizationId}/nac/certificates/authorities/crls" body_params = [ - "caId", - "content", - "isDelta", + "trustedCertificateId", + "crlBody", + "fileName", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -380,6 +378,39 @@ def getOrganizationNacCertificatesAuthoritiesCrlsDescriptors( return self._session.get_pages(metadata, resource, params, total_pages, direction) + def retrieveOrganizationNacCertificatesAuthoritiesCrls(self, organizationId: str, trustedCertificateId: str, **kwargs): + """ + **Retrieve a CRL for an existing CA through Certificate Validation** + https://developer.cisco.com/meraki/api-v1/#!retrieve-organization-nac-certificates-authorities-crls + + - organizationId (string): Organization ID + - trustedCertificateId (string): ID of the CRL issuer + """ + + kwargs = locals() + + metadata = { + "tags": ["nac", "configure", "certificates", "authorities", "crls"], + "operation": "retrieveOrganizationNacCertificatesAuthoritiesCrls", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/nac/certificates/authorities/crls/retrieve" + + body_params = [ + "trustedCertificateId", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + + if self._session._validate_kwargs: + all_params = [] + body_params + invalid = [k for k in kwargs if k.strip() not in all_params and k != "self"] + if invalid and self._session._logger: + self._session._logger.warning( + f"retrieveOrganizationNacCertificatesAuthoritiesCrls: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + def deleteOrganizationNacCertificatesAuthoritiesCrl(self, organizationId: str, crlId: str): """ **Deletes a whole CRL, including all its deltas (in case of base CRL removal)** diff --git a/meraki/aio/api/networks.py b/meraki/aio/api/networks.py index 3fe95850..e9102e10 100644 --- a/meraki/aio/api/networks.py +++ b/meraki/aio/api/networks.py @@ -1068,6 +1068,7 @@ def updateNetworkFirmwareUpgrades(self, networkId: str, **kwargs): - upgradeWindow (object): Upgrade window for devices in network - timezone (string): The timezone for the network - products (object): Contains information about the network to update + - featureLossAcknowledgements (array): Acknowledges the target version has removed certain features that the network is currently using. """ kwargs.update(locals()) @@ -1083,6 +1084,7 @@ def updateNetworkFirmwareUpgrades(self, networkId: str, **kwargs): "upgradeWindow", "timezone", "products", + "featureLossAcknowledgements", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -2785,7 +2787,7 @@ def updateNetworkSettings(self, networkId: str, **kwargs): https://developer.cisco.com/meraki/api-v1/#!update-network-settings - networkId (string): Network ID - - localStatusPageEnabled (boolean): Enables / disables the local device status pages (my.meraki.com, ap.meraki.com, switch.meraki.com, wired.meraki.com). Optional (defaults to false) + - localStatusPageEnabled (boolean): Enables / disables the local device status pages (my.meraki.com, ap.meraki.com, switch.meraki.com, wired.meraki.com). Optional (defaults to true) - remoteStatusPageEnabled (boolean): Enables / disables access to the device status page (http://[device's LAN IP]). Optional. Can only be set if localStatusPageEnabled is set to true - localStatusPage (object): A hash of Local Status page(s)' authentication options applied to the Network. - securePort (object): A hash of SecureConnect options applied to the Network. @@ -3322,9 +3324,10 @@ def createNetworkVlanProfile(self, networkId: str, name: str, vlanNames: list, v - vlanNames (array): An array of named VLANs - vlanGroups (array): An array of VLAN groups - iname (string): IName of the profile + - allowedVlans (string): The VLANs allowed on the VLAN profile. Only applicable to trunk ports. The given range must be inclusive of all named VLANs. """ - kwargs = locals() + kwargs.update(locals()) metadata = { "tags": ["networks", "configure", "vlanProfiles"], @@ -3335,6 +3338,7 @@ def createNetworkVlanProfile(self, networkId: str, name: str, vlanNames: list, v body_params = [ "name", + "allowedVlans", "vlanNames", "vlanGroups", "iname", @@ -3470,9 +3474,10 @@ def updateNetworkVlanProfile(self, networkId: str, iname: str, name: str, vlanNa - name (string): Name of the profile, string length must be from 1 to 255 characters - vlanNames (array): An array of named VLANs - vlanGroups (array): An array of VLAN groups + - allowedVlans (string): The VLANs allowed on the VLAN profile. Only applicable to trunk ports. The given range must be inclusive of all named VLANs. """ - kwargs = locals() + kwargs.update(locals()) metadata = { "tags": ["networks", "configure", "vlanProfiles"], @@ -3484,6 +3489,7 @@ def updateNetworkVlanProfile(self, networkId: str, iname: str, name: str, vlanNa body_params = [ "name", + "allowedVlans", "vlanNames", "vlanGroups", ] diff --git a/meraki/aio/api/organizations.py b/meraki/aio/api/organizations.py index eb1fb229..3a4e356b 100644 --- a/meraki/aio/api/organizations.py +++ b/meraki/aio/api/organizations.py @@ -3289,6 +3289,43 @@ def getOrganizationAssuranceThousandEyesApplications(self, organizationId: str, return self._session.get(metadata, resource, params) + def getOrganizationAssuranceWiredExperienceMostImpactedXMs(self, organizationId: str, **kwargs): + """ + **Returns the most impacted wired experience metrics, including client counts, top failure contributor, and most impacted networks for each metric.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wired-experience-most-impacted-x-ms + + - organizationId (string): Organization ID + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "wired", "experience", "mostImpactedXMs"], + "operation": "getOrganizationAssuranceWiredExperienceMostImpactedXMs", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wired/experience/mostImpactedXMs" + + query_params = [ + "t0", + "t1", + "timespan", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_params + invalid = [k for k in kwargs if k.strip() not in all_params and k != "self"] + if invalid and self._session._logger: + self._session._logger.warning( + f"getOrganizationAssuranceWiredExperienceMostImpactedXMs: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + def getOrganizationAssuranceWiredExperienceSuccessfulConnectionsByNetwork( self, organizationId: str, total_pages=1, direction="next", **kwargs ): diff --git a/meraki/aio/api/secureConnect.py b/meraki/aio/api/secureConnect.py index 47003170..5d22495a 100644 --- a/meraki/aio/api/secureConnect.py +++ b/meraki/aio/api/secureConnect.py @@ -895,8 +895,6 @@ def createOrganizationSecureConnectRemoteAccessLogsExport(self, organizationId: - organizationId (string): Organization ID - t0 (string): The start of the interval, must be within the past 30 days. Must be provided with t1. - t1 (string): The end of the interval, must not exceed the current date. Must be provided with t0. - - from (integer): Legacy start of the interval in epoch seconds, must be within the past 30 days. Must be provided with to. - - to (integer): Legacy end of the interval in epoch seconds, must not exceed the current date. Must be provided with from. """ kwargs.update(locals()) @@ -911,8 +909,6 @@ def createOrganizationSecureConnectRemoteAccessLogsExport(self, organizationId: body_params = [ "t0", "t1", - "from", - "to", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} diff --git a/meraki/aio/api/switch.py b/meraki/aio/api/switch.py index 0c0166e2..01a1fce6 100644 --- a/meraki/aio/api/switch.py +++ b/meraki/aio/api/switch.py @@ -230,7 +230,7 @@ def updateDeviceSwitchPort(self, serial: str, portId: str, **kwargs): - daiTrusted (boolean): If true, ARP packets for this port will be considered trusted, and Dynamic ARP Inspection will allow the traffic. - profile (object): Profile attributes - dot3az (object): dot3az settings for the port - - highSpeed (object): High speed port enablement settings for C9500-32QC + - highSpeed (object): High speed port enablement settings for a high-speed logical port. """ kwargs.update(locals()) @@ -3543,7 +3543,7 @@ def updateOrganizationConfigTemplateSwitchProfilePort( - daiTrusted (boolean): If true, ARP packets for this port will be considered trusted, and Dynamic ARP Inspection will allow the traffic. - profile (object): Profile attributes - dot3az (object): dot3az settings for the port - - highSpeed (object): High speed port enablement settings for C9500-32QC + - highSpeed (object): High speed port enablement settings for a high-speed logical port. """ kwargs.update(locals()) diff --git a/meraki/aio/api/wireless.py b/meraki/aio/api/wireless.py index 108167eb..daa98220 100644 --- a/meraki/aio/api/wireless.py +++ b/meraki/aio/api/wireless.py @@ -2707,7 +2707,7 @@ def updateNetworkWirelessSsid(self, networkId: str, number: str, **kwargs): - wpaEncryptionMode (string): The types of WPA encryption. ('WPA1 only', 'WPA1 and WPA2', 'WPA2 only', 'WPA3 Transition Mode', 'WPA3 only' or 'WPA3 192-bit Security') - dot11w (object): The current setting for Protected Management Frames (802.11w). - dot11r (object): The current setting for 802.11r - - splashPage (string): The type of splash page for the SSID ('None', 'Click-through splash page', 'Billing', 'Password-protected with Meraki RADIUS', 'Password-protected with custom RADIUS', 'Password-protected with Active Directory', 'Password-protected with LDAP', 'SMS authentication', 'Systems Manager Sentry', 'Facebook Wi-Fi', 'Google OAuth', 'Microsoft Entra ID', 'Sponsored guest', 'Cisco ISE' or 'Google Apps domain').This attribute is not supported for template children. + - splashPage (string): The type of splash page for the SSID ('None', 'Click-through splash page', 'Billing', 'Password-protected with Meraki RADIUS', 'Password-protected with custom RADIUS', 'Password-protected with Active Directory', 'Password-protected with LDAP', 'SMS authentication', 'Systems Manager Sentry', 'Facebook Wi-Fi', 'Google OAuth', 'Microsoft Entra ID', 'Sponsored guest' or 'Cisco ISE').This attribute is not supported for template children. - splashGuestSponsorDomains (array): Array of valid sponsor email domains for sponsored guest splash type. - oauth (object): The OAuth settings of this SSID. Only valid if splashPage is 'Google OAuth'. - localRadius (object): The current setting for Local Authentication, a built-in RADIUS server on the access point. Only valid if authMode is '8021x-localradius'. @@ -2810,7 +2810,6 @@ def updateNetworkWirelessSsid(self, networkId: str, number: str, **kwargs): "Cisco ISE", "Click-through splash page", "Facebook Wi-Fi", - "Google Apps domain", "Google OAuth", "Microsoft Entra ID", "None", @@ -5360,7 +5359,7 @@ def getOrganizationAssuranceWirelessExperienceCoverageInsightsByNetwork( kwargs.update(locals()) if "contributor" in kwargs: - options = ["Admin power restriction", "Insufficient AP density", "Sticky client", "Transient weak signal"] + options = ["Admin power restriction", "Insufficient AP density", "Sticky client", "Weak signal"] assert kwargs["contributor"] in options, ( f'''"contributor" cannot be "{kwargs["contributor"]}", & must be set to one of: {options}''' ) @@ -6234,6 +6233,7 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsInsightsByNetwor - serials (array): Filter results by device serial. - ssidNumbers (array): Filter results by SSID number. - bands (array): Filter results by band. + - insights (string): Source used to compute insights. Defaults to dashboard. - contributor (string): Contributor for which to retrieve insights. If not specified, returns overall insights. - subContributor (string): Sub-contributor for which to retrieve insights. If not specified, returns all sub contributor insights. - variant (string): Wireless State Machine variant to use. @@ -6247,6 +6247,11 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsInsightsByNetwor kwargs.update(locals()) + if "insights" in kwargs: + options = ["dashboard", "rca"] + assert kwargs["insights"] in options, ( + f'''"insights" cannot be "{kwargs["insights"]}", & must be set to one of: {options}''' + ) if "contributor" in kwargs: options = ["assoc", "auth", "dhcp", "dns"] assert kwargs["contributor"] in options, ( @@ -6270,6 +6275,7 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsInsightsByNetwor "serials", "ssidNumbers", "bands", + "insights", "contributor", "subContributor", "variant", diff --git a/meraki/api/administered.py b/meraki/api/administered.py index 07e6bf60..f43a0fe0 100644 --- a/meraki/api/administered.py +++ b/meraki/api/administered.py @@ -68,6 +68,45 @@ def revokeAdministeredIdentitiesMeApiKeys(self, suffix: str): return self._session.post(metadata, resource) + def resolveAdministeredOrganizationsPermissions(self, organizationIds: list, total_pages=1, direction="next", **kwargs): + """ + **Resolve the authenticated caller admin's permissions across multiple organizations** + https://developer.cisco.com/meraki/api-v1/#!resolve-administered-organizations-permissions + + - organizationIds (array): Organization IDs to resolve. Maximum 300 values. + - total_pages (integer or string): use with perPage to get total results up to total_pages*perPage; -1 or "all" for all pages + - direction (string): direction to paginate, either "next" (default) or "prev" page + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 300. Default is 100. + - startingAfter (string): A token used by the server to indicate the start of the page. Often this is a timestamp or an ID but it is not limited to those. This parameter should not be defined by client applications. The link for the first, last, prev, or next page in the HTTP Link header should define it. + - endingBefore (string): A token used by the server to indicate the end of the page. Often this is a timestamp or an ID but it is not limited to those. This parameter should not be defined by client applications. The link for the first, last, prev, or next page in the HTTP Link header should define it. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["administered", "configure", "permissions"], + "operation": "resolveAdministeredOrganizationsPermissions", + } + resource = "/administered/organizations/permissions/resolve" + + body_params = [ + "perPage", + "startingAfter", + "endingBefore", + "organizationIds", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + + if self._session._validate_kwargs: + all_params = [] + body_params + invalid = [k for k in kwargs if k.strip() not in all_params and k != "self"] + if invalid and self._session._logger: + self._session._logger.warning( + f"resolveAdministeredOrganizationsPermissions: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + def getAdministeredSearchLive(self, query: str, organizationId: str, networkId: str, **kwargs): """ **List the appropriate results for a given global search utilizing live_search_react** diff --git a/meraki/api/appliance.py b/meraki/api/appliance.py index c3153dfc..6172dc47 100644 --- a/meraki/api/appliance.py +++ b/meraki/api/appliance.py @@ -2139,6 +2139,7 @@ def createNetworkApplianceStaticRoute(self, networkId: str, name: str, subnet: s - subnet (string): Subnet of the route - gatewayIp (string): Gateway IP address (next hop) - gatewayVlanId (integer): Gateway VLAN ID + - enabled (boolean): Enable/disable the static route - vrf (object): VRF settings for the static route. """ @@ -2156,6 +2157,7 @@ def createNetworkApplianceStaticRoute(self, networkId: str, name: str, subnet: s "subnet", "gatewayIp", "gatewayVlanId", + "enabled", "vrf", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -3266,7 +3268,7 @@ def updateNetworkApplianceVpnBgp(self, networkId: str, enabled: bool, **kwargs): - ibgpHoldTimer (integer): The iBGP holdtimer in seconds. The iBGP holdtimer must be an integer between 12 and 240. When absent, this field is not updated. If no value exists then it defaults to 240. - ipv6 (object): Settings for IPv6 configurations on the organization. - tunnelDownTermination (object): Settings for tunnel down termination on the organization. - - vpnAsNumber (integer): Network specific number of the Autonomous System to which the appliance belongs. This field is only configurable for Independent BGP networks. + - localAsNumber (integer): Network-specific local Autonomous System Number (ASN) to which the appliance belongs. This field is only configurable for Independent BGP networks. - priorityRoute (string): Sets the priority route between eBGP and Auto VPN. - routerId (string): The router ID of the appliance - neighbors (array): List of BGP neighbors. This list replaces the existing set of neighbors. When absent, this field is not updated. @@ -3293,7 +3295,7 @@ def updateNetworkApplianceVpnBgp(self, networkId: str, enabled: bool, **kwargs): "ibgpHoldTimer", "ipv6", "tunnelDownTermination", - "vpnAsNumber", + "localAsNumber", "priorityRoute", "routerId", "neighbors", @@ -6215,7 +6217,7 @@ def updateOrganizationApplianceVpnSiteToSiteIpsecPeersSlas(self, organizationId: def getOrganizationApplianceVpnStats(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ - **Show VPN history stat for networks in an organization** + **Show VPN history stats for networks in an organization** https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-vpn-stats - organizationId (string): Organization ID diff --git a/meraki/api/assistant.py b/meraki/api/assistant.py index 8e36c69c..38d88f27 100644 --- a/meraki/api/assistant.py +++ b/meraki/api/assistant.py @@ -249,9 +249,16 @@ def createAdministeredAssistantChatThreadMessage(self, threadId: str, content: l - threadId (string): Thread ID - content (array): List of message content parts. Supports text, image, audio, and file types. Maximum 8 parts. + - platform (string): Platform identifier. Defaults to MERAKI when omitted. Case-insensitive. """ - kwargs = locals() + kwargs.update(locals()) + + if "platform" in kwargs: + options = ["DIGITAL_TWIN", "DNAC", "MERAKI", "digital_twin", "dnac", "meraki"] + assert kwargs["platform"] in options, ( + f'''"platform" cannot be "{kwargs["platform"]}", & must be set to one of: {options}''' + ) metadata = { "tags": ["assistant", "configure", "chat", "threads", "messages"], @@ -262,6 +269,7 @@ def createAdministeredAssistantChatThreadMessage(self, threadId: str, content: l body_params = [ "content", + "platform", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -575,10 +583,17 @@ def createOrganizationAssistantChatThreadMessage(self, organizationId: str, thre - content (array): List of message content parts. Supports text, image, audio, and file types. Maximum 8 parts. - networkName (string): Name of the target network. - networkId (string): Optional Meraki network ID for thread context. + - platform (string): Platform identifier. Defaults to MERAKI when omitted. Case-insensitive. """ kwargs.update(locals()) + if "platform" in kwargs: + options = ["DIGITAL_TWIN", "DNAC", "MERAKI", "digital_twin", "dnac", "meraki"] + assert kwargs["platform"] in options, ( + f'''"platform" cannot be "{kwargs["platform"]}", & must be set to one of: {options}''' + ) + metadata = { "tags": ["assistant", "configure", "chat", "threads", "messages"], "operation": "createOrganizationAssistantChatThreadMessage", @@ -591,6 +606,7 @@ def createOrganizationAssistantChatThreadMessage(self, organizationId: str, thre "content", "networkName", "networkId", + "platform", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} diff --git a/meraki/api/batch/appliance.py b/meraki/api/batch/appliance.py index e07b5b71..377645e6 100644 --- a/meraki/api/batch/appliance.py +++ b/meraki/api/batch/appliance.py @@ -1478,7 +1478,7 @@ def updateNetworkApplianceVpnBgp(self, networkId: str, enabled: bool, **kwargs): - ibgpHoldTimer (integer): The iBGP holdtimer in seconds. The iBGP holdtimer must be an integer between 12 and 240. When absent, this field is not updated. If no value exists then it defaults to 240. - ipv6 (object): Settings for IPv6 configurations on the organization. - tunnelDownTermination (object): Settings for tunnel down termination on the organization. - - vpnAsNumber (integer): Network specific number of the Autonomous System to which the appliance belongs. This field is only configurable for Independent BGP networks. + - localAsNumber (integer): Network-specific local Autonomous System Number (ASN) to which the appliance belongs. This field is only configurable for Independent BGP networks. - priorityRoute (string): Sets the priority route between eBGP and Auto VPN. - routerId (string): The router ID of the appliance - neighbors (array): List of BGP neighbors. This list replaces the existing set of neighbors. When absent, this field is not updated. @@ -1501,7 +1501,7 @@ def updateNetworkApplianceVpnBgp(self, networkId: str, enabled: bool, **kwargs): "ibgpHoldTimer", "ipv6", "tunnelDownTermination", - "vpnAsNumber", + "localAsNumber", "priorityRoute", "routerId", "neighbors", diff --git a/meraki/api/batch/nac.py b/meraki/api/batch/nac.py index f186e8b1..7c69cc57 100644 --- a/meraki/api/batch/nac.py +++ b/meraki/api/batch/nac.py @@ -5,33 +5,56 @@ class ActionBatchNac: def __init__(self): super().__init__() - def createOrganizationNacCertificatesAuthoritiesCrl( - self, organizationId: str, caId: str, content: str, isDelta: bool, **kwargs - ): + def createOrganizationNacCertificatesAuthoritiesCrl(self, organizationId: str, **kwargs): """ - **Create a new CRL (either base or delta) for an existing CA** + **Upload a CRL through Certificate Validation** https://developer.cisco.com/meraki/api-v1/#!create-organization-nac-certificates-authorities-crl - organizationId (string): Organization ID - - caId (string): ID of the CRL issuer - - content (string): CRL content in PEM format - - isDelta (boolean): Whether it's a delta CRL or not + - trustedCertificateId (string): ID of the CRL issuer + - crlBody (string): CRL content in PEM format or base64-encoded DER. Required when the access-manager-crl-ui flag is enabled. + - fileName (string): Original filename supplied by the browser """ - kwargs = locals() + kwargs.update(locals()) organizationId = urllib.parse.quote(organizationId, safe="") resource = f"/organizations/{organizationId}/nac/certificates/authorities/crls" body_params = [ - "caId", - "content", - "isDelta", + "trustedCertificateId", + "crlBody", + "fileName", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} action = { "resource": resource, - "operation": "create", + "operation": "action", + "body": payload, + } + return action + + def retrieveOrganizationNacCertificatesAuthoritiesCrls(self, organizationId: str, trustedCertificateId: str, **kwargs): + """ + **Retrieve a CRL for an existing CA through Certificate Validation** + https://developer.cisco.com/meraki/api-v1/#!retrieve-organization-nac-certificates-authorities-crls + + - organizationId (string): Organization ID + - trustedCertificateId (string): ID of the CRL issuer + """ + + kwargs = locals() + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/nac/certificates/authorities/crls/retrieve" + + body_params = [ + "trustedCertificateId", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "action", "body": payload, } return action diff --git a/meraki/api/batch/networks.py b/meraki/api/batch/networks.py index 9bf59835..61cf5419 100644 --- a/meraki/api/batch/networks.py +++ b/meraki/api/batch/networks.py @@ -237,6 +237,7 @@ def updateNetworkFirmwareUpgrades(self, networkId: str, **kwargs): - upgradeWindow (object): Upgrade window for devices in network - timezone (string): The timezone for the network - products (object): Contains information about the network to update + - featureLossAcknowledgements (array): Acknowledges the target version has removed certain features that the network is currently using. """ kwargs.update(locals()) @@ -248,6 +249,7 @@ def updateNetworkFirmwareUpgrades(self, networkId: str, **kwargs): "upgradeWindow", "timezone", "products", + "featureLossAcknowledgements", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} action = { @@ -912,7 +914,7 @@ def updateNetworkSettings(self, networkId: str, **kwargs): https://developer.cisco.com/meraki/api-v1/#!update-network-settings - networkId (string): Network ID - - localStatusPageEnabled (boolean): Enables / disables the local device status pages (my.meraki.com, ap.meraki.com, switch.meraki.com, wired.meraki.com). Optional (defaults to false) + - localStatusPageEnabled (boolean): Enables / disables the local device status pages (my.meraki.com, ap.meraki.com, switch.meraki.com, wired.meraki.com). Optional (defaults to true) - remoteStatusPageEnabled (boolean): Enables / disables access to the device status page (http://[device's LAN IP]). Optional. Can only be set if localStatusPageEnabled is set to true - localStatusPage (object): A hash of Local Status page(s)' authentication options applied to the Network. - securePort (object): A hash of SecureConnect options applied to the Network. @@ -1103,15 +1105,17 @@ def createNetworkVlanProfile(self, networkId: str, name: str, vlanNames: list, v - vlanNames (array): An array of named VLANs - vlanGroups (array): An array of VLAN groups - iname (string): IName of the profile + - allowedVlans (string): The VLANs allowed on the VLAN profile. Only applicable to trunk ports. The given range must be inclusive of all named VLANs. """ - kwargs = locals() + kwargs.update(locals()) networkId = urllib.parse.quote(networkId, safe="") resource = f"/networks/{networkId}/vlanProfiles" body_params = [ "name", + "allowedVlans", "vlanNames", "vlanGroups", "iname", diff --git a/meraki/api/batch/switch.py b/meraki/api/batch/switch.py index d972caa3..b965c5ca 100644 --- a/meraki/api/batch/switch.py +++ b/meraki/api/batch/switch.py @@ -101,7 +101,7 @@ def updateDeviceSwitchPort(self, serial: str, portId: str, **kwargs): - daiTrusted (boolean): If true, ARP packets for this port will be considered trusted, and Dynamic ARP Inspection will allow the traffic. - profile (object): Profile attributes - dot3az (object): dot3az settings for the port - - highSpeed (object): High speed port enablement settings for C9500-32QC + - highSpeed (object): High speed port enablement settings for a high-speed logical port. """ kwargs.update(locals()) @@ -1969,7 +1969,7 @@ def updateOrganizationConfigTemplateSwitchProfilePort( - daiTrusted (boolean): If true, ARP packets for this port will be considered trusted, and Dynamic ARP Inspection will allow the traffic. - profile (object): Profile attributes - dot3az (object): dot3az settings for the port - - highSpeed (object): High speed port enablement settings for C9500-32QC + - highSpeed (object): High speed port enablement settings for a high-speed logical port. """ kwargs.update(locals()) diff --git a/meraki/api/batch/wireless.py b/meraki/api/batch/wireless.py index d787ca57..f3abc0a6 100644 --- a/meraki/api/batch/wireless.py +++ b/meraki/api/batch/wireless.py @@ -884,7 +884,7 @@ def updateNetworkWirelessSsid(self, networkId: str, number: str, **kwargs): - wpaEncryptionMode (string): The types of WPA encryption. ('WPA1 only', 'WPA1 and WPA2', 'WPA2 only', 'WPA3 Transition Mode', 'WPA3 only' or 'WPA3 192-bit Security') - dot11w (object): The current setting for Protected Management Frames (802.11w). - dot11r (object): The current setting for 802.11r - - splashPage (string): The type of splash page for the SSID ('None', 'Click-through splash page', 'Billing', 'Password-protected with Meraki RADIUS', 'Password-protected with custom RADIUS', 'Password-protected with Active Directory', 'Password-protected with LDAP', 'SMS authentication', 'Systems Manager Sentry', 'Facebook Wi-Fi', 'Google OAuth', 'Microsoft Entra ID', 'Sponsored guest', 'Cisco ISE' or 'Google Apps domain').This attribute is not supported for template children. + - splashPage (string): The type of splash page for the SSID ('None', 'Click-through splash page', 'Billing', 'Password-protected with Meraki RADIUS', 'Password-protected with custom RADIUS', 'Password-protected with Active Directory', 'Password-protected with LDAP', 'SMS authentication', 'Systems Manager Sentry', 'Facebook Wi-Fi', 'Google OAuth', 'Microsoft Entra ID', 'Sponsored guest' or 'Cisco ISE').This attribute is not supported for template children. - splashGuestSponsorDomains (array): Array of valid sponsor email domains for sponsored guest splash type. - oauth (object): The OAuth settings of this SSID. Only valid if splashPage is 'Google OAuth'. - localRadius (object): The current setting for Local Authentication, a built-in RADIUS server on the access point. Only valid if authMode is '8021x-localradius'. @@ -987,7 +987,6 @@ def updateNetworkWirelessSsid(self, networkId: str, number: str, **kwargs): "Cisco ISE", "Click-through splash page", "Facebook Wi-Fi", - "Google Apps domain", "Google OAuth", "Microsoft Entra ID", "None", diff --git a/meraki/api/nac.py b/meraki/api/nac.py index 3232f3d0..43621f81 100644 --- a/meraki/api/nac.py +++ b/meraki/api/nac.py @@ -275,20 +275,18 @@ def getOrganizationNacCertificatesAuthoritiesCrls(self, organizationId: str, tot return self._session.get_pages(metadata, resource, params, total_pages, direction) - def createOrganizationNacCertificatesAuthoritiesCrl( - self, organizationId: str, caId: str, content: str, isDelta: bool, **kwargs - ): + def createOrganizationNacCertificatesAuthoritiesCrl(self, organizationId: str, **kwargs): """ - **Create a new CRL (either base or delta) for an existing CA** + **Upload a CRL through Certificate Validation** https://developer.cisco.com/meraki/api-v1/#!create-organization-nac-certificates-authorities-crl - organizationId (string): Organization ID - - caId (string): ID of the CRL issuer - - content (string): CRL content in PEM format - - isDelta (boolean): Whether it's a delta CRL or not + - trustedCertificateId (string): ID of the CRL issuer + - crlBody (string): CRL content in PEM format or base64-encoded DER. Required when the access-manager-crl-ui flag is enabled. + - fileName (string): Original filename supplied by the browser """ - kwargs = locals() + kwargs.update(locals()) metadata = { "tags": ["nac", "configure", "certificates", "authorities", "crls"], @@ -298,9 +296,9 @@ def createOrganizationNacCertificatesAuthoritiesCrl( resource = f"/organizations/{organizationId}/nac/certificates/authorities/crls" body_params = [ - "caId", - "content", - "isDelta", + "trustedCertificateId", + "crlBody", + "fileName", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -380,6 +378,39 @@ def getOrganizationNacCertificatesAuthoritiesCrlsDescriptors( return self._session.get_pages(metadata, resource, params, total_pages, direction) + def retrieveOrganizationNacCertificatesAuthoritiesCrls(self, organizationId: str, trustedCertificateId: str, **kwargs): + """ + **Retrieve a CRL for an existing CA through Certificate Validation** + https://developer.cisco.com/meraki/api-v1/#!retrieve-organization-nac-certificates-authorities-crls + + - organizationId (string): Organization ID + - trustedCertificateId (string): ID of the CRL issuer + """ + + kwargs = locals() + + metadata = { + "tags": ["nac", "configure", "certificates", "authorities", "crls"], + "operation": "retrieveOrganizationNacCertificatesAuthoritiesCrls", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/nac/certificates/authorities/crls/retrieve" + + body_params = [ + "trustedCertificateId", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + + if self._session._validate_kwargs: + all_params = [] + body_params + invalid = [k for k in kwargs if k.strip() not in all_params and k != "self"] + if invalid and self._session._logger: + self._session._logger.warning( + f"retrieveOrganizationNacCertificatesAuthoritiesCrls: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + def deleteOrganizationNacCertificatesAuthoritiesCrl(self, organizationId: str, crlId: str): """ **Deletes a whole CRL, including all its deltas (in case of base CRL removal)** diff --git a/meraki/api/networks.py b/meraki/api/networks.py index e2755f53..35cbd989 100644 --- a/meraki/api/networks.py +++ b/meraki/api/networks.py @@ -1068,6 +1068,7 @@ def updateNetworkFirmwareUpgrades(self, networkId: str, **kwargs): - upgradeWindow (object): Upgrade window for devices in network - timezone (string): The timezone for the network - products (object): Contains information about the network to update + - featureLossAcknowledgements (array): Acknowledges the target version has removed certain features that the network is currently using. """ kwargs.update(locals()) @@ -1083,6 +1084,7 @@ def updateNetworkFirmwareUpgrades(self, networkId: str, **kwargs): "upgradeWindow", "timezone", "products", + "featureLossAcknowledgements", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -2785,7 +2787,7 @@ def updateNetworkSettings(self, networkId: str, **kwargs): https://developer.cisco.com/meraki/api-v1/#!update-network-settings - networkId (string): Network ID - - localStatusPageEnabled (boolean): Enables / disables the local device status pages (my.meraki.com, ap.meraki.com, switch.meraki.com, wired.meraki.com). Optional (defaults to false) + - localStatusPageEnabled (boolean): Enables / disables the local device status pages (my.meraki.com, ap.meraki.com, switch.meraki.com, wired.meraki.com). Optional (defaults to true) - remoteStatusPageEnabled (boolean): Enables / disables access to the device status page (http://[device's LAN IP]). Optional. Can only be set if localStatusPageEnabled is set to true - localStatusPage (object): A hash of Local Status page(s)' authentication options applied to the Network. - securePort (object): A hash of SecureConnect options applied to the Network. @@ -3322,9 +3324,10 @@ def createNetworkVlanProfile(self, networkId: str, name: str, vlanNames: list, v - vlanNames (array): An array of named VLANs - vlanGroups (array): An array of VLAN groups - iname (string): IName of the profile + - allowedVlans (string): The VLANs allowed on the VLAN profile. Only applicable to trunk ports. The given range must be inclusive of all named VLANs. """ - kwargs = locals() + kwargs.update(locals()) metadata = { "tags": ["networks", "configure", "vlanProfiles"], @@ -3335,6 +3338,7 @@ def createNetworkVlanProfile(self, networkId: str, name: str, vlanNames: list, v body_params = [ "name", + "allowedVlans", "vlanNames", "vlanGroups", "iname", @@ -3470,9 +3474,10 @@ def updateNetworkVlanProfile(self, networkId: str, iname: str, name: str, vlanNa - name (string): Name of the profile, string length must be from 1 to 255 characters - vlanNames (array): An array of named VLANs - vlanGroups (array): An array of VLAN groups + - allowedVlans (string): The VLANs allowed on the VLAN profile. Only applicable to trunk ports. The given range must be inclusive of all named VLANs. """ - kwargs = locals() + kwargs.update(locals()) metadata = { "tags": ["networks", "configure", "vlanProfiles"], @@ -3484,6 +3489,7 @@ def updateNetworkVlanProfile(self, networkId: str, iname: str, name: str, vlanNa body_params = [ "name", + "allowedVlans", "vlanNames", "vlanGroups", ] diff --git a/meraki/api/organizations.py b/meraki/api/organizations.py index c112ea1f..d2d7cacc 100644 --- a/meraki/api/organizations.py +++ b/meraki/api/organizations.py @@ -3289,6 +3289,43 @@ def getOrganizationAssuranceThousandEyesApplications(self, organizationId: str, return self._session.get(metadata, resource, params) + def getOrganizationAssuranceWiredExperienceMostImpactedXMs(self, organizationId: str, **kwargs): + """ + **Returns the most impacted wired experience metrics, including client counts, top failure contributor, and most impacted networks for each metric.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wired-experience-most-impacted-x-ms + + - organizationId (string): Organization ID + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "wired", "experience", "mostImpactedXMs"], + "operation": "getOrganizationAssuranceWiredExperienceMostImpactedXMs", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wired/experience/mostImpactedXMs" + + query_params = [ + "t0", + "t1", + "timespan", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_params + invalid = [k for k in kwargs if k.strip() not in all_params and k != "self"] + if invalid and self._session._logger: + self._session._logger.warning( + f"getOrganizationAssuranceWiredExperienceMostImpactedXMs: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + def getOrganizationAssuranceWiredExperienceSuccessfulConnectionsByNetwork( self, organizationId: str, total_pages=1, direction="next", **kwargs ): diff --git a/meraki/api/secureConnect.py b/meraki/api/secureConnect.py index 85fecca0..a1435f37 100644 --- a/meraki/api/secureConnect.py +++ b/meraki/api/secureConnect.py @@ -895,8 +895,6 @@ def createOrganizationSecureConnectRemoteAccessLogsExport(self, organizationId: - organizationId (string): Organization ID - t0 (string): The start of the interval, must be within the past 30 days. Must be provided with t1. - t1 (string): The end of the interval, must not exceed the current date. Must be provided with t0. - - from (integer): Legacy start of the interval in epoch seconds, must be within the past 30 days. Must be provided with to. - - to (integer): Legacy end of the interval in epoch seconds, must not exceed the current date. Must be provided with from. """ kwargs.update(locals()) @@ -911,8 +909,6 @@ def createOrganizationSecureConnectRemoteAccessLogsExport(self, organizationId: body_params = [ "t0", "t1", - "from", - "to", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} diff --git a/meraki/api/switch.py b/meraki/api/switch.py index 3ebab47b..3240f66e 100644 --- a/meraki/api/switch.py +++ b/meraki/api/switch.py @@ -230,7 +230,7 @@ def updateDeviceSwitchPort(self, serial: str, portId: str, **kwargs): - daiTrusted (boolean): If true, ARP packets for this port will be considered trusted, and Dynamic ARP Inspection will allow the traffic. - profile (object): Profile attributes - dot3az (object): dot3az settings for the port - - highSpeed (object): High speed port enablement settings for C9500-32QC + - highSpeed (object): High speed port enablement settings for a high-speed logical port. """ kwargs.update(locals()) @@ -3543,7 +3543,7 @@ def updateOrganizationConfigTemplateSwitchProfilePort( - daiTrusted (boolean): If true, ARP packets for this port will be considered trusted, and Dynamic ARP Inspection will allow the traffic. - profile (object): Profile attributes - dot3az (object): dot3az settings for the port - - highSpeed (object): High speed port enablement settings for C9500-32QC + - highSpeed (object): High speed port enablement settings for a high-speed logical port. """ kwargs.update(locals()) diff --git a/meraki/api/wireless.py b/meraki/api/wireless.py index d671c420..bfe0e4cd 100644 --- a/meraki/api/wireless.py +++ b/meraki/api/wireless.py @@ -2707,7 +2707,7 @@ def updateNetworkWirelessSsid(self, networkId: str, number: str, **kwargs): - wpaEncryptionMode (string): The types of WPA encryption. ('WPA1 only', 'WPA1 and WPA2', 'WPA2 only', 'WPA3 Transition Mode', 'WPA3 only' or 'WPA3 192-bit Security') - dot11w (object): The current setting for Protected Management Frames (802.11w). - dot11r (object): The current setting for 802.11r - - splashPage (string): The type of splash page for the SSID ('None', 'Click-through splash page', 'Billing', 'Password-protected with Meraki RADIUS', 'Password-protected with custom RADIUS', 'Password-protected with Active Directory', 'Password-protected with LDAP', 'SMS authentication', 'Systems Manager Sentry', 'Facebook Wi-Fi', 'Google OAuth', 'Microsoft Entra ID', 'Sponsored guest', 'Cisco ISE' or 'Google Apps domain').This attribute is not supported for template children. + - splashPage (string): The type of splash page for the SSID ('None', 'Click-through splash page', 'Billing', 'Password-protected with Meraki RADIUS', 'Password-protected with custom RADIUS', 'Password-protected with Active Directory', 'Password-protected with LDAP', 'SMS authentication', 'Systems Manager Sentry', 'Facebook Wi-Fi', 'Google OAuth', 'Microsoft Entra ID', 'Sponsored guest' or 'Cisco ISE').This attribute is not supported for template children. - splashGuestSponsorDomains (array): Array of valid sponsor email domains for sponsored guest splash type. - oauth (object): The OAuth settings of this SSID. Only valid if splashPage is 'Google OAuth'. - localRadius (object): The current setting for Local Authentication, a built-in RADIUS server on the access point. Only valid if authMode is '8021x-localradius'. @@ -2810,7 +2810,6 @@ def updateNetworkWirelessSsid(self, networkId: str, number: str, **kwargs): "Cisco ISE", "Click-through splash page", "Facebook Wi-Fi", - "Google Apps domain", "Google OAuth", "Microsoft Entra ID", "None", @@ -5360,7 +5359,7 @@ def getOrganizationAssuranceWirelessExperienceCoverageInsightsByNetwork( kwargs.update(locals()) if "contributor" in kwargs: - options = ["Admin power restriction", "Insufficient AP density", "Sticky client", "Transient weak signal"] + options = ["Admin power restriction", "Insufficient AP density", "Sticky client", "Weak signal"] assert kwargs["contributor"] in options, ( f'''"contributor" cannot be "{kwargs["contributor"]}", & must be set to one of: {options}''' ) @@ -6234,6 +6233,7 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsInsightsByNetwor - serials (array): Filter results by device serial. - ssidNumbers (array): Filter results by SSID number. - bands (array): Filter results by band. + - insights (string): Source used to compute insights. Defaults to dashboard. - contributor (string): Contributor for which to retrieve insights. If not specified, returns overall insights. - subContributor (string): Sub-contributor for which to retrieve insights. If not specified, returns all sub contributor insights. - variant (string): Wireless State Machine variant to use. @@ -6247,6 +6247,11 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsInsightsByNetwor kwargs.update(locals()) + if "insights" in kwargs: + options = ["dashboard", "rca"] + assert kwargs["insights"] in options, ( + f'''"insights" cannot be "{kwargs["insights"]}", & must be set to one of: {options}''' + ) if "contributor" in kwargs: options = ["assoc", "auth", "dhcp", "dns"] assert kwargs["contributor"] in options, ( @@ -6270,6 +6275,7 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsInsightsByNetwor "serials", "ssidNumbers", "bands", + "insights", "contributor", "subContributor", "variant", diff --git a/pyproject.toml b/pyproject.toml index c51173b3..728c8713 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "meraki" -version = "4.3.0b4" +version = "4.4.0b0" description = "Cisco Meraki Dashboard API library" authors = [ {name = "Cisco Meraki", email = "api-feedback@meraki.net"} diff --git a/uv.lock b/uv.lock index 24fcb7b7..f3ee1b15 100644 --- a/uv.lock +++ b/uv.lock @@ -549,7 +549,7 @@ wheels = [ [[package]] name = "meraki" -version = "4.3.0b4" +version = "4.4.0b0" source = { editable = "." } dependencies = [ { name = "aiohttp" },