diff --git a/docs/generation-report.md b/docs/generation-report.md index 3d411c9..5a9e2a4 100644 --- a/docs/generation-report.md +++ b/docs/generation-report.md @@ -1,5 +1,11 @@ # Generation Report +## 2026-06-17 | Library v4.2.0b2 | API 1.71.0-beta.2 + + +No Python keyword parameter conflicts detected. + + ## 2026-06-10 | Library v4.2.0b1 | API 1.71.0-beta.1 diff --git a/meraki/__init__.py b/meraki/__init__.py index 9121d79..8851b13 100644 --- a/meraki/__init__.py +++ b/meraki/__init__.py @@ -59,7 +59,7 @@ from meraki._version import __version__ # noqa: F401 from datetime import datetime -__api_version__ = "1.71.0-beta.1" +__api_version__ = "1.71.0-beta.2" __all__ = [ "APIError", diff --git a/meraki/_version.py b/meraki/_version.py index afcedcd..b6bcb5a 100644 --- a/meraki/_version.py +++ b/meraki/_version.py @@ -1 +1 @@ -__version__ = "4.2.0b1" +__version__ = "4.2.0b2" diff --git a/meraki/aio/api/appliance.py b/meraki/aio/api/appliance.py index 6212717..a7099f2 100644 --- a/meraki/aio/api/appliance.py +++ b/meraki/aio/api/appliance.py @@ -131,7 +131,7 @@ def updateDeviceApplianceInterfacesPort(self, serial: str, number: str, **kwargs def getDeviceAppliancePerformance(self, serial: str, **kwargs): """ - **Return the performance score for a single MX** + **Return the performance score for a single Secure Appliance or Secure Router** https://developer.cisco.com/meraki/api-v1/#!get-device-appliance-performance - serial (string): Serial diff --git a/meraki/aio/api/wireless.py b/meraki/aio/api/wireless.py index 2f79637..1e10213 100644 --- a/meraki/aio/api/wireless.py +++ b/meraki/aio/api/wireless.py @@ -2344,6 +2344,7 @@ def createNetworkWirelessRfProfile(self, networkId: str, name: str, bandSelectio - transmission (object): Settings related to radio transmission. - perSsidSettings (object): Per-SSID radio settings by number. - flexRadios (object): Flex radio settings. + - dot11be (object): 802.11be settings """ kwargs.update(locals()) @@ -2378,6 +2379,7 @@ def createNetworkWirelessRfProfile(self, networkId: str, name: str, bandSelectio "transmission", "perSsidSettings", "flexRadios", + "dot11be", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -2409,6 +2411,7 @@ def updateNetworkWirelessRfProfile(self, networkId: str, rfProfileId: str, **kwa - transmission (object): Settings related to radio transmission. - perSsidSettings (object): Per-SSID radio settings by number. - flexRadios (object): Flex radio settings. + - dot11be (object): 802.11be settings """ kwargs.update(locals()) @@ -2446,6 +2449,7 @@ def updateNetworkWirelessRfProfile(self, networkId: str, rfProfileId: str, **kwa "transmission", "perSsidSettings", "flexRadios", + "dot11be", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -5472,6 +5476,49 @@ def getOrganizationAssuranceWirelessExperienceMostImpactedNetworks(self, organiz return self._session.get(metadata, resource, params) + def getOrganizationAssuranceWirelessExperienceMostImpactedXMs(self, organizationId: str, **kwargs): + """ + **Returns the most impacted wireless experience metrics and the top failure contributor for each metric/network pair.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-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. + - limit (integer): Number of most impacted XMs to return. Default is 5. Maximum is 10. + """ + + kwargs.update(locals()) + + if "limit" in kwargs: + options = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + assert kwargs["limit"] in options, f'''"limit" cannot be "{kwargs["limit"]}", & must be set to one of: {options}''' + + metadata = { + "tags": ["wireless", "configure", "experience", "mostImpactedXMs"], + "operation": "getOrganizationAssuranceWirelessExperienceMostImpactedXMs", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/mostImpactedXMs" + + query_params = [ + "t0", + "t1", + "timespan", + "limit", + ] + 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"getOrganizationAssuranceWirelessExperienceMostImpactedXMs: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetwork( self, organizationId: str, total_pages=1, direction="next", **kwargs ): @@ -6762,6 +6809,8 @@ def getOrganizationAssuranceWirelessExperienceTimeToConnectInsightsByNetwork( - ssidNumbers (array): Filter results by SSID number. - bands (array): Filter results by band. - 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. + - insights (string): Insights version to use. - 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. @@ -6777,6 +6826,11 @@ def getOrganizationAssuranceWirelessExperienceTimeToConnectInsightsByNetwork( assert kwargs["contributor"] in options, ( f'''"contributor" cannot be "{kwargs["contributor"]}", & must be set to one of: {options}''' ) + if "insights" in kwargs: + options = ["1", "2"] + assert kwargs["insights"] in options, ( + f'''"insights" cannot be "{kwargs["insights"]}", & must be set to one of: {options}''' + ) metadata = { "tags": ["wireless", "configure", "experience", "timeToConnect", "insights", "byNetwork"], @@ -6791,6 +6845,8 @@ def getOrganizationAssuranceWirelessExperienceTimeToConnectInsightsByNetwork( "ssidNumbers", "bands", "contributor", + "subContributor", + "insights", "t0", "t1", "timespan", diff --git a/meraki/api/appliance.py b/meraki/api/appliance.py index 15bca41..2886703 100644 --- a/meraki/api/appliance.py +++ b/meraki/api/appliance.py @@ -131,7 +131,7 @@ def updateDeviceApplianceInterfacesPort(self, serial: str, number: str, **kwargs def getDeviceAppliancePerformance(self, serial: str, **kwargs): """ - **Return the performance score for a single MX** + **Return the performance score for a single Secure Appliance or Secure Router** https://developer.cisco.com/meraki/api-v1/#!get-device-appliance-performance - serial (string): Serial diff --git a/meraki/api/batch/organizations.py b/meraki/api/batch/organizations.py index 75f10d8..6bf37b2 100644 --- a/meraki/api/batch/organizations.py +++ b/meraki/api/batch/organizations.py @@ -5,6 +5,37 @@ class ActionBatchOrganizations(object): def __init__(self): super(ActionBatchOrganizations, self).__init__() + def updateOrganization(self, organizationId: str, **kwargs): + """ + **Update an organization** + https://developer.cisco.com/meraki/api-v1/#!update-organization + + - organizationId (string): Organization ID + - name (string): The name of the organization + - management (object): Information about the organization's management system + - api (object): API-specific settings + - privacy (object): Privacy-related settings for the organization. + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}" + + body_params = [ + "name", + "management", + "api", + "privacy", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "update", + "body": payload, + } + return action + def createOrganizationAdaptivePolicyAcl(self, organizationId: str, name: str, rules: list, ipVersion: str, **kwargs): """ **Creates new adaptive policy ACL** @@ -2999,6 +3030,54 @@ def updateOrganizationSaseSite(self, organizationId: str, siteId: str, **kwargs) } return action + def updateOrganizationSnmp(self, organizationId: str, **kwargs): + """ + **Update the SNMP settings for an organization** + https://developer.cisco.com/meraki/api-v1/#!update-organization-snmp + + - organizationId (string): Organization ID + - v2cEnabled (boolean): Boolean indicating whether SNMP version 2c is enabled for the organization. + - v3Enabled (boolean): Boolean indicating whether SNMP version 3 is enabled for the organization. + - v3AuthMode (string): The SNMP version 3 authentication mode. Can be either 'MD5' or 'SHA'. + - v3AuthPass (string): The SNMP version 3 authentication password. Must be at least 8 characters if specified. + - v3PrivMode (string): The SNMP version 3 privacy mode. Can be either 'DES' or 'AES128'. + - v3PrivPass (string): The SNMP version 3 privacy password. Must be at least 8 characters if specified. + - peerIps (array): The list of IPv4 addresses that are allowed to access the SNMP server. + """ + + kwargs.update(locals()) + + if "v3AuthMode" in kwargs: + options = ["MD5", "SHA"] + assert kwargs["v3AuthMode"] in options, ( + f'''"v3AuthMode" cannot be "{kwargs["v3AuthMode"]}", & must be set to one of: {options}''' + ) + if "v3PrivMode" in kwargs: + options = ["AES128", "DES"] + assert kwargs["v3PrivMode"] in options, ( + f'''"v3PrivMode" cannot be "{kwargs["v3PrivMode"]}", & must be set to one of: {options}''' + ) + + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/snmp" + + body_params = [ + "v2cEnabled", + "v3Enabled", + "v3AuthMode", + "v3AuthPass", + "v3PrivMode", + "v3PrivPass", + "peerIps", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "update", + "body": payload, + } + return action + def deleteOrganizationSplashAsset(self, organizationId: str, id: str): """ **Delete a Splash Theme Asset** diff --git a/meraki/api/batch/wireless.py b/meraki/api/batch/wireless.py index d1bdede..f9026a7 100644 --- a/meraki/api/batch/wireless.py +++ b/meraki/api/batch/wireless.py @@ -672,6 +672,7 @@ def createNetworkWirelessRfProfile(self, networkId: str, name: str, bandSelectio - transmission (object): Settings related to radio transmission. - perSsidSettings (object): Per-SSID radio settings by number. - flexRadios (object): Flex radio settings. + - dot11be (object): 802.11be settings """ kwargs.update(locals()) @@ -702,6 +703,7 @@ def createNetworkWirelessRfProfile(self, networkId: str, name: str, bandSelectio "transmission", "perSsidSettings", "flexRadios", + "dot11be", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} action = { @@ -731,6 +733,7 @@ def updateNetworkWirelessRfProfile(self, networkId: str, rfProfileId: str, **kwa - transmission (object): Settings related to radio transmission. - perSsidSettings (object): Per-SSID radio settings by number. - flexRadios (object): Flex radio settings. + - dot11be (object): 802.11be settings """ kwargs.update(locals()) @@ -764,6 +767,7 @@ def updateNetworkWirelessRfProfile(self, networkId: str, rfProfileId: str, **kwa "transmission", "perSsidSettings", "flexRadios", + "dot11be", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} action = { diff --git a/meraki/api/wireless.py b/meraki/api/wireless.py index fba8a5d..79d1bdd 100644 --- a/meraki/api/wireless.py +++ b/meraki/api/wireless.py @@ -2344,6 +2344,7 @@ def createNetworkWirelessRfProfile(self, networkId: str, name: str, bandSelectio - transmission (object): Settings related to radio transmission. - perSsidSettings (object): Per-SSID radio settings by number. - flexRadios (object): Flex radio settings. + - dot11be (object): 802.11be settings """ kwargs.update(locals()) @@ -2378,6 +2379,7 @@ def createNetworkWirelessRfProfile(self, networkId: str, name: str, bandSelectio "transmission", "perSsidSettings", "flexRadios", + "dot11be", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -2409,6 +2411,7 @@ def updateNetworkWirelessRfProfile(self, networkId: str, rfProfileId: str, **kwa - transmission (object): Settings related to radio transmission. - perSsidSettings (object): Per-SSID radio settings by number. - flexRadios (object): Flex radio settings. + - dot11be (object): 802.11be settings """ kwargs.update(locals()) @@ -2446,6 +2449,7 @@ def updateNetworkWirelessRfProfile(self, networkId: str, rfProfileId: str, **kwa "transmission", "perSsidSettings", "flexRadios", + "dot11be", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -5472,6 +5476,49 @@ def getOrganizationAssuranceWirelessExperienceMostImpactedNetworks(self, organiz return self._session.get(metadata, resource, params) + def getOrganizationAssuranceWirelessExperienceMostImpactedXMs(self, organizationId: str, **kwargs): + """ + **Returns the most impacted wireless experience metrics and the top failure contributor for each metric/network pair.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-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. + - limit (integer): Number of most impacted XMs to return. Default is 5. Maximum is 10. + """ + + kwargs.update(locals()) + + if "limit" in kwargs: + options = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + assert kwargs["limit"] in options, f'''"limit" cannot be "{kwargs["limit"]}", & must be set to one of: {options}''' + + metadata = { + "tags": ["wireless", "configure", "experience", "mostImpactedXMs"], + "operation": "getOrganizationAssuranceWirelessExperienceMostImpactedXMs", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/mostImpactedXMs" + + query_params = [ + "t0", + "t1", + "timespan", + "limit", + ] + 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"getOrganizationAssuranceWirelessExperienceMostImpactedXMs: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetwork( self, organizationId: str, total_pages=1, direction="next", **kwargs ): @@ -6762,6 +6809,8 @@ def getOrganizationAssuranceWirelessExperienceTimeToConnectInsightsByNetwork( - ssidNumbers (array): Filter results by SSID number. - bands (array): Filter results by band. - 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. + - insights (string): Insights version to use. - 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. @@ -6777,6 +6826,11 @@ def getOrganizationAssuranceWirelessExperienceTimeToConnectInsightsByNetwork( assert kwargs["contributor"] in options, ( f'''"contributor" cannot be "{kwargs["contributor"]}", & must be set to one of: {options}''' ) + if "insights" in kwargs: + options = ["1", "2"] + assert kwargs["insights"] in options, ( + f'''"insights" cannot be "{kwargs["insights"]}", & must be set to one of: {options}''' + ) metadata = { "tags": ["wireless", "configure", "experience", "timeToConnect", "insights", "byNetwork"], @@ -6791,6 +6845,8 @@ def getOrganizationAssuranceWirelessExperienceTimeToConnectInsightsByNetwork( "ssidNumbers", "bands", "contributor", + "subContributor", + "insights", "t0", "t1", "timespan", diff --git a/pyproject.toml b/pyproject.toml index 5dacdfd..6c19b93 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "meraki" -version = "4.2.0b1" +version = "4.2.0b2" description = "Cisco Meraki Dashboard API library" authors = [ {name = "Cisco Meraki", email = "api-feedback@meraki.net"} diff --git a/uv.lock b/uv.lock index 2a8dd00..31378b9 100644 --- a/uv.lock +++ b/uv.lock @@ -314,7 +314,7 @@ wheels = [ [[package]] name = "meraki" -version = "4.2.0b1" +version = "4.2.0b2" source = { editable = "." } dependencies = [ { name = "httpx" },