Source code for bandersnatch_filter_plugins.prerelease_name

import logging
import re
from typing import Dict, List, Pattern

from bandersnatch.filter import FilterReleasePlugin

logger = logging.getLogger("bandersnatch")


[docs]class PreReleaseFilter(FilterReleasePlugin): """ Filters releases considered pre-releases. """ name = "prerelease_release" PRERELEASE_PATTERNS = ( r".+rc\d+$", r".+a(lpha)?\d+$", r".+b(eta)?\d+$", r".+dev\d+$", ) patterns: List[Pattern] = []
[docs] def initialize_plugin(self) -> None: """ Initialize the plugin reading patterns from the config. """ if not self.patterns: self.patterns = [ re.compile(pattern_string) for pattern_string in self.PRERELEASE_PATTERNS ] logger.info(f"Initialized prerelease plugin with {self.patterns}")
[docs] def filter(self, metadata: Dict) -> bool: """ Returns False if version fails the filter, i.e. follows a prerelease pattern """ version = metadata["version"] return not any(pattern.match(version) for pattern in self.patterns)