mirror of
https://github.com/data-privacy-stack/presidio.git
synced 2026-07-26 12:50:56 -05:00
Fixed exception on context support in 2.2.25 (#837)
This commit is contained in:
@@ -4,6 +4,7 @@ repos:
|
||||
hooks:
|
||||
- id: black
|
||||
language_version: python3
|
||||
exclude: **/tests/**
|
||||
- repo: https://gitlab.com/pycqa/flake8
|
||||
rev: 3.9.0
|
||||
hooks:
|
||||
|
||||
@@ -81,16 +81,29 @@ class LemmaContextAwareEnhancer(ContextAwareEnhancer):
|
||||
|
||||
# Sanity
|
||||
if nlp_artifacts is None:
|
||||
logger.warning("[%s]. NLP artifacts were not provided", self.name)
|
||||
logger.warning("NLP artifacts were not provided")
|
||||
return results
|
||||
|
||||
for result in results:
|
||||
# get recognizer matching the result
|
||||
recognizer = recognizers_dict[
|
||||
result.recognition_metadata[RecognizerResult.RECOGNIZER_NAME_KEY]
|
||||
]
|
||||
recognizer = None
|
||||
# get recognizer matching the result, if found.
|
||||
if (
|
||||
result.recognition_metadata
|
||||
and RecognizerResult.RECOGNIZER_NAME_KEY
|
||||
in result.recognition_metadata.keys()
|
||||
):
|
||||
recognizer = recognizers_dict.get(
|
||||
result.recognition_metadata[RecognizerResult.RECOGNIZER_NAME_KEY]
|
||||
)
|
||||
|
||||
# skip recognizer result if the recognizer doen't support
|
||||
if not recognizer:
|
||||
logger.debug(
|
||||
"Recognizer name not found as part of the "
|
||||
"recognition_metadata dict in the RecognizerResult. "
|
||||
)
|
||||
continue
|
||||
|
||||
# skip recognizer result if the recognizer doesn't support
|
||||
# context enhancement
|
||||
if not recognizer.context:
|
||||
logger.debug(
|
||||
|
||||
@@ -43,13 +43,14 @@ class AbaRoutingRecognizer(PatternRecognizer):
|
||||
def __init__(
|
||||
self,
|
||||
patterns: Optional[List[Pattern]] = None,
|
||||
context: Optional[List[str]] = CONTEXT,
|
||||
context: Optional[List[str]] = None,
|
||||
supported_language: str = "en",
|
||||
supported_entity: str = "ABA_ROUTING_NUMBER",
|
||||
replacement_pairs: Optional[List[Tuple[str, str]]] = None,
|
||||
):
|
||||
self.replacement_pairs = replacement_pairs or [("-", "")]
|
||||
patterns = patterns if patterns else self.PATTERNS
|
||||
context = context if context else self.CONTEXT
|
||||
super().__init__(
|
||||
supported_entity=supported_entity,
|
||||
patterns=patterns,
|
||||
|
||||
@@ -46,7 +46,7 @@ class AuAbnRecognizer(PatternRecognizer):
|
||||
def __init__(
|
||||
self,
|
||||
patterns: Optional[List[Pattern]] = None,
|
||||
context: Optional[List[str]] = CONTEXT,
|
||||
context: Optional[List[str]] = None,
|
||||
supported_language: str = "en",
|
||||
supported_entity: str = "AU_ABN",
|
||||
replacement_pairs: Optional[List[Tuple[str, str]]] = None,
|
||||
@@ -55,6 +55,7 @@ class AuAbnRecognizer(PatternRecognizer):
|
||||
replacement_pairs if replacement_pairs else [("-", ""), (" ", "")]
|
||||
)
|
||||
patterns = patterns if patterns else self.PATTERNS
|
||||
context = context if context else self.CONTEXT
|
||||
super().__init__(
|
||||
supported_entity=supported_entity,
|
||||
patterns=patterns,
|
||||
|
||||
@@ -52,6 +52,7 @@ class AuAcnRecognizer(PatternRecognizer):
|
||||
replacement_pairs if replacement_pairs else [("-", ""), (" ", "")]
|
||||
)
|
||||
patterns = patterns if patterns else self.PATTERNS
|
||||
context = context if context else self.CONTEXT
|
||||
super().__init__(
|
||||
supported_entity=supported_entity,
|
||||
patterns=patterns,
|
||||
|
||||
@@ -43,7 +43,7 @@ class AuMedicareRecognizer(PatternRecognizer):
|
||||
def __init__(
|
||||
self,
|
||||
patterns: Optional[List[Pattern]] = None,
|
||||
context: Optional[List[str]] = CONTEXT,
|
||||
context: Optional[List[str]] = None,
|
||||
supported_language: str = "en",
|
||||
supported_entity: str = "AU_MEDICARE",
|
||||
replacement_pairs: Optional[List[Tuple[str, str]]] = None,
|
||||
@@ -52,6 +52,7 @@ class AuMedicareRecognizer(PatternRecognizer):
|
||||
replacement_pairs if replacement_pairs else [("-", ""), (" ", "")]
|
||||
)
|
||||
patterns = patterns if patterns else self.PATTERNS
|
||||
context = context if context else self.CONTEXT
|
||||
super().__init__(
|
||||
supported_entity=supported_entity,
|
||||
patterns=patterns,
|
||||
|
||||
@@ -49,7 +49,7 @@ class AuTfnRecognizer(PatternRecognizer):
|
||||
def __init__(
|
||||
self,
|
||||
patterns: Optional[List[Pattern]] = None,
|
||||
context: Optional[List[str]] = CONTEXT,
|
||||
context: Optional[List[str]] = None,
|
||||
supported_language: str = "en",
|
||||
supported_entity: str = "AU_TFN",
|
||||
replacement_pairs: Optional[List[Tuple[str, str]]] = None,
|
||||
@@ -58,6 +58,7 @@ class AuTfnRecognizer(PatternRecognizer):
|
||||
replacement_pairs if replacement_pairs else [("-", ""), (" ", "")]
|
||||
)
|
||||
patterns = patterns if patterns else self.PATTERNS
|
||||
context = context if context else self.CONTEXT
|
||||
super().__init__(
|
||||
supported_entity=supported_entity,
|
||||
patterns=patterns,
|
||||
|
||||
@@ -51,6 +51,7 @@ class CreditCardRecognizer(PatternRecognizer):
|
||||
replacement_pairs if replacement_pairs else [("-", ""), (" ", "")]
|
||||
)
|
||||
patterns = patterns if patterns else self.PATTERNS
|
||||
context = context if context else self.CONTEXT
|
||||
super().__init__(
|
||||
supported_entity=supported_entity,
|
||||
patterns=patterns,
|
||||
|
||||
@@ -25,11 +25,12 @@ class CryptoRecognizer(PatternRecognizer):
|
||||
def __init__(
|
||||
self,
|
||||
patterns: Optional[List[Pattern]] = None,
|
||||
context: Optional[List[str]] = CONTEXT,
|
||||
context: Optional[List[str]] = None,
|
||||
supported_language: str = "en",
|
||||
supported_entity: str = "CRYPTO",
|
||||
):
|
||||
patterns = patterns if patterns else self.PATTERNS
|
||||
context = context if context else self.CONTEXT
|
||||
super().__init__(
|
||||
supported_entity=supported_entity,
|
||||
patterns=patterns,
|
||||
|
||||
@@ -84,11 +84,12 @@ class DateRecognizer(PatternRecognizer):
|
||||
def __init__(
|
||||
self,
|
||||
patterns: Optional[List[Pattern]] = None,
|
||||
context: Optional[List[str]] = CONTEXT,
|
||||
context: Optional[List[str]] = None,
|
||||
supported_language: str = "en",
|
||||
supported_entity: str = "DATE_TIME",
|
||||
):
|
||||
patterns = patterns if patterns else self.PATTERNS
|
||||
context = context if context else self.CONTEXT
|
||||
super().__init__(
|
||||
supported_entity=supported_entity,
|
||||
patterns=patterns,
|
||||
|
||||
@@ -28,11 +28,12 @@ class EmailRecognizer(PatternRecognizer):
|
||||
def __init__(
|
||||
self,
|
||||
patterns: Optional[List[Pattern]] = None,
|
||||
context: Optional[List[str]] = CONTEXT,
|
||||
context: Optional[List[str]] = None,
|
||||
supported_language: str = "en",
|
||||
supported_entity: str = "EMAIL_ADDRESS",
|
||||
):
|
||||
patterns = patterns if patterns else self.PATTERNS
|
||||
context = context if context else self.CONTEXT
|
||||
super().__init__(
|
||||
supported_entity=supported_entity,
|
||||
patterns=patterns,
|
||||
|
||||
@@ -29,7 +29,7 @@ class EsNifRecognizer(PatternRecognizer):
|
||||
def __init__(
|
||||
self,
|
||||
patterns: Optional[List[Pattern]] = None,
|
||||
context: Optional[List[str]] = CONTEXT,
|
||||
context: Optional[List[str]] = None,
|
||||
supported_language: str = "es",
|
||||
supported_entity: str = "ES_NIF",
|
||||
replacement_pairs: Optional[List[Tuple[str, str]]] = None,
|
||||
@@ -38,6 +38,7 @@ class EsNifRecognizer(PatternRecognizer):
|
||||
replacement_pairs if replacement_pairs else [("-", ""), (" ", "")]
|
||||
)
|
||||
patterns = patterns if patterns else self.PATTERNS
|
||||
context = context if context else self.CONTEXT
|
||||
super().__init__(
|
||||
supported_entity=supported_entity,
|
||||
patterns=patterns,
|
||||
|
||||
@@ -56,7 +56,7 @@ class IbanRecognizer(PatternRecognizer):
|
||||
def __init__(
|
||||
self,
|
||||
patterns: List[str] = None,
|
||||
context: List[str] = CONTEXT,
|
||||
context: List[str] = None,
|
||||
supported_language: str = "en",
|
||||
supported_entity: str = "IBAN_CODE",
|
||||
exact_match: bool = False,
|
||||
@@ -69,6 +69,7 @@ class IbanRecognizer(PatternRecognizer):
|
||||
self.BOSEOS = bos_eos if exact_match else ()
|
||||
self.flags = regex_flags
|
||||
patterns = patterns if patterns else self.PATTERNS
|
||||
context = context if context else self.CONTEXT
|
||||
super().__init__(
|
||||
supported_entity=supported_entity,
|
||||
patterns=patterns,
|
||||
|
||||
@@ -31,11 +31,12 @@ class IpRecognizer(PatternRecognizer):
|
||||
def __init__(
|
||||
self,
|
||||
patterns: Optional[List[Pattern]] = None,
|
||||
context: Optional[List[str]] = CONTEXT,
|
||||
context: Optional[List[str]] = None,
|
||||
supported_language: str = "en",
|
||||
supported_entity: str = "IP_ADDRESS",
|
||||
):
|
||||
patterns = patterns if patterns else self.PATTERNS
|
||||
context = context if context else self.CONTEXT
|
||||
super().__init__(
|
||||
supported_entity=supported_entity,
|
||||
patterns=patterns,
|
||||
|
||||
@@ -31,7 +31,7 @@ class MedicalLicenseRecognizer(PatternRecognizer):
|
||||
def __init__(
|
||||
self,
|
||||
patterns: Optional[List[Pattern]] = None,
|
||||
context: Optional[List[str]] = CONTEXT,
|
||||
context: Optional[List[str]] = None,
|
||||
supported_language: str = "en",
|
||||
supported_entity: str = "MEDICAL_LICENSE",
|
||||
replacement_pairs: Optional[List[Tuple[str, str]]] = None,
|
||||
@@ -41,6 +41,7 @@ class MedicalLicenseRecognizer(PatternRecognizer):
|
||||
replacement_pairs if replacement_pairs else [("-", ""), (" ", "")]
|
||||
)
|
||||
patterns = patterns if patterns else self.PATTERNS
|
||||
context = context if context else self.CONTEXT
|
||||
super().__init__(
|
||||
supported_entity=supported_entity,
|
||||
patterns=patterns,
|
||||
|
||||
@@ -26,12 +26,12 @@ class PhoneRecognizer(LocalRecognizer):
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
context: Optional[List[str]] = CONTEXT,
|
||||
context: Optional[List[str]] = None,
|
||||
supported_language: str = "en",
|
||||
# For all regions, use phonenumbers.SUPPORTED_REGIONS
|
||||
supported_regions=DEFAULT_SUPPORTED_REGIONS,
|
||||
):
|
||||
self.context = context
|
||||
context = context if context else self.CONTEXT
|
||||
self.supported_regions = supported_regions
|
||||
super().__init__(
|
||||
supported_entities=self.get_supported_entities(),
|
||||
|
||||
@@ -27,11 +27,12 @@ class SgFinRecognizer(PatternRecognizer):
|
||||
def __init__(
|
||||
self,
|
||||
patterns: Optional[List[Pattern]] = None,
|
||||
context: Optional[List[str]] = CONTEXT,
|
||||
context: Optional[List[str]] = None,
|
||||
supported_language: str = "en",
|
||||
supported_entity: str = "SG_NRIC_FIN",
|
||||
):
|
||||
patterns = patterns if patterns else self.PATTERNS
|
||||
context = context if context else self.CONTEXT
|
||||
super().__init__(
|
||||
supported_entity=supported_entity,
|
||||
patterns=patterns,
|
||||
|
||||
@@ -34,7 +34,7 @@ class NhsRecognizer(PatternRecognizer):
|
||||
def __init__(
|
||||
self,
|
||||
patterns: Optional[List[Pattern]] = None,
|
||||
context: Optional[List[str]] = CONTEXT,
|
||||
context: Optional[List[str]] = None,
|
||||
supported_language: str = "en",
|
||||
supported_entity: str = "UK_NHS",
|
||||
replacement_pairs: Optional[List[Tuple[str, str]]] = None,
|
||||
@@ -43,6 +43,7 @@ class NhsRecognizer(PatternRecognizer):
|
||||
replacement_pairs if replacement_pairs else [("-", ""), (" ", "")]
|
||||
)
|
||||
patterns = patterns if patterns else self.PATTERNS
|
||||
context = context if context else self.CONTEXT
|
||||
super().__init__(
|
||||
supported_entity=supported_entity,
|
||||
patterns=patterns,
|
||||
|
||||
@@ -30,11 +30,12 @@ class UrlRecognizer(PatternRecognizer):
|
||||
def __init__(
|
||||
self,
|
||||
patterns: Optional[List[Pattern]] = None,
|
||||
context: Optional[List[str]] = CONTEXT,
|
||||
context: Optional[List[str]] = None,
|
||||
supported_language: str = "en",
|
||||
supported_entity: str = "URL",
|
||||
):
|
||||
patterns = patterns if patterns else self.PATTERNS
|
||||
context = context if context else self.CONTEXT
|
||||
super().__init__(
|
||||
supported_entity=supported_entity,
|
||||
patterns=patterns,
|
||||
|
||||
@@ -36,11 +36,12 @@ class UsBankRecognizer(PatternRecognizer):
|
||||
def __init__(
|
||||
self,
|
||||
patterns: Optional[List[Pattern]] = None,
|
||||
context: Optional[List[str]] = CONTEXT,
|
||||
context: Optional[List[str]] = None,
|
||||
supported_language: str = "en",
|
||||
supported_entity: str = "US_BANK_NUMBER",
|
||||
):
|
||||
patterns = patterns if patterns else self.PATTERNS
|
||||
context = context if context else self.CONTEXT
|
||||
super().__init__(
|
||||
supported_entity=supported_entity,
|
||||
patterns=patterns,
|
||||
|
||||
@@ -57,11 +57,12 @@ class UsLicenseRecognizer(PatternRecognizer):
|
||||
def __init__(
|
||||
self,
|
||||
patterns: Optional[List[Pattern]] = None,
|
||||
context: Optional[List[str]] = CONTEXT,
|
||||
context: Optional[List[str]] = None,
|
||||
supported_language: str = "en",
|
||||
supported_entity: str = "US_DRIVER_LICENSE",
|
||||
):
|
||||
patterns = patterns if patterns else self.PATTERNS
|
||||
context = context if context else self.CONTEXT
|
||||
super().__init__(
|
||||
supported_entity=supported_entity,
|
||||
supported_language=supported_language,
|
||||
|
||||
@@ -36,11 +36,12 @@ class UsItinRecognizer(PatternRecognizer):
|
||||
def __init__(
|
||||
self,
|
||||
patterns: Optional[List[Pattern]] = None,
|
||||
context: Optional[List[str]] = CONTEXT,
|
||||
context: Optional[List[str]] = None,
|
||||
supported_language: str = "en",
|
||||
supported_entity: str = "US_ITIN",
|
||||
):
|
||||
patterns = patterns if patterns else self.PATTERNS
|
||||
context = context if context else self.CONTEXT
|
||||
super().__init__(
|
||||
supported_entity=supported_entity,
|
||||
patterns=patterns,
|
||||
|
||||
@@ -22,11 +22,12 @@ class UsPassportRecognizer(PatternRecognizer):
|
||||
def __init__(
|
||||
self,
|
||||
patterns: Optional[List[Pattern]] = None,
|
||||
context: Optional[List[str]] = CONTEXT,
|
||||
context: Optional[List[str]] = None,
|
||||
supported_language: str = "en",
|
||||
supported_entity: str = "US_PASSPORT",
|
||||
):
|
||||
patterns = patterns if patterns else self.PATTERNS
|
||||
context = context if context else self.CONTEXT
|
||||
super().__init__(
|
||||
supported_entity=supported_entity,
|
||||
patterns=patterns,
|
||||
|
||||
@@ -37,11 +37,12 @@ class UsSsnRecognizer(PatternRecognizer):
|
||||
def __init__(
|
||||
self,
|
||||
patterns: Optional[List[Pattern]] = None,
|
||||
context: Optional[List[str]] = CONTEXT,
|
||||
context: Optional[List[str]] = None,
|
||||
supported_language: str = "en",
|
||||
supported_entity: str = "US_SSN",
|
||||
):
|
||||
patterns = patterns if patterns else self.PATTERNS
|
||||
context = context if context else self.CONTEXT
|
||||
super().__init__(
|
||||
supported_entity=supported_entity,
|
||||
patterns=patterns,
|
||||
|
||||
@@ -41,6 +41,13 @@ class RecognizerResult:
|
||||
self.end = end
|
||||
self.score = score
|
||||
self.analysis_explanation = analysis_explanation
|
||||
|
||||
if not recognition_metadata:
|
||||
self.logger.debug(
|
||||
"recognition_metadata should be passed, "
|
||||
"containing a recognizer_name value"
|
||||
)
|
||||
|
||||
self.recognition_metadata = recognition_metadata
|
||||
|
||||
def append_analysis_explanation_text(self, text: str) -> None:
|
||||
|
||||
@@ -2,7 +2,7 @@ from presidio_analyzer import RecognizerRegistry
|
||||
from presidio_analyzer.predefined_recognizers import (
|
||||
CreditCardRecognizer,
|
||||
PhoneRecognizer,
|
||||
UrlRecognizer
|
||||
UrlRecognizer,
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
from typing import List
|
||||
|
||||
import pytest
|
||||
|
||||
from presidio_analyzer import (
|
||||
@@ -5,6 +7,8 @@ from presidio_analyzer import (
|
||||
PatternRecognizer,
|
||||
Pattern,
|
||||
RecognizerRegistry,
|
||||
EntityRecognizer,
|
||||
RecognizerResult,
|
||||
)
|
||||
from presidio_analyzer.nlp_engine import (
|
||||
NlpArtifacts,
|
||||
@@ -633,3 +637,24 @@ def test_ad_hoc_when_no_other_recognizers_are_requested_returns_only_ad_hoc_resu
|
||||
)
|
||||
|
||||
assert "ZIP" in [resp.entity_type for resp in responses]
|
||||
|
||||
|
||||
def test_when_recognizer_doesnt_return_recognizer_name_no_exception(nlp_engine):
|
||||
class MockRecognizer(EntityRecognizer):
|
||||
def analyze(self, text: str, entities: List[str], nlp_artifacts: NlpArtifacts):
|
||||
return [RecognizerResult("TEST", 50, 60, 0.5)]
|
||||
|
||||
mock_recognizer = MockRecognizer(supported_entities=["TEST"])
|
||||
|
||||
registry = RecognizerRegistry()
|
||||
registry.add_recognizer(mock_recognizer)
|
||||
|
||||
analyzer_engine = AnalyzerEngine(nlp_engine=nlp_engine, registry=registry)
|
||||
results = analyzer_engine.analyze("ABC", language="en")
|
||||
|
||||
assert len(results) == 1
|
||||
|
||||
assert results[0].entity_type == "TEST"
|
||||
assert results[0].start == 50
|
||||
assert results[0].end == 60
|
||||
assert results[0].score == 0.5
|
||||
|
||||
Reference in New Issue
Block a user