Source code for filters.entities

# ../filters/entities.py

"""Provides entity filtering functionality."""

# =============================================================================
# >> IMPORTS
# =============================================================================
# Source.Python Imports
#   Entities
from entities import BaseEntityGenerator
from entities import EntityGenerator
from entities.entity import Entity
from entities.helpers import index_from_edict
#   Filters
from filters.iterator import _IterObject


# =============================================================================
# >> ALL DECLARATION
# =============================================================================
__all__ = ('BaseEntityIter',
           'EntityIter',
           )


# =============================================================================
# >> ENTITY ITERATION CLASSES
# =============================================================================
[docs]class BaseEntityIter(_IterObject): """BaseEntity iterate class."""
[docs] def __init__(self, class_names=None, exact_match=True): """Store the base attributes for the generator.""" # Was only one class name given? if isinstance(class_names, str): # Convert the class name to a list class_names = [class_names] # Store the base attributes given self.class_names = list() if class_names is None else class_names self.exact_match = exact_match
@staticmethod
[docs] def iterator(): """Iterate over all :class:`entities.entity.BaseEntity` objects.""" return BaseEntityGenerator()
def _is_valid(self, entity): """Verify that the edict needs yielded.""" # Are there any class names to be checked? if not self.class_names: # Return True for all entities return True # Loop through all class names for the generator for check_name in self.class_names: # Does the current class name match part of the edict's class name? if not self.exact_match and check_name in entity.classname: return True # Does the current class name match exactly the edict's class name? elif self.exact_match and check_name == entity.classname: return True # If none of the class names returned True, return False return False
[docs]class EntityIter(BaseEntityIter): """Entity iterate class.""" @staticmethod
[docs] def iterator(): """Iterate over all :class:`entities.entity.Entity` objects.""" for edict in EntityGenerator(): yield Entity(index_from_edict(edict))