diff --git a/CHANGES.md b/CHANGES.md index e8ca083..911d57e 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,6 +1,7 @@ ### 0.22.0 (2019-xx-xx xx:xx:xx UTC) * Fix creating show list when there is no list at the cycle of backlog search spread +* Change improve Python performance of handling core objects [develop changelog] diff --git a/sickbeard/classes.py b/sickbeard/classes.py index 115423f..56b9139 100644 --- a/sickbeard/classes.py +++ b/sickbeard/classes.py @@ -527,6 +527,12 @@ class SimpleNamespace(object): def __eq__(self, other): return self.__dict__ == other.__dict__ + def __ne__(self, o): + return not self.__eq__(o) + + def __hash__(self): + return hash(tuple(self.__dict__)) + class LoadingMessage(object): def __init__(self): diff --git a/sickbeard/name_parser/parser.py b/sickbeard/name_parser/parser.py index 57c6df5..4688012 100644 --- a/sickbeard/name_parser/parser.py +++ b/sickbeard/name_parser/parser.py @@ -729,6 +729,10 @@ class ParseResult(LegacyParseResult): return True + def __hash__(self): + return hash((self.series_name, self.season_number, tuple(self.episode_numbers), self.extra_info, + self.release_group, self.air_date, tuple(self.ab_episode_numbers))) + def __str__(self): if None is not self.series_name: to_return = self.series_name + u' - ' diff --git a/sickbeard/tv.py b/sickbeard/tv.py index 2d10427..eaaf471 100644 --- a/sickbeard/tv.py +++ b/sickbeard/tv.py @@ -1805,6 +1805,19 @@ class TVShow(TVShowBase): my_db = db.DBConnection() my_db.upsert('imdb_info', newValueDict, control_value_dict) + def __ne__(self, o): + # type: (TVShow) -> bool + return not self.__eq__(o) + + def __eq__(self, o): + # type: (TVShow) -> bool + if not isinstance(o, TVShow): + return False + return o._tvid == self._tvid and o._prodid == self._prodid + + def __hash__(self): + return hash((self._tvid, self._prodid)) + def __repr__(self): return 'TVShow(%s)' % self.__str__() @@ -2608,6 +2621,19 @@ class TVEpisode(TVEpisodeBase): else: self.hastbn = False + def __ne__(self, o): + # type: (TVEpisode) -> bool + return not self.__eq__(o) + + def __eq__(self, o): + # type: (TVEpisode) -> bool + if not isinstance(o, TVEpisode): + return False + return o._show_obj == self._show_obj and o._epid == self._epid + + def __hash__(self): + return hash((self._show_obj, self._epid)) + def __repr__(self): return 'TVEpisode(%s)' % self.__str__()