diff options
Diffstat (limited to '.venv/lib/python3.12/site-packages/sendgrid/helpers/stats/stats.py')
-rw-r--r-- | .venv/lib/python3.12/site-packages/sendgrid/helpers/stats/stats.py | 384 |
1 files changed, 384 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/sendgrid/helpers/stats/stats.py b/.venv/lib/python3.12/site-packages/sendgrid/helpers/stats/stats.py new file mode 100644 index 00000000..b866093b --- /dev/null +++ b/.venv/lib/python3.12/site-packages/sendgrid/helpers/stats/stats.py @@ -0,0 +1,384 @@ +class Stats(object): + """ + Object for building query params for a global email statistics request + """ + def __init__( + self, start_date=None): + """Create a Stats object + + :param start_date: Date of when stats should begin in YYYY-MM-DD format, defaults to None + :type start_date: string, optional + """ + self._start_date = None + self._end_date = None + self._aggregated_by = None + self._sort_by_metric = None + self._sort_by_direction = None + self._limit = None + self._offset = None + + # Minimum required for stats + if start_date: + self.start_date = start_date + + def __str__(self): + """Get a JSON representation of this object. + + :rtype: string + """ + return str(self.get()) + + def get(self): + """ + Get a JSON-ready representation of Stats + + :returns: This GlobalStats, ready for use in a request body. + :rtype: response stats dict + """ + stats = {} + if self.start_date is not None: + stats["start_date"] = self.start_date + if self.end_date is not None: + stats["end_date"] = self.end_date + if self.aggregated_by is not None: + stats["aggregated_by"] = self.aggregated_by + if self.sort_by_metric is not None: + stats["sort_by_metric"] = self.sort_by_metric + if self.sort_by_direction is not None: + stats["sort_by_direction"] = self.sort_by_direction + if self.limit is not None: + stats["limit"] = self.limit + if self.offset is not None: + stats["offset"] = self.offset + return stats + + @property + def start_date(self): + """Date of when stats should begin in YYYY-MM-DD format + + :rtype: string + """ + return self._start_date + + @start_date.setter + def start_date(self, value): + """Date of when stats should begin in YYYY-MM-DD format + + :param value: Date representing when stats should begin + :type value: string + """ + self._start_date = value + + @property + def end_date(self): + """Date of when stats should end in YYYY-MM-DD format + + :rtype: string + """ + return self._end_date + + @end_date.setter + def end_date(self, value): + """Date of when stats should end in YYYY-MM-DD format + + :param value: Date representing when stats should end + :type value: string + """ + self._end_date = value + + @property + def aggregated_by(self): + """Chosen period (e.g. 'day', 'week', 'month') for how stats get grouped + + :rtype: string + """ + return self._aggregated_by + + @aggregated_by.setter + def aggregated_by(self, value): + """Chosen period (e.g. 'day', 'week', 'month') for how stats get grouped + + :param value: Period for how keys will get formatted + :type value: string + """ + self._aggregated_by = value + + @property + def sort_by_metric(self): + """Metric to sort stats by + + :rtype: string + """ + return self._sort_by_metric + + @sort_by_metric.setter + def sort_by_metric(self, value): + """Metric to sort stats by + + :param value: Chosen metric stats will by sorted by + :type value: string + """ + self._sort_by_metric = value + + @property + def sort_by_direction(self): + """Direction data will be sorted, either 'asc' or 'desc' + + :rtype: string + """ + return self._sort_by_direction + + @sort_by_direction.setter + def sort_by_direction(self, value): + """Direction data will be sorted, either 'asc' or 'desc' + + :param value: Direction of data, either 'asc' or 'desc' + :type value: string + """ + self._sort_by_direction = value + + @property + def limit(self): + """Max amount of results to be returned + + :rtype: int + """ + return self._limit + + @limit.setter + def limit(self, value): + """Max amount of results to be returned + + :param value: Max amount of results + :type value: int + """ + self._limit = value + + @property + def offset(self): + """Number of places a starting point of a data set will move + + :rtype: int + """ + return self._offset + + @offset.setter + def offset(self, value): + """Number of places a starting point of a data set will move + + :param value: Number of positions to move from starting point + :type value: int + """ + self._offset = value + + +class CategoryStats(Stats): + """ + object for building query params for a category statistics request + """ + def __init__(self, start_date=None, categories=None): + """Create a CategoryStats object + + :param start_date: Date of when stats should begin in YYYY-MM-DD format, defaults to None + :type start_date: string, optional + :param categories: list of categories to get results of, defaults to None + :type categories: list(string), optional + """ + self._categories = None + super(CategoryStats, self).__init__() + + # Minimum required for category stats + if start_date and categories: + self.start_date = start_date + for cat_name in categories: + self.add_category(Category(cat_name)) + + def get(self): + """ + Get a JSON-ready representation of this CategoryStats. + + :return: response category stats dict + """ + stats = {} + if self.start_date is not None: + stats["start_date"] = self.start_date + if self.end_date is not None: + stats["end_date"] = self.end_date + if self.aggregated_by is not None: + stats["aggregated_by"] = self.aggregated_by + if self.sort_by_metric is not None: + stats["sort_by_metric"] = self.sort_by_metric + if self.sort_by_direction is not None: + stats["sort_by_direction"] = self.sort_by_direction + if self.limit is not None: + stats["limit"] = self.limit + if self.offset is not None: + stats["offset"] = self.offset + if self.categories is not None: + stats['categories'] = [category.get() for category in + self.categories] + return stats + + @property + def categories(self): + """List of categories + + :rtype: list(Category) + """ + return self._categories + + def add_category(self, category): + """Appends a category to this object's category list + + :param category: Category to append to CategoryStats + :type category: Category + """ + if self._categories is None: + self._categories = [] + self._categories.append(category) + + +class SubuserStats(Stats): + """ + object of building query params for a subuser statistics request + """ + def __init__(self, start_date=None, subusers=None): + """Create a SubuserStats object + + :param start_date: Date of when stats should begin in YYYY-MM-DD format, defaults to None + :type start_date: string, optional + :param subusers: list of subusers to get results of, defaults to None + :type subusers: list(string), optional + """ + self._subusers = None + super(SubuserStats, self).__init__() + + # Minimum required for subusers stats + if start_date and subusers: + self.start_date = start_date + for subuser_name in subusers: + self.add_subuser(Subuser(subuser_name)) + + def get(self): + """ + Get a JSON-ready representation of this SubuserStats. + + :return: response subuser stats dict + """ + stats = {} + if self.start_date is not None: + stats["start_date"] = self.start_date + if self.end_date is not None: + stats["end_date"] = self.end_date + if self.aggregated_by is not None: + stats["aggregated_by"] = self.aggregated_by + if self.sort_by_metric is not None: + stats["sort_by_metric"] = self.sort_by_metric + if self.sort_by_direction is not None: + stats["sort_by_direction"] = self.sort_by_direction + if self.limit is not None: + stats["limit"] = self.limit + if self.offset is not None: + stats["offset"] = self.offset + if self.subusers is not None: + stats['subusers'] = [subuser.get() for subuser in + self.subusers] + return stats + + @property + def subusers(self): + """List of subusers + + :rtype: list(Subuser) + """ + return self._subusers + + def add_subuser(self, subuser): + """Appends a subuser to this object's subuser list + + :param subuser: Subuser to append to SubuserStats + :type subuser: Subuser + """ + if self._subusers is None: + self._subusers = [] + self._subusers.append(subuser) + + +class Category(object): + """ + Represents a searchable statistics category to be used in a CategoryStats object + """ + def __init__(self, name=None): + """Create a Category object + + :param name: name of category, defaults to None + :type name: string, optional + """ + self._name = None + if name is not None: + self._name = name + + @property + def name(self): + """Get name of category + + :rtype: string + """ + return self._name + + @name.setter + def name(self, value): + """Set name of category + + :param value: name of the statistical category + :type value: string + """ + self._name = value + + def get(self): + """ + Get a string representation of Category. + + :return: string of the category's name + """ + return self.name + + +class Subuser(object): + """ + Represents a searchable subuser to be used in a SubuserStats object + """ + def __init__(self, name=None): + """Create a Subuser object + + :param name: name of subuser, defaults to None + :type name: string, optional + """ + self._name = None + if name is not None: + self._name = name + + @property + def name(self): + """Get name of the subuser + + :rtype: string + """ + return self._name + + @name.setter + def name(self, value): + """Set name of the subuser + + :param value: name of the subuser + :type value: string + """ + self._name = value + + def get(self): + """ + Get a string representation of Subuser. + + :return: string of the subuser's name + """ + return self.name |