Source code for pbpstats.resources.enhanced_pbp.stats_nba.enhanced_pbp_factory

"""
``StatsNbaEnhancedPbpFactory`` can be used to create enhanced pbp event objects from
the :mod:`pbpstats.resources.enhanced_pbp.stats_nba` module based on the event type.

The following code will get the event class for event type 1 (which is the event type for a field goal make)

.. code-block:: python

    from pbpstats.resources.enhanced_pbp.stats_nba.enhanced_pbp_factory import StatsNbaEnhancedPbpFactory

    factory = StatsNbaEnhancedPbpFactory()
    event_class = factory.get_event_class(1)
    print(event_class)  # prints "<class 'pbpstats.resources.enhanced_pbp.stats_nba.field_goal.StatsFieldGoal'>"
"""
import pbpstats.resources.enhanced_pbp.stats_nba as event_types
from pbpstats.resources.enhanced_pbp.stats_nba.enhanced_pbp_item import (
    StatsEnhancedPbpItem,
)


[docs]class StatsNbaEnhancedPbpFactory(object): """ Class for factory of event type classes. On initialization will load in all event classes in the :mod:`pbpstats.resources.enhanced_pbp.stats_nba` module """ def __init__(self): self.event_classes = {} self._load_event_classes() def _load_event_classes(self): event_classes = dict( [ (name, cls) for name, cls in event_types.__dict__.items() if isinstance(cls, type) ] ) for _, event_cls in event_classes.items(): if isinstance(event_cls.event_type, list): for event_type in event_cls.event_type: self.event_classes[event_type] = event_cls else: self.event_classes[event_cls.event_type] = event_cls
[docs] def get_event_class(self, event_type): """ Gets the class for the event based on the event_type :param int event_type: event action type for the event :returns: class for event type """ return self.event_classes.get(event_type, StatsEnhancedPbpItem)