# -*- coding: utf-8 -*- class Description: """Parsed description representation""" MAP_CATEGORY_TO_LABEL = { "New Feature": "pr-feature", "Bug Fix": "pr-bugfix", "Improvement": "pr-improvement", "Performance Improvement": "pr-performance", # 'Backward Incompatible Change': doesn't match anything "Build/Testing/Packaging Improvement": "pr-build", "Non-significant (changelog entry is not needed)": "pr-non-significant", "Non-significant (changelog entry is not required)": "pr-non-significant", "Non-significant": "pr-non-significant", "Documentation (changelog entry is not required)": "pr-documentation", # 'Other': doesn't match anything } def __init__(self, pull_request): self.label_name = str() self.legal = False self._parse(pull_request["bodyText"]) def _parse(self, text): lines = text.splitlines() next_category = False category = str() for line in lines: stripped = line.strip() if not stripped: continue if next_category: category = stripped next_category = False if ( stripped == "I hereby agree to the terms of the CLA available at: https://yandex.ru/legal/cla/?lang=en" ): self.legal = True category_headers = ( "Category (leave one):", "Changelog category (leave one):", "Changelog category:", "Category:", ) if stripped in category_headers: next_category = True if category in Description.MAP_CATEGORY_TO_LABEL: self.label_name = Description.MAP_CATEGORY_TO_LABEL[category] else: if not category: print("Cannot find category in pr description") else: print(("Unknown category: " + category))