Skip to content

Commit

Permalink
Add Current User info methods + convenience methods for get_throttle_…
Browse files Browse the repository at this point in the history
…limit and get_remaining_throttle_limit

Return User Usage Limits / Current Usage towards Throttle Limits with `get_user_rate_info`
Return full account info with `get_user_info`
Fixes #126
  • Loading branch information
tyeth committed Oct 4, 2024
1 parent 99bd004 commit 6d7abbc
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 1 deletion.
2 changes: 1 addition & 1 deletion .pylintrc
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ confidence=
# no Warning level messages displayed, use"--disable=all --enable=classes
# --disable=W"
# disable=import-error,raw-checker-failed,bad-inline-option,locally-disabled,file-ignored,suppressed-message,useless-suppression,deprecated-pragma,deprecated-str-translate-call
disable=raw-checker-failed,bad-inline-option,locally-disabled,file-ignored,suppressed-message,useless-suppression,deprecated-pragma,import-error,pointless-string-statement,unspecified-encoding
disable=raw-checker-failed,bad-inline-option,locally-disabled,file-ignored,suppressed-message,useless-suppression,deprecated-pragma,import-error,pointless-string-statement,unspecified-encoding,too-many-public-methods

# Enable the message, report, category or checker with the given id(s). You can
# either give multiple identifier separated by comma (,) or put this option
Expand Down
71 changes: 71 additions & 0 deletions adafruit_io/adafruit_io.py
Original file line number Diff line number Diff line change
Expand Up @@ -855,6 +855,77 @@ def receive_random_data(self, generator_id: int):
path = self._compose_path("integrations/words/{0}".format(generator_id))
return self._get(path)

def get_user_info(self):
"""
Get detailed account information for the current user.
See https://io.adafruit.com/api/docs/#get-user-info
"""
return self._get("https://io.adafruit.com/api/v2/user")

def get_user_rate_info(self):
"""
Get rate limit and usage information for the current user.
See https://io.adafruit.com/api/docs/#get-detailed-user-info
Example output:
```
{
"data_rate_limit": 30,
"active_data_rate": 0,
"authentication_rate": 0,
"subscribe_authorization_rate": 0,
"publish_authorization_rate": 0,
"hourly_ban_rate": 0,
"mqtt_ban_error_message": null,
"active_sms_rate": 0
}
```
"""
path = self._compose_path("throttle")
return self._get(path)

def get_remaining_throttle_limit(self):
"""
Get the remaining data points allowed before hitting the throttle limit.
This retrieves the user rate limit and deducts usage for the current user.
See https://io.adafruit.com/api/docs/#get-detailed-user-info
"""
user_rates = self.get_user_rate_info()
if user_rates is None:
raise ValueError(
"Could not get user info, get_user_rate_info returned None."
)
return user_rates["data_rate_limit"] - user_rates["active_data_rate"]

def get_throttle_limit(self):
"""
Get user throttle limit a.k.a "data_rate_limit" for the current user.
See https://io.adafruit.com/api/docs/#get-detailed-user-info
"""
user_rates = self.get_user_rate_info()
if user_rates is None:
raise ValueError(
"Could not get user info, get_user_rate_info returned None."
)
return user_rates["data_rate_limit"]

def get_current_usage(self):
"""
Get current rate usage a.k.a "active_data_rate" for the current user.
See https://io.adafruit.com/api/docs/#get-detailed-user-info
"""
user_rates = self.get_user_rate_info()
if user_rates is None:
raise ValueError(
"Could not get user info, get_user_rate_info returned None."
)
return user_rates["active_data_rate"]

def receive_time(self, timezone: str = None):
"""
Returns a struct_time from the Adafruit IO Server based on the device's IP address.
Expand Down

0 comments on commit 6d7abbc

Please sign in to comment.