Source code for nhlscrapi.games.repscrwrap

from functools import wraps
from abc import ABCMeta, abstractmethod

def dispatch_loader(scraper, loader_name):
[docs] """ Decorator that enforces one time loading for scrapers. The one time loading is applied to partial loaders, e.g. only parse and load the home team roster once. This is not meant to be used directly. :param scraper: property name (string) containing an object of type :py:class:`scrapr.ReportLoader` :param loader_name: name of method that does the scraping/parsing :returns: function wrapper """ l = '.'.join([scraper, loader_name]) def wrapper(f): @wraps(f) def wrapped(self, *f_args, **f_kwargs): if not hasattr(self, '_loaded'): self._loaded = { } already_loaded = self._loaded.setdefault(l, False) if not already_loaded: attr = getattr(self, scraper) self._loaded[l] = getattr(attr, loader_name)() is not None return f(self, *f_args, **f_kwargs) return wrapped return wrapper class RepScrWrap(object):
[docs] """ Lazy matchup reader base. Reports can be read in pieces. Only need to read matchup on read of first part. Serves as the base class for all wrappers of report scrapers. :param game_key: :py:class:`.GameKey` of the game being loaded :param rep_reader: object of type :py:class:`nhlscrapi.scrapr.ReportLoader` """ def __init__(self, game_key, rep_reader): self.__have_matchup = False self.game_key = game_key """Game key identifier of type :py:class:`.GameKey`""" self._rep_reader = rep_reader @property @dispatch_loader('_rep_reader', 'parse_matchup') def matchup(self): """ Return the game meta information displayed in report banners including team names, final score, game date, location, and attendance. Data format is .. code:: python { 'home': home, 'away': away, 'final': final, 'attendance': att, 'date': date, 'location': loc } :returns: matchup banner info :rtype: dict """ return self._rep_reader.matchup def load_all(self):
[docs] """ Loads all parts of the report. :returns: ``self`` or ``None`` if load fails """ if self._rep_reader.parse(): return self else: return None